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函数与主函数的区别,也把错误找了出来。这次的大工程明显比之前的编程难,因为是第一次写,所以还有很多不懂的地方,工程的代码量很大,要很细心,要不然就算犯了一些很小的错误都很难找出来。

posted @ 2017-12-31 22:54  梁才玉  阅读(248)  评论(1编辑  收藏  举报