二级C语言机试-142

上传人:re****.1 文档编号:511528534 上传时间:2023-01-26 格式:DOC 页数:3 大小:33KB
返回 下载 相关 举报
二级C语言机试-142_第1页
第1页 / 共3页
二级C语言机试-142_第2页
第2页 / 共3页
二级C语言机试-142_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《二级C语言机试-142》由会员分享,可在线阅读,更多相关《二级C语言机试-142(3页珍藏版)》请在金锄头文库上搜索。

1、二级C语言机试-142(总分:100.00,做题时间:90分钟)一、填空题(总题数:1,分数:30.00)1. 请补充main函数,该函数的功能是:输入两个正整数m和n,求这两个数的最大公约和最小公倍数。注意:部分源程序给岀如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句 试题程序:#include main ()int a, b, n, m, t;clrscr ();printf (/nlnput two numbers: /n);scanf (%d, %d, &n, & m);if (n m) a=m; b=n;else a=n;b=

2、m;while( 【1】)t=【2】a=b;b=t;printf (greatest con. non divisor:%d/n, a);printf (least common multiple:%d/n,【3】);(分数:30.00 )填空项 1: (正确答案:1b!=0 2a%b ; (3)n*m/a )解析:解析填空1:本题考查求最大公约数和最小公倍数的方法。变量a保存两数中较大着,变量b保存较小者,采用循环的方法求解最大公约数,循环结束条件是b等于0。填空2:求解最大公约数的思路是,将a对b求余,如果余数为0,则b即为两数的最大公约数,如果余数不为0,则将b赋给a,余数赋给b, 继续

3、将a对b求余,如此循环,直到余数为0。填空3:最小公倍数等于两数的乘积除以最大公倍数。二、改错题(总题数:1,分数:30.00)2. 下列给定程序中函数fun()的功能是:计算n!。例如,给n输入5,则输出120.000000。 请改正程序中的错误,使它能得岀正确的结果。注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include#includedouble fun (int n)double result=l.0;*found*if n=0 return 1.0;while (n l&n 170) result *=n- return result;*f

4、ound*main ( )int n;printf (Input N: );scanf ( %d &n);printf (/n/n%d!=%lf/n/n,n, fun(n);(分数: 30.00 )填空项 1: (正确答案:错误: if n=0 正确: if(n=0)(2) 错误: result*=n-正确: result*=n- ;)解析: 解析 在做这道题之前,我们首先应该明白一个数学上的概念,一般判卷人员先要执行程序,如果结果正确,得满分,否则错一个扣分,再错再扣,本题考查5!即5!=5 X4X3X2X1=120, 要求输出double 型结果。三、编程题 (总题数: 1,分数: 40.

5、00)3. 请编写函数 fun() ,该函数的功能是:统计各年龄段的人数。 N 个年龄通过调用随机函数获得,并放在主 函数的 age 数组中。要求函数把 0 至 9 岁年龄段的人数在 d0 中,把 10 至 1 9岁年龄段的人数放在 d1 中,把 20 至 29岁年龄段的人数放在 d2 中,依次类推,把 100岁( 含 1 00)以上年龄的人数都放在 d10 中。结果在主函数中输出。注意:部分源程序给出如下。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序:#include # define N 50# define M 11voi

6、d fun(int *a, int *b) double rnd()static t=29, c=217,m=1024, r=0;r= (r*t+c)%m;return (double) r/m);main ( ) int ageN, i,dM;for(i=0; i v N; i+)age i= (int) (i15*rnd ();/* 产生一个随机的年龄数组 */ printf (The original data : /n);for(i=0; i v N; i+) printf(i+l)%10= =07 %4d/n:%4d, agei); /* 每行输出 10 个数* / printf (

7、/n/n);fun (age, d);for(i=0; i v l0; i+)printf(%4d-%4d :%4d/n, i*l0, i*10+9, di );printf(Over 100 : %4dkn,d10).;分数: 40.00 ) 正确答案: (void fun(int *a, int *b)int i,j;for (j=0; j v M; j+)b j=0; /* 数组 b 初始化为 0*/for (i=0; i v N; i+)if (a i=100)b10+; /* 如果年龄大于等于 100,b10 自增 1*/elsebai/10+; /* 如果年龄小于 100,则将其分

8、别统计到 bai/10中*/)解析:解析本题又是一个分段函数的问题,还是用两个循环来完成。第1个循环的作用是使b的所有元素值都为 0。这个循环不能省略,因为若未对 b 元素赋初值,则它们的值是不可预测的。第 2 个循环的作 用是分别统计a中各年龄段的人数。当ai大于等于100时,按题意要将其统计到b10中,else的作用是如果年龄小于 100,则将其分别统计到 bai/10 中。由运算优先级可知先进行 ai/10的运算 ?所得结果作为b的下标。若ai为0至9时,ai/10 的值为0,且0至9岁的人数正好要存入b0中。若ai为10至 19岁时 ai/10 的值为 1,且 10至 19岁的人数正好要存入 b1 中,依次类推。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号