结构体的声明和使用,指针形式的结构体
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
样例输入 2 131001003 blue 90 80 70 131001008 clan 80 70 60 样例输出 85 75 65 131001003 blue 90 80 70
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <stdio.h> struct student { char sno[20]; char name[20]; int cj1, cj2, cj3; }; int main() { int n, i, max=0; int av1=0, av2=0, av3=0; struct student s[100]; scanf("%d", &n); for (i=0; i<n; i++) { scanf("%s %s %d %d %d", s[i].sno,s[i].name, &s[i].cj1, &s[i].cj2, &s[i].cj3); } for (i=0; i<n; i++) { av1=av1+s[i].cj1; av2=av2+s[i].cj2; av3=av3+s[i].cj3; if (s[i].cj1+s[i].cj2+s[i].cj3>s[max].cj1+s[max].cj2+s[max].cj3) max = i; } av1=av1/n; av2=av2/n; av3=av3/n; printf("%d %d %d\n", av1, av2, av3); printf("%s %s %d %d %d\n", s[max].sno, s[max].name, s[max].cj1, s[max].cj2, s[max].cj3); } |
问题:假设学生的信息包括姓名、性别和数学成绩。编写程序,为3名学生输入信息,并将其中成绩最高的学生全部信息显示在屏幕上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <stdio.h> /* 定义了结构体 struct student */ struct student { char name[10]; char sex; int score; }; int main() { struct student s1, s2, s3, max; scanf("%s %c%d",s1.name,&s1.sex,&s1.score); scanf("%s %c%d",s2.name,&s2.sex,&s2.score); scanf("%s %c%d",s3.name,&s3.sex,&s3.score); /* 注意细节:%s后面有一空格! */ printf("All students are:\n"); printf("%13s%3c%4d\n",s1.name,s1.sex,s1.score); printf("%13s%3c%4d\n",s2.name,s2.sex,s2.score); printf("%13s%3c%4d\n",s3.name,s3.sex,s3.score); max=s1; if (max.score<s2.score) max=s2; if (max.score<s3.score) max=s3; printf("The student is:\n"); printf("%13s%3c%4d\n",max.name,max.sex,max.score); return 0; } |
下面是运行结果,前3行是输入,其他是输出。
1 2 3 4 5 6 7 8 9 | ZhangShan M 88 LiSi M 98 WangWu F 78 All students are: ZhangShan M 88 LiSi M 98 WangWu F 78 The student is: LiSi M 98 |
假设学生的信息包括姓名、性别和数学成绩。编写程序,给定3名学生信息,并用指针变量找出其中成绩最高的学生。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdio.h> /* 定义了结构体 struct student */ typedef struct student { char name[10]; char sex; int score; } Student; /* 结构体struct student 的别名 Student */ int main() { Student s1= {"liu",'f',78},s2= {"li",'m',88},s3= {"wang",'f',83}; Student *p=&s1; printf("All students are:\n"); printf("%13s%3c%4d\n",(*p).name,(*p).sex,(*p).score); /* printf("%13s%3c%4d\n",s1.name,s1.sex,s1.score); 作用相同 */ /* printf("%13s%3c%4d\n",p->name,p->sex, p->score); 作用相同 */ printf("%13s%3c%4d\n",s2.name,s2.sex,s2.score); printf("%13s%3c%4d\n",s3.name,s3.sex,s3.score); if(p->score<s2.score) p=&s2; if(p->score<s3.score) p=&s3; printf("The student is:\n"); printf("%13s%3c%4d\n",p->name,p->sex,p->score); return 0; } |
假设学生的信息包括姓名、性别和数学成绩。编写程序,给定3名学生信息,并调用函数找出其中成绩最高的学生。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <stdio.h> typedef struct student { char name[10]; char sex; int score; } Student; Student max_abc(Student a,Student b,Student c) { Student m=a; if (m.score<b.score) m=b; if (m.score<c.score) m=c; return m; } int main() { Student s1= {"liu",'f',78},s2= {"li",'m',88},s3= {"wang",'f',83},max= {0}; printf("All students are:\n"); printf("%13s%3c%4d\n",s1.name,s1.sex,s1.score); printf("%13s%3c%4d\n",s2.name,s2.sex,s2.score); printf("%13s%3c%4d\n",s3.name,s3.sex,s3.score); max=max_abc(s1,s2,s3); printf("The student is:\n"); printf("%13s%3c%4d\n",max.name,max.sex,max.score); return 0; } |
假设学生的信息包括姓名、性别和数学成绩。编写程序,为100名学生输入信息,并将其中成绩最高的学生全部信息显示在屏幕上。
人数多,采用结构体数组。用符号常量暂定为5。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdio.h> #define N 5 typedef struct student { char name[10]; char sex; int score; } Student; int main() { int i=0; Student s[N]= {0},max= {0}; for(i=0; i<N; i++) scanf("%s %c%d",s[i].name,&s[i].sex,&s[i].score); printf("All students are:\n"); for(i=0; i<N; i++) printf("%13s%3c%4d\n",s[i].name,s[i].sex,s[i].score); max=s[0]; for(i=1; i<N; i++) if(max.score<s[i].score) max=s[i]; printf("The student is:\n"); printf("%13s%3c%4d\n",max.name,max.sex,max.score); return 0; } |
假设学生的信息包括姓名、性别和数学成绩。编写程序,为100名学生输入信息,并调用函数找出其中成绩最高的学生。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #include <stdio.h> #define N 5 typedef struct student { char name[10]; char sex; int score; } Student; Student max_p(Student *p); int main() { int i=0; Student s[N], max; printf("Input data:\n"); for(i=0; i<N; i++) scanf("%s %c%d",s[i].name,&s[i].sex,&s[i].score); printf("All students are:\n"); for(i=0; i<N; i++) printf("%13s%3c%4d\n",s[i].name,s[i].sex,s[i].score); max=max_p(s); printf("The student is:\n"); printf("%13s%3c%4d\n",max.name,max.sex,max.score); return 0; } Student max_p(Student *p) { int i=0; Student m; m=p[0]; for(i=1; i<N; i++) if(m.score<p[i].score) m=p[i]; return m; } |