国家二级C语言机试(操作题)模拟试卷351
程序填空题
1.给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
例如,从主函数输入一个整数:27638496,函数返回值为:26846。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
unsigned long fun (unsigned long n)
{ unsigned long x=0,s,i; int t;
s=n;
1=____1____ ;
while ( ____2____ )
if (t%2==0) {
}
s=s/10;
}
return x;
}
main ()
{ unsigned long n=—1;
while (n>99999999 ||n<0)
{ printf(\\
(1)1
(2)s
(3)1*10
解析:函数fun的功能是将形参n中,各位上为偶数的数取出,组成新数。
第一空:由“ifft%2==0){x=x+t*i; i=____3____;}”可知,如果t是偶数,那么t添加到返回值里面,比如第一次得到t=2,那么x=0+2*1;下一次得到了t=4,那么此时x的值应该是2+2*10;再下一次得到t=2,那么x=22+2 *100,即x的值是在上一次值的基础上加上新得到的值乘以其权值,因此i是代表权值。第一空处是初始化i,第一次进入if语句时,x是个1位数,此时权值i应为1,故第一空处应为“1”,
第二空:第二空处是填循环的终止条件,在循环体内,s每次缩小10倍,在最后一次进入循环的时候,s是一个一位数,s/10之后s变成0,下次就不应该进入while循环,因此while循环的终止条件是s不为0,故第二空处为“s”或“s! =0”。
第三空:由第一空的分析可知权值i是在上一次的基础上增加10倍,故第三空处应为“i*10”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动mam函数,不得增行或删行,也不得更改程序的结构!
#include
#define M 5
int fun(int nr int xx[] [])
{ int i,j,sum=0;
printf(\\
(1) int fun (int n,int xx[] [M])
(2) printf(\\
解析:函数的功能是求两条对角线上各元素之和。
(1)第一个标识下fun函数的定义中对于二维数组的定义在原题中并没有给出空间,所以将“int fun(int n,int xx[][])”改为“int fun(int n,int xx[][M])”。
(2) fun函数中n是mt型,C语言输出语句中整型应该是%d,所以第二个标识下“printf(\\
程序设计题
3.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。
合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。
例如,当a=45,b=12。
调用该函数后,c=4251。
注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数mam和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun (int a, int b, long *c)
{
}
void NONO ()
{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *rfr *wf ;
int i,a,b ; long C ;
rf= fopen (\\
*c= (a/10) *1000+ (b%10)* 100+ (a%10) *10+ (b/10);
解析:(1)分解两位数的正整数n的个位和十位数,可用n%10和n/10实现。
(2)设x0、x1、x2、x3为一位数,则x0、x1×10、x2×100、x3×1000,可以分别使x0、x1、x2、x3构成个、十、百,千带权数,而x0+x1×1 0+x2×100+x3×1000构成四位数。本题最多只考虑四位数。
本文档预览:3600字符,共2499字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载