【文档说明】C语言基础—结构体数据类型课件.pptx,共(73)页,194.000 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7150.html
以下为本文档部分文字说明:
清华大学出版社C语言程序设计清华大学出版社清华大学出版社项目7学生成绩管理系统4.X本章学习目标掌握结构体数据类型的定义掌握结构体类型变量的定义、引用及初始化掌握结构体类型数组的定义、引用及初始化理解并掌握
结构体数组编程清华大学出版社项目7:学生成绩管理系统4.X学生成绩管理系统V4.X功能描述学生成绩管理系统V4.X:学生成绩管理系统V4.X,采用结构体数据类型,存储、管理学生学号、姓名、成绩等相关信息,利用函数实现学生信息的输入、计算总成绩和平均成绩、输出、修改、查询、
排序功能。清华大学出版社7.1学生成绩管理系统V4.07.1.1定义结构体类型结构体是派生类型的一种自定义类型,遵循先定义后使用的规则。定义结构体类型的格式:struct结构体名{数据类型1成员1;数据类型2成员2;......数据类型n成员n;};清华大学出版社7.1学生成绩管理系统V
4.07.1.1定义结构体类型说明:(1)struct是定义结构体的关键字,结构体名遵循标识符命名规则。(2)结构体有若干数据成员,用{}括起来。数据成员格式:数据类型成员名;。数据成员可以是基本类型,也可以是派生类型,比如数组、结构体。(3)定义结构体类型,就是定义了一种数据类型,
与先前所学的int、float一样,只是结构体类型是一种复杂的数据类型,是基本数据类型的组合。清华大学出版社7.1学生成绩管理系统V4.07.1.2定义结构体类型变量1.先定义结构体类型,再定义变量例如:structstudent/*定义
结构体类型structstudent*/{intnum;charname[20];intage;floatscore;charaddr[40];};分号不能少!structstudentstudent1,student2;清华大学出版社7.1学
生成绩管理系统V4.07.1.2定义结构体类型变量2.定义结构体类型的同时定义结构体变量例如:structstudent{intnum;charname[20];intage;floatscore;charaddr[30];}stud
ent1,student2;说明:定义structstudent结构体类型变量student1,student2,与上面方法等价。结构体变量所占的存储空间是其各个成员所占存储空间的总和。清华大学出版社7.1学生成绩管理系统V4.07.1.3结构体变量的引用在定义结构体变量以后,不能直
接引用变量,而是引用该变量的成员,格式如下:结构体变量名.成员名说明:(1)“.”称为成员运算符,在所有运算符中优先级最高,与圆括号()是一个级别。(2)不允许将结构体变量整体输入和输出,只能对结构体变量中的各个成员分别进行输入、输出
和运算。例如:scanf("%d%s",&student1.num,student1.name);printf("%d,%s",student1.num,student1.name);student1.num=11303;student1.
age++;(3)同一种类型的结构体变量之间可以直接赋值。例如:student2=student1;清华大学出版社7.1学生成绩管理系统V4.07.1.14结构体变量的赋值1.结构体变量的初始化结构体变量的初始化是指在定义结构体变量时即赋初值。例如:structstudent{intnum;ch
arname[20];charsex;intage;floatscore;charaddr[30];}student1={20050201,"zhangqiang",'M',18,456,"Jiningguanghe1
3"};清华大学出版社7.1学生成绩管理系统V4.07.1.14结构体变量的赋值1.结构体变量的初始化说明:变量后面的一组数据用{}括起来,其顺序要与结构体中的数据成员类型、顺序保持一致。初始化后,student1.num的值是20050201,studen
t1.age的值是18。清华大学出版社7.1学生成绩管理系统V4.07.1.14结构体变量的赋值2.用scanf()函数给结构体变量的成员赋值。例如:scanf("%d%s%d%f%s",&student1.num,student1.name,&stude
nt1.age,&student1.score,student1.addr);清华大学出版社7.1学生成绩管理系统V4.07.1.14结构体变量的赋值【示例7-1】使用结构体类型变量存储学生学号、姓名、入学成绩,并输出。#include<stdio.h>intmai
n(){structstudent{intnum;charname[20];floatscore;charaddr[30];}student1={20130101,"张琳",356,"山东"};/*初始化*/printf("=====================================
================\n");printf("学号\t\t姓名\t入学总成绩\t地址\n");printf("\n%d\t%s\t%.1f\t\t%s\n",student1.num,student1.name,st
udent1.score,student1.addr);printf("=====================================================\n");return0;}清华大学出版社
7.1学生成绩管理系统V4.07.1.14结构体变量的赋值【示例7-1】使用结构体类型变量存储学生学号、姓名、入学成绩,并输出。#include<stdio.h>intmain(){structstudent{intnum;
charname[20];floatscore;charaddr[30];}student1={20130101,"张琳",356,"山东"};/*初始化*/printf("=================================
====================\n");printf("学号\t\t姓名\t入学总成绩\t地址\n");printf("\n%d\t%s\t%.1f\t\t%s\n",student1.num,student1.name,student1.score,student1.add
r);printf("=====================================================\n");return0;}清华大学出版社7.1学生成绩管理系统V4.07.1.14结构体变
量的赋值运行结果:清华大学出版社7.1学生成绩管理系统V4.07.1.5学生成绩管理系统V4.0设计1.明确功能学生成绩管理系统V4.0功能:使用结构体类型及变量,实现学生学号、姓名和入学总成绩等信息的输入和输出(以2个学生为例)。2.分析问题定义
structstudent结构体类型,包括学号、姓名、成绩三个数据成员。结构体定义如下:structstudent{intnum;charname[20];floatscore;}清华大学出版社7.1学生成绩管理系统V4.07.1.5
学生成绩管理系统V4.0设计3.逻辑设计学生成绩管理系统4.0伪代码:开始:main函数定义structstudent结构体类型定义2个structstudent类型变量输入两个学生信息输出两个学生信息结
束清华大学出版社7.1学生成绩管理系统V4.07.1.5学生成绩管理系统V4.0设计1.编写代码#include<stdio.h>structstudent{intnum;charname[20];floats
core;}student1,student2;intmain(){printf("请输入2个学生的学号、姓名、入学总成绩:\n");scanf("%d%s%f",&student1.num,student1.name,&student1.score);sc
anf("%d%s%f",&student2.num,student2.name,&student2.score);printf("==================================\n");printf("学号姓名入学总成绩:\n"
);printf("\n%d%6s%12.1f\n",student1.num,student1.name,student1.score);printf("\n%d%6s%12.1f\n",student
2.num,student2.name,student2.score);printf("==================================\n");return0;}清华大学出版社7.1学生成绩管理系统V4.07.1.5学生成绩管理系统
V4.0设计5.输入、保存程序程序输入,要保存后,再运行。6.运行、调试程序运行程序,如果出错,检查程序,修改错误,并重新运行。运行结果:清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组结构体数组是指数组的类型为结构体类型,即数组的每个元素都是该结构
体类型的变量。定义结构体数组和定义结构体变量的方法相同。结构体数组的初始化和结构体变量的初始化方法相同,只是每个结构体数组元素的初始化值“{}”括起来。清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组1.先定义结构体,再定义数组。例如:利用结构体数组来保存3个学生的信息。s
tructstudent{intnum;charname[20];intage;floatscore;charaddr[30];};structstudentstu[3]={{20050201,“zhangqiang”,
18,56,“Jining”},{20050202,“liling”,19,86,“qufu”},{20050203,“wanglei”,18,73,“Jining”}};定义了结构体数组后,可以采用“数组元素.成员名”
引用结构体数组某个元素的成员。清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组2.定义结构体的同时定义数组例如:利用结构体数组来保存3个学生的信息。structstudent{intnum;charname[20];intage;floatscore;c
haraddr[30];}stu[3]={{20050201,"zhangqiang",18,456,"Jining"},{20050202,"liling",19,406,"qufu"},{20050203,"wanglei",18,503,"Jining"}};18,73,“
Jining”}};清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组【示例7-2】候选人得票统计程序。每次输入一个得票的候选人的名字,票数加1。要求最后输出各人的得票数(以3个候选人为例)。#include<string.h>#include<stdio.h>S
tructcandi{charname[20];intcount;/*得票数用count来计数*/}leader[3]={{"wang",0},{"liu",0},{"song",0}};intmain(){inti,j;charname[20];清华大学出版社7.2学生成绩管理系统V4
.17.2.1结构体数组for(i=0;i<10;i++)/*假设总共十人投票*/{scanf("%s",name);/*输入姓名*/for(j=0;j<3;j++)if(strcmp(name,leader[j].
name)==0)leader[j].count++;}printf("\n姓名票数\n");for(j=0;j<3;j++)printf("%-5s%5d\n",leader[j].name,leader[j].c
ount);//%-5s表示输出leader[j].name计票姓名时,按字符串格式输出//宽度占5列,-控制姓名字符串左对齐,右补空格return0;}清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组【示例7-3】使用结构体数组,
存储学生学号、姓名和三门课程成绩信息,利用函数实现学生信息的输入、输出(以3个学生为例)。#include<stdio.h>#include<string.h>#defineN3voidinput();voiddisplay();structstudent{in
tnum;charname[20];floatscore[3];/*分别存放三门课程的成绩*/};structstudentstu[N];清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组voidinput()/*输入函数*/{inti,j;printf(
"请输入学生学号、姓名、英语成绩、数学成绩、C语言成绩:\n");for(i=0;i<N;i++){scanf("%d%s%",&stu[i].num,stu[i].name);for(j=0;j<3;j++)scanf("
%f",&stu[i].score[j]);}}voiddisplay()/*输出函数*/{inti;printf("学号姓名英语数学C语言\n");for(i=0;i<N;i++){printf("%d%7s%7.1f%7.1f%7.1f%\n",stu
[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}}清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组intmain(){input();display();return0;}清华大学出版社7.
2学生成绩管理系统V4.17.2.1结构体数组【示例7-4】使用结构体数组,利用函数实现按学生学号和姓名的查询操作。#include<stdio.h>#include<string.h>#defineN3voidinput();voiddi
splay();voidlocatedata();structstudent{intnum;charname[20];floatscore[3];/*分别存放三门课程的成绩*/};清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组structstudentstu[N];
voidinput()/*输入函数*/{inti,j;printf("请输入学生学号、姓名、英语成绩、数学成绩、C语言成绩:\n");for(i=0;i<N;i++){scanf("%d%s%",&stu[i].num,stu[i].name);for
(j=0;j<3;j++)scanf("%f",&stu[i].score[j]);}}voiddisplay()/*输出函数*/{inti;printf("学号姓名英语数学C语言\n");for(i=0;i<N;i++){printf("%d%7s%7.1f%7.1f%7.1f
%\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}}清华大学出版社7.2学生成绩管理系统V4.17.2.1结
构体数组voidlocatedata(){inti,select;intnumber;charname[20];printf("1:按学号查询2:按姓名查询:\n");printf("请选择1或者2:\n");sca
nf("%d",&select);if(select==1){printf("请输入要查找学生的学号:");scanf("%d",&number);for(i=0;i<3;i++){if(number==stu[i].num)break;}}清华大学出版社7.2学生成绩管理系统V4.17
.2.1结构体数组elseif(select==2){printf("请输入要查找学生的姓名:");scanf("%s",name);for(i=0;i<N;i++){if(strcmp(name,stu[i].name)==0)break;}}if(i>=0&&i<N){printf("第%
d条记录:\n",i+1);printf("学号姓名英语数学C语言\n");printf("%d%7s%7.1f%7.1f%7.1f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2])
;}elseprintf("该学生信息不存在\n");}清华大学出版社7.2学生成绩管理系统V4.17.2.1结构体数组intmain(){input();display();locatedata();re
turn0;}清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计1.明确功能学生成绩管理系统V4.1版使用结构体数组,存储学生学号、姓名、三门课程成绩信息,利用函数实现学生信息的输入、输出、求总成绩和平均成绩以及按学生学号、姓
名查询功能。2.分析问题学生成绩管理系统V4.1利用结构体数组来实现,有4个操作选择:输入、输出、统计总成绩、平均成绩和查询。(1)输入模块:由输入函数input()实现,输入若干同学的学号、姓名、三门课程成绩信息。(2)输
出模块:由输出函数display()实现,输出若干学生的学号、姓名、成绩信息。(3)统计模块:由函数sum()实现,计算每位同学各科成绩的总成绩和平均成绩。(4)查询模块:由函数locatedata()实现,
根据学生学号或姓名查询学生信息。清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计3.逻辑设计开始:main函数调用manager()函数调用operate()函数,输出操作菜单根
据用户输入值1、2、3、4、0,依次调用input函数输入学生信息调用display函数输出学生信息调用sum函数求总成绩和平均成绩调用locatedata函数查询符合条件的学生信息输出“谢谢使用,再见”信息输入值1或0,选择是否继续使用学生成绩管理系统V4.1输入1,继续使用学生成绩管理系统V4
.1输入0,退出使用学生成绩管理系统V4.1结束清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计4.编写代码#include<stdio.h>#include<string.h>#inc
lude<conio.h>#include<stdlib.h>#defineN3voidinput();voiddisplay();voidsum();voidlocatedata();voidoperate();voidmanage();structstudent{intnum;charna
me[20];floatscore[5];/*分别存放三门课程的成绩、总成绩和平均成绩*/};structstudentstu[N];清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计voidinput()/*输入函数*/{inti,j
;printf("请输入学生学号、姓名、英语成绩、数学成绩、C语言成绩:\n");for(i=0;i<N;i++){scanf("%d%s%",&stu[i].num,stu[i].name);for(j=0;j<3;j++)scan
f("%f",&stu[i].score[j]);}}voiddisplay()/*输出函数*/{inti;printf("学号姓名英语数学C语言总成绩平均成绩\n");for(i=0;i<N;i++){printf("%d%7s%7.1f%7.1f%7.
1f%8.1f%9.1f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);
}}清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计/*求每一位学生总成绩及求平均成绩函数*/voidsum(){inti,j;for(i=0;i<N;i++){stu[i].score[3]=0;for(j=0;j<3;j++)stu[i].scor
e[3]+=stu[i].score[j];stu[i].score[4]=stu[i].score[3]/3;}}/*根据学号或姓名查询学生信息函数*/voidlocatedata(){inti,select;intnumber;charname[20];printf("1:按学号查询2:按
姓名查询:\n");printf("请选择1或者2:\n");scanf("%d",&select);清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计if(select==1){printf("请输入要查找学生的学号:");s
canf("%d",&number);for(i=0;i<3;i++){if(number==stu[i].num)break;}}elseif(select==2){printf("请输入要查找学生的姓名:");scanf("%s",name
);for(i=0;i<N;i++){if(strcmp(name,stu[i].name)==0)break;}}清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计if(i>=0&&i<N){printf("第%d
条记录:\n",i+1);printf("学号姓名英语数学C语言总成绩平均成绩\n");printf("%d%7s%7.1f%7.1f%7.1f%8.1f%9.1f\n",stu[i].num,stu[i].name,stu[i].s
core[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);}elseprintf("该学生信息不存在\n");}清华大学出版社7.2学
生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计voidoperate(){printf("\t欢迎进入学生成绩管理系统V4.1\n");printf("====================
==================================\n");printf("\t\t请你选择操作类型:\n");printf("\t\t1输入学生信息\n");printf("\t\t2显示学生信息\n");printf("\t\t3统计总成绩、平均成绩\n")
;printf("\t\t4查询学生信息\n");printf("\t\t0返回\n");printf("======================================================\n");}清华大学出版社7.2学生成绩管理系统V4.
17.2.2学生成绩管理系统V4.1设计voidmanage(){intchoicemanage;intchoice=1;system("cls");while(choice){operate();printf("请选择:");scanf("%d",&choic
emanage);switch(choicemanage){case1:input();break;case2:display();break;case3:sum();display();break;case4:locatedata();break;case0:printf
("谢谢使用再见\n");return;default:printf("输入有误,请重新输入!\n");}清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计printf("是否继续管理?(0/1)");scanf("%d",&choice)
;system("cls");}if(!choice)//输入0时{printf("操作完毕,按任意键返回\n");getch();return;}}清华大学出版社7.2学生成绩管理系统V4.17.2.2学生成绩管理系统V4.1设计printf("是否继续管理?(0/1)");scanf("
%d",&choice);system("cls");}if(!choice)//输入0时{printf("操作完毕,按任意键返回\n");getch();return;}}intmain(){manage();return0;}清
华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计1.明确功能学生成绩管理系统V4.2:使用结构体数组,利用函数实现学生信息的输入、输出、求总成绩和平均成绩、查询、修改、删除、排序、统计功能。2.分析问题学生成绩管理系统V4.2登录主
界面操作选择界面输入输出查询统计修改排序删除清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计学生成绩管理系统V4.2的操作步骤如下:(1)按三次有效次数输入系统登录密码,登录“学生成绩管理系统V4.2”。(2
)进入系统主界面,按提示选择需要的操作:进入系统、退出系统。(3)进入系统操作功能界面,具体实现以下操作:①输入模块:输入学生的记录,包括学号、姓名和三门课程成绩。②输出模块:输出学生的记录,包括学号、姓名和三门课程成绩(此时还没有调用sum函数,因此总成绩和平均成绩均显示为0)。③统计模块
:计算并输出每个学生学号、姓名、课程成绩及总成绩、平均成绩。④查询模块:按学号、姓名查询学生信息并输出。⑤修改模块:根据课程代码,修改学生指定课程成绩。⑥删除模块:先调用查询函数查找到符合条件的学生,然后删除。⑦排序模块:按平均成绩排序,输出排序后的学生信息。⑧返回退出。(4)输入
操作类型,分别调用相应函数模块实现成绩管理功能。清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计3.逻辑设计学生成绩管理系统V4.2伪代码开始:main函数输入密码登陆到主用户界面选择使用使用或是退出系统当使用系统时根据输入值来选择调用input函
数输入学生信息调用display函数输出学生信息调用sum函数求总成绩和平均成绩调用locatedata查询符合条件的信息调用update函数修改学生信息调用deletedata函数删除学生信息调用sort函数按平均成绩升序排序结束清华大学出版社7.3学生成绩管理系
统V4.27.3.1学生成绩管理系统V4.2设计4.编写代码#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#defi
neN3intLEN;voidinland();voidmanage();voidinput();voiddisplay();voidupdate();voidsum();intlocatedata();voidsort();voiddeletedata();cha
rpassword[10]="jsjteach";清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计4.编写代码structstudent{intnum;charname[20];floatscore[5];};st
ructstudentstu[N];intmain(){chars[12];intchoice;intflag=0;intn=3;do{printf("请输入密码:\n");scanf("%s",s);清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计
if(!strcmp(s,password))/*若密码正确*/{printf("恭喜您登陆成功!\n\n");flag=1;break;}{printf("输入有误,请重新输入\n");n--;}}while(n>0);if(flag)do{printf("按任
意键继续\n");getch();system("cls");/*包含在头文件stdlib.h中*/inland();scanf("%d",&choice);清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计switch(choice){case1:ma
nage();break;case0:printf("谢谢使用再见!\n");}if(choice==0)break;}while(1);elseprintf("对不起,您的输入次数已到!再见\n");return0;}清华大学出版社7.3
学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计voidinland(){printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t欢迎使用学生成绩管理系统V4.2
\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");printf("\t\t请您选择操作类型:\n");printf("====
==================================================\n");printf("\t\t1进入管理系统\n");printf("\t\t0退出管理系统\n");printf("======================================
================\n");}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计voidoperate(){printf("\t欢迎进入学生成绩管理系统V4.2\n");printf("==============================
========================\n");printf("\t\t请你选择操作类型:\n");printf("\t\t1输入学生信息\n");printf("\t\t2显示学生信息\n");printf
("\t\t3统计总成绩、平均成绩\n");printf("\t\t4查询学生信息\n");printf("\t\t5修改学生成绩\n");printf("\t\t6删除学生\n");printf("\t\t7平均成绩升序排序\n");printf("\t\t0返回\
n");printf("======================================================\n");}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计vo
idmanage(){intchoicemanage;intchoice=1;system("cls");while(choice){operate();printf("请选择:");scanf("%d",&choice
manage);switch(choicemanage){case1:input();break;case2:display();break;case3:sum();display();break;ca
se4:locatedata();break;case5:update();break;/*修改完要更新总成绩及平均成绩*/case6:deletedata();break;case7:sort();
break;case0:printf("谢谢使用再见\n");return;清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计default:printf("输入有误,请重新输入!\n");}printf("是否继续管理?(0/1)");scanf("%d
",&choice);system("cls");}if(!choice){printf("操作完毕,任意键返回\n");getch();return;}}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计voidinput(){inti
,j;printf("请输入学生学号、姓名、英语成绩、数学成绩、C语言成绩:\n");for(i=0;i<N;i++){scanf("%d%s%",&stu[i].num,stu[i].name);for(j=
0;j<3;j++)scanf("%f",&stu[i].score[j]);}}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计voiddisplay(){inti;printf("学号姓名英语数学C语言总成绩平均成绩\n");fo
r(i=0;i<N;i++){printf("%d%7s%7.1f%7.1f%7.1f%8.1f%9.1f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].scor
e[2],stu[i].score[3],stu[i].score[4]);}}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计voidupdate(){inti,j;i=locatedata();if(i==N)printf("查无此人");el
se{printf("请选择要修改成绩代码:\n");printf("1英语成绩2数学成绩3C语言成绩,请选择数字1-3\n");scanf("%d",&j);switch(j){case1:printf("请输入英语成绩:");scanf("%f",&stu[i].score[0]
);break;case2:printf("请输入数学成绩:");scanf("%f",&stu[i].score[1]);break;case3:printf("请输入C语言成绩:");scanf(
"%f",&stu[i].score[2]);break;default:printf("请输入1到3之间的数据\n");}p(请选择或者:\);scanf("%d",&select);if(select==1){printf("请输入要查
找学生的学号:");scanf("%d",&number);for(i=0;i<3;i++){if(number==stu[i].num)break;}}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计sum();printf("修改成功!\n");d
isplay();}voidsum(){inti,j;for(i=0;i<N;i++){stu[i].score[3]=0;for(j=0;j<3;j++)stu[i].score[3]+=stu[i].score[j];stu[i].score[4]=stu[i].sc
ore[3]/3;}}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计intlocatedata()/*在修改及删除函数内需要定位记录,因此需要有函数返回值*/{inti,selec
t;intnumber;charname[20];printf("1:按学号查询2:按姓名查询:\n");printf("请选择1或者2:\n");scanf("%d",&select);if(select==1){printf("请输入要查找学生的学号
:");scanf("%d",&number);for(i=0;i<3;i++){if(number==stu[i].num)break;}}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计elseif(select==2){print
f("请输入要查找学生的姓名:");scanf("%s",name);for(i=0;i<N;i++){if(strcmp(name,stu[i].name)==0)break;}}if(i>=0&&i<N){pr
intf("第%d条记录:\n",i+1);printf("学号姓名英语数学C语言总成绩平均成绩\n");清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计voiddeletedata()/*删除学生信息函数。先调用查找函数找到学生信息,然后删除
。*/{inti,j,m;LEN=N;i=locatedata();for(j=i;j<N-1;j++){stu[j]=stu[j+1];}LEN--;printf("删除成功!剩余学生信息:\n");printf("学号姓名英语数学C语
言总成绩平均成绩\n");for(i=0;i<LEN;i++){printf("%d%7s%7.1f%7.1f%7.1f%8.1f%9.1f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[
1],stu[i].score[2],stu[i].score[3],stu[i].score[4]);}}清华大学出版社7.3学生成绩管理系统V4.27.3.1学生成绩管理系统V4.2设计voidsort()/*按
平均成绩排序*/{inti,j;structstudentt;for(j=0;j<N-1;j++)/*起泡法排序n个数进行n-1轮*/for(i=0;i<N-1-j;i++)if(stu[i].score[4]>stu[i+1].scor
e[4])/*比较平均成绩*/{t=stu[i];stu[i]=stu[i+1];stu[i+1]=t;}/*交换记录*/printf("排序成功!\n");display();/*输出排序后的学生成绩*/}清华大学出
版社7.4自学园地7.4.1枚举类型枚举类型是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。1.声明枚举类型的格式enum枚举类型名{枚举常量1,枚举常量2,…,枚举常量n};2.定义枚举类型变量定义枚举类型的同时定义变量:
enum枚举类型名{枚举常量1,…}枚举变量名;先定义类型后定义变量:enum枚举类型名枚举变量名;清华大学出版社7.4自学园地7.4.1枚举类型说明:(1)enum是标识枚举类型的关键词,定义枚举类型时用enum开头。(2)枚举常量是符号,由程序设
计者自己指定,命名规则同标识符。使用枚举常量,可以提高程序的可读性。枚举类型在可视化编程时常使用。(3)枚举元素在编译时,按定义时的排列顺序取值0,1,2,…(类似整型常数)在定义枚举类型时,可以给这些枚举常量指定整型常数值(未指定
值的枚举常量的值是前一个枚举常量的值加1)。清华大学出版社7.4自学园地7.4.1枚举类型说明:(4)枚举元素是常量,不是变量,可以将枚举元素赋值给枚举变量,但是不能给枚举常量赋值。(5)枚举常量不是字符串。(6)枚举变量、常量一般可以参与整数可以参与的运算,如算术/关系/赋值等运算。清华大学出版
社7.4自学园地7.4.1枚举类型【示例7-5】编写一款软件,输入今天是星期几,计算并输出指定n天后是星期几。#include<stdio.h>intFindDayOf(enumWEEKDAY,intn);/*声明FindDayOf函数*/en
umWEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};/*定义枚举类型WEEKDAY*/intmain(){enumWEEKDAYtoday;/*定义枚举变量today*/intfindday,
n;printf("\nPleaseinputtoday(0~6):");scanf("%d",&today);printf("\nPleaseinputdaynumber:");清华大学出版社7.4自学园地7.4.1枚举类型findday=FindDayOf(today,n);swit
ch(findday){case0:printf("Sunday\n");break;case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesda
y\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;default:printf("Parametererror\n");}r
eturn0;}清华大学出版社7.4自学园地7.4.1枚举类型intFindDayOf(enumWEEKDAYtoday,intn){if((today+n)%7<=6)return(today+n)%7;elseretur
n(today-7+n)%7;}清华大学出版社7.4自学园地7.4.2用typedef定义类型用typedef定义类型的格式:typedef类型定义类型名;说明:typedef定义了一个新的类型的名字,没有建立新的数据类型,是已有类型的
别名。使用类型定义,可以增加程序可读性,简化书写。1.使用typedef关键词定义一种新的类型例如:typedefintINTEGER;typedeffloatREAL;INTEGERi,j;REALa,b;2.类型定义的典型应用。(1)定义一种新数据类型,替换已有数据类型。(2)简化
数据类型的书写。清华大学出版社7.4自学园地7.4.2用typedef定义类型(3)定义数组类型。typedefintNUM[10];/*定义NUM是包括10个元素的整型数组类型(存放10个整数)*/NUMn;/*定义NUM类型(10个元素的整型数
组)的变量n*/(4)定义指针类型。typedefchar*STRING;/*定义STRING是字符指针类型*/STRINGp;/*定义STRING类型(字符指针类型)的变量p*/清华大学出版社7.4自学园地7.4.2用typedef定义类型
【示例7-6】口袋中有红、黄、蓝、白、黑5种颜色的球若干个,每次从口袋中取出3个球,问得到3种不同色球的可能取法,打印出每种组合的3种颜色,用C语言程序实现。#include<stdio.h>intmain(){enumcolor{red,yell
ow,blue,white,black};enumcolori,j,k,pri;intn,loop;n=0;for(i=red;i<=black;i++)for(j=red;j<=black;j++)if(i!=j)清
华大学出版社7.4自学园地7.4.2用typedef定义类型{for(k=red;k<=black;k++)if((k!=i)&&(k!=j)){n=n+1;printf("%-4d",n);for(loop=1;loop<=3;loop++){switch(loop){
case1:pri=i;break;case2:pri=j;break;case3:pri=k;break;default:break;}switch(pri){casered:printf("%s","red");break;caseyellow:p
rintf("%s","yellow");break;caseblue:printf("%s","blue");break;清华大学出版社7.4自学园地7.4.2用typedef定义类型casewhite:
printf("%s","white");break;caseblack:printf("%s","black");break;default:break;}}printf("\n");}}printf("\ntotal:%5d
\n",n);return0;}清华大学出版社7.4自学园地7.4.2用typedef定义类型运行结果: