您的位置:首页 > 编程语言 > C语言/C++

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

2017-12-31 22:58 309 查看

一、实验作业

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语句进行调试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: