1、国家二级 C语言机试(操作题)模拟试卷 87及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:把形参 S所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动 (注:字符串的长度大于等于 2)。例如,形参 S所指的字符串为:abodefgh,执行结果为: ahcbedgf。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行 ,也不得更改程序的结构 ! #inciude void fun(char*s) int i, 19
2、, k; char c; n=0; for(2=0; si!=0; i+) n+; /*found*/ if(r1 2=0)k=n一 _1_ ; else k=n一 2; /*found*/ c= _2_; for(i=k一 2; i=1; i=i一 2)Si+2=si; /*found*/ s1= _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函数,不得增行或删行,也不得更改程序的结构 ! #clude long fun(int a, int n) int j ; /*found*/ long s=0, t=1; for(j=0; j #include voi
4、d fun(char*tt, int pp) main() char aa1 0 0 0; int bb26, k; void NONO(); print: f(“nPlease enter a charstring: “); 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”的个数。