国家二级C语言机试(操作题)模拟试卷364
程序填空题
1.给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include
void fun (char *s)
{ int i,n. k; char c;
n=0;
for(i=0;s[i]!=’\\\\0’;i++)n++;
/*********found**********/
if(n%2==0) k=n— ____1____ ;
else k=n—2;
c= ____2____ ;
for (i=k—2; 1>=1; i=i—2) s [i+2] =
s[i];
/*********found**********/
s[1]=____3____;
}
main ()
{ char s[80]=\\
(1)1
(2)s[k]
(3)c
解析:函数fun的功能是移动下标为奇数位置的字符。
第一空:“for(i=0;s[i]!=’\\\\0’;i++)n++,”n记录了数组s的长度,“if(n%2=0)”如果长度n是偶数,那么最右边被移出的字符的下标是在n—1,如果n是奇数,那么最右边被移出的字符的下标是n—2,因此第一空处应为“1”。
第二空:题目要求最右边被移出字符串的字符绕回放到第一个奇数位置,因此最右边被移出的字符是s[k],在s[k]被替换之前必须先把s[k]保存在其他变量中,故第二空处应为“s[k]”,将s[k]保存在c中。
第三空:此处是把最右边被移出字符串的字符绕回放到第一个奇数位置,最右边被移出字符保存在c,第一奇数位置是s[1],故第三处应为“c”。
程序修改题
2.给定程序MODI1.C中fun函数的功能是:求
S=aa\\
(1) long s=0,t=0;
(2) t=t/10;
解析:函数的功能是求s=aa… aa—…—aaa — aa —a。
(1)当进入第一循环,“t=t*10+a,”语句,如果输入的a是3,并且利用题目中给出的初始化值1,计算得出t的值为13,而实际应该是3,由此可知t的初值设置不正确,不应该是1。所以将“long s=0,t=1;”改为“long s=0,t=0; ”。
(2)循环中通过语句“t=t%10; ”来获得每一项,每循环一次,t的值应缩小10倍,这里应该用除以10来实现,而不能用“%”求余数。所以将“t=t%10; ”改为“t=t/10; ”。
程序设计题
3.请编写一个函数void fun(char *tt,int pp[]),统计在tt所指字符串中“’a’\\
1 char *p=tt;
2 int i;
3 for(i=0; i<26; 1++) pp[i]=0;
4 while (*p){
5 if(* p>=’a’&&* p<=’z’) pp[*p—’a’]+=1;
6 p++;}
解析:该程序功能是统计字符串中26个字母各自出现的次数。解题思路,从已给部分源程序的ma主函数开始入手,函数形参指针tt接受主函数中字符数组aa的起始地址,形参pp接受主函数中的bb数组的起始地址,bb数组的每一个元素都是计数器,bb[0]中统计字母“a”的个数,bb[1]中统计字母\\
本文档预览:3600字符,共1996字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载