计算机2级c语言题_第1页
计算机2级c语言题_第2页
计算机2级c语言题_第3页
计算机2级c语言题_第4页
计算机2级c语言题_第5页
已阅读5页,还剩347页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

全国计算机二级C语言上机参考题库

第01套:

一、填空题:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均

以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用

新的学生数据覆盖该学生原来的数据,其它学生的数据不变。

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

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

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<stdio.h>

^defineN5

typedefstructstudent{

longsno;

charname[10];

floatscore[3];

}STU;

voidfun(char*filename,STUn)

{FILE*fp;

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

fp=fopen(1,〃rb+”);

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

fseekC2-(long)sizeof(STU),SEEKEND);

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

fwrite(&n,sizeof(STU),1,3);

fclose(fp);

}

mainO

{STUt[N]={{10001,"MaChao*,91,92,77),{10002,〃CaoKai〃,75,60,88),{10003,"LiSi",85,70,

78},{10004,“FangFang”,90,82,87},{10005,“ZhangSan”,95,80,88)1:

STUn={10006,z,ZhaoSi\55,70,68),ss[N];

inti,j;FILE*fp;

fp=fopen("student.dat〃,“wb〃);

fwrite(t,sizeof(STU),N,fp);

fclose(fp);

fp=fopen("student.dat〃,〃rb");

fread(ss,sizeof(STU),N,fp);

fclose(fp);

printf(^XnTheoriginaldata:\n\n〃);

for(j=0;j<N;j++)

(printf(z,\nNo:%ldName:%-8sScores:〃,ss[j].sno,ss[j].name);

for(i=0;i<3;i++)printf("%6.2f〃,ss[j].scoreti]);

printf(〃\n〃);

)

fun("student.dat〃,n);

printf(〃\nThedataaftermodifing:\n\n〃):

fp=fopen("student.dat〃,〃rb〃);

fread(ss,sizeof(STU),N,fp);

fclose(fp);

for(j=0;j<N;j++)

(printf(,z\nNo:%ldName:%-8sScores:,z,ss[j].sno,ss[j].name);

for(i=0;i<3;i++)printfC%6.2fss[j].scoreti]);

printf(〃\n");

}

)

解题答案:

/**********第•空**********/

fp=fopen(filename,"rb+”);

/**********第二空**********/

fseek(fp,-(long)sizeof(STU),SEEK_END);

/**********第三空**********/

fwrite(&n,sizeof(STU),1,fp);

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

二、改错题:给定程序MODU.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域

赋0至ljm-1的值。

请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。

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

给定源程序:

^include<stdio.h>

^include<stdlib.h>

typedefstructaa

{intdata;

structaa*next;

}NODE;

NODE*Creatlink(intn,intm)

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

inti;

/**********founcl***********/

p=(NODE)maHoc(sizeof(NODE));

h=p;

p->next=NULL;

for(i=l;i<=n;i++)

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

s->data=rand()%ni;s->next=p->next;

p->next=s;p=p->next;

)

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

returnp;

)

outlink(NODE*h)

{NODE*p;

p=h->next;

printfC\n\nTHELIST:\n\nHEAD〃);

while(p)

{printf("->%d”,p->data);

p=p->next;

)

printf(〃\n〃);

mainO

{NODE*head;

head=Creatlink(8,22);

outlink(head):

}

解题答案:

/**********fourid***********/

p=(NODE*)maHoc(sizeof(NODE));

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

returnh;

三、程序题:请编写函数fun,函数的功能是:统计•行字符串中单词的个数,作为函数值返回。•行字符串

在主:函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,•行的开始没有空格。

注意:部分源程序在文件PROG1.C中。

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

给定源程序:

#include<stdio.h>

#include<string.h>

^defineN80

intfun(char*s)

main()

{charline[N];intnum=0;voidNONO();

printf(z,Enterastring:\n");gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n〃,num);

NONO();

)

voidNONO()

{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*rf,*wf;inti,num;charline[N],*p;

rf=fopen(z/in.dat","r");

wf=fopen(z,out.dat","w〃);

ford=0;i<10;i++){

fgets(line,N,rf):

p=strchr(line,'\n');

if(p!=NULL)*p=0;

num=fun(line);

fprintf(wf,“刎\n",num);

}

fclose(rf);fclose(wf);

)

参考答案:

intfun(char*s)

(

intk=1;

while(*s){

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

s++;

}

returnk;

##################################

第02套:

一、填空题:给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt

中,用T作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数

ReadText和WriteText实现。

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

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

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

voidWriteText(FILE*);

voidReadText(FILE*);

main()

{FILE*fp;

if((fp=fopen(z,myfile4.txt〃,〃\v"))二二NULL)

{printf(,zopenfail!!\n*);exit(O);)

WriteText(fp);

fclose(fp);•

if((fp=fopenCmyfile4.txt",VO)==NULL)

{printf(zzopenfail!!\n,z);exit(0);}

ReadText(fp);

fclose(fp);

)

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

voidWriteText(FILE―1—)

{charstr[81];

printf(^XnEnterstringwith-1toend:\n〃);

gets(str);

while(strcmp(str,*-TO!=0){

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

fputs(___2___,fw);fputs(〃\n〃,fw);

gets(str);

}

)

voidReadText(FILE*fr)

{charsir[81];

printf(v\nReadfileandoutputtoscreen:\n〃);

fgets(str,81,fr);

while(!feof(fr)){

/**********fourid**********/

printf___3___);

fgets(str,81,fr);

)

}

解题答案:

/**********第一­空**********/

voidWriteText(FILE*fw)

/**********第二空**********/

fputs(str,fw);fputs('\n〃,fw);

/**********第三空**********/

printfstr);

二、改错题:给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依

次构成一•个新数放在t中。高位仍在高位,低位仍在低位。

例如,当s中的数为:7654321时,t中的数为:7531o

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

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

给定源程序:

^include<stdio.h>

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

voidfun(longs,longt)

{longsl=10;

*t=s%10;

while(s>0)

(s=s/100;

*t=s%10*si+*t;

/************fourid************/

si=sl*100;

}

}

main()

{longs,t;

printf(z,\nPleaseenters:〃);scanf(〃用ld〃,&s);

fun(s,&t);

printf(z,Theresultis:%ld\n/z,t);

)

解题答案:

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

voidfun(longs,long*t)

/************fotind************/

sl=sl*10;

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

三、程序题:函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式

是:将a数的卜位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和

位上。

例如,当a=45,b=如时,调用该函数后,c=1524o

注意:部分源程序存在文件PROG1.C中。数据文件IN.DATU」的数据不得修改。

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

给定源程序:

#include<stdio.h>

voidfun(inta,intb,long*c)

mainO

{inta,b;longc;

voidNONO();

printf("Inputa,b:');

scanf("版1,%d",&a,&b);

fun(a,b,&c);

printf("Theresultis:c);

NONOO;

)

voidNONO()

{/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/

FILE*rf,*wf;

inti,a,b;longc;

rf=fopen("in.dat〃,“r〃);

wf=fopen(,,out.dat","w〃);

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

fscanf(rf,"与d,%d”,&a,&b);

fun(a,b,&c);

fprintf(wf,〃a二%d,b=%d,c=%ld\n”,a,b,c);

)

fclose(rf);

fclose(wf);

)

解题答案:

(

*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);

}

##########################################

第03套:

・、填空题:给定程序中,函数fun的功能是:将自然数1〜10以及它们的平方根写到名为mygc3.txt的

文本文件中,然后再顺序读出显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程

序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<math.h>

#include<stdio.h>

intfun(char*fname)

{FILE*fp;inti,n;floatx;

if((fp=fopen(fname,〃w〃))=NULL)return0;

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

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

fprintf(___1___,绘d%f\n〃,i,sqrt((double)i));

printf('AnSucceed!!\n〃);

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

_2_;

printf(〃\nThedatainfile:\n");

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

if((fp=fopen(___3___,〃r"))二二NULL)

return0;

fscanf(fp,&n,&x);

while(!feof(fp))

{printf(*%d%f\n”,n,x);fscanf(fp,&n,&x);}

fclose(fp);

return1;

)

mainO

{charfname口=“myfile3.txt”;

fun(fname);

)

解题答案:

/**********第一•空*********/

fprintf(fp,"%d与f\n”,i,sqrt((double)i));

printf(z/\nSucceed!!\n");

/**********第二空**********/

fclose(fp);

/**********第三空**********/

if((fp=fopen(fname,,/r/,))==NULL)

改错题:给定程序MODI1.C中fun函数的功能是:将n个无序整数从小到大排序。清改正程序中的错误,

使它能得出止:确的结果。

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

给定源程序:

ttinclude<stdio.h>

#include<stdlib.h>

fun(intn,int*a)

(inti,j,p,t;

for(j=0;j<n~l;j++)

{p=j;

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

for(i-j+l;i<n-l;i++)

if(a[p]>a[i])

/************founcl************/

t=i;

if(p!=j)

(t=a[j];a[j]=a[p];a[p]=t;)

)

)

putarr(intn,int*z)

{inti;

for(i=1;i<=n;i++,z++)

{printf("%4d〃,*z);

if(!(i%10))printf("\n");

}printfCW);

)

mainO

{intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=ll;

printf(^XnXnBeforesorting%dnumbers:Xn^,n);putarr(n,aa);

fun(n,aa);

printf(^XnAftersorting%dnumbers:\n,z,n);putarr(n,aa);

}

解题答案:

#include<stdio.h>

#include<stdlib.h>

fun(intn,int*a)

{inti,j,p,t;

for(j=0;j<n-l;j++)

{p=j;

/************fotind************/

for(i=j+l;i<n;i++)

/************founcl************/

P=i;

三、程序题:函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。

合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的

十位和千位上。

例如,当a=45,b=12时,调用该函数后,c=2514。

注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。

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

给定源程序:

#include<stdio.h>

voidfun(inta,intb,long*c)

mainO

{inta,b;longc;

voidNONO0;

printf("Inputa,b:〃);

scanf(,z%d,%d〃,&a,&b);

fun(a,b,&c);

printf(,zTheresultis:%ld\n”,c);

NONOO;

}

voidNONO0

{/*木函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/

FILE*rf,*wf;

inti,a,b;longc;

rf=fopen(z,in."r");

wf=fopen(z,out.dat",“『);

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

fscanf(rf,&a,&b);

fun(a,b,&c);

fprintf(wf,"a=%d,b=%d,c=%ld\n〃,a,b,c);

)

fclose(rf);

fclose(wf);

)

解题答案:

*c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10;

########即用##############肘#阴######卅##

第04套:

一、填空题:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均

以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号

从小到大排序后,再用二进制方式把排序后的

学生数据输出到filename所指的文件中,覆盖原来的文件内容。

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

注意:源程序存放在考生文件夹下BLANKl.C«|«o

不得增行或删行,也不得更改程序的结构!

给定源程序:

^includeCstdio.h>

^defineN5

typedefstructstudent{

longsno;

charname[10];

floatscore[3];

)STU;

voidfun(char*filename)

{FILE*fp;inti,j;

STUs[N],t;

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

fp=fopen(filename,_L_);

fread(s,sizeof(STU),N,fp);

fclose(fp);

for(i=0;i<N-l;i++)

for(j=i+l;j<N;j++)

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

if(s[i].sno_2_s[j].sno)

(t=s[i];s[i]=s[j];s[j]=t;}

fp=fopen(filename,〃wb〃);

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

3_(s,sizeof(STU),N,fp);/*二进制输出*/

fclose(fp);

)

mainO

{STUt[N]={{10005,"ZhangSan",95,80,88),{10003,"LiSi",85,70,78),{10002,"CaoKai",75,60,

88},{10004,“FangFang”,90,82,87},{10001,"MaChao",91,92,77}},ss[N];

inti,j;FILE*fp;

fp=fopen("student.dat〃,〃wb");

fwrite(t,sizeof(STU),5,fp);

fclose(fp);

printf(〃\n\nTheoriginaldata:\n\nz,);

for(j=0;j<N;j++)

(printf(^XnNo:%ldName:%-8sScores:z,,t[j].sno,t[j].name);

for(i=0;i<3;i++)printf("为6.2f〃,t[j].score[i]);

printf('\n");

)

fun("student,dat");

printf(〃\n\nThedataaftersorting:\n\n");

fp-fopen("student.dat〃,“rb〃);

fread(ss,sizeof(STU),5,fp);

fclose(fp);

for(j=0;j<N;j++)

{printf("\nNo:%ldName:8sScores:",ss[j].sno,ss[j].name);

for(i-0;i<3;i++)printf("%6.2f”,ss[j].score[i]);

printfCW);

)

)

解题答案:

/**********第一空**********/

fp=fopen(filename,“rb〃);

/**********第二空**********/

if(s[i].sno>s[j].sno)

/**********第三空**********/

fwrite(s,sizeof(STU),N,fp);/*二进制输出*/

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

改错题:给定程序M0DI1.C中函数fun的功能是:在字符串的最前端加入11个*号,形成

二、新串,并且覆盖原串。

注意:字符串的长度最长允许为79。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

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

给定源程序:

^include<stdio.h>

#include<string.h>

voidfun(chars[],intn)

{

chara[80],*p;

inti;

/**********fourid***********/

s=p;

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

do

{a[i]=*p;

i++:

)

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

while(*p++)

a[i]=0;

strcpy(s,a);

)

mainO

{intn;chars[80];

printf(v\nEnterastring:〃);gets(s);

printf(,z\nThestring\〃%s\〃\n〃,s);

printfCAnEntern(numberof*):");scanf&n);

fun(s,n);

printf('AnThestringafterinsert:\n〃,s);

)

解题答案:

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

P=s;

/**********founcl***********/

whi1e(*p++);

三、程序题:请编写函数fun,函数的功能是:统计各年龄段的人数0N个年龄通过调用随机函数获得,并放在

主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[l]

中,把20至29岁年龄段的人数放住d⑵中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]

中。结果在主函数中输出。

注意:部分源程序在文件PROG1.C中。

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

给定源程序:

#include<stdio.h>

^defineN50

^defineM11

voidfun(int*a,int*b)

doublernd()

{statict=29,c=217,m=1024,r=0;

r=(r*t+c)%m;return((double)r/m);

)

mainO

{intage[N],i,d[M];voidNONO(intd[M]);

for(i=0;i<N;i++)age[i]=(int)(115*rnd());

printf(,zTheoriginaldata:\n");

for(i=0;i<N;i++)printf((i+l)%10=0?"%4d\n":"%4d〃,age[i]);

printf("\n\n〃);

fun(age,d);

for(i=0;i<10;i++)printf(,z%4d—%4d:%4d\nz/,i*10,i*10+9,d[i]);

printf(z,0ver100:%4d\n”,d[10]);

NONO(d);

)

voidNONO(intd[M])

{/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/

FILE*wf;inti;

wf=fopen(z,out.dat","w〃);

ford=0;i<10;i++)fprintf(wf,〃%4d—%4d:%4d\n,z,i*10,i*10+9,d[i]);

fprintf(wf,"Over100:%4d\n〃,d[10]);

fclose(wf);

)

参考答案:

voidfun(int*a,int*b)

(

inti,j;

for(i=0;i<M:i++)b[i]=0;

for(i=0;i<N;i++){

j=a[i]/10;

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

)

1

doublemd()

{statict=29,c=217,m=1024,r=0;

r=(r*t+c)%m;return((double)r/m);

)

#################################

第05套:

・、填空题:给定程序中已建立••个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增

有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值

仍保持递增有序。

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

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

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<sldio.h>

#include<stdlib.h>

#defineN8

typedefstructlist

{intdata;

structlist*next;

}SL1ST;

voidfun(SLlST*h,intx)

{SLIST*p,*q,*s;

s=(SLIST*)malloc(sizeof(SLIST));

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

s-xlata=___1___;

q=h;

p=h->next;

while(p!=NULL&&x>p->data){

/**********佑unci**********/

q二___2___;

p=p->next;

}

s->next=p;

/***木木*****砧un(j**********/

q->next=___3___;

}

SLIST*creatlist(int*a)

{SLIST*h,*p,*q;inti;

h=p=(SLIST*)malloc(sizeof(SLIST));

for(i=0;ivN;i++)

{q=(SLIST*)malloc(sizeof(SLIST));

q->data=a[i]:p->next=q;p=q;

)

p->next=0;

returnh;

)

voidoutlist(SLIST*h)

{SLIST*p;

p=h->next;

if(p==NULL)printf("\nThelistisNULL!\n");

else

{printf("\nHead");

do{printf("->%d",p->data);p=p->next;}while(p!=NULL);

printf(u->End\n");

)

)

main()

{SLIST*head;intx;

inta[N]={11,12,15,18,19,22,25,29};

head=creatlist(a);

printf("\nThelistbeforeinserting:\n");outlist(head);

printf("\nEnteranumber:");scanf("%d",&x);

fun(head,x);

printf("\nThclistafterinscrting:\nn);outlist(hcad);

}解题答案:

/**********第•空*********/

s->daa=x;

/**********第二空**********/

q=P;

/**********第三空**********/

q->next=s;

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

二、改错题:给定程序M0D11.C中函数fun的功能是:计算正整数num的各位上的数字之积。

例如,若输入:252,则输出应该是:20o若输入:202,则输出应该是:0。

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

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

给定源程序:

#include<stdio.h>

longfun(longnum)

(

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

longk;

do

{k*=num%10;

/************Cuiid************/

num\=10;

}while(num);

return(k);

1

main()

{longn;

printf("\nPleaseenteranumber:");scanf("%ld,,,&n);

printf(u\n%ld\n",fun(n));

}

解题答案:

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

longk=l;

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

num/=10;

三、程序题:请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。

例如:若有5门课程的成绩是:90.5,72,80,61.5,55

则函数的值为:71.80。

注意:部分源程序存在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include<stdio.h>

floatfun(float*a,intn)

(

1

main()

{floatscore[30]={90.5,72,80,61.5,55},aver;

voidNONO();

aver=fun(score,5);

printf("\nAveragescoreis:%5.2f\n”,aver);

NONO();

)

voidNONO()

{/*本函数用于打开文件、输入数据,调用函数,输出数据,关闭文件。*/

FILE*fp,*wf;

inti,j;

floataver,score[5]:

fp=fopenC'in.dar/'r");

wf=fopen("out.dat","wH);

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

for(j=0;j<5;j++)fscanf(fp,"%f,",&score|jD;

aver=fun(score,5);

fprintf(wf,H%5.2f\n",aver);

)

fclose(fp);

fclose(wf);

解题答案:

(

inti;

floatave=0.0;

for(i=0;i<n;i++)ave=ave+a[i];

ave=ave/n;

returnave;

)

##########################################

第06套:

・、给定程序中已建立个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函

数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。

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

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

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

typedefstructlist

{intdata;

structlist*next;

}SLIST;

voidfun(SLIST*p)

{SLIST*t,*s;

t=p->next;s=p;

while(t->next!=NULL)

{s=t;

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

t=t->___1___;

)

/**********气und**********/

printf("%d1—2—);

s->next=NULL;

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

free(-3-);

)

SLIST*creatlist(int*a)

{SLIST*h,*p,*q;inti;

h=p=(SLIST*)malIoc(sizeof(SLIST));

for(i=0;ivN;i++)

{q=(SLIST*)malloc(sizeof(SLIST));

q->data=a[i];p->next=q;p=q;

)

p->next=0;

returnh;

)

voidoutlist(SLIST*h)

{SLIST*p;

p=h->ncxt;

if(p==NULL)printf(u\nThelistisNULL!\n");

else

{printfC'XnHead");

do{printf(n->%d",p->data);p=p->next;}while(p!=NULL);

printf(',->End\nn);

}

}

main()

{SLIST*head;

inia[N]={11,12,15,18,19,22,25,29);

head=creatlist(a);

printfC'XnOutputfromhead:\n");outlist(head);

printf("\nOutputfromtail:\n");

while(head->next!=NULL){

fun(head);

prinlf("\n\nn);

printf("\nOutputfromheadagain:\n");outlist(head);

}

}

解题答案:

/**********第一空**********/

t=t->next;

/**********第二空**********/

printf(〃%d”,t->data);

/**********第三空**********/

free(t);

二、改错题:给定程序M0DI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的

内容。

例如,若字符串为abed,则应输出:debao

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

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

给定源程序:

#include<stdio.h>

/***********nd*¥*****¥****/

fun(chara)

{if(*a)

{fun(a+l);

/**亭木木***亭**nd************/

printf(',%c^^*a);

1

)

main()

{chars[10]="abcd'r;

printf("处理前字符串二%s\n处理后字符串二”,s);

fun(s);printf("\n");

)

解题答案:

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

voidfun(char*a)

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

printf("%c〃,*a);

三、程序题:请编写•个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符

串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第个字符串。

例如,输入beijing<CR>shanghai<CR>(<CR>为回车键),函数将返回shanghai。

注意:部分源程序存在文件PROG1.C中。

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

给定源程序:

#include<stdio.h>

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

main()

{chara[20],b[20];

voidNONO();

printf("Input1thstring:");

gets(a);

printf("lnput2thstring:");

gets(b);

printf("%s\n",fun(a,b));

NONO();

)

voidNONO()

{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/

FILE*fp,*wf;

inti;

chara[20],b[20];

fp=fopen("in.darT);

wf=fopen("out.dat","w'1);

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

fscanf(fp,"%s%s",a.b);

fprintf(wf,"%s\n",fbn(a,b));

)

fclose(fp);

fclose(wf);

参考答案:

(

inti;

char*p=s,*q=t;

for(i=0;*p&&*q;i++){

p++;q++;

1

if(*p==0&&*q==0)returns;

if(*p)returns;

elsereturnt;

)

#################################

第07套:

一、填空题:给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函

数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。

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

注意:源程序存放在考生文件夹的BLANKLC中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

typcdefstructlist

{intdata;

structlist*ncxt;

}SLIST;

voidfun(SL!ST*h)

{SLIST*p,*q;

p=h->next;

if(p!=NULL)

{q=p->next;

while(q!=NULL)

{if(p->data==q->data)

{p->next=q->next;

/**********於und**********/

free(_1-);

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

q=p->-2一:

}

else

{p=q:

********found*

q=q->-3一;

}

)

SLIST*creatlist(int*a)

{SLIST*h,*p,*q;inti;

h=p=(SLIST*)malloc(sizeof(SLIST));

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

{q=(SLIST*)malloc(sizeof(SLIST));

q->data=a[i];p->next=q;p=q;

)

p->next=0;

returnh;

}

voidoutlist(SLIST*h)

{SLIST*p;

p=h->next;

if(p==NULL)printf("\nThelistisNULL!\n");

else

{printf(,'\nHeadn);

do{printf("->%d',,p->data):p=p->next;)while(p!=NULL);

printf("->End\n");

)

)

main()

{SLIST*head;inta[N]=[1,2,23,4,4,4,5);

head=creatlist(a);

printf(M\nThelistbeforedeleting:\n");outlist(head);

fun(head);

printf(u\nThelistafterdeleting:\n");outlist(head);

)

解题答案:

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

free(q);

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

q=p->next;

/**********fourid**********/

q=q->next;

二、改错题:给定程序MODII.C中函数firn的功能是:用选择法对数组中的n个元素按从小到大的顺序进

行排序。

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

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

给定源程序:

#include<stdio.h>

#defineN20

voidfun(inta[],intn)

{inti,j,t,p;

for(j=0;j<n-1;j++){

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

p=j

fbr(i=j;i<n;i++)

if(a[i]<a[p])

/************砧und************/

P=j;

t=a[p];a[p]=a[j];a[j]=t;

}

)

main()

(

inta[N]={9,6,83-1),i,m=5;

printf("排序前的数据:");

for(i=0;i<m;i++)printf("%d",a[i]):printf("\iin);

fun(a,m);

printf("排序后的数据巧;

for(i=0;i<m;i++)printf(n%dH,a[i]);printfCXn1');

)

解题答案:

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

P=j;

/************foiind************/

p=i;

三、程序题:请编写一个函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在

数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:

711142122283335424449

注意:部分源程序存在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include<stdio.h>

#defineM100

voidfun(intm,int*a,int*n)

(

)

main()

{intaa[M],n,k:

voidNONO();

fun(50,aa,&n);

for(k=0;k<n;k++)

if((k+l)%20==0)printfC\n");

elseprintf(n%4d",aa[k]);

printf("\n");

NONO();

I

voidNONO()

{/*本函数用于打开文件、输入数据,调用函数,输出数据,关闭文件。*/

FILE*fp,*wf;

inti,n,j,k,aa[M],sum;

fp=fopen(Min.dat",nr");

wf=fopen(,'out.dat","wH);

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

fscanf(fp,&j);

fun(j,aa,&n);

sum=0;

for(k=0;k<n;k++)sum+=aa[k];

fprintf(wf,"%d\n'\sum);

}

fclose(fp);

fclose(wf);

}

参考答案:

inti;

*n=0;

for(i=7;i<=m;i++)

if((i%7==0)II(i%11==0))a[(*n)++]=i;

)

#################################

第08套:

・、填空题:给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。

找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。

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

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

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

typedefstructlist

{intdata;

structlist*next;

}SLIST;

SLIST*creatlist(char*);

voidoutlist(SLIST*);

intfun(SLIST*h,charch)

{SLIST*p;intn=0:

p=h->next;

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

while(p!=___1___)

{n++;

/**********气und**********/

if(p->data==ch)return___2___;

elsep=p->next;

I

return0;

)

main()

{SLIST*head:intk;charch;

chara[N]={,mVp';g7a,;w';x';rVd,);

hcad=crcatlist(a):

outlist(head);

printf("Entcraletter:");

scanf("%cH,&ch);

/**********拈unci**********/

k=fun(—3一);

if(k=O)printf("\nNotfound!\nM);

elseprintf("Thesequencenumberis:%d\n",k);

}

SLIST*creatlist(char*a)

{SLIST*h,*p,*q;inti;

h=p=(SLIST*)malloc(sizeof(SLIST));

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

{q=(SLIST*)malloc(sizeof(SLIST));

q-xlata=a[i];p->next=q;p=q;

}

p->nexl=O;

returnh;

)

voidoutlist(SLIST*h)

{SLIST*p;

p=h->next;

if(p==NULL)printf("\nThelistisNULL!\n");

else

{printfC'XnHead");

do

{printf("->%c",p->data);p=p->next;)

while(p!=NULL);

printf("->End\n");

)

)

解题答案:

/**********第一空**********/

while(p!=0)

/**********第二空**********/

if(p->data==ch)returnn;

/**********第_^空**********/

k=fun(head,ch);

二、改错题:给定程序M0DI1.C中函数fun的功能是:删除p所指字符串中的所有空白字符(包括制表符、

回车符及换行符)。输入字符串时用#结束输入。

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

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

给定源程序:

#include<string.h>

#include<stdio.h>

#include<ctype.h>

fun(char*p)

{inti,t;charc[80];

For(i=0,t=0;p[i];i++)

if(!isspace(*(p+i)))c[t++]=p[i];

/***********nd*¥*****¥****/

c[t]="\O";

strcpy(p,c);

)

main()

{charc,s[80];

inti=0;

printf("Inputastring:'1);

c=getchar();

while(c!='#1)

{s[i]=c;i++;c=getchar();}

s[i]=*\O*;

fun(s);

puts(s);

}

解题答案:

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

for(i=0,t=0;p[i];i++)

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

c[t]='\0';

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

三、程序题:请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为

大写(若该位置上不是字母,则不转换)。

例如,若输入"abc4EFg",则应输出“aBc4EFg"°

注意:部分源程序存在文件PROG1.C中。

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

给定源程序:

#include<stdio.h>

#include<string.h>

voidfun(char*ss)

(

}

main()

{chartt[81];

voidNONO();

printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);

printf("\n\nAfterchanging,thestring\ntt);

fun(tt);

printf(,,\nbecomes\n\"%s\"\n",tt):

NONO0;

)

voidNONO()

{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/

FILE*fp,*wf;

chartt[81];

inti;

fp=fopen("in.dat',,"r");

wf=fopen(,'out.dat",',w"):

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

fscanf(fp,"%s",tt);

fun(tt);

fprintf(wf,"%s\n",tt);

)

fclose(fp);

fclose(wf);

}

参考答案:

(

inti;

for(i=1;i<strlen(*ss);i+=2){

if(ss[i]>='a'&&ss[i]<='z')ss[i]-=32;

)

)

##################################

第09套:

一、填空题:给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论