国家二级C语言机试(操作题)模拟试卷408
程序填空题
1.给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 #include<string.h>
3 #define M 5
4 #define N 20
5 int fun(char(*ss)[N],int *n)
6 { int i,k=0,len=N;
7 /**********found**********/
8 for(i=0;i< __1__;i++)
9 {len=strlen(ss[i]);
10 if(i==0) *n=len;
11 /**********found**********/
12 if(len __2__ *n)
13 {* n=len;
14 k=i ;
15 }
16 }
17 /**********found**********/
18 return(__3__);
19 }
20 main()
21 { char ss[M][N]={’’shanghai’’,’’guangzhou’’,’’beijing’’,’’tianjing’’,’’chongqing’’};
22 int n,k,i;
23 printf(’’\nThe original strings are:\n’’);
24 for(i=0;i<M;i++)puts(ss[i]);
25 k=fun(ss,&n);
26 printf(’’\nThe length of shortest string is:%d\n’’,n);
27 printf(’’\nThe shortest string is:%s\n’’,ss[k]);
28 }
(1)M (2)< (3)k
解析:第一空:循环的目的是在M个字符串中寻找长度最短的字符串,因此循环变量i从0变化到“M-1”,故第一空处应为“M”。
第二空:“*n”记录最小字符串的长度,由审题分析可知,字符串ss[i]长度比min小,则交换最小长度值和下标位置,故第二空处应为“<”。
第三空:变量k记录了最小字符串的下标位置,函数的返回值是最短的字符串所在的行下标,故第三空处应为“k”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量S中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:642。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 /*********found*********/
3 void fun(long s,long t)
4 { long s1=10;
5 s/=10;
6 *t=s%10;
7 /*********found*********/
8 while(s<0)
9 { s=s/100;
10 *t=s%10 *s1+*t;
11 s1=s1 * 10;
12 }
13 }
14 main()
15 {long s,t;
16 printf(’’\nPlease enter s:’’); scanf(’’%1d’’,&s);
17 fun(s,&t);
18 printf(’’The result is:%1d\n’’,t);
19 }
(1)void fun(long s,long *t) (2)while(s>0)
解析:函数目的是取出长整型变量s中偶数位上的数。(1)第一个标识下的形参t被定义为一个long型变量,而对应的主函数中的实参却是一个地址值。因此,t在函数定义中应该被定义为一个指针变量,即“void fun(long s,long t)”改为“void fun(longs,long *t)”。(2)第二个标识下的while循环控制表达式“s<0”要求s小于0才进入循环。而s的值总是大于0,因此将“while(s<0)”改为“while(s>0)”。
程序设计题
3.请编写函数fun,它的功能是:求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 void fun(int *a,int *n)
3 {
5 }
6 main()
7 { int aa[1000],n,k;
8 void NONO();
9 fun(aa,&n);
10 for (k=0; k<n; k++)
11 if((k+1)%10==0)printf(’’\n’’);
12 else printf(’’%5d’’,aa[k]);
13 NONO();}
15 void NONO()
16 {/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
17 int aa[1000],n,k;
18 FILE *fp;
19 fp=fopen(’’out.dat’’,’’w’’);
20 fun(aa,&n);
21 for(k=0;k<n;k++)
22 if((k+1)%10==0)fprintf(fp,’’\n’’);
23 else fprintf(fp,’’%5d’’,aa[k]);
24 fclose(fp);}
1 int i;
2 *n=0 ;
3 for(i=7;i<1000; i++)
4 if(((i%7)==0 ‖ (i%11)==0)&&(i%77)!=0) a[(*n)++]=i;
解析:进入fun函数,判断是否被7整除→判断是否被11整除→并且不被77整除→按要求返回计算结果,首先,*n置0,设置为累计器,计算符合条件的数的个数。然后,通过循环,判断小于1000的每一个整数是否符合题
本文档预览:3600字符,共3768字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载