写一个程序,要求如下:我们数学与计算科学学院举办C++语言程序设计竞赛,每个班有10个学生参加,共有5个班,录入成绩单,分别录入学生的班级名称、姓名,笔试成绩和上机成绩(笔试成绩和.上机成绩满分是100分),总成绩为笔试成绩占30%,上机成绩占70%,
计算:
(1)每个同学的总成绩;
(2)并把所有学生按总分从高到低进行排序,显示器上输出班级名、姓名和总成绩。
结构类型如下:
struct Student
char className[30];//班级名称char name[20]//姓名
int writtenResult;//笔试成绩
int OperationaResult;//. 上机成绩float total; //总成绩
};
利用循环获取各班学生的信息到一个学生信息二维结构数组里,然后计算其总分,然后再用循环排序这个学生结构数组即可。测试的例子我是用2个班级,每班3个学生进行的测试。代码如下:
参考链接:
结构体数组及其定义和使用,C语言结构体数组详解
#include <iostream>
#include <string.h>
#define CLASS_NUM 5 //班级的数量 测试的例子是用的2个班
#define STU_NUM 10 //每班个学生的个数 进行的测试
using namespace std;
struct Student{
char className[30];//班级名称
char name[20];//姓名
int writtenResult;//笔试成绩
int OperationaResult;//. 上机成绩
float total; //总成绩
};
int main(void){
//http://c.biancheng.net/view/245.html
struct Student stus [CLASS_NUM][STU_NUM];
int i,j;
char cname[30];
char tname[20];
int wresult;
int oresult;
float ttotal;
//获取 各班级学生的信息,并计算他们各自的总成绩
for(i=0;i<CLASS_NUM;i++){
cout<<"请输入第"<<i+1<<"个班级的名称:";
cin>>cname;
for(j=0;j<STU_NUM;j++){
strcpy(stus[i][j].className,cname);
cout<<"请输入班级"<<cname<<"第"<<j+1<<"个学生的姓名:";
cin>>stus[i][j].name;
cout<<"请输入班级"<<cname<<"第"<<j+1<<"个学生的C++笔记成绩:";
cin>>stus[i][j].writtenResult;
cout<<"请输入班级"<<cname<<"第"<<j+1<<"个学生的C++上机成绩:";
cin>>stus[i][j].OperationaResult;
cout<<endl;
//计算每个班每个学生的总成绩
stus[i][j].total = (float)(stus[i][j].writtenResult*0.3+stus[i][j].OperationaResult*0.7);
}
}
//用一维学生结构指针访问二维学生结构数组
struct Student * p = &stus[0][0];
//float max = p->total;
//按总分从高到低排序学生信息
for(i=0;i<CLASS_NUM*STU_NUM;i++){
for(j=i;j<CLASS_NUM*STU_NUM;j++){
if((p+i)->total<(p+j)->total){
strcpy(cname,(p+i)->className);
strcpy((p+i)->className,(p+j)->className);
strcpy((p+j)->className,cname);
strcpy(tname,(p+i)->name);
strcpy((p+i)->name,(p+j)->name);
strcpy((p+j)->name,tname);
wresult = (p+i)->writtenResult;
(p+i)->writtenResult = (p+j)->writtenResult;
(p+j)->writtenResult = wresult;
oresult = (p+i)->OperationaResult;
(p+i)->OperationaResult = (p+j)->OperationaResult;
(p+j)->OperationaResult = oresult;
ttotal = (p+i)->total;
(p+i)->total = (p+j)->total;
(p+j)->total = ttotal;
}
}
}
//打印结果
cout<<"按总成绩从高到底排序的结果为:"<<endl;
for(i=0;i<CLASS_NUM*STU_NUM;i++){
cout<<"班级名称:"<<(p+i)->className<<", 姓名:"<<(p+i)->name<<", 总成绩为:"<<(p+i)->total<<endl;
}
return 0;
}