输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出java,c++实现

25 篇文章 0 订阅

题目:

/*
   输入4个同学的姓名学号,语文数学英语信息计算平均成绩,按平均成绩高低排序输出
*/

代码部分:

C++实现

#include<iostream>
using namespace std;

struct student{
	char name[50];	//char接收是一个字符
	char num[50];
	int ch;				//语文
	int math;			//数学
	int en;				//英语
	double ave;		//平均成绩
};

int main(){
	student stu[4];
	student stemp;
	for(int i=0;i<4;i++){
		cin>>stu[i].name>>stu[i].num>>stu[i].ch>>stu[i].math>>stu[i].en;
		stu[i].ave=(stu[i].ch+stu[i].math+stu[i].en)/3;
	}

	//冒泡排序
	for(int k=0;k<3;k++){
		for(int j=0;j<3-k;j++){
			if(stu[j].ave<stu[j+1].ave){
				stemp=stu[j];				//结构体替换
				stu[j]=stu[j+1];
				stu[j+1]=stemp;
				//cout<<stu[4].name<<" "<<stu[4].num<<" "<<stu[4].ch<<" "<<stu[4].math<<" "<<stu[4].en<<endl;
			}
		}
	}
	cout<<"平均成绩由高到低排序为:"<<endl;
	for(int a=0;a<4;a++){
		cout<<stu[a].name<<" "<<stu[a].num<<" "<<stu[a].ch<<" "<<stu[a].math<<" "<<stu[a].en<<endl;
	}
	
	return 0;

}

运行结果:

在这里插入图片描述

java实现

          小总结:之前一直想着用C++的思路,就java里的类相当于C++里的结构体,然后我就想直接像C++里一样,直接实例化的时候弄成Student[] stu = new Student[6]这个样子,一个数组,但是数组类型为student类,发现是可以实例化的,但是它一直报stu[i] is null,就存不进去数据。在网上找了很多,这样是可以实现,但是感觉麻烦和结构不分明。然后我就想到了list集合,里面装的类型为student不就好了。

package CSDNTest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class AverageScore {
	
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		System.out.print("人数为:");
		int n = sc.nextInt();
		System.out.print("输入姓名,编号,语文,数学,英语:");
		
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		
		List<Student> listStu = new ArrayList<Student>();
		
		while (n>0) { 			//有n个学生
	        String[] s=br.readLine().split(" ");//用空格隔开所输入的数据
	        
	        int c=Integer.parseInt(s[2]);
	        int m=Integer.parseInt(s[3]);
	        int e=Integer.parseInt(s[4]);
	        int a=(c+m+e)/3;
	        Student stu =new Student();
	        stu.name = s[0];
	        stu.num = s[1];
	        stu.ch = c;
	        stu.math = m;
	        stu.en = e;
	        stu.ave = a;
	        listStu.add(stu);
	        
	        if (n>1) {
	        	System.out.print("输入姓名,编号,语文,数学,英语:");
	        }
	        n--;
		}
		/*
		System.out.print("结果1:"+listStu.get(0).ave);
		Collections.swap(listStu, 0, 1);
		System.out.print("结果:"+listStu.get(0).ave);
		*/
		
		//冒泡排序
		int i, j;
		for (j = 0; j < listStu.size() - 1; j++)
		{
			for (i = 0; i < listStu.size() - 1 - j; i++)
			if (listStu.get(i).ave < listStu.get(i+1).ave)
			{
				Collections.swap(listStu, i, i+1);//list是属于collection的,这个方法就是交换
			}
		}
		
		for (i = 0; i < listStu.size(); i++) {
			System.out.println(listStu.get(i));
		}

	}
}
		
		//之前的思路
	  /*for(int k=0;k<4;k++){ 
		  for(int j=0;j<4-k;j++){ 
			  if(listStu.get(j).ave<listStu.get(j+1).ave){
				  listStu.get(4)=listStu.get(j); //结构体替换 
				  stu[j]=stu[j+1]; 
				  stu[j+1]=stu[4];
			  }
	  System.out.println(stu[4].name);
	  System.out.print(stu[4].en); } 
		  }
	 }
	 */
//创建一个学生类
class Student{
	String name;	
	String num;
	int ch;				//语文
	int math;			//数学
	int en;				//英语
	double ave;		//平均成绩
	
	//重写输出
	public String toString(){
		return "Student[name="+name+", num="+num+", ch="+ch+", math="+math+", en="+en+"]";
	}
}


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值