1、国家二级(C 语言)机试-试卷 34 及答案解析(总分:12.00,做题时间:90 分钟)一、程序填空题(总题数:2,分数:4.00)1.程序填空题()(分数:2.00)_2.用筛选法可得到 2n(n10000)之间的所有素数,方法是:首先从素数 2 开始,将所有 2 的倍数的数从数表中删去(把数表中相应位置的值置成 0);接着从数表中找下一个非 0 数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于 n 为止。这样会得到一个序列:2,3,5,7,1l,13,17,19,23,函数 fun 用筛选法找出所有小于等于 n 的素数,并统计素数的个数作为函数值返回。 请在程序的下划线
2、处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKlC 中。 不得增行或删行,也不得更改程序的结构!(分数:2.00)_二、程序修改题(总题数:2,分数:4.00)3.程序修改题()(分数:2.00)_4.给定程序 MODllC 中函数 fun 的功能是:用下面的公式求 的近似值,直到最后一项的绝对值小于指定的数(参数 num)为止: 例如,程序运行后,输入 00001,则程序输出 31414。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 smain 函数,不得增行或删行,也不得更改程序的结构! (分数:2.00)_三、程序设计
3、题(总题数:2,分数:4.00)5.程序设计题()(分数:2.00)_6.函数 fun 的功能是:将 a、b 中的两个两位正整数合并形成一个新的整数放在 c 中。合并的方式是:将a 中的十位和个位数依次放在变量 c 的百位和个位上,b 中的十位和个位数依次放在变量 c 的千位和十位上。例如,当 a=45,b=12。调用该函数后,c=1425。注意:部分源程序存在文件 PROGlC 中。数据文件indat 中的数据不得修改。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 (分数:2.00)_国家二级(C 语言)机试-试卷 34 答案解析(总分
4、:12.00,做题时间:90 分钟)一、程序填空题(总题数:2,分数:4.00)1.程序填空题()(分数:2.00)_解析:2.用筛选法可得到 2n(n10000)之间的所有素数,方法是:首先从素数 2 开始,将所有 2 的倍数的数从数表中删去(把数表中相应位置的值置成 0);接着从数表中找下一个非 0 数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于 n 为止。这样会得到一个序列:2,3,5,7,1l,13,17,19,23,函数 fun 用筛选法找出所有小于等于 n 的素数,并统计素数的个数作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的
5、结果。 注意:源程序存放在考生文件夹下的 BLANKlC 中。 不得增行或删行,也不得更改程序的结构!(分数:2.00)_正确答案:(正确答案:(1)ai (2)ai (3)0)解析:解析:本题中 fun 函数的功能是用筛选法可得到 2n(n10000)之间的所有素数,和一般的直接判断一个数是否是素数不同,一般的判断数 n 是否是素数的方法是比较从 2 开始的所有小于 n 的 i,看ni 是否均不为 0。筛选法是首先从素数 2 开始,将所有 2 的倍数的数从数表中删去(把数表中相应位置的值置成 0);接着从数表中找下一个非 0 数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于
6、 n 为止,这样就可以将所有的非素数去除,剩下来的非 0 数就是素数。二、程序修改题(总题数:2,分数:4.00)3.程序修改题()(分数:2.00)_解析:4.给定程序 MODllC 中函数 fun 的功能是:用下面的公式求 的近似值,直到最后一项的绝对值小于指定的数(参数 num)为止: 例如,程序运行后,输入 00001,则程序输出 31414。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 smain 函数,不得增行或删行,也不得更改程序的结构! (分数:2.00)_正确答案:(正确答案:(1)while(fabs(t)=num) (2)t=sn;)解析:解析:本题中函数
7、的功能是利用公式计算 的近似值,直到最后一项的绝对值小于指定的数。本题解题过程参照一般公式题型的求解过程。三、程序设计题(总题数:2,分数:4.00)5.程序设计题()(分数:2.00)_解析:6.函数 fun 的功能是:将 a、b 中的两个两位正整数合并形成一个新的整数放在 c 中。合并的方式是:将a 中的十位和个位数依次放在变量 c 的百位和个位上,b 中的十位和个位数依次放在变量 c 的千位和十位上。例如,当 a=45,b=12。调用该函数后,c=1425。注意:部分源程序存在文件 PROGlC 中。数据文件indat 中的数据不得修改。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 (分数:2.00)_正确答案:(正确答案:*c=(b10)*1000(a10)*100(b10)*10+(a10);)解析:解析:该程序功能是将正整数 a、b 合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。