前言:
此篇是针对 结构体变量的初始化和引用 方面的练习。
解题思路:
①
定义两个结构相同的结构体变量 student1 和 student2;
②
分别输入两个学生的学号、姓名和成绩;
③
比较两个学生的成绩,如果学生1的成绩高于学生2的成绩,就输出学生1的全部信息,如果学生2的成绩高于学生1的成绩,就输出学生2的全部信息。如果二者相等,输出两个学生的全部信息。
正文:
#include<stdio.h>
int main() {
struct Student { //声明结构体类型struct Student
int num;
char name[20];
float score;
} student1,student2; //定义两个结构体变量student1,student2
scanf("%d%s%f",&student1.num,student1.name,&student1.score);//输入学生1的数据
scanf("%d%s%f",&student2.num,student2.name,&student2.score);//输入学生1的数据
printf("The highter score is:\n");
if(student1.score>student2.score)
printf("%d %s %6.2f\n",student1.num,student1.name,student1.score);
else if(student1.score<student2.score)
printf("%d %s %6.2f\n",student2.num,student2.name,student2.score);
else {
printf("%d %s %6.2f\n",student1.num,student1.name,student1.score);
printf("%d %s %6.2f\n",student2.num,student2.name,student2.score);
}
return 0;
}
程序分析:
①
student1 和 student2 是 struct Student 类型的变量。在3个成员中分别存放学号、姓名和成绩。
②
用 scanf 函数输入结构体变量时,必须分别输入它们的成员的值,不能在scanf 函数中使用结构体变量名一揽子输入全部成员的值。注意在scanf 函数中在成员 student1.num 和 student.score 的前面都有地址符&,而在 student1.name 前面没有&,这是因为 name 是数组名,本身就代表地址,故不能画蛇添足地再加一个&。
③
根据 student1.sore 和 student2.sore 的比较结果,输出不同学生的信息。从这里可以看到利用结构体变量的好处:由于 student1是一个 “组合项” ,内放有关联的一组数据,student1.score 是属于 student1 变量的一部分,因此如果确定了 student1.score 是成绩较高的,则输出 student1 的全部信息是轻而易举的,因为它们本来是互相关联,捆绑在一起的。
总结:
运行结果: