C语言博客作业--函数嵌套调用
一、实验作业
1.1 PTA题目:十进制转换二进制
设计思路:
void dectobin( int n )
if(n<2) printf("%d",n%2)//递归出口:n少于2时说明n到达最大位,输出1
else
dectobin(n/2)//递归式子:n除2递进,归回来后再输出,因为最开始求余的余数要放在最后输出
printf("%d",n%2);//对2求余输出
代码截图
调试问题
- 问题:先输出再递归
这样是把最低位先输出,最高位最后输出,答案与正确答案相反 - 解决方法:应该最低位最后输出,最高位最先输出,所以需要先递归到最高位,再一步一步返回输出,只需要先执行递归式子就可以了,调换两式位置,答案正确
1.2 学生成绩管理系统
1.2.1 画函数模块图,简要介绍函数功能
1.2.2 截图展示你的工程文件
1.2.3 函数代码部分截图
-
本系统代码总行数:279
-
插入学生信息
-
删除学生成绩信息代码
-
总分排序代码
1.2.4 调试结果展示
先增加三名学生的信息,以集美大学学号为例,重复输入后其中一名学生学号输入错误,不全为数字,输出信息
再插入2名学生,插入排序升序输出信息
删除,修改学生信息,且删除,修改后对应的平均分和总分也会重新计算
删除时,查找不到学生,且课程号输入错误
查询指定学生,并且输入不存在的学生学号
先输出所以学生的信息,再根据平均分和总分进行降序排序后输出
没有输入学生信息就查询
1.2.5 调试碰到问题及解决办法
- 问题:插入排序时,假设三个学生学号分别为1,2,3,5 要插入4,会变成1,2,4,3,5但是1,3,5插入2又能变成1,2,3,5,方法是2要插在1和3之间整体的第二个位置,所以让从3开始的学号后移,变为1,3,3,5,用一个temp接收2,再第二个位置的学号赋予temp的值,变为1,2,3,5
但是1,2,3,5插入4时,4需插入3的位置也就是整体的第三个位置,从3位置开始后移为1,2,3,3,5,再让第三个位置的学号赋予temp的值,结果变成了1,2,4,3,5;错误 - 解决方法: 元素向后移动的循环结束后增加一个特殊判断,如果学生人数为偶数时,找到插入位置就在找到的插入位置插入,如果学生人数为奇数时,让它再插入位置的下一个位置插入,比如1,2,3,5插入4,学生的人数为5为奇数,所以不让它插入第三个位置1,2,4,3,5,而是第四个位置1,2,3,4,5
二、截图本周题目集的PTA最后排名
三、阅读代码
本题要求使用递归函数实现字符串的逆序输出
- 优点:该题为上机考试时没做出来的题目,现在一看发现递归挺好的,先递进,返回时再输出,而且通过q+1递进,返回*(q-1)的方式实现逆输出
- 学会:运用递归方式进行逆序输出
四、本周学习总结
1.介绍本周学习内容
1.1 指针数组
- 一维指针数组的定义的一般格式:类型名 *数组名[数组长度]
例如:char *a[5];
1.2指向指针的指针
- 指向指针的指针一般定义为:类型名变量名
例如:int a=10;
int *p=&a;
intp=&p;
1.3文件模块间的通信
-1.外部变量:
外部变量声明格式:extern 变量名表
- 2.静态全局变量:如果整个程序只要一个文件模块,静态全局变量与一般的全局变量作用完全相同。当程序由多个文件模块构成时,静态全局变量特殊的作用,用于限制全局变量作用域的扩展。
- 3.函数与程序文件模块:
extern 函数类型 函数名 (参数表说明)
错题分析:
分析:没认识到*q还是一阶指针
改正:language[2]的元素是个地址,地址的地址是一个二阶指针,所以应选c,language[2]元素的值,字符串的首地址
2.学习体会
- 接下来的学习越来越难啦,特别是二阶指针这一块,有许多模棱两可的概念还没有理解过来,每做一题都需要花上大把的时间
而且还不一定正确,还有就是学会建立文件这方面的知识也没很好的掌握,管理系统还需要借鉴老师的文件才能写出来,自己动手
从头到尾写一便可能需要花上好几天的时间,所以希望自己能继续努力,以积极的心态应对接下来的学习