2023年C语言实验报告九_第1页
2023年C语言实验报告九_第2页
2023年C语言实验报告九_第3页
2023年C语言实验报告九_第4页
2023年C语言实验报告九_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数学与软件科学学院实验报告学期:_2023_至_2023_第1学期2023_年12_月09_日课程名称:程序设计基础教程-C语言_专业:_数学与应用数学_2023_级_1班实验编号:09实验项目:结构体和共用__指导教师______姓名:学号:实验成绩:一、实验目的及规定(1)掌握C语言环境下结构体和共用体类型变量的定义和使用方法;(2)掌握结构体类型数组的概念和使用;(3)掌握指向结构体变量的指针变量、特别是链表概念;二、实验内容1.一方面熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分派原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。(参见教材例10-1~10-5)2.基于结构体数组的应用实验。(1)有n个学生,每个学生的数据涉及学好(num)、姓名(name[20])、性别(sex)、年龄(age),以及三门课程的成绩(score[3])。规定:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含本来输入的学生原始数据信息和求解出来的新信息)。(2)对第(1)题实验,求出其中成绩最佳的人和成绩最差的人,并显示出来。(假定成绩最佳和最差的人都只有一个)(3)*假如假定成绩最佳和最差的人的个数不一定唯一,程序应当如何修改才干完毕求出所有最佳和最差者,以及输出它们来。3.*链表实验。(1)建立一个链表,每个结点包含:职工号、工资。用malloc()函数开辟新结点,用free()函数回收不用的结点空间。规定从键盘输入5个员工的数据信息(用create_list()),然后,用函数output_list()将它们一一打印出来,用free_list()将链表中的结点空间回收。假设职工编号为1001,1005,1008,1010,1101。注:malloc()和free()为系统函数。create_list(),output_list(),free_list()为用户自定义函数。(2)在(1)的基础上,新增一个函数inset_node()插入员工1006和1032的数据信息。规定新插入的员工后,员工仍然按职工号顺序排列。(3)在(2)的基础上,新增一个函数delete_node(),可以用来将指定员工的数据从链表中删除。(4)在(3)的基础上,增长回收所删除结点所占内存空间的功能。(5)*如何查看和测试链表中结点的内存空间地址?能否由此分析(1)、(2)、(3)中链表结点的逻辑结构?三、实验准备:(1)复习有关结构体方面的所有知识,特别是10-3-4节所学的动态存储分派技术;(2)编写所选实验题目的程序代码和流程图;(3)检查源程序并给出其也许的运营结果说明。四、实验环节:(1)上机验证所选题目的程序设计结果,并做相应测试和分析;(2)进行实验分析;(3)总结结构体程序设计和实现的基本方法及其经验,特别是链表技术;(4)编写实验报告。五、实验结果分析与评价(1)根据测试目的写出测试报告;(2)测试结果分析说明;(3)测试程序代码清单。1.一方面熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分派原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。(参见教材例10-1~10-5)答:(1)结构体声明方法:(先定义结构体类型,再声明结构体变量)struct结构体数据类型名{类型标记符成员变量名;类型标记符成员变量名;......}变量名表列;(2)结构体类型变量的内存分派原则:其存储空间大小随着成员变量所占存储空间大小而变化。其存储空间是连续分派的一段存储区域,大小为成员变量所占存储空间之总和。(3)初始化:初始化列表中值的个数少于结构体成员变量个数时,余下的成员变量自动初始化为0或NULL。反之,将出现编译型错误:(4)引用结构体变量:既可以访问结构体中的成员变量,也可以将结构体变量作整体引用。(5)结构体变量的输入、输出方法:运用scanf()和printf()函数完毕运用gets()和puts()函数完毕例题分析:例10-1测试结构体数据类型student所占的存储空间长度程序如下:#include<stdio.h>structstudent/*定义一个结构体*/{intnStno;charcName[20];charcSex;intnAge;floatfScore;charcAddr[30];}struStud;intmain(void)/*主函数,重要测试各个结构体的内存大小*/{intnSizeStud;printf("sizeofstruStudare%dand%d.\n",sizeof(structstudent),sizeof(struStud));nSizeStud=sizeof(struStud.nStno)+sizeof(struStud.cName)+sizeof(struStud.cSex);nSizeStud+=sizeof(struStud.nAge)+sizeof(struStud.fScore)+sizeof(struStud.cAddr);printf("totalsizeis%d\n",nSizeStud);return0;}运营结果如下:结果分析:此例题重要是要我们掌握,结构体的所占的空间长度是怎么样的。Int占两个字节,char占一个字节,数组占30个,一共就有59个字节。空间长度就是59.结构体存储空间以所有成员变量所需存储空间大小为分派依据。sizeof()内可以是结构体数据类型标记符,也可以是结构体变量。结果和计算各成员变量内存空间大小之和一致。注意:sizeof()中,用结构体数据类型名测试大小必须以数据类型标记符形式表述。否则,编译器将报告“Undefinedsymbol”结构体数据类型名“infunction…”错误。例10-3输入并输出学生成绩记录#include<stdio.h>structscore_type/*定义一个结构体*/{intnStno;intnAge;floatfScore;};intmain(void)/*主函数*/{structscore_typestruStud;/*声明一个结构体*/printf("enternStno,nAge,fScore::");scanf("%d%d%f",&(struStud.nStno),&struStud.nAge,&struStud.fScore);printf("nStno=%d,nAge=%d,fScore=%1f\n",struStud.nStno,struStud.nAge,\struStud.fScore);return0;}运营结果:EnternStNo.nAge,fscore:1,20,95.5nStNo=1,nAge=20,fScore=95.5结果分析:对结构体成员变量的访问用圆点操作符“·”,它被称为成员操作符,圆点运算优先级最高且是自左向右的结合,其具体格式如下:结构体变量名.成员变量名,它表达要访问结构体变量下的成员变量名域;由于取地址操作符优先级低于圆点操作符,对成员变量地址的引用可以不加括号。然后还要注旨在结构体定义完毕后要记住加分号。2.基于结构体数组的应用实验。(1)有n个学生,每个学生的数据涉及学号(num)、姓名(name[20])、性别(sex)、年龄(age),以及三门课程的成绩(score[3])。规定:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含本来输入的学生原始数据信息和求解出来的新信息)。程序如下:#include<stdio.h>#include<stdlib.h>#defineSTUD_NUM2/*宏定义*/structstud_info/*定义一个结构体*/{intnum;charname[20];charsex;intage;intscore[3];};voidstud_gets(structstud_info*studPtr,constintno);/*声明外部函数*/voidstud_input(structstud_info*stud_arr,constintnum);voidstud_output(conststructstud_info*stud_arr,constintnum);voidstud_gets(structstud_info*studPtr,constintno)/*分别定义*/{intj,h;charcTemp[10];printf("Theno%d'sinfois:\n",no);printf("num=");gets(cTemp);studPtr->num=atoi(cTemp);for(h=0;h<20;h++){studPtr->name[h]=0;}printf("name=");gets(studPtr->name);printf("sex=");studPtr->sex=getchar();getchar();printf("age=");scanf("%d",&(studPtr->age));getchar();printf("\nscore=");for(j=0;j<3;j++){scanf("%d",&(studPtr->score[j]));}getchar();}voidstud_input(structstud_info*stud_arr,constintnum){inti;structstud_info*studPtr=stud_arr;printf("Pleaseinputstudents'info.\n");printf("(numnamesexagescore)\n");for(i=0;i<num;studPtr++,i++)stud_gets(studPtr,i+1);return;}voidstud_output(conststructstud_info*stud_arr,constintnum){inti;structstud_info*studPtr;studPtr=stud_arr;printf("Informationofthestudentsare::\n");printf("\nnumnamesexagescore:\n");for(i=0;i<num;studPtr++,i++){printf("%-8d%-8s%-8c%-8d%-8d%-8d%-8d",studPtr->num,studPtr->name,studPtr->sex,studPtr->age,\studPtr->score[0],studPtr->score[1],studPtr->score[2]);return;}}voidcount(conststructstud_info*stud_arr,constintnum){inti,snum,ave,max;char*pt;structstud_info*studPtr=stud_arr;for(i=0;i<num;studPtr++,i++){snum=studPtr->score[0]+studPtr->score[1]+studPtr->score[2];ave=snum/3;if(i==0){max=snum;pt=studPtr->name;}else{if(max<snum)pt=studPtr->name;}printf("\n\nthe%d'sscoreis%d\naveis%d",num,snum,ave);}printf("\n\n\nthebestis");for(i=0;i<20;i++){if(pt[i]!=0)printf("%c",pt[i]);}return;}intmain(void){structstud_infostudArr[STUD_NUM];clrscr();stud_input(studArr,STUD_NUM);stud_output(studArr,STUD_NUM);count(studArr,STUD_NUM);return0;}运营结果如下:分析:程序提成六个模块,分别是结构体,structstud_info,voidstud_gets,voidstud_input,voidstud_output,voidcount,main(void)这六个模块,程序一方面声明了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论