C语言博客作业--函数嵌套调用
一、实验作业
1.题目:6-5 递归实现顺序输出整数(15 分)
1.设计思路
定义一个输出逆序的函数为void printdigits( int n )
if n/10==0
则输出n
如果 n/10>0
则调用本身printdigits( n/10 )
输出n%10的值
2.代码截图
3.遇到的问题
第一次写是没有判断n的值为零的情况,所以的三个测试点没过。
2.学生成绩管理系统
1.函数模块图
2.我的工程文件
3.函数代码部分截图
本系统代码总行数:201
-
主函数程序文件
-
头文件
-
命令1:能够新增学生信息,并计算总分和平均分。
录入学生信息函数
输出函数
-
命令2:根据输入学号和课程号修改学生成绩信息。
修改信息函数
-
命令3:能够分别按照总分和平均分进行排序。
-
命令4: 能够根据学号查询学生信息。
查询信息函数
-
命令5:退出系统。
4.部分调试结果展示
-
手动录入学生信息
-
操作菜单
-
命令1:按学号由大到小排列学生信息,并显示出总分与平均分。
-
命令3、4:更改学生信息与查询学生信息
-
命令五:删除学生信息
-
部分功能
删除时输入的学号找不到时,跳出提示
输入其他选项时,跳出提示
-
命令6:结束操作
5.调试碰到问题及解决办法。
- 刚开始写的时候有很多的错误,一直不能调试,印象最深的是重复定义这个错误,出现了很多次,现在都不知道是为什么,因为改了一下那个提示就不见了,猜测应该是主函数里重复调用太多函数了。
- 定义全局变量那个语句extern Count,看了课本也是这样写的,但一直提示Count 没有定义,最后在Count前加了个int来定义它才通过调试。
- 在修改成绩函数中,把总成绩定义成了int型,而下面输出的是float型,所以调试的时候不能实现成绩的更改,要更改的那个成绩变成了一个很大的数,当时以为自己代码不能实现成绩的修改,一检查才发现这个错误。
二、截图本周题目集的PTA最后排名。
三、阅读代码
递归相关代码
- 给一个空的字符数组添加元素
这个题目运用了递归,只用了几行代码就实现了,很简洁。而且很容易看的懂,有时运用递归确实能减少代码量,这是递归的一个优点。
四、本周学习总结
1.介绍本周学习内容。
- 通过函数指针调用函数的一般格式:(*函数指针名)(参数表)
- 结构的递归定义
struct stu_node{
int num;
char name[20];
int score;
struct stud_node *next;
};
- 链表头插法算法
while(节点输入没结束){
p=malloc生成动态节点。
插入在头节点的位置;
更改头节点;
继续输入节点;
}
尾部插入法
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
- 头部插入法
p->next=head;
head=p;
- 链表与数组的区别,使用链表的优点
链表是动态存储分布的数据结构。联表可以节省空间,操作效率更高。与数组相比,链表不用移动数组,因此效率更高。
用数组存放数据时,数组个数不确定时,会浪费大量空间。解决一些插入和删除操作时都要移动数组,效率低。
2.学习体会。
第一次写工程,花了好多时间调试,也发现了自己的好多不足,在写完这个学生成绩管理系统的时候本以为可以松一口气,但是一运行就有一大堆错误,根本运行不了,然后我又花了好多时间去查找错误,百度了才发现main函数与主函数的区别,也把错误找了出来。这次的大工程明显比之前的编程难,因为是第一次写,所以还有很多不懂的地方,工程的代码量很大,要很细心,要不然就算犯了一些很小的错误都很难找出来。