計算機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

提交評論