1、习题九一、选择题 9-1语言程序由函数组成。它的 。A主函数必须在其它函数之前,函数内可以嵌套定义函数B主函数可以在其它函数之后,函数内不可以嵌套定义函数C主函数必须在其它函数之前,函数内不可以嵌套定义函数D主函数必须在其它函数之后,函数内可以嵌套定义函数9-2一个语言程序的基本组成单位是 。A主程序 B子程序 C函数 D过程9-3以下说法中正确的是 。AC 语言程序总是从第一个定义的函数开始执行B在 C 语言程序中,要调用的函数必须在 main( )函数中定义CC 语言程序总是从 main( )函数开始执行DC 语言程序中的 main( )函数必须放在程序的开始部分9-4已知函数 abc 的
2、定义为:void abc ( ). 则函数定义中 void 的含义是 。A执行函数 abc 后,函数没有返回值 B执行函数 abc 后,函数不再返回C执行函数 abc 后,可以返回任意类型 D以上三个答案全是错误的9-5在以下对语言的描述中,正确的是 。A在 C 语言中调用函数时,只能将实参的值传递给形参,形参的值不能传递给实参BC 语言函数既可以嵌套定义又可以递归调用 C函数必须有返回值,否则不能使用函数DC 语言程序中有调用关系的所有函数都必须放在同一源程序文件中9-6以下叙述中错误的是 。A在 C 语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值B在 C 语言中,在调用函数时,实
3、参和对应形参在类型上只需赋值兼容C在 C 语言中,外部变量的隐含类别是自动存储类别D在 C 语言中,函数形参的存储类型是自动(auto)类型的变量9-7说明语句“static int i=10;“中“i=10“ 的含义是 。A只说明了一个静态变量 B与“auto i=10;“在功能上等价C将变量 i 初始化为 10 D将变量 i 赋值为 109-8C 语言中的函数 。 A可以嵌套定义 B不可以嵌套调用 C可以嵌套调用,但不能递归调用 D嵌套调用和递归调用均可9-9C 语言中函数返回值的类型是由_决定的。 Areturn 语句中的表达式类型 B调用该函数的主调函数类型C调用函数临时 D定义函数时
4、所指定的函数类型 9-10C 语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是 。A地址传递 B值传递 C由实参传给形参,并由形参传回来给实参 D由用户指定传递方式 9-11下列的结论中只有_是正确的。A所有的递归程序均可以采用非递归算法实现B只有部分递归程序可以用非递归算法实现C所有的递归程序均不可以采用非递归算法实现D以上三种说法都不对9-12在下列结论中,只有一个是错误的,它是 。A语言允许函数的递归调用B语言中的 continue 语句,可以通过改变程序的结构而省略C有些递归程序是不能用非递归算法实现的DC 语言中不允许在函数中再定义函数9-13在下列结论中,只有一个是
5、正确的,它是 。A递归函数中的形式参数是自动变量B递归函数中的形式参数是外部变量C递归函数中的形式参数是静态变量D递归函数中的形式参数可以根据需要自己定义存储类型9-14下列结论中,只有一个是正确的,它是 。A在递归函数中使用自动变量要十分小心,因为在递归过程中,不同层次的同名变量在赋值的时候一定会产生相互影响B在递归函数中使用自动变量要十分小心,因为在递归过程中,不同层次的同名变量在赋值的时候可能会产生相互影响C在递归函数中使用自动变量不必担心,因为在递归过程中,不同层次的同名变量在赋值的时候肯定不会产生相互影响D在 C 语言中无法得出上述三个结论之一9-15在 C 语言的函数调用过程中,如
6、果函数 funA 调用了函数 funB,函数 funB 又调用了函数 funA,则 。A称为函数的直接递归 B称为函数的间接递归C称为函数的递归定义 DC 语言中不允许这样的递归形式二、填空题9-16变量的存储类型有_种,它们是 _。9-17下面的函数 sum (int n)完成计算 1n 的累加和。_ sum (int n) int i;long s=0L;if (nm) 。9-25已知 ackermann 函数,对于 m=0 和 n=0 有如下定义:ack(0,n)=n+1ack(m,0)=ack(m-1,1)ack(m,n)=ack(m-1,ack(m,n-1)请编程输入 m 和 n,求
7、出 ack(m,n)之值。9-26用递归的方法打印杨辉三角形。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 9-27编写一递归程序实现任意正整数向八进制数的转换。9-28请编写一个模拟轮盘赌的程序(a roulette program)。该轮盘赌机器随机的在 0 到 35 之间选择一个数字,游戏者可以打奇偶赌或打具体数的赌。赢得奇偶数赌时游戏者以 2比 1 获奖,但如果轮盘赌机器选中 0 则所有奇偶赌都输掉。如果游戏者打一个具体数的赌,而轮盘赌机器正好选中此数,则他以 35 比 1 获奖。9-29验证卡布列克运算。任意一个四位数,只要它们各个位上的数字是不全相同
8、的,就有这样的规律: 将组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数; 将组成这个四位数的 4 个数字由小到大排列,形成由这 4 个数字构成的最小的四位数(如果四个数字中含有 0,则得到的数不足四位) ; 求两个数的差,得到一个新的四位数。重复以上过程,最后得到的结果总是 6174。(鉴于本题有一点难度,给出示例程序)/* 验证卡布列克运算 */#include #include /* 接收 4 位有效数字 */void InputData(char x)int i=0,j=0,k=1;printf(“Input your data and then return.n“);doxi=getchar();k=1;if(xi9) k=0;for(j=0;ji;j-)if(flag=1) if(xjxj-1) t=xj,xj=xj-1,xj-1=t;else;elseif(xj=0;i-) ai=48+b%10;b=b/10;k+;/* 输出重复次数 */printf(“times=%dn“,k);