2011年全国计算机等级考试2级C语言机试题库

Python044

2011年全国计算机等级考试2级C语言机试题库,第1张

重要说明:本题库为从题中一题一题复制出来工作量大,而且有许多表达式无法在word中快速表示出来(这样会加大工作量)故而省略,或者表达错位,有的地方可能或者肯定会有错,我相信准备参加C语言二级考试的同学应当能够对照参考答案看出来,这是2011年最新版最完整考试题库,相信大家一定都能通过!

第一套

程序填空

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。如输入一个数:27638496,新的数为729

第一空:{ t=*n%10

第二空:if(t%2!=0)

第三空:*n=x

2.程序修改

给定程序modi1.c中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。

double fun(int n )

{ double result=1.0

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

if(n==0)

return 1.0

while(n>1&&n<170)

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

result*=n--

return result

}

程序设计

请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串"-1234",则函数把它转换为整数值-1234。

long fun(char *p)

{

int i,len,t

long x=0

len=strlen(p)

if(p[0]=='-')

{ t=-1len--p++}

else t=1

while(*p)

x=x*10-48+(*p++)

return x*t

}

第二套

1.给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

第1 处 FILE * fp

第2 处 while (!feof(fp)) {

第3 处 putchar(ch)ch = fgetc(fp) }

2.程序修改

给定程序MODI1.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。

void fun( char *s )

{ int i,j

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

if(s[i]>='0'&&s[i]<='9')

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

s[j++]=s[i]

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

s[j]='\0'

}

3.程序设计题

请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。

void fun(char s[][N],char *b)

{

int i,j,n=0

for(i=0i<Ni++)

/*请填写其相应语句完成其功能*/

{

for(j=0j<Mj++) {

b[n]=s[j][i]

n=i*M+j+1

}

}

b[n]='\0'

}

第三套

1. 程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun的功能是重写形参filename所指的文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学生的数据不变。

第1处:fp=fopen(filename,

"rb+")

第2处:fseek(fp,-1L*

sizeof(STU),SEEK_END)

第3处:fwrite(&n,

sizeof(STU),1,fp)

2. 程序修改

给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。

NODE *Creatlink(int n,int m)

{ NODE *h=NULL,*p,*s

int i

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

p=( NODE *) malloc(sizeof(NODE))

h=p;

p->next=null

for(i=1i<=ni++)

{s=( NODE *) malloc(sizeof(NODE))

s->data=rand()%m

s->next=p->next

p->next=s

p=p->next

}

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

return h

}

3. 程序设计

请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格格开,一行的开始没有空格。

int fun(char *s)

{

int k=1

while(*s)

{ if(*s=='')k++

s++ }

return k

}

第四套

1. 程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。

第1处fp = fopen(filename, "rb")

第2处if (s[i].sno >s[j].sno)

第3处 fwrite(s,sizeof(STU),N,fp)

2. 程序修改

给定程序MODI1.C中函数fun的功能是:在字符串的最前端加入n个*号,形成新串,差且覆盖原串。注意:字符串的长度最长允许为79.

void fun(char s[ ],int n)

{

char a[80],*p

int i

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

p=s

for(i=0i<ni++)

a[i]='*'

do

{a[i]=*p

i++

}

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

while(*p++)

a[i]=0

strcpy(s,a)

}

3. 程序设计

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

void fun(int *a, int *b)

{

int i,j

for(i=0i<Mi++)b[i]=0

for(i=0i<Ni++)

{ j=a[i]/10

if(j>10)b[M-1]++

else b[j]++

}

}

第五套

1. 程序填空

给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文件文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串换成相应的整数和浮点数,然后将其显示在屏幕上。

第1处: FILE *fp

第2处:fclose(fp)

第3处:fscanf(fp,"%s%s%s",str,str1,str2)

2.程序修改

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

STU *fun(STU a[ ],int m)

{ STU b[N],*t

int i,j,k

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

t=(STU *)calloc(sizeof(STU),m)

for(i=0i<Ni++)

b[i]=a[i]

for(k=0k<mk++)

{ for(i=j=0i<Ni++)

if(b[i].s>b[j].s)j=i

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

t[k]=b[j]

b[j].s=0

}

return t

}

3. 程序设计

请编写函数fun,函数的功能是,删去一维数组中所有相同的数,使之只剩一个。数组中的数已按从小到大的顺序排序,函数返回删除后数组中数据的个数。

int fun(int a[ ],int n)

{

int i,j=1,k=a[0]

for(i=1i<ni++)

if(k!=a[i]){

a[j++]=a[i]

k=a[i]}

a[j]=0

return j

}

第六套

1. 程序填空

给定程序中,函数fun的功能是根据形参i的值返回某个函数年值。当调用正确时,程序输出:x1=5.000000

x2=3.000000.

x1*x1+x1*x2=40.000000

第一处:double fun(int i,double x,double y)

第二处:return f1(x)

第三处:return f2(x,y)

2.程序修改

给定程序MODI1.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。

#include <stdio.h>

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

char *fun(char *s,char *t)

{

int sl=0,tl=0

char *ss,*tt

ss=stt=t

while(*ss)

{ sl++

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

ss++

}

while(*tt)

{ tl++

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

tt++

}

if(tl>sl) return t

else return s

}

3. 程序设计

请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平均移到字符串的最后,把第m+1个到最后的;字符移到字符串的前部。

void fun(char *w, int m )

{

int i

for(i=0i<mi++)

fun1(w)

}

第七套

1. 程序填空

程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息,函数fun的功能是输出这位学生的信息。

第1处 void show( STU tt)

第2处 printf("%5.1f",tt.score[i])

第2处 show(std)

2.程序修改

给定程序MODI1中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。

int fun(int *a,int n)

{ int i,m,t,k

for(i=0i<2i++){

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

m=i

for(k=i+1k<nk++)

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

if(a[k]>a[m])m=k

t=a[i]a[i]=a[m]a[m]=t

}

}

3.程序设计

请编写一个unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n>=2)位的整数,函数求出w的后n-1位的数作为函数值返回。

