例题抄写
/*9.1学生(学号姓名 型别 住址)放在一个结构体变量中 住处之恩个学生的信息
*/
#include <stdio.h> int main(){ struct Student{ int num; char name[20] ; char sex; char add[20]; }s1={1,"»ÆÏþÃ÷",'m',"BeiJing"}; printf("num=%d\n,name=%s\n,sex=%c\n,add=%s\n",s1.num,s1.name,s1.sex,s1.add); } 结果: num=1 ,name=黄晓明 ,sex=m ,add=BeiJing -------------------------------- Process exited after 0.9575 seconds with return value 0 请按任意键继续. . .
总结:很简单的代码,上课都练过,不过自己打还是有点慢,可能是打代码少的原因
9.2输入两个学生的姓名,学号,成绩 输出较高的学生的学号,姓名,成绩
#include <stdio.h> int main(){ struct student{ int num; char name; float score; }s1,s2; scanf("%d,%s,%f",&s1.num,&s1.name,&s1.score); scanf("%d,%s,%f",&s2.num,&s2.name,&s2.score); if(s1.score>s2.score){ printf("%d,%s,%f",s1.num,s1.name,s1.score);//比较 }else if(s1.score<s2.score){ printf("%d,%s,%f",s2.num,s2.name,s2.score);//比较 }else{ printf("两人成绩相同"); //比较(相同) } }
//l老师,这道题有问题,我的电脑没有报错但是也没有警告,但运行时就是显示:程序已停止工作
/*
9.3 三个候选人 每个选民只能投一人
编一个统计选票的程序 先后输入被选人名字最后输出结果
*/
#include <stdio.h> int main(){ struct ppeople{ char name[20]; int count; } ren[3] = {"liu",0, "wang",0,"sun",0}; int i, j; char ren_name[20]; for (i = 1; i <= 10;i++){ scanf("%s", ren_name); for ( j = 0; j < 3; j++){ if (strcmp(ren_name, ren[j].name) == 0) ren[j].count++; } } printf("\n结果\n"); for (i = 0; i < 3; i++){ printf("%5s:%d\n", ren[i].name,lren[i].count) } }
结果:
liu
liu
liu
liu
wang
wang
sun
sun
sun
结果
liu:4 wang:2 sun:3 请按任意键继续. . .
总结:这道题写的时候没有思路,后来看书才知道要怎么做,我本来想定义指针,变化指针指向 的位置来实现结果发现不对,所以改了好几遍才写出来
9.4 n个学生的信息(学号成绩姓名) 按成绩分高低输出个学生的信息
#include <stdio.h> int main(){ struct Student{ int num; char name[20]; int score; }stu[5] = {{1,"li",50},{2,"zhao",60},{3,"wang",70},{4,"qian",80},{5,"sun",90}}; struct Student temp;//出现问题 int j,k; int i = 0; int n = 5; for(i;i<n-i;i++){ k = i; for(j=i+1;j<n;j++){ if(stu[j].score>stu[k].score){ k = j; temp = stu[k]; stu[k] = stu[i]; stu[i] = temp; } } } for(i = 0;i<5;i++){ printf("%d,%s,%d\n",stu[i].num,stu[i].name,stu[i].score); } }
结果:
5,sun,90
4,qian,80
3,wang,70
1,li,50
2,zhao,60
--------------------------------
Process exited after 0.77 seconds with return value 0
请按任意键继续. . .
总结:代码中标出的地方第一遍打时出现问题,我直接定义了temp结果显示不行,后来才弄明白这没有定义结构里的东西,所以后来加上了结构名实现了
/*9.5通过指向结构体变量的指针变量来输出结构体中成员的信息。*/
#include <stdio.h> int main(){ struct Student{ int num; char name[20]; float score; }s1 = {1,"li",60}; struct Student *p;//多加了一个int p = &s1;//忘打地址符 printf("%d,%s,%f\n",p->num,p->name,p->score);//指针输出法1 printf("%d,%s,%f\n",(*p).num,(*p).name,(*p).score); //指针输出法2 }
结果:
1,li,60.000000
1,li,60.000000
--------------------------------
Process exited after 0.3954 seconds with return value 0
请按任意键继续. . .
总结:以前我总在定义分数时定义int型,后来发现有时成绩是浮点型的所以之后都改成了浮点型,而且用了两种指针输出方法输出
9.6 有n个结构体变量,内含学生学号,姓名和3门课程成绩。要求输出平均成绩最高的学生的信息
(包括学号,姓名,3门课程成绩和平均成绩)。
#include <stdio.h> int main(){ struct student{ int num; char name[20]; char sex; int age; }; struct student stu[3] = { { 10101, "Li", 'M', 18 }, { 10102, "zhang", 'M', 18 }, { 10103, "Wang", 'F', 18 } }; struct student *p; p = stu; for (; p < stu + 3; p++) printf("%5d %-20s%2c%4d\n", p->num, p->name, p->sex, p->age); } /* 10101 Li M 18 10102 zhang M 18 10103 Wang F 18 请按任意键继续. . . */
总结:这道题感觉和前面体有好多类似的地方,没出什么毛病,感觉这么练习很有用
9.7
#include<stdio.h> struct student { int num; char name[20]; float score[3]; float aver; }; void input(struct student stu[]) { int i; printf("请输入各学生的信息:学号,姓名,三门课成绩:\n"); for (i = 0; i < 3; i++){ scanf("%d%s%f%f%f", &stu[i].num, &stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]); stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0; } } struct student max(struct student stu[]) { int i, m = 0; for (i = 1; i<3; i++) if (stu[i].aver>stu[m].aver) m = i; return stu[m]; } void print(struct student stud) { printf("\n成绩最高的学生是:\n"); printf("学号:%d\n姓名: %s\n三门课成绩: %5.1f ,%5.1f,%5.1f\n平均成绩:%5.1f\n", stud.num, stud.name, stud.score[0], stud.score[1], stud.score[2], stud.aver); } int main() { //void input (struct student stu[]); //struct student max(struct student stu[]); //void print(struct student stu); struct student stu[3], *p = stu; input(p); print(max(p)); return 0; } /*请输入各学生的信息:学号,姓名,三门课成绩: 10101 Li 78 89 98 10103 Wang 98.5 87 69 10106 Sun 88 76.5 89 成绩最高的学生是: 学号:10101 姓名: Li 三门课成绩: 78.0 , 89.0, 98.0 平均成绩: 88.3 请按任意键继续. . . */
上传码云