1、国家二级 C语言机试(操作题)模拟试卷 524及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:把形参 s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动 (注:字符串的长度大于等于 2)。例如,形参 s所指的字符串为: abcdefgh,执行结果为: ahcbedgf 请在程序韵下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行 或删行,也不得哽改程序的结构 ! #include void fun(char *s) int i,
2、n, k; char c; n=0; for(i=0; si!=0;i+) n+; /* found*/ if(n%2=0) k=n-【 1】 ; else k=n-2; /* found*/ c=【 2】 ; for(i=k-2;i=l;i=i-2) si+2=si; /*found*/ sl=【 3】 ; main() char s80=“abcdefgh“; printf(“nThe original string is : %sn“,s); fun(s); printf(“nThe result is : %sn“,s); 二、程序修改题 2 给定程序 MODI1 C中 fun函数的功
3、能是:求 s=aaaa - -aaa-aa-a (此处 aaaa 表示 n个 a, a和 n的值在 1至 9之间 ) 例如 a=3, n=6,则以上表达式为: s=333333-33333-3333-333-33-3 其值是: 296298 a和 n是 fun函数的形参,表达式的值作为函数值传回 main函数。 请改正程序中的错误,使它能计算出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include long fun (int a, int n) int j ; /* found*/ long s = 0, t= 1 ; for (j = 0 ; j
4、 #include void fun(char *tt, int pp) main () char aa1000 ; int bb26 , k ; void NONO () ; printf (“nPlease enter a char string:“); scanf(“%s“, aa) ; fun(aa, bb); for (k = 0 ; k =a&*p=z) pp*p一 a+=1; p+; 【试题解析】 该程序功能是统计字符串中 26个字母各自出现的次数。解题思路,从已给部分源程序的 main主函数开始入手, 函数形参指针 tt接受主函数中字符数组 aa的起始地址,形参 pp接受主函数中的 bb数组的起始地址, bb数组的每一个元素都是计数器, bb0中统计字母 “a”的个数, bb1中统计字母 “b”的个数,依此类推, bb25中统计字母 “z”的个数。