一、实验作业
题目:6-2 递归计算Ackermenn函数
1.设计思路
定义result为0
如果 m==0
result=n+1;
如果 n==0且m大于0
result=Ack(m-1, 1)
如果m>0且n>0;
result=Ack(m-1, Ack(m,n-1));
返回 result;
2.代码截图
3.调试问题
- 本题没遇到问题
1.2 学生成绩管理系统
1.2.1函数模块图及函数功能
1.2.2工程文件展示
1.2.3 函数代码部分截图
本系统代码总行数:343
头文件
界面
输入学生信息函数
查找学生信息函数
删除学生信息函数
总成绩排序函数
修改函数
1.2.4 调试结果展示
1.2.5 调试碰到问题及解决办法
我这学生系统存在的问题有点多,老师要求的功能有一些我的还不能实现,删除学生信息也存在问题,还有那个联系方式我用字符数组进去运行后比如输入7指令,但就是运行不了对应函数的功能,但改成double型就又可以了。现在也还没有解决,等有空我再去改善一下这个工程。
二、截图本周题目集的PTA最后排名
三,阅读代码
有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后 问第1个人,他说是10岁。请问第5个人多大?
#include <stdio.h>
int getAge(int numPeople);
int main()
{
int age = getAge(5);
printf("第5个人的年龄是%d岁", age);
return 0;
}
int getAge(int numPeople){
int age;
if(numPeople == 1)
age = 10;
else
age =getAge(numPeople -1) +2;
return age;
}
利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推。优点:虽然不是很难,但一看便懂,相当简洁。
四、本周学习总结
1.介绍本周学习内容
10.1.2函数的嵌套调用
可以以函数作为基本功能实现载体,以函数调用结构图为函数关联,可有效组织多个函数,实现复杂问题的结构化程序设计
10.2.3递归程序设计
- 递归函数编写需要抓住两个关键点
(1)递归出口:即递归的结束条件,到何时不再递归调用下去
(2)递归式子:递归的表达式,如fact(n)=n*fact(n-1)
比如编写递归函数reverse(int n)实现将整数n逆向输出
void reverse(int num){
if(num<=9)
printf("%d",num); //递归出口
else{
printf("%d",num%10);
reverse(num/10);//递归调用
}
}
10.3.2宏基本定义
宏的用途
(1)符号常量,如PI,数组大小定义,已增加程序的灵活性
(2)简单的函数功能实现,如
#define MAX(a,b) a>b?a:b
(3)为程序书写带来方便。当程序中需要多次书写一些相同内容时,可以简写成宏。
- 宏定义中对变量加上括号,可提高替换后的运算优先级,有效避免宏替换带来的副作用,保证宏替代的正确性
10.3.4文件包含
文件包含格式:
#include<需包含的文件名>
或
#include"需包含的文件名"
常用标准头文件
ctype.h 字符处理
math.h 与数学处理函数有关的说明定义
stdio.h 输入输出函数中使用的有关说明和定义
string.h 字符串函数的有关说明和定义
stddef.h 定义某些常用内容
stdlib.h 杂项说明
time.h 支持系统时间函数
2.学习体会
- 现在C语言已经差不多快学完了,本周也又进行了一次上机考试,那两道填空题让我发现,自己这么久以来好像也没懂得什么,之前考试考差说是没有电脑不能调试,这次能调试也写不出来,自己存在的问题很大。有时候看书看懂了,但一到写程序就得重新翻书,指针内容有时候还是有点混乱,特别是双指针。不过我会认真对待每次错误的,坚持下去,努力下去。