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语言的学习,自己的理解能力越来越差了,可能是自己下的功夫还不够多,转眼也快要期末了,还是好好复习各科的功课吧!

原文地址:https://www.cnblogs.com/2223ch/p/8158427.html