国家二级(C语言)机试模拟试卷862
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun( )的功能是将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和并作为函数值返回。
例如,形参s所指的字符串为abs5defl26jkm8,程序执行后的输出结果为22。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序在文件blank1.c中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
#include
int fun(char*s)
{ int sum=0;
while(*s){
/*********found*********/
if(isdigit(*s))
sum+=*s-【1】;
/*********found*********/
【2】;
}
/*********found*********/
return【3】;
}
main( )
{ char s[81];int n;
printf(\\
(1)48或’0’(2)s++(3)sum
解析:本题把字符串中的数字字符转换成对应的数值并进行累加。
填空1:’0’对应的ASCII值是48,因此数字字符转换成对应数值时只要减去48,即该数字字符对应的数值。故空1处应该填48或者’0’。填空2:判断完一个字符之后,将字符串指针移到下一个位置,故空2处应该填s++。填空3:函数fun( )返回累加和sum,故空3处应该填sum。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun( )的功能是计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件modi1.c中,不要改动main( )函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
#include
int fun(int k)
{int m=0,mc=0,j;
while((k>=2)&&(mc<10))
{
/*********found*********/
if((k%13=0))|(k%17=0))
(m=m+k;mC++;)
k–;
/*********found*********/
return m;
}
void main( )
{ system(\\
(1)if((k%13==0)||(k%17==0))(2)|return m;
解析:(1)C语言中,x能被y整除的表示方法是x%y==0,而不是题目中所表示的x%y=0。所以,if((k%13=0)||(k%17=0))应改为if((k%13==0)||(k%17==0))。(2)while循环缺少\\
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun( ),它的功能是求小于形参n且同时能被3与7整除的所有自然数之和的平方根,并将其作为函数值返回。
例如,若n为1000时,程序输出应为s=153.909064。
注意:部分源程序在文件prog1.c中。
请勿改动主函数main( )和其他函数中的任何内容,仅在函数fun( )的花括号中填入你编写的若干语句。
试题程序:
#include
#include
double fun(int n)
{
}
main( )/*主函数*/
{void NONO( );
printf {*s=%f\n\\
double fun(int n)
{
double sum=0.0;
int i;
for(i=21;i<n;i++)
if((i%3==0)&&(i%7==0))
sum+=i;
return sqrt(sum);
}
解析:本题考查算术运算的算法。首先利用一个for循环判断小于n且能同时被3和7整除的整数,并将满足条件的整数累加到sum。之后调用sqrt( )函数计算sum的平方根,并将其作为函数的返回值返回。
本文档预览:3600字符,共2699字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载