《C语言》课内实验报告7.docx
- 文档编号:16433994
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:17
- 大小:114.61KB
《C语言》课内实验报告7.docx
《《C语言》课内实验报告7.docx》由会员分享,可在线阅读,更多相关《《C语言》课内实验报告7.docx(17页珍藏版)》请在冰点文库上搜索。
《C语言》课内实验报告7
一、实验题目:
结构体的应用
二、实验目的:
1.进一步掌握结构体变量、数组的定义和使用方法,掌握结构体与指针的应用。
2.学习共用体的概念和使用。
3.学习链表的概念和使用。
三、实验内容:
1.有6个学生,每个学生的数据包括学号、姓名、性别、4门课的成绩、总成绩、平均成绩。
从键盘输入每个学生信息及4门课成绩,总成绩及平均成绩要通过4门课算出。
然后用选择排序法按照总成绩由高到低对6个学生数据进行排序并输出排序结果。
要求输入、排序、输出用3个自定义函数实现。
编写源程序,给出注释及运行结果。
(提示,请参阅教材上292页例11.5及例11.6的程序)。
#include
#include
#defineN6/*宏定义用N表示6*/
structstudent/*定义一个长度为6的student结构体数组stu[N]*/
{
charname[10];/*结构体中包含长度为10的字符型数组name*/
charnum[10];/*结构体中包含长度为10的字符型数组num*/
floatmath_score;/*结构体中包含浮点型数据math_score*/
floatenglish_score;/*结构体中包含浮点型数据english_score*/
floatcomputer_score;/*结构体中包含浮点型数据computer_score*/
floatC_program_score;/*结构体中包含浮点型数据C_program_score*/
floatsum_score;/*结构体中包含浮点型数据sum_score*/
floataverage_score;/*结构体中包含浮点型数据average_score*/
}stu[N];
voidmain()/*空类型主函数*/
{
voidshow(structstudentstu[]);
/*声明空类型函数show函数包含形参structstudentstu[]*/
voidsort(structstudentstu[],intn);
/*声明空类型函数sort函数包含形参structstudentstu[]和intn*/
inti;/*定义整型变量i*/
printf("学生的个数:
%d",N);/*标准输出函数以整型输出N的结果*/
for(i=0;i { stu[i].sum_score=0;/*把0赋值给stu[i].sum_score*/ printf("\n输入学生成绩%d: \n",i+1);/*以整形输出i+1结果*/ printf("姓名: ");/*输出"姓名: "*/ scanf("%s",stu[i].name);/*以字符型输入数据存到stu[i].name*/ printf("学号: ");/*输出"学号: "*/ scanf("%s",stu[i].num);/*以字符型输出stu[i].num*/ printf("数学成绩: ");/*输出"数学成绩: "*/ scanf("%f",&stu[i].math_score); /*以浮点型输入数据存到stu[i].math_score*/ printf("英语成绩: ");/*输出"英语成绩: "*/ scanf("%f",&stu[i].english_score); /*以浮点型输入数据存到stu[i].english_score*/ printf("计算机成绩: ");/*输出"计算机成绩"*/ scanf("%f",&stu[i].C_program_score); /*以浮点型输入数据存到stu[i].C_program_score*/ printf("c语言成绩: ");/*输出"computer_score: "*/ scanf("%f",&stu[i].computer_score); /*以浮点型输入数据存到stu[i].computer_score*/ printf("\n");/*换行*/ stu[i].sum_score=stu[i].math_score+stu[i].english_score+stu[i].computer_score+stu[i].C_program_score;/*把stu[i].math_score加stu[i].english_score加stu[i].computer_score加stu[i].C_program_score的结果赋给stu[i].sum_score*/ stu[i].average_score=stu[i].sum_score/4.0; /*把stu[i].sum_score除以4.0的结果赋给stu[i].average_score*/ } sort(stu,N);/*调用函数sort(stu,N)*/ show(stu);/*调用函数show(stu)*/ } voidsort(structstudentstu[],intn) /*定义空类型函数sort其形参为structstudentstu[]和intn*/ { inti,j,k;/*定义整型变量i,j,k*/ charg[10];/*定义有十个长度的字符型的数组g*/ floatt;/*定义浮点型变量t*/ for(i=0;i { k=i;/*把i赋值给k*/ for(j=i+1;j if(stu[j].sum_score>stu[k].sum_score) /*如果stu[j].sum_score>stu[k].sum_score*/ k=j;/*把j赋值给k*/ t=stu[k].sum_score;/*把stu[k].sum_score赋值给t*/ stu[k].sum_score=stu[i].sum_score; /*把stu[i].sum_score赋值给stu[k].sum_score*/ stu[i].sum_score=t;/*把t赋值给stu[i].sum_score*/ t=stu[k].math_score;/*把stu[k].math_score赋值给t*/ stu[k].math_score=stu[i].math_score; /*把stu[i].math_score赋值给stu[k].math_score*/ stu[i].math_score=t;/*把t赋值给stu[i].math_score*/ strcpy(g,stu[k].name);/*把stu[k].name赋值给g*/ strcpy(stu[k].name,stu[i].name); /*把stu[i].name赋值给stu[k].name*/ strcpy(stu[i].name,g);/*把g的值赋给stu[i].name*/ strcpy(g,stu[k].num);/*把stu[k].num赋值给g*/ strcpy(stu[k].num,stu[i].num); /*把stu[i].num赋值给stu[k].num*/ strcpy(stu[i].num,g);/*把g赋值给stu[i].num*/ t=stu[k].english_score;/*把stu[k].english_score赋值给t*/ stu[k].english_score=stu[i].english_score; /*把stu[i].english_score赋值给stu[k].english_score*/ stu[i].english_score=t;/*把t赋值给stu[i].english_score*/ t=stu[k].average_score;/*把stu[k].average_score赋值给t*/ stu[k].average_score=stu[i].average_score; /*把stu[i].average_score赋值给stu[k].average_score*/ stu[i].average_score=t;/*把t赋值给stu[i].average_score*/ t=stu[k].computer_score;/*把stu[k].computer_score赋值给t*/ stu[k].computer_score=stu[i].computer_score; /*把stu[i].computer_score赋值给stu[k].computer_score*/ stu[i].computer_score=t;/*赋值给stu[i].computer_score*/ t=stu[k].C_program_score; /*把stu[k].C_program_score赋值给t*/ stu[k].C_program_score=stu[i].C_program_score; /*把stu[i].C_program_score赋值给stu[k].C_program_score*/ stu[i].C_program_score=t; /*把t赋值给stu[i].C_program_score*/ } } voidshow(structstudentstu[]) /*定义函数voidshow(structstudentstu[])*/ { inti;/*定义整型变量i*/ printf("\n姓名学号数学英语计算机C语言总成绩平均成绩\n"); /*换行输出”姓名学号数学英语计算机C语言总成绩平均成绩”再换行*/ for(i=0;i { printf("%s",stu[i].name); /*以字符串型输出stu[i].name*/ printf("\t%s",stu[i].num); /*空出8列在以字符串型输出stu[i].num*/ printf("\t%.2f",stu[i].math_score); /*空出8列再以浮点型保留两位小数输出stu[i].math_score*/ printf("%6.2f",stu[i].english_score); /*以字符行站6列宽度保留两位小数输出stu[i].english_score*/ printf("%8.2f",stu[i].computer_score); /*以字符行站8列宽度保留两位小数输出stu[i].computer_score*/ printf("%9.2f",stu[i].C_program_score); /*以字符行站9列宽度保留两位小数输出stu[i].C_program_score*/ printf("%11.2f",stu[i].sum_score); /*以字符行站11列宽度保留两位小数输出stu[i].sum_score*/ printf("%8.2f",stu[i].average_score); /*以字符行站8列宽度保留两位小数输出stu[i].average_score*/ printf("\n");/*换行*/ } } 2.建立一个含有10个结点的单链表,每个节点包括: 学号、姓名、性别、年龄和一门课程的成绩。 输入一个学号,删去等于此学号的结点;按学号排序向原单链表中插入两个新结点。 编写源程序,给出注释及运行结果。 (提示,请参阅教材上297页至308页例11.8-例11.11的程序)。 #include #include #defineNULL0/*宏定义用0代替NULL*/ #defineLENsizeof(structstudent) /*宏定义用LEN代表structstudent的字节数*/ structstudent/*定义结构体student*/ { longno;/*定义长整型变量no为structstudent的成员*/ charname[10]; /*定义有十个长度的字符型数组name为structstudent的成员*/ charsex; /*定义字符型变量sex为structstudent的成员*/ intage;/*定义整型变量为structstudent的成员*/ floatscore; /*定义浮点型变量score为structstudent的成员*/ structstudent*next; /*定义指向structstudent的指针变量为structstudent的成员*/ }; intn;/*定义整型变量n*/ structstudent*creat(void) /*定义指向结构体structstudent变量的指针变量*/ { structstudent*head; /*定义指向structstudent的指针变量head为structstudent的成员*/ structstudent*p1,*p2; /*定义指向structstudent的指针变量p1,p2为structstudent的成员*/ n=0;/*把0赋值给n*/ p1=p2=(structstudent*)malloc(LEN);/*开辟一个新单元*/ printf("学号\t姓名\t性别\t年龄\t成绩\n"); /*输出学号姓名性别年龄成绩各占8个字节并换行*/ scanf("%ld%s%c%d%f",&p1->no,&p1->name,&p1->sex,&p1->age,&p1->score); /*以长整型,字符串型,整型,浮点型分别输入数据存到&stu->no,stu->name,&stu->sex,&stu->age,&stu->score中*/ head=NULL;/*把NULL的值赋给head*/ while(p1->no! =0)/*当p1->no不等于0*/ { n=n+1;/*把n+1的值赋给n*/ if(n==1)head=p1;/*如果n的值为1把p1赋给head*/ else/*否则*/ p2->next=p1;/*把p1的值赋给p2->next*/ p2=p1;/*把p1赋给p2*/ p1=(structstudent*)malloc(LEN); /*把malloc返回的值强制类型转化为structstudent类型数据的指针变量再赋给p1*/ printf("学号\t姓名\t性别\t年龄\t成绩\n"); /*输出学号姓名性别年龄成绩各占8个字节并换行*/ scanf("%ld%s%c%d%f",&p1->no,&p1->name,&p1->sex,&p1->age,&p1->score); /*以长整型,字符串型,整型,浮点型分别输入数据存到&stu->no,stu->name,&stu->sex,&stu->age,&stu->score中*/ } p2->next=NULL;/*把NULL的值赋给p2->next*/ return(head);/*返回head的值,返回了链表头的指针*/ } /*建立动态链表*/ voidprint(structstudent*head) /*定义空类型的函数print(structstudent*head)*/ { structstudent*p; /*定义指向structstudent的指针变量p*/ printf("学号\t姓名\t性别\t年龄\t成绩\n"); /*输出学号姓名性别年龄成绩各占8个字节并换行*/ p=head;/*把head的值赋给p*/ if(head! =NULL)/*如果head不等于NULL*/ do { printf("%-6ld\t%-6s\t%-4c\t%-5d\t%-6.2f\n",p->no,p->name,p->sex,p->age,p->score);/*输出p->no,p->name,p->sex,p->age,p->score的结果并换行*/ p=p->next;/*把p->next赋给p*/ } while(p! =NULL);/*当p不等于NULL*/ } structstudent*del(structstudent*head,longno) /*定义函数structstudent*del(structstudent*head,longno)*/ { structstudent*p1,*p2;/*定义指向structstudent的指针变量p1,p2*/ if(head==NULL)/*如果head等于NULL*/ { printf("\n空\n"); /*输出换行并输出"null"换行*/ returnhead; } /*返回head的值,返回了链表头的指针*/ p1=head;/*把head赋给p1*/ while(no! =p1->no&&p1->next! =NULL) /*当*p1指向的不是所要找的节点,且后面还有节点时*/ { p2=p1; p1=p1->next;/*p1后移一个节点*/ } if(no==p1->no)/*如果no不等于p1->no*/ { if(p1==head)/*如果p1等于head把p1->next赋给head*/ head=p1->next; /**p1若指向首节点,把第二各节点地址赋给head*/ else/*否则*/ p2->next=p1->next;/*将下一结点地址赋给前一节点*/ n=n-1;/*把n-1的值赋给n*/ } else/*否则*/ printf("\n找不到相应学号\n");/*换行输出"找不到相应学号"再换行*/ return(head);/*返回head的值,返回了链表头的指针*/ } structstudent*insert(structstudent*head,structstudent*stud) /*定义函数structstudent*insert(structstudent*head,structstudent*stud)*/ { structstudent*p0,*p1,*p2; /*定义指向structstudent的指针变量p0,p1,p2*/ p1=head;/*使p1指向第一节点*/ p0=stud;/*p0只想要插入的节点*/ if(head==NULL)/*如果head的值为NULL的值*/ { head=p0;p0->next=NULL;/*使p0指向的节点作为头结点*/ } else/*否则*/ { while((p0->no>p1->no)&&(p1->next! =NULL)) /*当(p0->no大于p1->no)且(p1->next不等于NULL)*/ { p2=p1;/*把p1的值赋给p2*/ p1=p1->next;/*p1后移一个节点*/ } if(p0->no<=p1->no)/*如果p0->no小于等于p1->no*/ { if(head==p1)head=p0;/*如果p1的值等于head把p0的值赋给head*/ else/*否则*/ p2->next=p0;/*把p0的值赋给p2->next*/ p0->next=p1;/*把p1的值赋给p0->next*/ } else/*否则*/ { p1->next=p0;/*把p0的值赋给p1->next*/ p0->next=NULL;}/*把NULL赋给p0->next*/ } n=n+1;/*把n+1的结果赋给n*/ return(head);/*返回head的值,返回了链表头的指针*/ } voidmain()/*定义空类型主函数*/ { structstudent*head,*stu; /*定义指向结构体students变量的指针变量*/ longdel_num;/*定义长整型变量del_num*/ printf("请输入: \n");/*输出"请输入: "并换行*/ head=creat();/*建立链表,返回头指针*/ print(head);/*调用函数print(head)*/ printf("删除学号为: ");/*输出"删除学号为: "*/ scanf("%ld",&del_num);/*以长整型输入数据存到del_num*/ while(del_num! =0)/*当del_num不等于0*/ { head=del(head,del_num);/*删除后链表的头指针*/ print(head);/*调用函数print(head)*/ printf("删除学号为: ");/*输出"删除学号为: "*/ scanf("%ld",&del_num);}/*以长整型输入数据存到del_num*/ printf("请输入添加信息: "); /*输出"请输入添加信息: "*/ stu=(structstudent*)malloc(LEN); /*把malloc返回的值强制类型转化为structstudent类型数据的指针变量再赋给stu*/ scanf("%ld%s%c%d%f",&stu->no,stu->name,&stu->sex,&stu->age,&stu->score); /*以长整型,字符串型,整型,浮点型分别输入数据存到&stu->no,stu->name,&stu->sex,&stu->age,&stu->score中*/ while(stu->no! =0)/*当stu->no不等于0*/ { head=i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言 语言 实验 报告