C语言程序设计7
- 格式:pdf
- 大小:82.11 KB
- 文档页数:1
C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。
2. 删除学生信息:从链表中删除指定学号的学生信息。
5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。
7. 退出程序:退出学生信息管理系统。
实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。
2. 编写添加学生信息函数,新建链表节点并插入链表末尾。
3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。
4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。
6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。
7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。
8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。
实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。
经测试,程序稳定运行,功能正常,符合需求。
本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。
虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。
在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。
同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。
实验七 参考答案(参考答案)(1) (sy7-1.c )请编写函数fun ,它的功能是:计算并输出n (包括n )以内能被5 或9 整除的所有自然数的倒数之和。
例如,若主函数从键盘给n 输入20后,则输出为s=0.583333。
注意:n 的值要求不大于100。
算法分析:使用for 循环i ,遍历n 包含n 以内的所有整数,逐一判断每个i ,是否满足条件(能被5 或9 整除),如果满足,则把它的倒数累加到累加器里。
注意:i 的倒数要表示成:1.0/i;参考子函数如下:double fun(int n){double sum=0;int i;for(i=5;i<=n;i++)if(i%5==0||i%9==0)sum=sum+1.0/i;return sum;}(2) (sy7-2.c ) 请编写函数fun ,其功能是:根据以下公式计算s ,并计算结果作为函数值返回,n 通过形参传入。
n s ⋯++++⋯++++++=321132112111例如:若n 的值为11时,函数的值为1.83333算法分析:等式右边从第二项(i=2)开始,其分母等于前一项的分母加上i ;一共有n 项;求出每项的分母,然后把每项进行累加。
参考子函数如下:float fun(int n){float sum=1; //sum 中已经累加了第一项的值int i,m=1; //m 表示每项的分母;for(i=2;i<=n;i++){ m=m+i;sum=sum+1.0/m;}return sum;}(3) (sy7-3.c)请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c 中。
合并的方式是:将 a 数的十位和个位依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。
例如,当a=45,b=12,调用该函数后,c=5241。
算法分析:对一个两位数n,它的各位可以通过n%10求的,它的十位数可以通过n/10求的;所以分别用上述方法求的a和b的个位和十位,同时按照要求累加到c里。
第7章补充习题及答案习题7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是A. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是A. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是。
A. 00010100B. 00011011C. 00011100D. 000110007.2 填空题(1) 在C语言中,&运算符作为单目运算符时表示的是运算;作为双目运算符时表示的是。
(2) 测试char型变量第6位是否为1的表达式是(设最右位是第1位)。
(3) 设二进制数iData1的值是11001101,若想通过iData1&iData2运算使iData1中的低4位不变,高4位清零,则iData2的二进制数是。
(4) 设iData1=10100011,若要通过iData1^iData2使iData1的高4位取反,低4位不变,则iData2的二进制数是。
答案7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是 AA. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是 CA. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是 C 。
一、单项选择题1题目1在结构类型的定义中,对于类型标识符后的定义体,使用的起止标记符是一对()。
a. 中括号b. 圆括号c. 圆括号d. 尖括号题目2假定一个结构类型的定义为“struct A{int a,b; double c;};”,则该类型的长度为()。
a. 12b. 10c. 8d. 16题目3假定一个结构类型的定义为“struct D{int a; D* next;};”,则该类型的长度为()。
a. 4b. 8c. 12d. 16题目4假定有结构定义“struct Book{char title[20]; double price;};”,则不正确的语句定义为()。
a. struct Book b=("C++ Programming",27.0)b. struct Book* c[10]c. struct Book d[2][3]d. struct Book a[5]题目5假定有结构定义“struct Book{char title[20]; double price;};”,则正确的语句定义为()。
a. struct Book *x=malloc(6*sizeof(struct Book *));b. struct Book *x=malloc(6,sizeofstruct (Book));c. struct Book *x=calloc(6*sizeof(struct Book));d. struct Book *x=calloc(6,sizeof(struct Book));题目6假定要访问一个结构指针变量x中的数据成员a,则表示方法为()。
a. x(a)b. x{a}c. x.ad. x->a题目7与结构成员访问表达式p->name等价的表达式为()。
a. (*p).nameb. *(p->name)c. d. *题目8在一个链表中,每个结点必然存在着一个指向自身结点类型的指针域,用来保存下一个结点的()。