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求余输出

代码截图

  • C语言博客作业--函数嵌套调用_第1张图片

调试问题

  • 问题:先输出再递归1232035-20171231200131820-1871757036.png
    C语言博客作业--函数嵌套调用_第2张图片
    这样是把最低位先输出,最高位最后输出,答案与正确答案相反
  • 解决方法:应该最低位最后输出,最高位最先输出,所以需要先递归到最高位,再一步一步返回输出,只需要先执行递归式子就可以了,调换两式位置,答案正确
    1232035-20171231200523257-1803976560.png
    C语言博客作业--函数嵌套调用_第3张图片

1.2 学生成绩管理系统

1.2.1 画函数模块图,简要介绍函数功能

  • C语言博客作业--函数嵌套调用_第4张图片

1.2.2 截图展示你的工程文件

  • C语言博客作业--函数嵌套调用_第5张图片

1.2.3 函数代码部分截图

  • 本系统代码总行数:279
  • 插入学生信息
    C语言博客作业--函数嵌套调用_第6张图片
    C语言博客作业--函数嵌套调用_第7张图片
    C语言博客作业--函数嵌套调用_第8张图片

  • 删除学生成绩信息代码
    C语言博客作业--函数嵌套调用_第9张图片

  • 总分排序代码
    C语言博客作业--函数嵌套调用_第10张图片

1.2.4 调试结果展示

先增加三名学生的信息,以集美大学学号为例,重复输入后其中一名学生学号输入错误,不全为数字,输出信息

  • C语言博客作业--函数嵌套调用_第11张图片

再插入2名学生,插入排序升序输出信息

  • C语言博客作业--函数嵌套调用_第12张图片

删除,修改学生信息,且删除,修改后对应的平均分和总分也会重新计算

  • C语言博客作业--函数嵌套调用_第13张图片

删除时,查找不到学生,且课程号输入错误

  • C语言博客作业--函数嵌套调用_第14张图片

查询指定学生,并且输入不存在的学生学号

  • C语言博客作业--函数嵌套调用_第15张图片

先输出所以学生的信息,再根据平均分和总分进行降序排序后输出

  • C语言博客作业--函数嵌套调用_第16张图片

没有输入学生信息就查询

  • C语言博客作业--函数嵌套调用_第17张图片

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
    1232035-20171231221254523-1479597234.png

二、截图本周题目集的PTA最后排名

  • 1232035-20171231221643351-1889218764.png

    三、阅读代码

    本题要求使用递归函数实现字符串的逆序输出

  • C语言博客作业--函数嵌套调用_第18张图片
  • 优点:该题为上机考试时没做出来的题目,现在一看发现递归挺好的,先递进,返回时再输出,而且通过q+1递进,返回*(q-1)的方式实现逆输出
  • 学会:运用递归方式进行逆序输出

四、本周学习总结

1.介绍本周学习内容

1.1 指针数组

  • 一维指针数组的定义的一般格式:类型名 数组名[数组长度]
    例如:char
    a[5];

    1.2指向指针的指针

  • 指向指针的指针一般定义为:类型名**变量名
    例如:int a=10;
    int *p=&a;
    int**p=&p;

    1.3文件模块间的通信

    -1.外部变量:
    外部变量声明格式:extern 变量名表
  • 2.静态全局变量:如果整个程序只要一个文件模块,静态全局变量与一般的全局变量作用完全相同。当程序由多个文件模块构成时,静态全局变量特殊的作用,用于限制全局变量作用域的扩展。
  • 3.函数与程序文件模块:
    extern 函数类型 函数名 (参数表说明)

    错题分析:

    C语言博客作业--函数嵌套调用_第19张图片
    分析:没认识到*q还是一阶指针
    改正:language[2]的元素是个地址,地址的地址是一个二阶指针,所以应选c,language[2]元素的值,字符串的首地址

2.学习体会

  • 接下来的学习越来越难啦,特别是二阶指针这一块,有许多模棱两可的概念还没有理解过来,每做一题都需要花上大把的时间
    而且还不一定正确,还有就是学会建立文件这方面的知识也没很好的掌握,管理系统还需要借鉴老师的文件才能写出来,自己动手
    从头到尾写一便可能需要花上好几天的时间,所以希望自己能继续努力,以积极的心态应对接下来的学习

转载于:https://www.cnblogs.com/wlgczjw/p/8159116.html

你可能感兴趣的:(c/c++,数据结构与算法)