《C语言》课内实验报告Word格式文档下载.docx
- 文档编号:21152795
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:12
- 大小:31.60KB
《C语言》课内实验报告Word格式文档下载.docx
《《C语言》课内实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《C语言》课内实验报告Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
floatsum;
/*定义浮点形变量sum于结构体类型structstudent中*/
floataverage;
/*定义浮点形变量average于结构体类型structstudent中*/
}stu[6];
structstudent*input(structstudent*stu,intn){
/*定义函数input(structstudent*stu,intn),此函数返回指向structstudent类型数据的指针*/
structstudent*p;
/*定义指向structstudent类型数据的指针p*/
inti;
/*定义整型变量i*/
p=stu;
/*p=stu*/
printf("
pleaseinputtheinfomationofstudent:
\n\n"
);
/*输出”pleaseinputtheinfomationofstudent”*/
nonamesexscore1score2score3score4\n"
/*输出”nonamesexscore1score2score3score4”*/
for(i=0;
i<
n;
i++,p++){/*i=0;
当i<
n时,执行循环,i自加,p自加*/
printf("
student%d:
"
i+1);
/*输出”student(i+1)”*/
scanf("
%d%s%c%f%f%f%f"
&
p->
s_no,p->
s_name,&
s_sex,
&
s_score[0],&
s_score[1],&
s_score[2],&
s_score[3]);
}/*输入structstudent所需的数据,储存在p指向
的变量的地址*/
return(&
stu[0]);
/*函数返回&
stu[0]的值*/
}
voidoutput(structstudent*p[],intn){
/*定义空型函数output(structstudent*p[],intn)*/
\n\ntheinformationofthestudentsis:
/*输出”theinformationofthestudentsis:
”*/
nonamesexscore1score2score3score4sumaverage\n"
/*输出"
nonamesexscore1score2score3score4
sumaverage”*/
i++){/*i=0;
n时,执行循环,i自加*/
%-2d%-5s%-2c%-6.2f%-6.2f%-6.2f%-6.2f%-7.2f%-6.2f\n"
p[i]->
s_no,p[i]->
s_name,p[i]->
s_sex,p[i]->
s_score[0],p[i]->
s_score[1],
s_score[2],p[i]->
s_score[3],p[i]->
sum,p[i]->
average);
}/*输出p[i]所指向变量的各个数据*/
voidcount(structstudent*stu,intn){
/*定义空型函数count(structstudent*stu,intn)*/
/*定义指向structstudent类型变量的指针p*/
p->
sum=p->
s_score[0]+p->
s_score[1]+p->
s_score[2]+p->
s_score[3];
/*计算p->
sum的值*/
average=p->
sum/4;
/*p->
sum/4*/
}
voidsorted(structstudent*stu,structstudent*p[],intn){
/*定义空型函数sorted(structstudent*stu,
structstudent*p[],intn)*/
inti,j,k;
/*定义整型变量i,j,k*/
structstudent*temp;
/*定义指向structstudent类型变量的指针temp*/
for(i=0;
n-1;
n-1时,执行循环,i自加*/
k=i;
/*k=i*/
for(j=i+1;
j<
j++){/*j=i+1;
n时,执行循环,j自加*/
if(p[k]->
sum<
p[j]->
sum)
/*如果p[k]->
sum*/
k=j;
/*k=j*/
}
if(k!
=i){/*如果k!
=i*/
temp=p[i];
/*temp=p[i];
p[i]=p[k];
p[k]=temp;
*/
p[k]=temp;
}
voidmain()/*空型定义主函数*/
{
inti;
structstudent*p[6];
/*定义指向structstudent类型变量的指针数组p*/
for(i=0;
6;
i++)/*i=0;
6时,执行循环,i自加*/
p[i]=stu+i;
/*p[i]=stu+i*/
input(stu,6);
/*执行函数input(stu,6)*/
count(stu,6);
/*执行函数count(stu,6)*/
sorted(stu,p,6);
/*执行函数sorted(stu,p,6)*/
output(p,6);
/*执行函数output(p,6)*/
程序运行结果如下:
2.程序如下:
/*连接库函数stdio.h*/
malloc.h>
/*连接库函数malloc.h*/
#defineLENsizeof(structstudent)
/*定义符号常量LEN,为sizeof(structstudent)*/
structstudent{/*声明结构体类型structstudent*/
intno;
/*定义整形变量no于结构体类型structstudent中*/
charname[20];
/*定义字符数组name[20]于结构体类型structstudent中*/
charsex[5];
/*定义字符数组sex[5]于结构体类型structstudent中*/
intage;
/*定义整形变量age于结构体类型structstudent中*//
floatscore;
/*定义浮点型变量score于结构体类型structstudent中*/
structstudent*next;
/*定义指向结构体变量structstudent的指针变量next于结
构体类型structstudent中*/
};
intn=0;
/*定义全局整型变量n=0*/
structstudent*creat(void){
/*定义函数student*creat(void),此函数返回指向
structstudent类型数据的指针*/
structstudent*p1,*p2,*head;
/*定义指向structstudent类型变量的指针p1,p1,head*/
intk=1;
/*定义整型变量k=1*/
head=NULL;
/*head=NULL;
n=0*/
n=0;
p1=p2=(structstudent*)malloc(LEN);
/*开辟LEN大小的空间令p1,p2指向空间的首地址*/
if(p1!
=NULL){/*如果p1!
=NULL*/
%s\n"
"
请输入学生信息"
/*输出“请输入学生信息”*/
学号姓名性别年龄成绩"
/*输出“学号姓名性别年龄成绩”*/scanf("
%d%s%s%d%f"
p1->
no,p1->
name,p1->
sex,&
age,&
score);
/*输入structstudent所需的数据,储存在p1
指向的变量的地址*/
while(k!
=2){/*当k!
=2时,执行循环*/
n=n+1;
/*n=n+1*/
if(n==1)head=p1;
/*如果n==1,head=p1*/
elsep2->
next=p1;
/*否则p2->
next=p1*/
p2=p1;
/*p2=p1*/
printf("
%s"
是否继续[1]是;
[2]否"
/*输出“是否继续[1]是;
[2]否”*/
scanf("
%d"
k);
/*输入k的值*/
if(k==2)break;
/*如果k==2,跳出循环*/
p1=(structstudent*)malloc(LEN);
/*开辟LEN大小的空间令p1指向空间的首地址*/
if(p1!
scanf("
sex,
/*输入structstudent所需的数据,储存在p1指向
elsegotoloop;
/*否则跳到loop标记的程序*/
p2->
next=NULL;
/*p2->
next=NULL*/
return(head);
/*返回head作为函数的返回值*/
else{
loop:
内存不够,无法建立链表"
/*否则输出“内存不够,无法建立链表”并用loop标记*/
return(head);
structstudent*insert(structstudent*head){
/*定义函数insert(structstudent*head),此函数返回指向
structstudent*p1,*p2,*p0;
/*定义指向structstudent类型变量的指针p1,p1,p0*/
p2=p1=head;
/*p2=p1=head*/
if(head==NULL){printf("
\n%s\n"
请先建立学生信息"
return(head);
/*如果head==NULL,输出“请先建立学生信息”,返回dead*/
p0=(structstudent*)malloc(LEN);
/*开辟LEN大小的空间令p0指向空间的首地址*/
/*输出“学号姓名性别年龄成绩”*/
p0->
no,p0->
name,p0->
/*输入structstudent所需的数据,储存在p0指向
if(head==NULL){/*如果(head==NULL*/
head=p1;
n++;
/*head=p1;
n++*/
printf("
学生信息添加成功"
/*输出“学生信息添加成功”*/
else{/*否则*/
while(p0->
no>
no&
next!
=NULL){
/*当p0->
no且p1->
=NULL执行循环*/
p2=p1;
/*p2=p1;
p1=p1->
next;
p1=p1->
if(p1->
next==NULL){/*如果p1->
next==NULL*/
next=p0;
/*p1->
else/*否则*/
{p2->
/*函数返回head*/
structstudent*del(structstudent*head){
/*定义函数insert(structstudent*head),此函数返回指向
structstudent*p1,*p2;
/*定义指向structstudent类型变量的指针p1,p1*/
intnum;
/*定义整型变量num*/
请输入要删除学生的学号:
/*输出“请输入要删除学生的学号”*/
num);
/*输入num的值*/
/*p2=p1=head*/
if(p1==NULL)/*如果p1==NULL*/
此链表为空,无法删除"
/*输出此链表为空,无法删除*/
while(p1->
no!
=num&
p1->
=NULL){
/*当(p1->
=num且p1->
=NULL时执行循环*/
p2=p1;
p1=p1->
if(p1->
next==NULL&
=num)
/*如果p1->
next==NULL且p1->
=num*/
无此学生的信息"
/*输出“无此学生的信息”*/
else{/*否则*/
if(p1==p2){/*如果p1==p2*/
head=p1->
n--;
/*head=p1->
n--*/
学生信息删除成功"
/*输出“学生信息删除成功”*/
else{/*否则*/
p2->
next=p1->
voidoutput(structstudent*head){
/*定义空型函数output(structstudent*head)*/
structstudent*p;
p=head;
/*p=head*/
%s%d%s\n\n"
此链表有"
n,"
条信息"
/*输出“此链表有"
条信息”*/
if(head!
=NULL)/*如果head!
while(p!
=NULL){/*当p!
=NULL时,执行循环*/
%-4d%5s%-4s%-5d%-7.2f\n"
p->
no,p->
name,p->
age,p->
/*输出p[1]所指向变量的各个数据*/
p=p->
/*p=p->
next*/
intindex(){/*定义返回整形数据的函数index()*/
intflag;
/*定义整型变量flag*/
\n***************%s***************\n\n"
学生信息管理系统"
/*输出“******学生信息管理系统******”*/
[1]%s\n"
建立学生信息"
/*输出“[1]建立学生信息”*/
[2]%s\n"
添加学生信息"
/*输出“[2]添加学生信息”*/
[3]%s\n"
删除学生信息"
/*输出“[3]删除学生信息”*/
[4]%s\n"
显示学生信息"
/*输出“[4]显示学生信息”*/
[0]%s\n\n"
退出"
/*输出“[0]退出”*/
%s"
请选择:
"
/*输出“请选择”*/
flag);
/*输入flag的值*/
return(flag);
/*函数返回flag*/
voidmain(){/*定义空型主函数*/
structstudent*head=NULL;
/*定义指向structstudent类型变量的指针head=NULL*/
flag=index();
/*flag=index()*/
while(flag!
=0){/*当flag!
=0时,执行循环*/
switch(flag){/*如果*/
case1:
head=creat();
flag=index();
break;
/*flag=1,head=creat();
结束switch语句*/;
case2:
head=insert(head);
/*flag=2,head=insert();
结束switch语句*/
case3:
head=del(head);
/*flag=3,head=del();
case4:
output(head);
/*flag=4,head=output();
default:
选择错误"
),flag=index();
/*否则,输出“选择错误”,flag=index()*/
[1]建立链表:
[2]删除链表结点:
[3]添加链表结点:
五、实验体会或遇到问题:
这次课内试验虽然题数少了,但每一题的复杂程度都比较大,逻辑也比较复杂。
在编出程序之后,出现了各种各样的逻辑错误,但由于经过比较多的训练,对于各种逻辑错误,有了比较成熟和有效的调试方法,所以本次试验程序的调试还是比较顺利的。
但有一些错误是听取了别人的建议之后才调试出来的,所以,与人交流也是很重要的。
另外,我觉得到目前为止,在实验报告中,对程序单句注释不仅耗费比较多的时间,而且意义已经不大,所以我希望在以后的程序中,采取功能注释的方法,希望老师能够考虑。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言 语言 实验 报告