
#第1关结构体变量的初始化和引用任务描述本关任务从键盘输入两个学生的学号姓名和成绩整数分别存入结构体中输出成绩较高的学生的学号姓名和成绩。相关知识结构体类型结构体的定义声明结构体变量结构体成员的访问结构体变量初始化。结构体类型结构体类型用于描述由多个不同数据类型的数据构成的复合数据是一种用户自定义数据类型。结构体的定义定义格式为struct 结构体类型名{成员表}; //分号结束定义例如以下是一个描述学生信息的结构体类型定义struct student{long number;char name[20];char sex;float score;};在这个结构体定义中结构体类型名为student该结构体由4个成员组成。第一个成员为number整型变量第二个成员为name字符数组第三个成员为sex字符变量第四个成员为score实型变量。应该注意在花括号后的分号是不可少的声明结构体变量声明结构体变量有四种方式他们在本质上没什么区别可根据自己习惯和要求选择你喜欢的方式先定义结构体再声明结构体变量struct student{long number;char name[20];char sex;float score;}; //先定义结构体struct student s1,s2;//声明结构体变量在定义结构体类型的同时声明结题变量struct student{long number;char name[20];char sex;float score;}s1,s2; //在定义结构体的同时定义结构体变量直接声明结构体变量struct{ //省去结构体名long number;char name[20];char sex;float score;}s1,s2; //直接给出结构体变量此方法因为没有给出结构体名所以不能用来在后面程序中声明此结构体类型的变量因此在实际编程是这种方法用的较少。typedef引用别名来定义typedef struct student STUDENT; //给结构体student定义别名struct student{long number;char name[20];char sex;float score;};STUDENT s1,s2; //使用别名STUDENT定义结构体结构体成员的访问结构体变量的成员访问方式为结构体变量名.结构体成员变量结构体变量的每个成员都可以看做一个独立的变量称为成员变量对成员变量所能做的操作由成员变量的类型决定。例如下面的操作是合法的s1.number2010001;//number成员是long类型strcpy(s1.name,lili)//name成员是字符数组类型结构体成员要和结构体变量名联合使用即以“结构体变量名.成员名”的访问方式所以不同结构体类型的成员名字可以相同并且他们还可以与程序中的其他非结构体成员的名字相同不会引起歧义或冲突。注意如果结构体变量的成员本身又是一个结构体类型则要用若干成员运算符找到最低一级成员只能对最低一级的成员进行赋值或者读写及运算。例如struct data{int month;int day;int year;};struct student{long num;char name[20];char sex;data birthday;}stu1;对以上定义的结构体变量 stu1可以通过以下方式访问其中各成员stu1.num;stu1.birthday.month;结构体变量初始化在定义结构体变量的同时可以对其进行初始化格式与数组变量初始化类似用花括号吧每个成员的初始值括起来每个初始值与相应的成员对应。例如对 student 结构体类型的变量 s1 进行初始化struct student s1{2010001,lili,F,97};在定义结构体类型是不能对其成员进行初始化因为类型不是程序运行时的实体不会给他们分配内存空间因此对其初始化没有意义。编程要求根据提示在右侧编辑器 Begin-End 处补充代码将测试输入信息存入结构体中完成输出成绩较高的学生的学号姓名和成绩。测试说明平台会对你编写的代码进行测试比对你输出的数值与实际正确数值只有所有数据全部计算正确才能通过测试测试输入14308100238 xiaowang 9915408122584 xiaoli 78预期输出14308100238 xiaowang 99测试输入数据说明输入包含两行每行包含学生的学号11 位的整数姓名字符串长度不超过 20和成绩整数。#includestdio.h /*********Begin*********/ int main() { struct data { char num[20]; char name[20]; int score; }s1,s2; scanf(%s%s%d,s1.num,s1.name,s1.score); scanf(%s%s%d,s2.num,s2.name,s2.score); if(s1.scores2.score) { printf(%s %s %d\n,s1.num,s1.name,s1.score); } else { printf(%s %s %d\n,s2.num,s2.name,s2.score); } return 0; } /*********End*********/#第2关结构体排序任务描述本关任务有 n 个学生的信息(包括学号姓名成绩)要求按照成绩的高低顺序输出学生的信息。相关知识参考结构体第1关相关知识。编程要求根据提示在右侧编辑器 Begin-End 处补充代码要求按照成绩的高低顺序输出学生的信息。测试说明平台会对你编写的代码进行测试比对你输出的数值与实际正确数值只有所有数据全部计算正确才能通过测试测试输入510101 Zhang 7810103 Wang 9810106 Li 8610108 Ling 7310110 Sun 100预期输出10110 Sun 10010103 Wang 9810106 Li 8610101 Zhang 7810108 Ling 73测试输入数据说明第一行为整数 n 表示有 n 个学生 1n200。接下来包含 n 行数据每行数据代表一个学生的信息按学号11 位的整数姓名字符串长度不超过 20和成绩整数。#includestdio.h /*********Begin*********/ typedef struct student { char num[12]; char name[20]; int score; }m; /*********End**********/ int main(void) { /*********Begin*********/ int i,n,j; m s[200],temp; scanf(%d,n); for(i0;in;i) { scanf(%s %s %d,s[i].num,s[i].name,s[i].score); } for(i0;in-1;i) { for(ji1;jn;j) { if(s[j].scores[i].score) { temps[i]; s[i]s[j]; s[j]temp; } } } for(i0;in;i) { printf(%s %s %d\n,s[i].num,s[i].name,s[i].score); } /*********End**********/ return 0; }#第3关结构体存储数据任务描述本关任务有三个候选人每个选民只能投一票写一程序用结构体存储数据求出得票结果。三个候选人为 Li ZhangSun。相关知识参考结构体第1关相关知识编程要求根据提示在右侧编辑器 Begin-End 处补充代码用结构体存储数据求出得票结果。测试说明平台会对你编写的代码进行测试比对你输出的数值与实际正确数值只有所有数据全部计算正确才能通过测试测试输入10LiLiSunZhangZhangSunLiSunZhangLi预期输出Li:4Zhang:3Sun:3测试输入数据说明输入数据第一行包含一个整数 n表示有 n 个人投票。接下来的每一行包含某个候选人的名字。#includestdio.h #includestring.h /*********Begin*********/ /*********End**********/ int main(void) { /*********Begin*********/ char str[10]; int i,n,sum10,sum20,sum30; scanf(%d,n); for(i0;in;i) { scanf(%s,str); if(strcmp(str,Li)0) sum1; else if(strcmp(str,Zhang)0) sum2; else if(strcmp(str,Sun)0) sum3; } printf(Li:%d\n,sum1); printf(Zhang:%d\n,sum2); printf(Sun:%d\n,sum3); /*********End**********/ return 0; }#第4关结构体存储学生信息任务描述本关任务使用结构体储存学生信息包括学号姓名3 门课程成绩总分要求实现对学生信息修改和删除操作最多50名学生。相关知识参考结构体第1关相关知识。编程要求根据提示在右侧编辑器 Begin-End 处补充代码使用结构体储存学生信息实现对学生信息修改和删除操作。测试说明平台会对你编写的代码进行测试比对你输出的数值与实际正确数值只有所有数据全部计算正确才能通过测试测试输入10 31 Siyu 90 90 902 Amy 60 70 943 Jack 60 60 984 Jack 77 90 605 Banana 60 60 406 White 60 60 607 Pinkman 60 60 608 Fring 60 60 709 Ehrmantraut 80 63 6110 Schrader 99 66 1001 Jack2 1 100 100 1003 10测试输入数据说明输入一个 nq标书下面 n 行则是 n 个学生的信息再下 q 行则是对应的操作。1 name //为根据名字查询操作2 sno num1 num2 num2 //为修改分数操作修改学号为sno的3门成绩3 sno //为删除操作预期输出3 Jack 60 60 98 2184 Jack 77 90 60 2271 Siyu 100 100 100 3002 Amy 60 70 94 2243 Jack 60 60 98 2184 Jack 77 90 60 2275 Banana 60 60 40 1606 White 60 60 60 1807 Pinkman 60 60 60 1808 Fring 60 60 70 1909 Ehrmantraut 80 63 61 20410 Schrader 99 66 100 2651 Siyu 100 100 100 3002 Amy 60 70 94 2243 Jack 60 60 98 2184 Jack 77 90 60 2275 Banana 60 60 40 1606 White 60 60 60 1807 Pinkman 60 60 60 1808 Fring 60 60 70 1909 Ehrmantraut 80 63 61 204预期输出数据说明每次修改操作则输出全部的学生信息查询操作则输出查询的学生的信息。#includestdio.h #includestring.h int Count; struct student { char sno[20],name[20]; int math,english,chinese,sum; }; void print(struct student stu) { printf(%s %s %d %d %d %d\n,stu.sno,stu.name,stu.math,stu.english,stu.chinese,stu.sum); } void query_stu(struct student s[],char *name) { /*********Begin*********/ for(int i0;iCount;i) { if(strcmp(s[i].name,name)0) { s[i].sums[i].maths[i].englishs[i].chinese; printf(%s %s %d %d %d %d\n,s[i].sno,s[i].name,s[i].math,s[i].english,s[i].chinese,s[i].sum); } } /*********End**********/ } void delete_stu(struct student s[],char *sno) { /*********Begin*********/ int k0; for(int i0;iCount;i) { if(strcmp(s[i].sno,sno)0) { ki; for(int jk;jCount-1;j) { s[j]s[j1]; } } } /*********End**********/ } void update_stu(struct student s[],char *sno,int math,int english,int chinese) { /*********Begin*********/ for(int i0;iCount;i) { if(strcmp(s[i].sno,sno) 0) { s[i].mathmath; s[i].englishenglish; s[i].chinesechinese; s[i].sums[i].maths[i].englishs[i].chinese; } else{ s[i].sums[i].maths[i].englishs[i].chinese; } } /*********End**********/ } int main(void) { int n,q; struct student students[50]; scanf(%d%d,n,q); Countn; for(int i0;in;i){ /*********Begin*********/ scanf(%s%s%d%d%d,students[i].sno,students[i].name,students[i].math,students[i].english,students[i].chinese); /*********End**********/ } while(q--) { int op; scanf(%d,op); char sno[20],name[20]; if(op1){ scanf(%s,name); query_stu(students,name); } else if(op2){ int a,b,c; scanf(%s%d%d%d,sno,a,b,c); update_stu(students,sno,a,b,c); for(int i0;iCount;i) print(students[i]); } else{ scanf(%s,sno); delete_stu(students,sno); for(int i0;iCount-1;i) print(students[i]); } } return 0; }#