例如:w值为5923,则函数返回923;w值为923则函数返回23。

unsigned fun( unsigned w )

{

if(w>=10000) return w%10000

if(w>=1000) return w%1000

if(w>=100) return w%100

return w%10

}

第八套

1. 程序填空

给定程序通过定义并赋值的方式,利用结构体变量存储了一名学生学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系统a。

第1处 void modify(STU *ss,float a )

第2处 ss->score[i]*=a

第3处 modify(&std,a)

2.程序修改

给定程序MODI1.C中函数fun的功能是:求k!<13>,所求阶乘的值作为函数值返回。例如:若k=10,则应输出:3628800。

long fun(int k)

{

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

if(k>0)

return (k*fun(k-1))

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

else if(k==0)

return 1L

}

3.程序设计

程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[ ][N],int n),函数的功能是:使数组左下三角元素中的值乘以n。

int fun(int a[ ][N],int n)

{ int i,j

for(i=0i<Ni++)

for(j=0j<=ij++)

a[i][j]*=n

}

第九套

1.程序填空

给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头到尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为2、4、6、8、10。

第1处 q=p->next

第2处 while(q)

第3处 p=p->next

2.程序修改

给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换成a ),其它字符不变。

void fun(char *s)

{

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

while(*s)

{ if(*s>'A'&&*s<='Z'

||*s>='a'&&*s<='z')

{ if(*s=='Z')*s='A'

else if(*s=='z')*s='a'

else *s=*s+1}

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

s++

}

}

3.程序设计

void fun(int *w,int p, int n)

{

int i,j=0,b[N]

for(i=p+1i<ni++)b[j++]=w[i]

for(i=0i<=pi++)

b[j++]=w[i]

for(i=0i<ni++)

w[i]=b[i]

}

第十套

1程序填空

给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是"幻方",若是,函数返回值为1;不是,函数返回值为0。"幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。

第1处 row=colum=0

第2处 if((row!=colum)||(row!=m1))return 0

第3处 return 1

2程序修改

给定MODI1.Cfun函数的功能是:根据整型形参m,计算如下公式的值。t=1-1/2-1/3-......-1/m.

#include <sdio.h>

double fun( int m )

{

double t = 1.0

int i

for(i=2i<=mi++)

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

t=t-1.0/i

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

return t

}

是。

无纸化考试,确实是从题库里面随机抽题,但是,单选题一是题库不泄露,外面没人能弄到完整的题库,二是即便弄得到,庞大的题库也不是人能背的下来的。程序题倒是很容易弄到题库,反正翻来覆去就是那100套300道题。

准确来说,每个人的试题都是不一样的。上机之后,会从题库中随机抽取题目,题库里面大概有一百多套题。每一道题分为三道大题(不包括选择题),随机选到的这一套题就是你的考题。但是题库只有一份。

分笔试和上机考:

一、笔试:选择40题,前10题为公共基础知识

(1)填空15题,前5题为公共基础知识。

(2)只有C部分的前10题(即11~20)每题1分,其余填空选择都是2分,满分100分,时间90分钟。

二、上机:填空、改错和程序设计题

(1)填空题一般有2到3个空,需要删除对应的空后,在删除的位置填上正确的答案(30分)。

(2)改错题的错误在/********found******/下面,不要改动其它的地方(2~3个,30分)。

(3)然后就是程序设计题啦,40分,考试时间90分钟,上机考试每题完成后一定记得运行。