C二级操作题 8 结构体变量和结构体数组处理.docx
- 文档编号:4837419
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:24
- 大小:22.95KB
C二级操作题 8 结构体变量和结构体数组处理.docx
《C二级操作题 8 结构体变量和结构体数组处理.docx》由会员分享,可在线阅读,更多相关《C二级操作题 8 结构体变量和结构体数组处理.docx(24页珍藏版)》请在冰豆网上搜索。
C二级操作题8结构体变量和结构体数组处理
第八课
教学内容:
结构体变量和结构体数组处理类算法
教学目的:
掌握结构体变量和结构体数组处理类算法的考题
教学内容:
一、结构体变量和结构体数组处理类算法的考题特点
1.此类算法主要以填空题和程序设计题为考查形式。
2.在填空和改错题中容易考到的知识:
(1)结构体变量的运算:
C规定只有同类型的结构体变量才能整体赋值运算。
(2)结构体变量成员的运算:
使用分量运算符访问最低一级成员,且成员的性质决定了整个结构体变量成员可以进行的运算。
如成员是int型,则可以进行int型变量可以的运算;如成员是数组,则成员数组名仅带表成员数组的首地址,可带下标访问成员数组的元素。
注意运算符优先级最高的四个运算符是:
()、[]、.、->,它们的结合方向是左结合。
(3)结构体数组:
性质同普通数组,不同的是结构体数组的元素可以再包含多个不同类型的成员。
(4)指向结构体变量的指针:
可以用形如:
p->num或(*p).num的形式访问其指向结构体变量的成员。
(5)参数传递方式:
结构体变量的值或结构体变量的地址,注意实参和形参的对应关系。
3.编程题中所涉及的算法有:
修改、查找、排序,方法同普通数组的运算,但其处理的对象一般是结构体变量的成员,注意其表示方法。
三、课堂练习
第一套
1、程序填空题(在被调函数中修改并输出结构体变量的值)
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。
例如:
a所指变量中的学号、姓名、和三门课的成绩依次是:
10001、"ZhangSan"、95、80、88,则修改后输出b中的数据应为:
10002、"LiSi"、95、80、88。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:
源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
#include
structstudent
{longsno;
charname[10];
floatscore[3];
};
voidfun(structstudenta)
{structstudentb;inti;
/**********found**********/
b=__1__;//a同类型的结构体变量可以整体赋值
b.sno=10002;
/**********found**********/
strcpy(__2__,"LiSi");//b.name成员数组的名字代表该成员存储空间的首地址
printf("\nThedataaftermodified:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",b.sno,b.name);
/**********found**********/
for(i=0;i<3;i++)printf("%6.2f",b.__3__);//score[i]
printf("\n");
}
main()
{structstudents={10001,"ZhangSan",95,80,88};
inti;
printf("\n\nTheoriginaldata:
\n");
printf("\nNo:
%ldName:
%s\nScores:
",s.sno,s.name);
for(i=0;i<3;i++)printf("%6.2f",s.score[i]);
printf("\n");
fun(s);//单向值传递
}
2、程序设计题(在结构体数组中查找指定学号的学生数据)
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
函数返回指定学号的学生数据,指定的学号在主函数中输入。
若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
(用于字符串比较的函数是strcmp)。
注意:
部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
STRECfun(STREC*a,char*b)
{inti;
STRECc;
for(i=0;i if(strcmp(b,a[i].num)==0) {c=a[i];break;} if(i>=N) {strcpy(c.num,"");c.s=-1;} returnc; } main() {STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}}; STRECh; charm[10]; inti;FILE*out; printf("Theoriginaldata: \n"); for(i=0;i {if(i%4==0)printf("\n"); printf("%s%3d",s[i].num,s[i].s); } printf("\n\nEnterthenumber: ");gets(m); h=fun(s,m); printf("Thedata: "); printf("\n%s%4d\n",h.num,h.s); printf("\n"); } 第二套 1、程序填空题(通过被调函数输出结构体变量各成员的值) 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。 函数fun的功能是输出这位学生的信息。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include typedefstruct {intnum; charname[9]; charsex; struct{intyear,month,day;}birthday; floatscore[3]; }STU; /**********found**********/ voidshow(STU___1___)//tt {inti; printf("\n%d%s%c%d-%d-%d",tt.num,tt.name,tt.sex,tt.birthday.year,tt.birthday.month,tt.birthday.day); for(i=0;i<3;i++) /**********found**********/ printf("%5.1f",___2___);//tt.score[i] printf("\n"); } main() {STUstd={1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0}; printf("\nAstudentdata: \n"); /**********found**********/ show(___3___);//std } 2、程序设计题(查找成绩最低的学生记录) 已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。 请编写函数fun,函数的功能是: 找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #defineN10 typedefstructss {charnum[10];ints;}STU; fun(STUa[],STU*s) {inti; STUmin=a[0]; for(i=1;i if(min.s>a[i].s) min=a[i]; *s=min; } main() {STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m; inti; printf("*****Theoriginaldata*****\n"); for(i=0;i printf("No=%sMark=%d\n",a[i].num,a[i].s); fun(a,&m); printf("*****THERESULT*****\n"); printf("Thelowest: %s,%d\n",m.num,m.s); } 三、课后练习 1、程序填空题(在被调函数中修改结构体变量的值并返回其值) 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。 函数fun的功能是将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。 例如: 传给形参a的数据中,学号、姓名、和三门课的成绩依次是: 10001、"ZhangSan"、95、80、88,修改后的数据应为: 10002、"LiSi"、96、81、89。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include #include structstudent {longsno; charname[10]; floatscore[3]; }; /**********found**********/ __1__fun(structstudenta)//structstudent {inti; a.sno=10002; /**********found**********/ strcpy(__2__,"LiSi");//a.name /**********found**********/ for(i=0;i<3;i++)__3__+=1;//a.score[i] returna; } main() {structstudents={10001,"ZhangSan",95,80,88},t; inti; printf("\n\nTheoriginaldata: \n"); printf("\nNo: %ldName: %s\nScores: ",s.sno,s.name); for(i=0;i<3;i++)printf("%6.2f",s.score[i]); printf("\n"); t=fun(s); printf("\nThedataaftermodified: \n"); printf("\nNo: %ldName: %s\nScores: ",t.sno,t.name); for(i=0;i<3;i++)printf("%6.2f",t.score[i]); printf("\n"); } 2、程序填空题(在被调函数中修改结构体变量的值) 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。 函数fun的功能是将该学生的各科成绩都乘以一个系数a。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include typedefstruct {intnum; charname[9]; floatscore[3]; }STU; voidshow(STUtt) {inti; printf("%d%s: ",tt.num,tt.name); for(i=0;i<3;i++) printf("%5.1f",tt.score[i]); printf("\n"); } /**********found**********/ voidmodify(___1___*ss,floata)//STU {inti; for(i=0;i<3;i++) /**********found**********/ ss->___2___*=a;//score[i] } main() {STUstd={1,"Zhanghua",76.5,78.0,82.0}; floata; printf("\nTheoriginalnumberandnameandscores: \n"); show(std); printf("\nInputanumber: ");scanf("%f",&a); /**********found**********/ modify(___3___,a);//&std printf("\nAresultofmodifying: \n"); show(std); } 3、程序填空题(在被调函数中修改结构体变量值并返回其地址) 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。 函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。 例如: a所指变量s中的学号、姓名、和三门课的成绩依次是: 10001、"ZhangSan"、95、80、88,修改后输出t中的数据应为: 10002、"LiSi"、96、81、89。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include #include structstudent {longsno; charname[10]; floatscore[3]; }; /**********found**********/ __1__fun(structstudent*a)//structstudent* {inti; a->sno=10002; strcpy(a->name,"LiSi"); /**********found**********/ for(i=0;i<3;i++)__2__+=1;//a->score[i] /**********found**********/ return__3__;//a } main() {structstudents={10001,"ZhangSan",95,80,88},*t; inti; printf("\n\nTheoriginaldata: \n"); printf("\nNo: %ldName: %s\nScores: ",s.sno,s.name); for(i=0;i<3;i++)printf("%6.2f",s.score[i]); printf("\n"); t=fun(&s); printf("\nThedataaftermodified: \n"); printf("\nNo: %ldName: %s\nScores: ",t->sno,t->name); for(i=0;i<3;i++)printf("%6.2f",t->score[i]); printf("\n"); } 4、程序填空题(在被调函数中通过形参指针修改结构体变量的值) 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。 函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如: b所指变量t中的学号、姓名、和三门课的成绩依次是: 10002、"ZhangQi"、93、85、87,修改后输出t中的数据应为: 10004、"LiJie"、93、85、87。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include #include structstudent {longsno; charname[10]; floatscore[3]; }; voidfun(structstudent*b) {inti; /**********found**********/ b__1__=10004;//->sno /**********found**********/ strcpy(b__2__,"LiJie");//->name } main() {structstudentt={10002,"ZhangQi",93,85,87}; inti; printf("\n\nTheoriginaldata: \n"); printf("\nNo: %ldName: %s\nScores: ",t.sno,t.name); for(i=0;i<3;i++)printf("%6.2f",t.score[i]); printf("\n"); /**********found**********/ fun(__3__);//&t printf("\nThedataaftermodified: \n"); printf("\nNo: %ldName: %s\nScores: ",t.sno,t.name); for(i=0;i<3;i++)printf("%6.2f",t.score[i]); printf("\n"); } 5、程序填空题(在结构体数组中找出年龄最大的数据) 给定程序中,函数fun的功能是: 将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include typedefstruct {charname[10]; intage; }STD; STDfun(STDstd[],intn) {STDmax;inti; /**********found**********/ max=___1___;//std[0] for(i=1;i /**********found**********/ if(max.age<___2___)max=std[i];//std[i].age returnmax; } main() {STDstd[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15}; STDmax; max=fun(std,5); printf("\nTheresult: \n"); /**********found**********/ printf("nName: %s,Age: %d\n",___3___,max.age);//max.name } 6、程序填空题(对结构体中的数据按姓名从小到大排序) 程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。 函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意: 源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include #include structstudent {longsno; charname[10]; floatscore[3]; }; voidfun(structstudenta[],intn) { /**********found**********/ __1__t;//structstudent inti,j; /**********found**********/ for(i=0;i<__2__;i++)//n-1 for(j=i+1;j /**********found**********/ if(strcmp(__3__)>0)//a[i].name,a[j].name {t=a[i];a[i]=a[j];a[j]=t;} } main() {st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C二级操作题 结构体变量和结构体数组处理 二级 操作 结构 变量 数组 处理