·206· C语言程序设计上机指导与同步训练 return(a)i 五、编程题 已有变量定义和函数调用语句:intx=57; Isprime(x);函数 Isprime()用来判断一个整 形数a是否为素数,若是素数,函数返回1,否则返回0。请编写 isprime函数。 第2讲 知识归纳 1.函数的嵌套调用 (1)C语言的函数定义都是互相平行、独立的,即在定义函数时,一个函数内不能包含 另一个函数,即函数定义不能嵌套。 (2)C语言的函数调用可以嵌套,即在调用一个函数的过程中,可以再调用另一个函数。 2.函数的递归调用 修(1)在调用一个函数的过程中,又出现直接或间接地调用该函数本身,称为函数的递 (2)递归的基本格式:以求年龄为例 int age( int n int c if(n==1)c=10; //如果没有这个条件语句,递归就没有终止点 else c=age(n-1)+2 return C 注意:递归就是递推+回归;因此,在写递归调用的结果时,一定注意要回归到函数 调用处执行,然后接着执行它的下一个语句 基础训练(A) 选择题 1.以下正确的描述是()。 在C语言中 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套。 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套。 2.在C语言的函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了 206
·206· C 语言程序设计上机指导与同步训练 ·206· return(a); } 五、编程题 已有变量定义和函数调用语句:int x=57 ; isprime(x); 函数 isprime( ) 用来判断一个整 形数 a 是否为素数,若是素数,函数返回 1,否则返回 0。请编写 isprime 函数。 isprime(int a) { } 第 2 讲 知识归纳 1. 函数的嵌套调用 (1) C 语言的函数定义都是互相平行、独立的,即在定义函数时,一个函数内不能包含 另一个函数,即函数定义不能嵌套。 (2) C 语言的函数调用可以嵌套,即在调用一个函数的过程中,可以再调用另一个函数。 2. 函数的递归调用 (1) 在调用一个函数的过程中,又出现直接或间接地调用该函数本身,称为函数的递 归调用。 (2) 递归的基本格式:以求年龄为例 int age( int n ) { int c; if(n==1) c=10; //如果没有这个条件语句,递归就没有终止点 else c=age(n-1)+2; return c; } 注意:递归就是递推+ 回归 ;因此,在写递归调用的结果时,一定注意要回归到函数 调用处执行,然后接着执行它的下一个语句。 基础训练(A) 一、选择题 1. 以下正确的描述是( )。 在 C 语言中 A) 函数的定义可以嵌套,但函数的调用不可以嵌套。 B) 函数的定义不可以嵌套,但函数的调用可以嵌套。 C) 函数的定义和函数的调用均不可以嵌套。 D) 函数的定义和函数的调用均可以嵌套。 2. 在C语言的函数调用过程中,如果函数 funA 调用了函数 funB,函数 funB 又调用了
第二部分¢语言程序设计同步训练 函数funA,则() A)称为函数的直接递归 B)称为函数的间接递归 C)称为函数的递归定义 D)C语言中不允许这样的递归形式 已知ntf(int)和intg(imt是函数f和g的原形。下列语句中,将函数f作为表达式 调用的有(),将函数f作为函数参数的有()。 A)f(3) B)p=f(3), C)g(f(3); D)f(g(3) 4.(多选)已知 int f(int)和intg(int)是函数f和g的原形。下列语句中,将函数f作为语 句调用的有( A)f(3) B)f(g(3) C)g(f(3); D)p=f(g(3)+1) 、填空题 1.按函数在程序中出现的位置来分,可以有三种函数调用方式: 和 2.如果一函数直接或间接地调用自身,这样的调用称为 3.函数的递归调用分为 两个阶 能力提高(B) 一、阅读程序,写出运行结果。 1.下面程序的运行结果是()。 int funcl (int x) int func2 (int x) main() int x=10 funcl(x) printf("gd\n", x)i funcl( int x) func2(x) printf("gd\n", x); func2(int x) printf("gd\n”,x) 2.下面程序的运行结果是( int sub (int n main() printf("gd\n", sub(i)) sub(int n) if(n==l)return 1
第二部分 C 语言程序设计同步训练 ·207· ·207· 函数 funA,则( )。 A) 称为函数的直接递归 B) 称为函数的间接递归 C) 称为函数的递归定义 D) C语言中不允许这样的递归形式 3. 已知 int f(int)和 int g(int)是函数 f 和 g 的原形。下列语句中,将函数 f 作为表达式 调用的有( ),将函数 f 作为函数参数的有( )。 A) f(3); B) p=f(3); C) g(f(3)); D) f(g(3)); 4. (多选)已知 int f(int)和 int g(int)是函数 f 和 g 的原形。下列语句中,将函数 f 作为语 句调用的有( )。 A) f(3); B) f(g(3)); C) g(f(3)); D) p=f(g(3)+1); 二、填空题 1. 按函数在程序中出现的位置来分,可以有三种函数调用方式: 、 和 。 2. 如果一函数直接或间接地调用自身,这样的调用称为 。 3. 函数的递归调用分为 和 两个阶段。 能力提高(B) 一、阅读程序,写出运行结果。 1. 下面程序的运行结果是( )。 int funcl (int x); int func2 (int x); main() { int x=10; func1(x); printf("%d\n",x); } func1( int x) { x=20; func2(x); printf("%d\n",x); } func2(int x) { x=30; printf("%d\n",x); } 2. 下面程序的运行结果是( )。 int sub (int n) main() {int i=5; printf("%d\n",sub(i)); } sub(int n) {int a; if(n==1)return 1;
C语言程序设计上机指导与同步训练 3.下面程序的功能是( ,运行结果是( Switch(g 0:r case 1: case2: return 1;1 return fib(g-1)+fib(g-2) printf("k=d\n”,k); 、程序填空 1.下面的函数是一个求阶乘的递归调用函数 facto int n) if(n==1) 2.用递归实现将输入小于32768的整数按逆序输出,如输入12345,则输出54321 in printf("Input n:"); scanf ("sd", &n) (n) rinf( printf("旨a",m10) 三、编程题 1.根据公式 ln≤0 f(b, n= b*f(b, n-1) n>0 设计函数 int f(int b,intn)
·208· C 语言程序设计上机指导与同步训练 ·208· a=n+sub(n-1); return(a); } 3. 下面程序的功能是( ),运行结果是( )。 long fib(int g) {switch(g) {case 0:return 0; case 1:case2:return 1;} return fib(g-1)+fib(g-2); } main() {long k; k=fib(7); printf("k=%d\n",k); } 二、程序填空 1. 下面的函数是一个求阶乘的递归调用函数。 facto ( int n) { if (n==1) ; else return ( ); } 2. 用递归实现将输入小于 32768 的整数按逆序输出,如输入 12345,则输出 54321。 int r(int m); main() { int n; printf("Input n:"); scanf("%d",&n); r(n); printf("\n"); } r ( int m) { printf ("%d",m%10); m= ; if (m>0) r(m); } 三、编程题 1. 根据公式 1 n≤0 b*f(b,n-1) n>0 设计函数 int f(int b,int n);。 f(b,n)=