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

{ k=0;

**********************************

*p=toupper ( * (p-1)); } }

else k=l; } main()

{ char chrstr[64]; int d;

printf(\:\ gets(chrstr); d=strlen(chrstr); chrstr[d]=' '; chrstr[d+l]=0;

printf (\:\\n %s\ fun (chrstr);

printf (\:\\n %s\}

编程题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把分数最高的学生数据放在h所指的数组中。注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。 注意:部分源程序给出如下。

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

试题程序:

#include #define N 16 typedef struct { char num[10]; int s ; }STREC;

int fun (STREC *a, STREC *b) { } main ( )

{ STREC s[N]={{\{\{\

{\85}, {\91}, {\{\{ \STREC h[N]; int i, n; FILE *out; n=fun (s,h);

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

printf(\输出最高分学生的学号和成绩* /

printf (\

out=fopen(\fprintf (out, \for(i=0; i

fprintf(out, \

fclose (out); }

第15套

填空题:请补充函数fun(),该函数的功能是:求100(不包括100)以内能被2或5整除,但不能同时被2和5整除的自然数。结果保存在数组bb中,函数fun()返回数组bb元素的个数。

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

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

试题程序:

#include #define N 100 int fun(int bb[]) { int i, j;

for(【1】; i<100; i++)

if((i%2!=0&&i%5==0) || (i%2==0&&i%5!=0) ) 【2】; 【3】; }

main ( )

{ int i, n; int bb [N]; n=fun (bb);

for(i=0; i

printf {\

printf (\ } }

改错题:下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

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

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

试题程序:

#include #include #include #include #define N 10 typedef struct ss { char num[10]; int s; } STU;

STU *fun(STU a[], int m) { STU b[N],*t; int i, j, k;

********************************** *t=calloc (m, sizeof (STU)); for(i=0;i

if(b[i] .s>b[j] .s) j=i; ********************************** t [k] . num=b [j ].num; t[k].s=b[j] .s; b[j] .s=0; }

return t; }

outresult (STU a [ ], FILE *pf) { int i;

for (i=0; i

fprintf(pf, \ fprintf(pf, \}

main ( )

{ STU a[N]={{\

\

STU *porder; int i, m;

printf (\ outresult (a, stdout);

printf (\:\ scanf (\ while (m>10)

{ printf(\:\

scanf (\

}

porder=fun (a, m);

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

printf(\ free (porder); }

编程题:编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

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

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

试题程序:

#include #include #include

fun(char (*a) [81], int num, char *max) { }

main ( )

{ char ss[10] [81] ,*ps; int n, i=0;

printf (\输入若干个字符串:\ gets (ss [i] ); puts (ss [i] );

while ( ! strcmp (ss [i], \用****作结束输入的标记*/ { i++;

gets (ss [i] ); puts (ss [i] ); } n=i;

ps=fun(ss,n, &ps);

printf (\}

第16套

填空题:请补充main函数,该函数的功能是:打印出满足个位的数字、十位上的数字和百位上的数字都相等的所有三位数。

本题的结果为:111 222 333 444 555 666 777 888 999。 注意:部分源程序给出如下。

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

#include

main()

{ int g, s, b;

for(g=l; g<10; g++)

for (s=l; s<10; s++) for(b=l; b<10; b++) { if(【1】 )

printf(\【2】 ); } }

改错题:

下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串abc,CD,EF串联起来,结果是abcCDEF。 请改正程序中的错误,使它能得出正确的结果。

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

#include #include #include

**********************************

int fun(char str[] [10],int m, char *pt) { int k,q,i,j=0;

for (k=0; k

for (i=0; i

********************************** pt[i]=str[k,i]; pt+=q; pt[0]=0; } pt- =j; }

main ( )

{ int m, h;

char s[10][10],p[120];

printf(\: \ scanf(\

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

gets (s [h] ) ;

fun (s,m,p);

printf(\:%s\\n \}

编程题:假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:只