题目:
/*
输入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+"]";
}
}