《C语言程序设计》实 验 报 告5.docx

上传人:b****5 文档编号:12566053 上传时间:2023-04-20 格式:DOCX 页数:31 大小:112KB
下载 相关 举报
《C语言程序设计》实 验 报 告5.docx_第1页
第1页 / 共31页
《C语言程序设计》实 验 报 告5.docx_第2页
第2页 / 共31页
《C语言程序设计》实 验 报 告5.docx_第3页
第3页 / 共31页
《C语言程序设计》实 验 报 告5.docx_第4页
第4页 / 共31页
《C语言程序设计》实 验 报 告5.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

《C语言程序设计》实 验 报 告5.docx

《《C语言程序设计》实 验 报 告5.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》实 验 报 告5.docx(31页珍藏版)》请在冰豆网上搜索。

《C语言程序设计》实 验 报 告5.docx

《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;

for(i=0;i

for(j=i+1;j

if(a[i].s

{

k=a[i];

a[i]=a[j];

a[j]=k;

}

}

main()

{

SCOREstudent[M]={{"002",69},{"004",

85},{"001",91},{"007",72},{"008",64},{"006",87},{"015",85},{"012",64},{"014",91},{"011",66}};

inti;FILE*out;

fun(student);

printf("Thedataaftersorted:

\n");

for(i=0;i

{

if((i)%4==0)

printf("\n");

printf("%s%4d",student[i].num,

student[i].s);

}

printf("\n");

out=fopen("outfile.dat","w");

for(i=0;i

{

if((i)%4==0&&i)

fprintf(out,"\n");

fprintf(out,"%4d",student[i].s);

}

fprintf(out,"\n");

fclose(out);

getch();

}

程序运行结果示例:

41.3/*学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数fun,它的功能是:

函数返回指定学号的学生数据,指定的学号在主函数中输入。

若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp)。

请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

注意:

部分源程序给出如下。

*/

#include

#include

#defineM10

typedefstruct

{

charnum[10];

ints;

}SCORE;

SCOREfun(SCORE*p,char*q)

{

SCOREa;

inti;

for(i=0;i

if(strcmp(p[i].num,q)==0)

{a=p[i];break;}

else

{

strcpy(a.num,"");

a.s=-1;

}

returna;

}

main()

{

SCOREstu[M]={{"G002",69},{"G004",

85},{"G001",96},{"G007",72},{"G008",64},{"G006",87},{"G015",85},{"G013",94},{"G012",64},{"G014",91}};

SCOREt;

charm[10];

inti;FILE*out;

printf("Theoriginaldata:

\n");

for(i=0;i

{

if(i%4==0)printf("\n");

printf("%s%3d",stu[i].num,stu[i].s);

}

printf("\n\nEnterthenumber:

");

gets(m);

t=fun(stu,m);

printf("Thedata:

");

printf("\n%s%4d\n",t.num,t.s);

printf("\n");

out=fopen("outfile.dat","w");

t=fun(stu,"G013");

fprintf(out,"%s%4d\n",t.num,t.s);

fclose(out);

getch();

}

程序运行结果示例:

 

55.3/*已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。

请编写函数fun,该函数的功能是:

找出成绩最高的学生记录,通过形参返回主函数(规定只

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1