《C语言程序设计》实 验 报 告5Word文档下载推荐.docx
《《C语言程序设计》实 验 报 告5Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》实 验 报 告5Word文档下载推荐.docx(31页珍藏版)》请在冰点文库上搜索。
{
a=student[0];
student[0]=student[1];
student[1]=a;
}
student[2].num)
student[0]=student[2];
student[2]=a;
if(student[1].num>
a=student[1];
student[1]=student[2];
}
main()
PERSONstudent[]={5,"
Rose"
2,
"
Charl"
6,"
Kate"
};
inti;
fun(student);
printf("
\nTheresultis:
\n"
);
for(i=0;
i<
3;
i++)
%d,%s\n"
student[i].num,
student[i].name);
getch();
程序运行结果示例:
41.1/*给定程序中,函数fun的功能是:
将形参student所指结构体数组中年龄最小者的数据作为函数值返回,并在main函数中输出。
请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。
部分源程序给出如下?
intage;
}STUDENT;
STUDENTfun(STUDENTstudent[],intn)
STUDENTmin;
min=student[0];
for(i=1;
n;
if(min.age>
student[i].age)
min=student[i];
returnmin;
STUDENTstudent[3]={"
alice"
17,
baren"
16,"
caren"
18};
min=fun(student,3);
\nTheminageresult\n"
\nName:
%s,Age:
%d\n"
min.name,
min.age);
79.1/*已知学生的记录由学号和学习成绩组成,N名学生的数据已存入student结构体中,给定程序的功能是找出成绩最高的学生记录,通过形参返回主函数。
string.h>
#defineN10
typedefstructs
charnum[10];
ints;
}student;
fun(studentSTU[],student*s)
studenta;
a=STU[0];
N;
if(STU[i].s>
a.s)
a=STU[i];
*s=a;
studentSTU[N]=
{"
01"
81},{"
02"
89},{"
03"
66},
{"
04"
87},{"
05"
77},{"
06"
90},{"
07"
79},{"
08"
61},{"
09"
80},{"
10"
71}},m;
Theoriginaldata\n"
printf("
No=%sMark=%d\n"
STU[i].
num,STU[i].s);
fun(STU,&
m);
Thehighst:
%s,%d\n"
m.num,
m.s);
95.1/*请补充函数fun,该函数的功能是建立一个带头结点的单向链表并输出到文件file.dat和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传入。
#include<
stdlib.h>
{
intdata;
structs*next;
}NODE;
voidfun(intn,char*filename)
NODE*h,*p,*s;
FILE*f;
h=p=(NODE*)malloc(sizeof(NODE));
h->
data=0;
s=(NODE*)malloc(sizeof(NODE));
s->
data=i;
p->
next=s;
p=p->
next;
next=NULL;
if((f=fopen(filename,"
w"
))==NULL)
Cannotopenfile.dat!
exit(0);
p=h;
fprintf(f,"
THELIST\n"
while(p)
%3d"
p->
data);
if(p->
next!
=NULL)
->
fclose(f);
{
s=p;
free(s);
char*filename="
file.dat"
;
intn;
\nPleaseinputn:
scanf("
%d"
&
n);
fun(n,filename);
getch();
二、改错题
35.2/*下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。
函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
请修改函数fun中的错误,得出正确的结果。
不要改动main函数,不能增行或删行,也不能更改程序的结构?
conio.h>
typedefstructa
structa*next;
}NODE;
intfun(NODE*h)
intsum=0;
NODE*p;
p=h->
/*******error*********/
while(p!
data%2==0)
sum+=p->
data;
returnsum;
NODE*link(intn)
NODE*h,*p,*s;
h=p=(NODE*)malloc(sizeof(NODE));
s=(NODE*)malloc(sizeof(NODE));
data=rand()%16;
next=p->
returnh;
printlink(NODE*h)
\n\nTHELIST:
\n\nHEAD"
%d"
NODE*head;
intsum;
head=link(5);
printlink(head);
sum=fun(head);
\nTheresultSUM=%d"
sum);
}
44.2/*下列给定程序中,函数的功能是:
对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,将此存储区的首地址作为函数值返回。
不要改动main函数,不能增行或删行,也不能更改程序的结构。
STUDENT*fun(STUDENTa[],intm)
STUDENTb[N],*t;
inti,j,k;
/********error********/
t=(STUDENT*)malloc(sizeof(STUDENT));
b[i]=a[i];
for(k=0;
k<
m;
k++)
for(i=j=0;
if(b[i].s>
b[j].s)
j=i;
strcpy(t[k].num,b[j].num);
t[k].s=b[j].s;
b[j].s=0;
returnt;
printresult(STUDENTa[],FILE*pf)
fprintf(pf,"
a[i].num,a[i].s);
\n\n"
STUDENTa[N]=
71}
};
STUDENT*Order;
inti,m;
*****TheOriginaldata*****\n"
printresult(a,stdout);
\nGivethenumberofthestudentswhohavebetterscore:
"
while(m>
10)
Order=fun(a,m);
*****THERESULT*****\n"
Thetop:
%s%d\n"
Order[i].num,
Order[i].s);
free(Order);
88.2/*下列给定程序中的函数link的功能是:
创建带头结点的单向链表,并为各结点数据域赋0到max-1的值。
请修改函数link中的错误,得出正确的结果。
NODE*link(intn,intmax)
NODE*h=NULL,*p,*s;
h=s;
/******error**********/
p=s;
i++)
data=rand()%(max-1);
head=link(10,20);
89.2/*下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。
函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。
fun(NODE*h)
intmax=-1;
data>
max)
max=p->
returnmax;
printresult(ints,FILE*pf)
\nThemaxinlink:
s);
NODE*link(intn,intm)
data=9999;
=n;
data=rand()%m;
printlink(NODE*h,FILE*pf)
\nTHELIST:
intm;
head=link(12,100);
printlink(head,stdout);
m=fun(head);
\nTHERESULT:
printresult(m,stdout);
三、设计题
17.3/*学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组student中,请编写函数fun,它的功能是按分数的高低排列学生的记录,高分在前。
请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#defineM10
}SCORE;
voidfun(SCOREa[])
inti,j;
SCOREk;
M;
for(j=i+1;
j<
j++)
if(a[i].s<
a[j].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"
015"
85},{"
012"
014"
011"
66}};
FILE*out;
Thedataaftersorted:
if((i)%4==0)
%s%4d"
student[i].s);
out=fopen("
outfile.dat"
"
if((i)%4==0&
&
i)
fprintf(out,"
%4d"
student[i].s);
fclose(out);
41.3/*学生的记录由学号和成绩组成,M名学生的数据已在主函数中放入结构体数组stu中,请编写函数fun,它的功能是:
函数返回指定学号的学生数据,指定的学号在主函数中输入。
若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回(用于字符串比较的函数是strcmp)。
*/
SCOREfun(SCORE*p,char*q)
SCOREa;
if(strcmp(p[i].num,q)==0)
{a=p[i];
break;
else
strcpy(a.num,"
a.s=-1;
returna;
SCOREstu[M]={{"
G002"
G004"
G001"
96},{"
G007"
G008"
G006"
G015"
G013"
94},{"
G012"
G014"
91}};
SCOREt;
charm[10];
Theoriginaldata:
if(i%4==0)printf("
%s%3d"
stu[i].num,stu[i].s);
\n\nEnterthenumber:
gets(m);
t=fun(stu,m);
Thedata:
\n%s%4d\n"
t.num,t.s);
t=fun(stu,"
%s%4d\n"
55.3/*已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。
请编写函数fun,该函数的功能是:
找出成绩最高的学生记录,通过形参返回主函数(规定只