2011年计算机二级考试C语言十套上机题汇总 联系客服

发布时间 : 星期二 文章2011年计算机二级考试C语言十套上机题汇总更新完毕开始阅读4e20a327482fb4daa58d4b7b

int i, n=0; int g, s;

for(i=0;i5) 【2】; } return【3】; }

main() {int xx[N]; int yy[N]; int

num=0,n=0,i=0; printf(\number :\\n\ do { scanf(\num]); }

while(xx[num++]!=0);

n=fun(xx,yy,num); printf(\ for(i=0;i

}答案及评析:【1】xx[i] 【2】

bb[n++]=xx[i] 【3】n 【解析】填空1:将一个整数对10取余,则得到这个整数的个位数,将一个整数除以10再对10取余,则得到这个整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存于变量g中。填空2:当整数的个位与十位的数字之和大于5时,则将这个整数存于数组bb中,同时, q--; 变量n记录了满足条件 } 的无符号整数的个数。 p[0]=min; 填空3:题目要求满足}

条件的无符号整数的main()

个数由fun函数返回,{ char str[80]; 所以函数返回n。 printf(\2. 改错题

string: \ 下列给定程序中,函数 gets(str);

fun()的功能是:在字符 printf(\串str中找出ASCⅡ码original string: \ 值最小的字符,将其放 puts(str); 在第一个位置上,并将 fun(str);

该字符前的原字符向 printf(\后顺序移动。例如,调after moving: \ 用fun()函数之前给字 puts(str); 符串输入fagAgBDh, printf(\调用后字符串中的内}

容为AfaggBDh。

答案及评析:(1)错误:请改正程序中的错误,void fun(char p)正确:使它能得到正确结果。 void fun(char *p)(2)注意:不要改动main错误:p=q+i;正确:函数,不得增行或删q=p+i;

行,也不得更改程序的【解析】错误:由于本结构。

题中函数的功能是对试题程序:

字符串进行处理,而不#include 是对单个字符进行处/*******************理,因此,函数的参数***found***********应为字符串指针。 ************/ 错误2:使指针q指向

ASCII码最小的字符 void fun(char p) 本题解答需要3个步{

骤:

char min, *q; (1)找到字符串中 int i=0; ASCII码值最小的字 min=p[i];

符,并保存。

while (p[i]!=0) (2)将该字符复制, {

并将该字符前面的字 if (min>p[i]) 符串顺次后移。

{

(3)将ASCII码值最/*******************小的字符赋给字符串***found***********的第1个字符。找到************/ ASCII码值最小的字 p=q+i; 符可以通过定义一个 min=p[i]; 字符min,该字符初始 } 时等于字符串的第1个 i++; 字符,若字符串的下一 } 个字符小于min,则将 while(q>p)

下一个字符赋给min, {*q=*(q-1); 如此循环到字符尾,即第 9 页 共 13 页

可得到ASCII码值最小的字符,同时令指针q指向最小字符。之后对最小字符前面的子串顺次后移,可采用while语句实现。 此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。 3. 编程题

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最低分,由函数值返回。 注意:部分源程序给出如下。

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

#include #include #define N 8

struct slist { double s;

struct slist *next; };

typedef struct slist STREC;

double fun(STREC *h) { }

STREC * creat (double *s) {

STREC *h,*p,*q; int i=0;

h=p=(STREC*)malloc(sizeof(STREC)); p->s=0;

while(i

/*产生8个节点的链表,各分数存入链表中*/ {q=(STREC*) malloc(sizeof(STREC)); p->s=s[i]; i++; p->next=q; p=q; } p->next=NULL; return h; /*返回链表的首地址*/ } outlist(STREC *h) { STREC *p; p=h; printf(\ do {printf(\\ /*输出各分数*/ while(p!=NULL); printf(\} main() { double s[N]={56,89,76,95,91,68,75,85}, min; STREC *h; h=creat(s); outlist(h); min=fun(h); printf(\\} 答案及评析: double fun(STREC *h) { double min=h->s; while(h!=NULL) /*通过循环找到最低分数*/ {if(min>h->s) min=h->s; h=h->next; } return min; }【解析】在本题中,hscanf(\

为一个指向结构体的 printf(\指针变量,若要引用它 printf(\所指向的结构体中的The result 某一成员时,要用指向*******\\n\运算符\。由于是链

表,所以要使h逐一往printf(\后移动,使用的是num)); h=h->next。 } 模拟试题(八)

1.填空题 答案及评析:【1】请补充函数fun(),该函n/100 【2】″数的功能是判断一个yes!″ 【3】″no!″ 数的个位数字和百位【解析】填空1:由程数字之和是否等于其序可以知道,变量g保十位上的数字,是则返存了整数的个位数,变回“yes!”,否则返回量s保存了整数的十位“no!”。 数,所以变量b应该保注意:部分源程序给出存整数的百位数。将整如下。 数除以100再对10取请勿改动主函数main余,则得到这个整数的和其他函数中的任何百位数。填空2:当个内容,仅在函数fun()位数字和百位数字之的横线上填入所编写和等于十位数字时,则的若干表达式或语句。 返回″yes!″。填空3:试题程序: 当个位数字和百位数#include 字之和不等于十位数#include 字时,则返回″no!″。 char *fun(int n) 2. 改错题

{ 下列给定的程序中,函 int g,s,b; 数fun()的功能是:用选 g=n; 择法对数组中的n个元 s=n/10; 素按从大到小的顺序 b=【1】; 进行排序。

请改正程序中的错误, b=n/100; 使它能得到正确结果。 if((g+b)==s) 注意:不要改动main return【2】; 函数,不得增行或删 行,也不得更改程序的 else 结构。

return【3】; 试题程序:

} #include main() #define N 20

{ void fun(int a[],int n) int num=0; {

clrscr(); int i,j,t,p;

/*******************printf(\***found***********data *******\\n\************/ 第 10 页 共 13 页

for(j=0;j

for(i=j;ia[p]) p=i; t=a[p]; a[p]=a[j];

/**********************found***********************/

a[p]=t; } }

main() { int

a[N]={11,32,-5,2,14},i,m=5;

printf(\排序前的数据:\

for(i=0;i

printf(\ fun(a,m);

printf(\排序后的顺序:\ for(i=0;i

printf(\}

答案及评析:(1)错误:for(j=0;j

【解析】错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。 错误2:将两数进行交换的常用语句,借助第三个变量。 3. 编程题

下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数

fun(),函数的功能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a 数组中的值为

a=0 1 2 7 9 1 11 21 5 5 2 21 6 11 1 9 7 9 10 2 5 4 1 4 1

则返回主程序后s的值应为310。

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

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

#include #include #include #define N 5 int fun (int w[][N]) { }

main() {int

a[N][N]={0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1}; int i, j; int s; clrscr();

printf(\array*****\\n \ for (i=0; i

printf(\ }

s=fun(a);

printf(\RESULT*****\\n \ printf(\的若干表达式或语句。 is : %d\\n \试题程序: } #include 答案及评析: #include int fun (int w[][N]) #define LEN 80 { main() int i,j,k=0; { int s=0; char for(i=0;i

return s; for(i=0;i

第 11 页 共 13 页

2. 改错题

下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include #include void fun(char *s) {int i,j;

for(i=0,j=0; s[i]!= '\\0'; i++)

/**********************found***********************/ if((s[i]>= 'A'&&s[i]<= 'Z')&&(s[i]>= 'a'&&s[i]<= 'z')) s[j++]=s[i]; /**********************found***********************/ s[j]= \}

main() {

char item[80]; clrscr();

printf(\string: \ gets(item);

printf(\

string is:\\%s\\n\ fun(item);

printf(\string of changing is :\\%s\\n\}

答案及评析:(1)错误:if((s[i]>= 'A'&&s[i]<= 'Z')&&(s[i]>= 'a'&&s[i]<= 'z'))

正确:if((s[i]>= 'A'&&s[i]<= 'Z')||(s[i]>=

'a'&&s[i]<= 'z'))(2)错误:s[j]= \正确:s[j]='\\0';

【解析】错误1:字母包括小写字母和大写字母,这里是\或\的关系,所以用\运算符。 错误2:字符串的结束标志符为字符,而不是字符串。 3. 编程题

下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:使数组右上半三角元素中的值全部置成0。例如a数组中的值为 a=4 5 6 1 7 9 3 2 6,

则返回主程序后a数组中的值应为 0 0 0 1 0 0 3 2 0

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

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

#include #include #include #define N 5

int fun (int a[][N]) { }

main() {

int a[N][N],i,j; clrscr(); printf(\如,当str1=“cdefghij”,array*****\\n\

则str2=“cegi”。 for(i=0;i

矩阵*/ 请勿改动主函数main

和其他函数中的任何{ for(j=0;j

的横线上填入所编写{a[i][j]=rand(); 的若干表达式或语句。

试题程序:

printf(\#include }

#include printf(\#define LEN 80 } main() fun(a);

{ printf(\ char

RESULT\\n\

str1[LEN],str2[LEN]; for(i=0;i

*p1=str1,*p2=str2; { for(j=0;j

clrscr(); printf(\ printf(\ printf(\string:\\n\ } scanf(【1】); }

答案及评析:

“%s”,strl1 int fun (int a[][N]) printf(\{

origial string***\\n\ int i,j;

while(*(p1+j)) for(i=0;i

} 【解析】本题旨在考查 for(i=0;i

}

请补充main函数,该答案及评析:

函数的功能是:从键盘【1】″%s″,str1输入一个字符串并保 【2】%c 【3】存在字符str1中,把字str2

符串str1中下标为偶【解析】填空1:本题数的字符保存在字符考查对标准输入函数串str2中并输出。例scanf()的调用格式,当第 12 页 共 13 页

输入字符串时,格式控制字符串为″%s″,题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。填空2:本题考查对标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为″%c″。填空3:题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以printf()函数的输出表列是str2 2. 改错题

在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中,函数fun()的功能是计算数组元素中值为负数的平均值(不包括0)。 例如:数组中元素的值依次为43,-47,-21,53,-8,12,0,则程序的运行结果为-25.333333。

请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

#include #include double fun(int x[ ]) {

double sum=0.0; int c=0, i=0;

/**********************found***********************/

while(x[i]==0) {

if(x[i]<0) { sum=sum+x[i]; c++; } i++; }

/**********************found***********************/ sum=sum\\c; return sum; }

main()

{int x[1000]; int i=0; clrscr();

printf(\some data(end with 0) :\ do

{ scanf(\ }while(x[i++]!=0);

printf(\}

答案及评析:(1)错误:while(x[i]==0)正确:while(x[i]!=0)(2)错误:sum=sum\\c;正确:sum=sum/c;

【解析】错误1:此处考查的是对循环条件的理解,当被判断的数组元素为0时,说明这是数组的最后一个元素,此时要跳出循环。 错误2:C语言中的除法运算符是\,而不是\\\。 3. 编程题

请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数: 234 345 753 134 436 458 100 321 135 760 则输出结果为6,100。 注意:部分源程序给出如下。

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

#include #include int fun(int *s,int t,int *k) { }

main() { int

a[10]={234,345,753,134,436,458,100,321,135,760},k; clrscr();

fun(a, 10, &k);

printf(\%d\\n \k, a[k]); }

答案及评析:

int fun(int *s,int t,int *k) { int i;

*k=0; /*k所指的数是数组的下标值*/

for(i=0;is[i]) *k=i; /*找到数组的最小元素,把该元素的下标赋给k所指的数*/

return s[*k]; /*返回数组的最小元素*/}

【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值,即*k=0。

第 13 页 共 13 页