全国计算机等级考试二级C语言上机考试试题详解 下载本文

删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include #include

void fun (char *a, int n ,int h ,int e) { }

main ( )

{ char s[81],*t,*f; int m=0,tn=0, fn=0;

printf(\:\\n\ t=f=s; while (*t)

{t++;m++; } /*m为字符串的长度* /

t--; /*指针t指向字符串尾部*/ while (*t==' * ' )

{t--; tn++; } /*指针t指向最后一个字母,tn统计尾部'*'的个数*/ while (*f==' * ' ) { f++; fn++; } fun( s, m, fn, tn);

printf (\: \\n\ puts (s); }

第17套

填空题:请补充main函数,该函数的功能是:从键盘输入一个字符串及一个指定字符,然后把这个字符及其后面的所有字符全部删除。结果仍然保存在原串中。 例如,输入“abcdef'’,指定字符为‘e’,则输出“abcd”。 注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。

试题程序:

#include #define N 80 main ( )

{ int i=0;

char str [N], ch;

printf (\:In\

printf (\ scanf (\ while (str [i] !='\\0') { if (str [i]==ch) 【1】 【2】; }

str[i]= 【3】;

printf(\ puts (str); }

改错题:下列给定程序中,函数fun()的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为abcdefg,b所指字符串中的内容为1234时,c所指数组中的内容应该为a4b3c2d1efg;而当a所指字符串中的内容为1234,b所指字符串中的内容为ab0defs时,c所指数组中的内容应该为1g2f3e4dcba。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include #include #include

void fun(char *a, char *b, char *c) { int i, j; char ch; i=0; j=strlen (b) -1;

********************************** while (i>j)

{ ch=b[i]; b[i]=b[j]; b[j]=ch; i++; j--; }

while (*a||*b)

{ if (*a) {*c=*a; c++; a++;} if(*b) {*c=*b; c++; b++;} }

********************************** *c=0 ; }

main ( )

{ char s1[100],s2[100],t[200];

printf(\: \ printf(\: \ fun (s1, s2,t);

printf(\:%s\\n\

}

编程题:请编写函数fun(),其功能是:将所有大于1小于整数m的非素数存入.xx所指数组中,非素数的个数通过k传回。

例如,输入17,则应输出4 6 8 9 10 12 14 15 16。 注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include #include

void fun(int m, int *k, int xx[]) { }

main ( )

{ int m, n, zz[100];

printf (\:\ scanf (\ fun (n, &m, zz);

printf(\:\ for (n=0; n

printf(\} 第18套

填空题:请补充main函数,该函数的功能是;输入两个正整数m和n,求这两个数的最大公约和最小公倍数。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。

试题程序:

#include main ( )

{ int a, b, n, m, t;

printf (\: \\n\ scanf (\ if (n

{ a=m; b=n; } else

{ a=n; b=m; } while(【1】)

{ t= 【2】 a=b; b=t; }

printf (\:%d\\n\ printf (\:%d\\n\【3】 ); }

改错题:下列给定程序中函数fun()的功能是:计算n!。例如,给n输入5,则输出

120.000000。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序:

#include #include double fun (int n) { double result=1.0;

********************************** if n==0

return 1.0; while(n>l&&n<170)

********************************** result *=n-- return result; } main() { int n;

printf (\:\

scanf (\

printf (\}

编程题:请编写函数fun(),该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中。要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,依次类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。 注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include # define N 50 # define M 11

void fun(int *a, int *b) { }

double rnd()

{ static t=29, c=217,m=1024, r=0; r= (r*t+c) %m;

return ((double) r/m); }

main ( )

{ int age[N], i,d[M]; for(i=0; i

age[i]=(int) (115*rnd());/*产生一个随机的年龄数组*/ printf (\: \\n\ for(i=0; i

printf ((i+l) = =0 ?\每行输出10个数*/ printf (\ fun (age, d);

for(i=0; i<10; i++)

printf(\:M\\n\ printf(\:M\\n\}

第19套

填空题:请补充main函数,该函数的功能是:把1-100间的所有素数保存在数组aa中,然后输出这些素数并计算它们的和。 注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。

试题程序:

#include main ( )

{ int n, i, j, k, flag, sum; int aa[50]; sum=0; k=0;

for (i=2; i<100; i++) { 【1】;

for (j=2; j

{ sum+=i; 【3】; } }

printf(\ for (i=0; i

{ if (i=0) printf (\ printf ( \ }

printf (\}

改错题:下列给定程序中,函数fun()的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。 请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序: