C语言博客作业--函数嵌套调用
1.1 PTA题目:6-2 递归计算Ackermenn函数
1.设计思路
函数部分
定义整型变量 result
找到递归出口
如果m=0;
result=n+1;
否则
if(n=0)
result=Ack(m-1,Ack(m,n-1);
else
result=Ack(m-1,Ack(m,n-1)) ;
返回result;
end;
2.代码截图
3.调试问题
开始时没有真正理解递归的用法,结果推了很久,到最后陷入死循环;最后在同学的指点下说不用去纠结递归的算法 ,在写时只用考虑第一步就好啦,其他的计算机会解决;
1.2 学生成绩管理系统(5分)
1.2.1 画函数模块图,简要介绍函数功能。
1.2.2 截图展示你的工程文件
1.2.3 函数代码部分截图
头文件
插入学生信息及学生成绩信息代码
删除学生成绩信息代码
总分排序代码
本系统代码总行数:
1.2.4 调试结果展示
1.2.5 调试碰到问题及解决办法。
二、截图本周题目集的PTA最后排名
三、阅读代码
(3)全排列
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
如1,2,3三个元素的全排列为:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
//全排列
inline void Swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void Perm(int list[],int k,int m)
{
if (k == m-1)
{
for(int i=0;i<m;i++)
{
printf("%d",list[i]);
}
printf("n");
}
else
{
for(int i=k;i<m;i++)
{
Swap(list[k],list[i]);
Perm(list,k+1,m);
Swap(list[k],list[i]);
}
}
}
Swap函数用于交换两个数的值,perm函数用于将数组中的数实现全排列,先找到递归出口,考虑 k=m-1的特殊情况,调用递归函数实现数组元素全排列
四、本周学*总结(1分)
1.介绍本周学*内容
递归函数基本概念:
递归(recursion):程序调用自身的编程技巧。
递归满足2个条件:
(1)有反复执行的过程(调用自身函数)
(2)有跳出反复执行过程的条件(递归出口)
递归程序设计
注意点:
(1)递归出口:即递归的结束条件,到何时不在递归调用下去
(2)递归式子:递归的表达式,如fact(n)=n*fact(n-1)
宏基本定义
宏定义的格式:
#define 宏名 宏定义字符串
注:宏定义字符串是宏名对应的具体实现过程,可以是任意字符串,中间可以有空格,以回车符做结束,例:
#define PI 3.1415926
#define TRUE 1
#define FALSE 0
宏的用途
(1)符号常量,如PI、数组*小定义,以增加程序的灵活性
(2)简单的 函数功能实现,由于宏要在一行内完成,只能实现简单的函数功能
(3)为程序书写带来一些方便
文件包含
1.常用标准头文件
ctype.h 字符处理
math.h 与数学处理函数有关的说明与定义
stdio.h 输入输出函数中使用的有关说明和定义
string.h 字符串函数的有关说明和定义
stddef.h 定义某些常用内容
stdlib.h 杂项说明
time.h 支持系统时间
程序文件模块
c语言把保存有一部分程序的文件称为程序文件模块;
程序、程序文件模块与函数间的关系:一个*程序可由几个程序文件模块组成,每一个程序文件模块又可能包括若干个函数,程序文件模块只是函数书写的载体
文件模块间的通信
1.外部变量;
外部变量声明格式:
extern 变量名表
2.静态全局变量
3..函数与程序文件模块
函数与程序文件模块的声明格式:
extern 函数类型 函数名 (参数表说明)
4.静态的函数在c语言中也称内部函数。定义格式为:
static 函数类型 函数名(参数表说明)
上机考试错题
函数题
6-1 jmu-c-字符串降序排序(20 分)
输入任意个字符串,能对字符串降序排序。
错误原因:没有理解指针数组,导致答案错误;
6-2 jmu-c-二分查找(20 分)
假设数组a是个升序的数组序列,现要通过二分查找法在数组中查找关键字key,并输出在数组中的下标及查找次数。 若找不到,则输出-1及查找次数。
错误原因:理解错二分查找的判断条件导致答案错误
6-3 字符串正反序连接(20 分)
将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
2.学*体会。
对于最近的学*状态表示很不满意,不是说没有在认真的读书,而是最近的学*效率**降低;还有最近对于c语言的学*,感觉难度越来越*了,自己有点跟不上节奏,就比如上周的上机考试,对于稍简单的题自己私下想想可以写出来,但也不知道为什么上机又不行,可能还是基础掌握的不扎实吧;还有这次的*作业,感觉自己有点无从下手,不知道该从哪里开始,怎么将各个函数间联系起来,一直是显示无法运行的状态;感觉对c语言的学*,自己的理解能力越来越差了,可能是自己下的功夫还不够多,转眼也快要期末了,还是好好复*各科的功课吧!