《C语言程序设计》实 验 报 告5.docx
- 文档编号:12566053
- 上传时间:2023-04-20
- 格式:DOCX
- 页数:31
- 大小:112KB
《C语言程序设计》实 验 报 告5.docx
《《C语言程序设计》实 验 报 告5.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》实 验 报 告5.docx(31页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》实验报告5
《C语言程序设计》实验报告(5)
学号:
姓名:
班级:
成绩:
实验名称:
结构体与共用体综合实验
实验地点:
实验室
所使用的工具软件及环境:
WindowsXP系统;VisualC++6.0
一、实验目的:
1) 熟悉结构体与共用体的正确用法:
2)理解结构体与共用体的特殊性;
二、实验内容:
按题目要求编程并上机调试程序。
1、VC++6.0上机介绍(请参考VC++5.0完成,)
2、课堂练习
一、填空题
38.1/*给定程序中,函数fun的功能是:
将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
请勿改动主函数main与其他函数中的任何内容,仅在横线上填写所需的若干表达式或语句。
注意:
部分源程序给出如下。
*/
#include
typedefstruct
{
intnum;
charname[10];
}PERSON;
voidfun(PERSONstudent[])
{
PERSONa;
if(student[0].num>student[1].num)
{
a=student[0];
student[0]=student[1];
student[1]=a;
}
if(student[0].num>student[2].num)
{
a=student[0];
student[0]=student[2];
student[2]=a;
}
if(student[1].num>student[2].num)
{
a=student[1];
student[1]=student[2];
student[2]=a;
}
}
main()
{
PERSONstudent[]={5,"Rose",2,
"Charl",6,"Kate"};
inti;
fun(student);
printf("\nTheresultis:
\n");
for(i=0;i<3;i++)
printf("%d,%s\n",student[i].num,
student[i].name);
getch();
}
程序运行结果示例:
41.1/*给定程序中,函数fun的功能是:
将形参student所指结构体数组中年龄最小者的数据作为函数值返回,并在main函数中输出。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
注意:
部分源程序给出如下?
*/
#include
typedefstruct
{
charname[10];
intage;
}STUDENT;
STUDENTfun(STUDENTstudent[],intn)
{
STUDENTmin;
inti;
min=student[0];
for(i=1;i if(min.age>student[i].age) min=student[i]; returnmin; } main() { STUDENTstudent[3]={"alice",17, "baren",16,"caren",18}; STUDENTmin; min=fun(student,3); printf("\nTheminageresult\n"); printf("\nName: %s,Age: %d\n",min.name, min.age); getch(); } 程序运行结果示例: 79.1/*已知学生的记录由学号和学习成绩组成,N名学生的数据已存入student结构体中,给定程序的功能是找出成绩最高的学生记录,通过形参返回主函数。 请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。 注意: 部分源程序给出如下。 */ #include #include #defineN10 typedefstructs { charnum[10]; ints; }student; fun(studentSTU[],student*s) { studenta; inti; a=STU[0]; for(i=1;i if(STU[i].s>a.s) a=STU[i]; *s=a; } main() { studentSTU[N]= { {"01",81},{"02",89},{"03",66}, {"04",87},{"05",77},{"06",90},{"07",79},{"08",61},{"09",80},{"10",71}},m; inti; printf("Theoriginaldata\n"); for(i=0;i printf("No=%sMark=%d\n",STU[i]. num,STU[i].s); fun(STU,&m); printf("Thehighst: %s,%d\n",m.num, m.s); getch(); } 程序运行结果示例: 95.1/*请补充函数fun,该函数的功能是建立一个带头结点的单向链表并输出到文件file.dat和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传入。 请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。 注意: 部分源程序给出如下。 */ #include #include typedefstructs { intdata; structs*next; }NODE; voidfun(intn,char*filename) { NODE*h,*p,*s; FILE*f; inti; h=p=(NODE*)malloc(sizeof(NODE)); h->data=0; for(i=1;i { s=(NODE*)malloc(sizeof(NODE)); s->data=i; p->next=s; p=p->next; } p->next=NULL; if((f=fopen(filename,"w"))==NULL) { printf("Cannotopenfile.dat! "); exit(0); } p=h; fprintf(f,"THELIST\n"); printf("THELIST\n"); while(p) { fprintf(f,"%3d",p->data); printf("%3d",p->data); if(p->next! =NULL) { fprintf(f,"->"); printf("->"); } p=p->next; } fprintf(f,"\n"); printf("\n"); fclose(f); p=h; while(p) { s=p; p=p->next; free(s); } } main() { char*filename="file.dat"; intn; printf("\nPleaseinputn: "); scanf("%d",&n); fun(n,filename); getch(); } 程序运行结果示例: 二、改错题 35.2/*下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。 函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。 请修改函数fun中的错误,得出正确的结果。 注意: 不要改动main函数,不能增行或删行,也不能更改程序的结构? */ #include #include #include typedefstructa { intdata; structa*next; }NODE; intfun(NODE*h) { intsum=0; NODE*p; p=h->next; /*******error*********/ while(p! =NULL) { if(p->data%2==0) sum+=p->data; /*******error*********/ p=p->next; } returnsum; } NODE*link(intn) { NODE*h,*p,*s; inti; h=p=(NODE*)malloc(sizeof(NODE)); for(i=1;i { s=(NODE*)malloc(sizeof(NODE)); s->data=rand()%16; s->next=p->next; p->next=s; p=p->next; } p->next=NULL; returnh; } printlink(NODE*h) { NODE*p; p=h->next; printf("\n\nTHELIST: \n\nHEAD"); while(p) { printf("->%d",p->data); p=p->next; } printf("\n"); } main() { NODE*head; intsum; head=link(5); printlink(head); sum=fun(head); printf("\nTheresultSUM=%d",sum); getch(); } 程序运行结果示例: 44.2/*下列给定程序中,函数的功能是: 对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,将此存储区的首地址作为函数值返回。 请修改函数fun中的错误,得出正确的结果。 注意: 不要改动main函数,不能增行或删行,也不能更改程序的结构。 */ #include #include #include #defineN10 typedefstructs { charnum[10]; ints; }STUDENT; STUDENT*fun(STUDENTa[],intm) { STUDENTb[N],*t; inti,j,k; /********error********/ t=(STUDENT*)malloc(sizeof(STUDENT)); for(i=0;i b[i]=a[i]; for(k=0;k { for(i=j=0;i if(b[i].s>b[j].s) j=i; /********error********/ strcpy(t[k].num,b[j].num); t[k].s=b[j].s; b[j].s=0; } returnt; } printresult(STUDENTa[],FILE*pf) { inti; for(i=0;i fprintf(pf,"No=%sMark=%d\n", a[i].num,a[i].s); fprintf(pf,"\n\n"); } main() { STUDENTa[N]= { {"01",81},{"02",89},{"03",66}, {"04",87},{"05",77},{"06",90},{"07",79},{"08",61},{"09",80},{"10",71} }; STUDENT*Order; inti,m; printf("*****TheOriginaldata*****\n"); printresult(a,stdout); printf("\nGivethenumberofthestudentswhohavebetterscore: "); scanf("%d",&m); while(m>10) { printf("\nGivethenumberofthestudentswhohavebetterscore: "); scanf("%d",&m); } Order=fun(a,m); printf("*****THERESULT*****\n"); printf("Thetop: \n"); for(i=0;i printf("%s%d\n",Order[i].num, Order[i].s); free(Order); getch(); } 程序运行结果示例: 88.2/*下列给定程序中的函数link的功能是: 创建带头结点的单向链表,并为各结点数据域赋0到max-1的值。 请修改函数link中的错误,得出正确的结果。 注意: 不要改动main函数,不能增行或删行,也不能更改程序的结构。 */ #include #include #include typedefstructa { intdata; structa*next; }NODE; NODE*link(intn,intmax) { NODE*h=NULL,*p,*s; inti; s=(NODE*)malloc(sizeof(NODE)); h=s; /******error**********/ p=s; for(i=1;i { s=(NODE*)malloc(sizeof(NODE)); /*******error*********/ s->data=rand()%(max-1); s->next=p->next; p->next=s; p=p->next; } s->next=NULL; /********error********/ returnh; } printlink(NODE*h) { NODE*p; p=h->next; printf("\n\nTHELIST: \n\nHEAD"); while(p) { printf("->%d",p->data); p=p->next; } printf("\n"); } main() { NODE*head; head=link(10,20); printlink(head); getch(); } 程序运行结果示例: 89.2/*下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。 函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。 请修改函数fun中的错误,得出正确的结果。 注意: 不要改动main函数,不能增行或删行,也不能更改程序的结构? */ #include #include #include typedefstructa { intdata; structa*next; }NODE; fun(NODE*h) { intmax=-1; NODE*p; /*******error*********/ p=h->next; while(p) { if(p->data>max) max=p->data; /*******error*********/ p=p->next; } returnmax; } printresult(ints,FILE*pf) { fprintf(pf,"\nThemaxinlink: %d\n",s); } NODE*link(intn,intm) { NODE*h,*p,*s; inti; h=p=(NODE*)malloc(sizeof(NODE)); h->data=9999; for(i=1;i<=n;i++) { s=(NODE*)malloc(sizeof(NODE)); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; } p->next=NULL; returnh; } printlink(NODE*h,FILE*pf) { NODE*p; p=h->next; fprintf(pf,"\nTHELIST: \n\nHEAD"); while(p) { fprintf(pf,"->%d",p->data); p=p->next; } fprintf(pf,"\n"); } main() { NODE*head; intm; head=link(12,100); printlink(head,stdout); m=fun(head); printf("\nTHERESULT: \n"); printresult(m,stdout); getch(); } 程序运行结果示例: 三、设计题 17.3/*学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组student中,请编写函数fun,它的功能是按分数的高低排列学生的记录,高分在前。 请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 注意: 部分源程序给出如下。 */ #include #defineM10 typedefstruct { charnum[10]; ints; }SCORE; voidfun(SCOREa[]) { inti,j; SCOREk;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 C语言程序设计实 告5 语言程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)