国家二级(C语言)机试模拟试卷888
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun( )的功能是将形参n所指变量中各位上为偶数的数去掉,剩余的数按原来从高位到低位的顺序组成一个新数,并通过形参指针n传回所指变量。
例如,若输入一个数27638496,则新数为739。
请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include
void fun(unsigned long *n)
{ unsigned long x=0,i; int t;
i=1;
while(*n)
/*********found*********/
{t=*n%【1】;
/*********found*********/
if(t%2!=【2】)
{ x=x+t*i;i=i*10;)
*n=*n/10;
}
/*********found*********/
*n=【3】;
}
main( )
{ unsigned long n=-1;
while(n>99999999|n<0)
{printf(\\
(1)10(2)0(3)x
解析:填空1:通过t对10求余,取出该数值的个位数。故空1处应该填10。填空2:通过if条件语句实现奇偶数的判定。如果条件表达式对2求余为0则为偶数,否则为奇数。故空2处应该填0。填空3:最后将新生成的数x赋给形参n指向的变量。故空3处应该填x。
程序修改题
2.使用VC H2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun( )的功能是计算n!。
例如,当n=5时,则输出120.000000。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main( )函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
double fun(int n)
{
double result=1.0;
/*********found*********/
if n==0
return 1.0;
while(n>1&&n<170)
/*********found*********/
result=n–;
return result;
}
main( )
{
int n;
printf(\\
(1)if(n==0)(2)result*=n–;或{result*=n;n–;}
解析:(1)这里是一个简单的格式错误,if条件判断语句应该以圆括号标识。(2)阶乘是指从1~n的连续自然数相乘的积。如5!-1×2×3×4×5。所以应修改为result*=n–;。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun( ),其功能是将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换成整数的函数)。例如,若输入字符串\\
long fun(char*p)
{
10ng n=0;
int flag=1;
if(*p==’-’)/*负数时置flag为-1*/
{p++;flag=-1;)
else if(*p==’+’)/*正数时置flag为1*/
p++;
while(*p!=’\0’)
{n=n*10+*p-’0’;/*将字符串转换成相应的整数*/
p++;
}
return n*flag;
}
解析:if语句的作用是判断该字符串为正数还是负数,while循环的作用是将字符串转换成相应的整数。注意:*p是一个字符(如’9’、’4’),并不是一个数,要将其转换成相应的数字需令其减去’0’。(而不是’\0’),即*p-’0’就得到*p这个字符的相应数字,如’0’-’0’=0、’8’-’0’=8等。
本文档预览:3600字符,共2504字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载