C语言博客作业--函数嵌套调用

一、实验作业

1.1 PTA题目:6-4 十进制转换二进制

设计思路

定义 i=n,sum=0;
if i/2不等于0 
	再次调用函数,参数为n/2
	输出n%2
end if
else 
	输出n
	return
end else

代码截图:

调试过程碰到的问题及解决办法

本题没有碰到问题

1.2 学生成绩管理系统

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

1.2.2 截图展示你的工程文件

1.2.3 函数代码部分截图

main函数:

插入排序:

输入信息:

本系统代码总行数:327行

1.2.4 调试结果展示

输入三个学生成绩:

输出成绩:

再次输入一个学号,输入学号已存在或输入了非数字字符:

输入的成绩不在[0,100]上:

对成绩进行总分排序输出:

再次全部输出扔按学号排序:

对成绩进行修改:

查询后,数学成绩改变:

对数学成绩进行删除:

1.2.5 调试碰到问题及解决办法

碰到的问题1:
插入排序时,没有将students[i].num储蓄起来

将数组后移时,k=Count-1,此时的k=i;循环中直接改变了students[i].num,循环结束时,students[k]=students[i]本来是数组后移后插入,但students[i]已经被改变,所以出错

解决办法:移动前先令temp=students[i],移动完后students[k]=temp。

碰到的问题2:
第一次输入完后,再次输入时,循环i的起始位置出错,导致遍历数组查看是否重复或出错时出现导致死循环

因为每次输入都从0开始,而查重的时候也是从0开始,所以无论第二次输入会将第一次的覆盖,而且输入什么都会死循环


解决办法:
定义mark=Count,每次循环从i=mark开始,到i=mark+n;这样不会把上次的输入覆盖,也能正常的查重查错。

碰到的问题3:
每次修改或删除成绩后没有重新计算平均分和总分
解决办法:
修改完后再次计算:

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

三、阅读代码

递归法求最大公约数:

四、本周学习总结

本周你学会了什么?

函数的递归:

  • 一个递归算法必须包括的部分:终止条件和递归部分

宏定义:

宏定义格式:

#define   宏名   宏定义字符串

宏定义可以定义符号常量和简单的函数:

#define  PI  3.1415926
#define  s   PI*r*r

带参数的宏定义:

#define  product (x)  x*x

若x=y+1,则product(x)=y+1*y+1 ,不用加括号,直接进行计算

指针数组

一位指针数组定义的一般格式为:

类型名  * 数组名  [数组长度]

指针数组color的每个元素指向color[i]分别指向一个字符串,color[i]中存放的是字符串的首地址

char  * color[5] = {"red","blue","yellow","green","black"};

二级指针,指向指针的指针

一般定义:

类型名  * * 变量名

例如:

int a=10;
int *p=&a;
int **pp=&p;


此时 a=*p=**pp;

学习体会

经过快一个学期的C语言学习,从最开始最简单的"Hello World"到现在的二级指针、链表,难度不断加大,代码量也越来越多。通过C语言的学习,我觉得这个过程能很好的锻炼自己的逻辑思维能力,特别是这次的学生管理系统,有许多要考虑的地方,通过一些复杂的程序设计能更好的锻炼自己,让我们要考虑到程序的健壮性,不断的对程序进行修改。
此外,对于C语言的学习我认为一下几点比较重要:

  • 基础。学号基础才能学习更深入的问题,这一点我对运算符的优先级深有感受,当时学数据类型,一碰到复杂的表达式就要翻书看表,很浪费时间。
  • 算法。写程序前先要构思,不应该急着写程序,可以先写伪代码,把框架先写出来,再去填满。
  • 调试。现在一个代码量越来越大,如果全部用眼睛看时不太可能,所以熟练的运用调试工具,可以找出问题所在。但也不是一碰到问题就用调试工具,也能用printf语句进行调试。
posted @ 2017-12-31 22:58  嘿嘿渣  阅读(363)  评论(2编辑  收藏  举报