例题详解:
1.
在主函数中定义结构体数组,struct student stutable[10];
struct student {
int stunum;//学号
char name[20];//姓名
float examscore;//考试成绩
float labscore;//实验成绩
float totalmark;//总评成绩
};
输入如下十个学生的成绩数据,每个学生信息包括 学号 、姓名 、考试成绩 ,实验成绩。同时计算每个学生的总评成绩( =考试成绩*60% + 实验成绩*40%)并保存至每个结构体的totalmark。
71250 张三 95 82
69753 李四 88 86
12254 王五 87 88
61256 张六 73 85
30258 孙七 25 88
11260 柯八 82 76
33262 谢九 91 85
29263 叶十 80 75
22483 陈一 80 76
71525 王二 71 88
2.
在主函数中定义一个结构体指针数组,struct student *parrray[10] ; 使其每一个指针指向上述结构体数组中的一个元素; 按总评成绩从高到低的顺序,对指针数组parray进行排序,按总评成绩从高到低的顺序输出排序之后的全部学生成绩。
struct student *parray[10],*t;
int main() {
int i,j;
struct student stutable[10],*p;
struct student *parray[10],*t;
for(p=stutable,i=0; p<stutable+10,i<10; p++,i++) {
scanf("%d %s %f %f",&p->stunum,p->name,&p->examscore,&p->labscore);//输入数据
p->totalmark=p->examscore*0.6+p->labscore*0.4;//计算总评
parray[i]=p;//指针数组初始化
}
//冒泡排序,比较总评,交换指针
for(i=0; i<9; i++) {
for(j=0; j<9-i; j++) {
if(parray[j]->totalmark<parray[j+1]->totalmark) {
t=parray[j];
parray[j]=parray[j+1];
parray[j+1]=t;
}
}
}//排序
for(i=0; i<10; i++) {
printf("%d\t%s\t%.2f\t%.2f\t%.2f\n",parray[i]->stunum,parray[i]->name,
parray[i]->examscore,parray[i]->labscore,parray[i]->totalmark);
}//输出信息
}
输入重定向结果:

本文通过一个具体的示例讲解了如何使用C语言中的结构体数组存储学生的学号、姓名及成绩,并利用指针数组对其进行排序。示例中详细介绍了输入学生数据、计算总评成绩的过程以及使用冒泡排序算法按总评成绩从高到低排序的方法。
5548

被折叠的 条评论
为什么被折叠?



