




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
习题八习题八 一、一、单项单项选择题选择题 1、C 语言程序由函数组成。它的( ) 。 A)主函数必须在其它函数之前,函数内可以嵌套定义函数 B)B)主函数可以在其它函数之后,函数内不可以嵌套定义函数主函数可以在其它函数之后,函数内不可以嵌套定义函数 C)主函数必须在其它函数之前,函数内不可以嵌套定义函数 D)主函数必须在其它函数之后,函数内可以嵌套定义函数 2、一个 C 语言程序的基本组成单位是( ) 。 A)主程序 B)子程序 C)C)函数函数 D)过程 3、以下说法中正确的是( ) 。 A)C 语言程序总是从第一个定义的函数开始执行 B)在 C 语言程序中,要调用的函数必须在 main()函数中定义 C)CC)C 语言程序总是从语言程序总是从 mainmain()函数开始执行()函数开始执行 D)C 语言程序中的 main()函数必须放在程序的开始部分 4、已知函数 abc 的定义为: void abc() . . 则函数定义中 void 的含义是( )。 A)A)执行执行 abcabc 后,函数没有返回值后,函数没有返回值 B)执行函数 abc 后,函数不再返回 C)执行函数 abc 后,可以返回任意类型 D)以上三个答案全是错误的 5、在以下对 C 语言的描述中,正确的是( ) 。 A)A)在在 C C 语言中调用函数时,语言中调用函数时,只能将实参数的值传递给形参,形参的值不能传递给实参只能将实参数的值传递给形参,形参的值不能传递给实参 B)C 语言函数既可以嵌套定义又可以递归调用 C)函数必须由返回值,否则不能使用函数 D)C 语言程序中有定义关系的所有函数都必须放在同一源文件中 6、以下叙述中错误的是( ) 。 A)在 C 语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值 B)在 C 语言中,在定义函数时,实参和对应的形参在类型上只需赋值兼容 C)C)在在 C C 语言中,外部变量的隐含类别是自动存储类别语言中,外部变量的隐含类别是自动存储类别 D)在 C 语言中,函数形参的存储类型是自动(auto)类型的变量 7、说明语句“static int i=10;”中“i=10”的含义是( ) 。 A)只说明了一个静态变量 B)与“auto i=10;”在功能上等价 C)C)将变量将变量 i i 初始化为初始化为 1010 D)将变量 i 赋值为 10 8、C 语言中的函数( ) 。 A)可以嵌套定义 B)不可以嵌套调用 C)可以嵌套调用,但不能递归调用 D)D)嵌套调用和递归调用均可嵌套调用和递归调用均可 9、C 语言中函数返回值的类型是由( )决定的。 A)return 语句中的表达式类型 B)调用该函数的主调函数类型 C)调用函数时临时 D)D)定义函数时所指定的函数类型定义函数时所指定的函数类型 10、C 语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是( ) 。 A)地址传递 B)B)值传递值传递 C)由实参传给形参,并由形参传回给实参 D)由用户指定传递方式 11、下列的结论中只有( )是正确的。 A)A)所有的递归程序均可以采用非递归算法实现所有的递归程序均可以采用非递归算法实现 B)只有部分递归程序可以用非递归算法实现 C)所有的递归程序均不可以采用非递归算法实现 D)以上三种三种说法都不对 12、在以下结论中,只有一个是错误的,它是( ) 。 A)C 语言允许函数的递归调用 B)C 语言中的 continue 语句,可以通过改变程序的结果而省略 C)C)有些递归程序是不能用非递归算法实现的有些递归程序是不能用非递归算法实现的 D)C 语言中不允许在函数中再定义函数 13、在下列结论中,只有一个是正确的,它是( ) 。 A)A)递归函数中的形式参数是自动变量递归函数中的形式参数是自动变量 B)递归函数中的形式参数是外部变量 C)递归函数中的形式参数是静态变量 D)递归函数中的形式参数可以根据需要自己定义存储类别 14、下列结论中只有一个是正确的,它是( ) 。 A)在递归函数中使用自动变量要十分小心,因为在递归过程中,不同层次的同名变量在赋值的时候 一定会产生相互影响 B)在递归函数中使用自动变量要十分小心,因为在递归过程中,不同层次的同名变量在赋值的时候 可能会产生相互影响 C)C)在在递归函数中使用自动变量要十分小心,因为递归函数中使用自动变量要十分小心,因为在在递归过程中,不同层次的同名变量递归过程中,不同层次的同名变量在在赋值的时候赋值的时候 肯定不会产生相互影响肯定不会产生相互影响 D)在 C 语言中无法得出上述三个结论之一 15、在 C 语言的函数定义过程中,如果函数 finA 调用了函数 funB,函数 funB 又调用了函数 funA, 则( ) 。 A)称为函数的直接递归 B)B)称为函数的间接递归称为函数的间接递归 C)称为函数的递归定义 D)C 语言中不允许这样的递归形式 二、填空题 1、下面的函数 sum (int n)完成计算 1n 的累加和。 sum (int n) if (n main( ) int i, j; for ( i=6; i double v ( double r, double h ) return (3.1415926*r*r*h); main( ) double r1, r2, h, v(); /* r1:外圆半径 r2:内圆半径 h:圆筒的高 */ printf (“Enter r1 r2 h:“); scanf (“%lf%lf%lf“, printf (“v=%lfn“, v(r1,h)-v(r2,h) ); 3、 编写一个求水仙花数的函数, 求 100 到 999 之间的全部水仙花数。 所谓水仙花数是指一个三位数, 其各位数字立方的和等于该数。例如:153 就是一个水仙花数: 153 = 1*1*1 + 5*5*5 + 3*3*3 参考程序: main( ) int i=0,j,k,a,b,c,s; for (a=1; a0) k= z%10; sum += k*k*k; z /= 10; return ( m=sum ); 4、请编写一个函数,输出整数的全部素数因子。例如:120 时,因子为: 2,2,2,3,5 参考答案: main ( ) int m; printf (“nEnter m=“); scanf (“%d“, primedec (m); primedec(m) int m; int k=2; while (kMAXNUM ); printf (“nsum(%d)=“, n); sum(n, num); for ( i=0 ; i=10)xi+=m/10;xi=m%10; else xi=m; _ 6、求组合数。编程计算:)!(! ! ),( nmn m nmc 参考答案: double facton(int n) double s=1; for(;n0;n-) s=s*n; return s; main() int m,n; double c; scanf(“%d %d“, c=facton(m)/facton(n)/facton(m-n); printf(“c(%d,%d)=%lfn“,m,n,c); ? 7、已知 ackermann 函数,对于 m=0 和 n=0 有如下定义: ack(0,n)=n+1 ack(m,0)=ack(m-1,1) ack(m,n)=ack(m-1,ack(m,n-1) 请编程输入 m 和 n,求出 ack(m,n)之值。 参考程序: #include ackerman ( int m, int n ) if ( m=0 ) return (n+1); if ( n=0 ) return ( ackerman ( m-1, 1) ); else return ( ackerman ( m-1, ackerman(m, n-1) ) ); main( ) int m, n; printf (“Enter ackerman m n:“); scanf (“%d%d“, printf (“ackerman(%d,%d)=%dn“, m,n,ackerman(m,n) ); 8、用递归的方法打印杨辉三角形。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 参考答案: 杨辉三角形中的数,正是(x+y)的 N 次方幂展开式中各项的系数。本题作为程序设计中具有代表 性的题目,求解的方法很多(可以使用一维数组,也可以使用二维数组) ,这里仅给出一种使用递归 求解的方法。 从杨辉三角形的特点出发,可以总结出: 第 N 行有 N+1 个值(设起始行为第 0 行) ; 对于第 N 行的第 J 个值: (N=2) 当 J=1 或 J=N+1 时: 其值为 1 当 J!=1 且 J!=N+1 时: 其值为第 N-1 行的第 J-1 个值与第 N-1 行第 J 个值之和 将这些特点提炼成数学公式可表示为: c(x,y) = 1 x=1 或 x=N+1 c(x,y) = c(x-1,y-1) + c(x-1,y) 其它 下面程序就是根据以上递归的数学表达式编制的。 #include main( ) int i,j,n=13; printf(“N=“); while ( n12 ) scanf(“%d“, /* 最大输入值不能大于 12 */ for ( i=0; i main ( ) int m; printf (“nEnter m=“); scanf (“%d“, printhex (m); printhex ( int m ) if ( m=8 ) printhex (m/8); printf (“%d“, m%8); /*P245_9*/ 程序 2 int a8,i; main() int n; scanf(“%d“, ch10to8(n); while(i=0) printf(“%d“,ai-); printf(“n“); ch10to8(int m) /*八进制数的每一位存入数组中*/ if(m0) mi+=k%8;k=k/8; i-; for(;i=0;i-) n=n*10+mi; return n; ? 10、验证卡布列克运算。任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规 律: 将组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数; 将组成这个四位数的 4 个数字由小到大排列,形成由这 4 个数字构成的最小的四位数(如果 四个数字中含有 0,则得到的数不足四位) ; 求两个数的差,得到一个新的四位数。 重复以上过程,最后得到的结果总是 6174。 参考答案: 根据原题中描述的算法,可以将整个进行卡布列克运算的过程做成递归,这样原算法描述中的 “重复执行卡布列克运算”就可以变成了递归调用。可以很容易写出递归算法如下。 进行“卡布列克运算” 若 结果不是 6174 则 递归进行“卡布列克运算” 否则 结束整个程序 程序如下: #include int count=0; /* 计数器 */ main( ) int n; printf(“Enter a number:“); scanf(“%d“, /* 输入任意正整数 */ vr6174(n); /* 调用函数进行验证 */ vr6174 (num) int num; int each4,max,min; if ( num!=6174 /* 将整数分解,数字存入 each 数组中 */ max_min(each, /* 求数字组成的最大值和最小值 */ num=max-min; /* 求最大值和最小值的差 */ printf(“ %d: %d-%d=%dn“, +count, max, min, num); /* 输出该步计算过程 */ vr6174(num); /* 递归调用自身继续进行卡布列克运算 */ parse_sort(num, each) /* 函数将整数分解,数字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代县宣讲大赛活动方案
- 代理记账公司活动方案
- 以色列美食节活动方案
- 仰卧传球活动方案
- 体育教学周活动方案
- 企业vip活动方案
- 企业交流系列活动方案
- 企业军人活动方案
- 企业升旗活动方案
- 企业周末活动方案
- 中国移动劳动合同范本
- DL-T-5728-2016水电水利工程控制性灌浆施工规范
- DL5190.4-2019电力建设施工技术规范第4部分:热工仪表及控制装置
- GJB9001C-2017标准内部宣贯培训
- 2022-2023学年上海市闵行区八年级(下)期末数学试卷
- 专业市场物业多种经营管理规定
- 2023年7月浙江省高中学业水平考试生物试卷真题(含答案详解)
- 加油站廉洁培训课件
- 2024年江苏省无锡市辅仁中学八年级下册数学期末质量跟踪监视试题含解析
- 保安员礼貌礼仪培训
- KA-T 21-2024 模袋法尾矿堆坝技术规程
评论
0/150
提交评论