递归:
函数调用 其本身叫递归。他有时可以代替循环。
这一节可能有点难懂,因为比较的抽像,但是理解了也就不是什么难的。
<span style="font-size:14px;">// 9.6.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
void <span style="color:#ff0000;">up_and_dow</span> (int n);
int _tmain(int argc, _TCHAR* argv[])
{<span style="color:#000000;">
</span> <span style="color:#ff0000;">up_and_dow (1);
</span> getchar ();
return 0;
}
void up_and_dow (int n)
{
printf ("Level %d: n location %p \n", n, &n); // n == 1
if (n < 4)
<span style="color:#ff0000;">up_and_dow (n + 1);</span>
printf ("LEVEL %d : n location %p \n", n , &n); // n == 2
}
</span>
这问题我也想了比较久,问题主要是卡在输出“LEVEL 4: n location 0x0012ff24”后。这里需要注意两个问题:第一个是 n 这个变量的值(每一级递归 都是使用它自己私有的变量n,也就是说n的值在每一级递归的值都是不相同的)。第二个是,函数在被调用后控制权会交给调用它的函数
把函数原型 和常量定义放在一个头文件中好处:可以减少键入代码的时间,和维护时间 用#include "文件名.h"
不在同一文件的函数编译
在vs 右边的源代码右击新建,要编译的代码或头文件,但是点调试时还是要在有main ()函数中点的。因为C总是从main()函数开始执行的。
scanf ("%*s");读入一个字符串 以空格结束 -->解释了为什么"来跳至下一空白字符"....* 是scanf函数中的一种修饰符 .... 表示输入项输入后不转送给任何向量
星号*的作用就是表示读入字符串的宽度
status = scanf("%d", &code)) != 1 scanf()返回的是成功读入的值的个数,如果你输入整数那么scanf成功读到1个整数返回1,否则返回0。而不是把code 的值赋给status 而是scanf 读入成功或个数返回的值