二級(jí)C語(yǔ)言上機(jī)真題題庫(kù)60道_第1頁(yè)
二級(jí)C語(yǔ)言上機(jī)真題題庫(kù)60道_第2頁(yè)
二級(jí)C語(yǔ)言上機(jī)真題題庫(kù)60道_第3頁(yè)
二級(jí)C語(yǔ)言上機(jī)真題題庫(kù)60道_第4頁(yè)
二級(jí)C語(yǔ)言上機(jī)真題題庫(kù)60道_第5頁(yè)
已閱讀5頁(yè),還剩159頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

二級(jí)C語(yǔ)言上機(jī)真題題庫(kù)60道

說(shuō)明:本題庫(kù)是針對(duì)2010年3月份考試的上機(jī)考試題庫(kù),本題庫(kù)共有60套題目(每套題

目包含3道題:一道程序填空題、一道程序修改題、一道程序設(shè)計(jì)題),真實(shí)考試的時(shí)候,

考生輸入準(zhǔn)考證后計(jì)算機(jī)隨機(jī)為你抽取一套考試,每個(gè)考生考試時(shí)只需考一套題目(包含三

道題),但由于考試時(shí)是隨機(jī)抽題,所以即使把原題庫(kù)告訴大家,你也不能知道到時(shí)計(jì)算機(jī)

會(huì)給你抽取哪一套題,所以大家只有把全部題庫(kù)都理解才能萬(wàn)無(wú)一失)

※※※※※※※※※※※※※※※※※※※※※※※※※

第01套:

給定程序中,函數(shù)Rin的功能是:將形參n所指變量中,各位上為偶數(shù)的數(shù)去

除,剩余的數(shù)按原來(lái)從高位到低位的順序組成一個(gè)新的數(shù),并通過(guò)形參指針n傳回

所指變量。

例如,輸入一個(gè)數(shù):27638496,新的數(shù):為739。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容

并把下劃線刪除,使程序得出正確的結(jié)

果。

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!給定源程序:

#include<stdio.h>

voidfun(unsignedlong*n)

{unsignedlongx=0,i;intt;

i=l;

while(*n)

/**********und**********/

{t=*n%10;

/********************/

if(t%2!=0)

{x=x+t*i;i=i*10;}

*n=*n/10;

}

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

*n=x;

main()

{unsignedlongn=-l;

while(n>99999999||n<0)

{printf("Pleaseinput(O<n<100000000):");scanf("%ld",&n);}

fun(&n);

printf("\nTheresultis:%ld\n",n);

解題思路:

第處:t是通過(guò)取模的方式來(lái)得到*n的個(gè)位數(shù)字,所以應(yīng)填:10。

第二處:判斷是否是奇數(shù),所以應(yīng)填:0。

第三處:最后通形參n來(lái)返回新數(shù)x,所以應(yīng)填:X。

給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算n!。例如,給n輸入5,則輸出120.000000。

請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增

行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

doublefun(intn)

{doubleresult=1.0;

/************************/

if(n==0)

return1.0;

while(n>l&&n<170)

/************nd************/

result*=n-;

returnresult;

)

main()

{intn;

printf("InputN:");

scanfi("%d",&n);

printf{"\n\n%d!=%lf\n\n",n,fun(n));

}

解題思路:

第一處:條件語(yǔ)句書寫格式錯(cuò)誤,應(yīng)改為:if(n==0)。第二處:語(yǔ)句后缺少分號(hào)。

請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:將一個(gè)數(shù)字字符串轉(zhuǎn)換為一個(gè)整數(shù)(不得

調(diào)用C語(yǔ)言提供的將字符串轉(zhuǎn)換為整數(shù)的函數(shù))。例如,若輸入字符串"?1234",

函數(shù)把它轉(zhuǎn)換為整數(shù)值-1234。函數(shù)fun中給出的語(yǔ)句僅供參考。

注意:部分源程序存在文件PROG1.C文件中。請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任

何longx=0;

len=strlen(p);

if(p[O]=<)

{t=-l;len-;p++;}

elset=l;

while(*p)x=x*10~48+(*p++);

returnx*t;

}

main()/*主函數(shù)*/

{chars[6];

longn;

printf("Entcrastring:\n");

gets(s);

n=fun(s);

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

NONO();

}

NONO()

{/*本函數(shù)用于打開(kāi)文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/

FILE*fp,*wf;

inti;

chars[20];

longn;

fp=fopcn("c:\\test\\in.dat","r");

wf=fbpen("c:\\test\\out.dat","w");

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

fscanfiffp,"%s",s);

n=fun(s);

fprintfifwf^"%ld\n",n);

)

fclose(fp);

fclose(wf);

※※※※※※※※※※※※※※※※※※※※※※※※※

第02套:

給定程序中,函數(shù)fun的功能是將形參給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本

文件中,再用字符方式從此文

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的不得增行或刪行,也不得更改程序的結(jié)構(gòu)!給定源程序:

#include<stdio.h>

voidfun(char*s,inta,doublef)

(

/**********und**********/

FILE*fp;

charch;

fp=fopen("filel.txt","w");

fprintfiffp,"%s%d%f\n",s,a,f);

fclose(fp);

fp=fopen("filel.txt","r");

printf("\nTheresult:\n\n");

ch=fgctc(fp);

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

while(!feof{fp)){

/**********^Qund**********/

putchar(ch);ch=fgetc(fp);}

putchar(4\n,);

fclose(fp);

}

main()

{chara[10]="Hello!";intb=12345;

doublec=98.76;

fun(a,b,c);

}解題思路:

本題是考察先把給定的數(shù)據(jù)寫入到文

第一處:定義文

給定程序M0DI1.C中函數(shù)fun的功能是:依次取出字符串中所有數(shù)字字符,形

成新的字符串,并取代原字符串。

請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

voidfun(char*s)

{inti,j;

fbr(i=O,j=O;s[i]!=c\0,;i++)

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

/**********d**********/

s[j++]=s[i];

/**********und**********/

)

main()

{charitem[80];

printfi("\nEnterastring:");gets(item);

printfi("\n\nThestringis:\"%s\"\n",item);

fun(item);

printf("\n\nThestringofchangingis:\"%s\"\n",item);}

解題思路:

第處:要求是取出原字符串中所有數(shù)字字符組成?個(gè)新的字符串,程序中是使用變量j

來(lái)控制新字符串的位置,所以應(yīng)改為:s[j++]=s[i];。第二處:置新字符串的結(jié)束符,所

以應(yīng)改為.s[j]=u\O,****************************************************

請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:將M行N列的二維數(shù)組中的字符數(shù)據(jù),按列的

順序依次放到?個(gè)字符串中。

例如,二維數(shù)組中的數(shù)據(jù)為:

WWWW

SSSS

HHHH

則字符串中的注意:部分源程序在文件PROG1.C中。

請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入

你編寫的若干語(yǔ)句。

給定源程序:

#include<stdio.h>

#defineM3

#defineN4

voidfun(chars[][N],char*b)

{

inti,j,n=O;

fdr(i=O;i<N;i++)/*請(qǐng)?zhí)顚懴鄳?yīng)語(yǔ)句完成其功能*/{

fbr(j=O;j<M;j++){

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

n=i*M+j+1;

)

}

b[n]=<\0);

)

main()

(

H7HTH,}};

inti,j;

printf("Thematrix:\n");char

a[100],w[M][N]={{4W,;W\,W\,W,},{<S\,S\,S\,S,},{<H\)

for(i=0;i++)

{fbr(j=O;j<N;j++)printf("%3c",w[i][j]);

printf("\n");

fun(w,a);

printf("TheAstring:\n");puts(a);

printf("\n\n");

N0N0();

)

※※※※※※※※※※※※※※※※※※※※※※※※※

第03套:

程序通過(guò)定義學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名和3門課的成績(jī)。所有學(xué)生數(shù)

據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)firn的功能是重寫形參filename所指文件中最后一

個(gè)學(xué)生的數(shù)據(jù),即用新的學(xué)生數(shù)據(jù)覆蓋該學(xué)生原來(lái)的數(shù)據(jù),其它學(xué)生的數(shù)據(jù)不變。

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的果。

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

#defineN5

typedefstructstudent{

longsno;

charname[10];

floatscore[3];

}STU;

voidfun(char.filename,STUn)

{FILE*fp;

/**********d**********/

fp=fbpen(filename,"rb+");

/**********und**********/

fseek(fp,-lL*sizeof(STU),SEEK_END);

/**********d**********/

f\\Tite(&n,sizeofifSTU),1,fp);

fclose(fp);

main()

{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}};

STUn={10006,"ZhaoSi",55,70,68},ss[N];

inti,j;FILE*fp;

fp=fbpen("student.dat","wb");

fwrite(t,sizeofifSTU),N,fp);

fclose(fp);

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

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

fclose(fp);

printf("\nTheoriginaldata:\n\n");

fbr(j=0;j<N;j-H-)

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

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

printf("\n");

}

fun("student.dat",n);

printfi("\nThedataaftermodifing:\n\n");

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

fread(ss,sizeofifSTU),N,fp);

fclose(fp);

fbr(j=0;j&It;N;j++)

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

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

printfl("\n");

)

}

解題思路:

本題是考察如何從文件中讀出數(shù)據(jù),再把結(jié)構(gòu)中的數(shù)據(jù)寫入文件中。第一處:從指定的

文件中讀出數(shù)據(jù),所以應(yīng)填:filenameo

第二處:讀取文件年的最后一條記錄,所以應(yīng)填:fpo

第三處:再把讀出的記錄,寫入文件fp指定的位置上,所以應(yīng)填:fpo

給定程序MODI1.C中的函數(shù)Creatlink的功能是創(chuàng)建帶頭結(jié)點(diǎn)的單向鏈表,并為各結(jié)點(diǎn)

數(shù)據(jù)域賦0到的值。

請(qǐng)改正函數(shù)Creatlink中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main

函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

#include<stdlib.h>

typedefstructaa

{intdata;

structaa*next;

}NODE;

NODE*Creatlink(intn,intm)

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

inti;

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

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

h=p;

p->next=NULL;

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

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

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

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

}

/**********伯und***********/

returnh;

)

outlink(NODE*h)

{NODE*p;

p=h->next;

printf("\n\nTHELIST:\n\nHEAD");

while(p)

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

p=p->next;

)

printfi("\n");

}

main()

{NODE*head;

head=Creatlink(8,22);

)

解題思路:

第一處:指向剛分配的結(jié)構(gòu)指針,所以應(yīng)改為:p=(NODE*)malloc(sizeof(NODE));

第二處:在動(dòng)態(tài)分配最后返回不能使用p,是因?yàn)閜的位置已經(jīng)發(fā)生了變化,所以應(yīng)改為

返回ho

請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:統(tǒng)計(jì)一行字符串中單詞的個(gè)數(shù),作為函數(shù)值返

回。一行字符串在主函數(shù)中輸入,規(guī)定所有單詞由小寫字母組成,單詞之間由若干個(gè)空格

隔開(kāi),一行的開(kāi)始沒(méi)有空格。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何你編寫的若干語(yǔ)句。

給定源程序:

#include<stdio.h>

#include<string.h>

#defineN80

intfun(char*s)

{

intn=l;

while(*s)

{if(*s="?)n++;

s++;

returnn;

}

main()

{charline[N];intnum=O;

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

num=fim(line);

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

NONO();

)

解題思路:

本題是統(tǒng)計(jì)字符串中的單詞數(shù)。

1.利用while循環(huán)語(yǔ)句和指針變量,當(dāng)字符為空格時(shí),則單詞數(shù)k加1。

2.循環(huán)結(jié)束返回ko

參考答案:

intfun(char*s)

{

intk=1;

while(*s){

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

s++;

}

returnk;

)

※※※※※※※※※※※※※※※※※※※※※※※※※

第04套:

程序通過(guò)定義學(xué)生結(jié)構(gòu)體變量,存儲(chǔ)了學(xué)生的學(xué)號(hào)、姓名和3門課的成績(jī)。所有學(xué)生數(shù)

據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是從形參filename所指的文件中讀入學(xué)

生數(shù)據(jù),并按照學(xué)號(hào)從小到大排序后,再用二進(jìn)制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename

所指的文件中,覆蓋原來(lái)的文件內(nèi)容。

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的果。

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

#defineN5

typedefstructstudent{

longsno;

charname[10];

floatscore[3];

}STU;

voidfun(char*filename)

{FILE*fp;inti,j;

STUs[N],t;

y**********found**********/

fp=fbpen(現(xiàn)ename,"rb”);

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

fclose(fp);

for(i=0;i-H-)

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

/**********Cund**********/

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

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

fp=fbpen(filename,"wb");

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

fwrite(s,sizeof(STU),N,fp);/*二進(jìn)制輸出*/

fclose(fp);

main()

{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,sizeofifSTU),5,fp);

fclose(fp);

printfi("\n\nTheoriginaldata:\n\n");

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

{printfi("\nNo:%ldName:%-8sScores:",t[j].sno,t[j].name);

for(i=0;i<3;i-H-)printf("%6.2f",t[j].score[i]);

printfX"\n");

fun("student.dat");

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

fp=fbpen("student.dat","rb");

fread(ss,sizeoRSTU),5,fp);

fclose(fp);

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

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

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

printfi("\n");

解題思路:

本題是考察把結(jié)構(gòu)中的數(shù)據(jù)寫入文件。

第一處:建立文件的類型,考慮到是把結(jié)構(gòu)中的數(shù)據(jù)(結(jié)構(gòu)中的數(shù)據(jù)包含不打印的字符)

從文件中讀出,所以應(yīng)填:"rb"。

第二處:判斷當(dāng)前學(xué)號(hào)是否大于剛讀出的學(xué)號(hào)進(jìn)行相比,如果大于,則進(jìn)行交換,所以應(yīng)

填:>;o

第三處:把已排序的結(jié)構(gòu)數(shù)據(jù),重新寫入文件,所以應(yīng)填:fwriteo

給定程序MODIl.C中函數(shù)fun的功能是:在字符串的最前端加入n個(gè)*號(hào),形成新串,并

且覆蓋原串。

注意:字符串的長(zhǎng)度最長(zhǎng)允許為79。

請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

#include<string.h>

voidfun(chars[],intn)

chara[80],*p;

inti;

/**********^Qund***********/

p=s;

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

do

{a[i]=*p;

i++;

/*********************/

while(*p++);

a[i]=0;

strcpy(s,a);

)

main()

{intn;chars[80];

printfi("\nEnterastring:");gets(s);

printlX"\nThestring\"%s\"\n",s);

printf^"\nEntern(numberof*):");scanf^"%d",&n);

fun(s,n);

printfi("\nThestringafterinsert:\"%s\"\n",s);

解題思路:

第一處:指針p應(yīng)指向s,所以應(yīng)改為:p=s;o

第二處:死循環(huán),當(dāng)dowhile循環(huán)執(zhí)行一次,臨時(shí)變量p應(yīng)該指向字符串的下一位置,所

以應(yīng)改為:while(*p++);o

請(qǐng)編寫函數(shù)fun,函數(shù)的功能是:統(tǒng)計(jì)各年齡段的人數(shù)。N個(gè)年齡通過(guò)調(diào)用隨機(jī)

函數(shù)獲得,并放在主函數(shù)的age數(shù)組中;要求函數(shù)把0至9歲年齡段的人數(shù)放在d[0]中,

把10至19歲年齡段的人數(shù)放在d[l]中,把20至29歲年齡段的人數(shù)放在d[2]中,其余依此

類推,把100歲(含100)以上年齡的人數(shù)都放在d[10]中。結(jié)果在主函數(shù)中輸出。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何for(i=0;i<N;i++){

j=a[i]/10;j=a[i]/10;

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

)

}

doublemd()

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

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

}

main()

{intage[N],i,d[M];

fbr(i=O;i<N;i++)age[i]=(int)(115*md());

printf("Theoriginaldata:\n");

fbr(i=O;i<N;i++)printf((i+1)%10==0?"%4d\n":"%4d",age[i]);

printf("\n\n");

fun(age,d);

fdr(i=O;i<l0;i++)printf("%4d---%4d:%4d\n",i*l0,i*l0+9,d[i]);

printf("Over100:%4d\n",d[10]);

NONO(d);

}

解題思路:

本題是統(tǒng)計(jì)各年齡段的人數(shù)。

1.初始化各年齡段人數(shù)為0。

2.使用for循環(huán)以及求出各年齡的卜位數(shù)字作為存放人數(shù)的地址,如果大于值大于10,則

存入d[10]中(大于110歲的人)。

參考答案:

voidfun(int*a,int*b)

{

inti,j;

fbr(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]++;

doublemd()

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

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

)

※※※※※※※※※※※※※※※※※※※※※※※※※

第05套:

給定程序中,函數(shù)ftm的功能是將參數(shù)給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本

文件中,再用字符串方式從此文

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把「劃線刪除,使程序得出正確的結(jié)

果。

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

#include<stdlib.h>

voidfun(char*s,inta,doublef)

/**********^Qund**********/

FILE*fp;

charstr[100],strl[100],str2[100];

intal;doublefl;

fp=fopen("filel.txt","w");

fprintfiffp,"%s%d%f\n",s,a,f);

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

fclose(fp);

fp=fopen("filel.txt","r");

/**********d**********/

fscanf(fp,"%s%s%s",str,strl,str2);

fclose(fp);

al=atoi(strl);

fl=atof(str2);

printf("\nTheresult:\n\n%s%d%f\n",str,al,fl);

)

main()

{chara[10]="Hello!";intb=12345;

doublec=98.76;

fiin(a,b,c);

解題思路:

本題是考察先把給定的數(shù)據(jù)寫入到文

第一處:定義文

第二處:關(guān)閉剛寫入的文件,所以應(yīng)填:fclose(fp)o

第三處:從文件中讀出數(shù)據(jù),所以應(yīng)填:fpo

給定程序MODH.C中函數(shù)fun的功能是:對(duì)N名學(xué)生的學(xué)習(xí)成績(jī),按從高到低的順序找

出前m(mWO)名學(xué)生來(lái),并將這些學(xué)生數(shù)據(jù)存放在一個(gè)動(dòng)態(tài)分配的連續(xù)存儲(chǔ)區(qū)中,此存儲(chǔ)

區(qū)的首地址作為函數(shù)值返回。

請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

#include<alloc.h>

#include<string.h>

#defineN10

typedefstructss

{charnum[10];

ints;

}STU;

STU*fun(STUa[],intm)

{STUb[N],*t;

inti,j,k;

/**********^Qund**********/

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

for(i=0;i-H-)b[i]=a[i];

fbr(k=O;k<m;k++)

{for(i=j=O;i<N;i++)

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

/**********und**********/

t[k]=bU];

b[j].s=0;

)

returnt;

)

outresult(STUa[],FILE*pf)

{inti;

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

fprintf(pf,"No=%sMark=%d\n",a[i].num,a[i].s);

fprintf{p^"\n\n");

)

main()

{STU

a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04&qu

ot;,87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"A09",80),

{"A10",71}};

STU*pOrder;

inti,m;

printf("*****TheOriginaldata*****\n");

outresult(a,stdout);

printf("\nGivethenumberofthestudentswhohavebetterscore:");

scanf("%d",&m);

while(m>10)

{printfl("\nGivethenumberofthestudentswhohavebetterscore:");

scanf("%d",&m);

}

pOrder=fiin(a,m);

printf("*****THERESULT*****\n");

printf("Thetop:\n");

fbr(i=O;i++)

printf("%s%d\n",pOrder[i].num,pOrder[i].s);

free(pOrder);

}

解題思路:

第一處:語(yǔ)句最后缺少分號(hào)。

第二處:應(yīng)該使用方括號(hào),而不是圓括號(hào)。

像此類,使用編譯,即可發(fā)現(xiàn)。

請(qǐng)編寫函數(shù)firn,函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。數(shù)組中

的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個(gè)數(shù)。例如,一維數(shù)組中的數(shù)

據(jù)是:2223445666677899101010。

刪除后,數(shù)組中的你編寫的若干語(yǔ)句。

給定源程序:

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{

inti,j=1,k=a[0];intI,j=l,k=a[O];

for(i=1;i<n;i++)fbr(i=l;i&It;n;i++)

if(k!=a[i]){if(k!=a[i])

a[j++]=a[i];a[j++]=a[i];

k=a[i];k=a[i];

a[j]=0;a[j]=O;

returnj;returnj;

main()

{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;

printf("Theoriginaldata:\n");

fbr(i=O;i<n;i++)printf("%3d",a[i]);

n=fun(a,n);

printf("\n\nThedataafterdeleted:\n");

fbr(i=0;i<n;i++)printf("%3d",a[i]);printf{"\n\n");

NONO();

)

解題思路:

本題是刪除已排序過(guò)數(shù)組中的相同數(shù)。

1.取出數(shù)組中的第1個(gè)數(shù)存放在臨時(shí)變量k中,再利用for循環(huán)來(lái)依次判斷所有的數(shù)。

2.如果取出的數(shù)和k相比,如果不相同,則仍存放在原數(shù)組中,其中存放的位置由j來(lái)控

制,接著把這個(gè)數(shù)重新存入k。如果相同,則取下一數(shù)。

參考答案:

intfun(inta[],intn)

{

inti,j=1,k=a[0];

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

if(k!=a[i]){

a[j++]=a[i];

k=a[i];

)

a[j]=O;

returnj;

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第06套:

給定程序中,函數(shù)ftin的功能是根據(jù)形參i的值返回某個(gè)函數(shù)的值。當(dāng)調(diào)用正

確時(shí),程序輸出:

x1=5.000000,x2=3.000000,xl*xl+xl*x2=40.000000

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的的首地址作為函數(shù)值返回。

請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

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

char*fiin(char*s,char*t)

{intsl=O,tl=O;char*ss,*tt;

ss=s;tt=t;

while(*ss)

{sl++;

/**********^Qund**********/

*ss++;

}

while(*tt)

{tl++;

/**********Cund**********/

*tt++;

)

if(tl>sl)returnt;

elsereturns;

)

main()

{chara[80],b[80],*p,*q;inti;

printf("\nEnterastring:");gets(a);

printf("\nEnterastringagain:");gets(b);

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

)

解題思路:

第一處:試題要求返回字符串的首地址,所以應(yīng)改為:char*fun(char*s,char*t)第二處:

取字符串指針ss的下一個(gè)位置,所以應(yīng)改為:SS++;。

第三處:取字符串指針tt的下一個(gè)位置,所以應(yīng)改為:tt++;。

請(qǐng)編寫函數(shù)fim,函數(shù)的功能是:移動(dòng)字符串中的例如,字符串中原有的中的你編寫的若干

語(yǔ)句。

給定源程序:

#include<stdio.h>

#include<string.h>

#defineN80

voidfun1(char*w)/*本函數(shù)的功能是將字符串中字符循環(huán)左移一個(gè)位置*/{

inti;chart;

t=w[0];

fbr(i=O;i<strlen(w)-l;i++)

w[i]=w[i+l];

w[strlen(w)-l]=t;

voidfun(char*w,intm)/*可調(diào)用funl函數(shù)左移字符*/

main()

{chara[N]="ABCDEFGHIJK";

intm;

printf("Theoriginalstring:\n");puts(a);

printf("\n\nEnterm:");scanf("%d",&m);

fun(a,m);

printf("\nThestringaftermoving:\n");puts(a);

printf("\n\n");

NONO();

)

解題思路:

本題是考察字符串的操作。

1.由于函數(shù)funl是將字符串中字符循環(huán)左移一個(gè)位置,并通過(guò)實(shí)參w返回循環(huán)左移一個(gè)

位置的字符串。

2.利用循環(huán)fbr語(yǔ)句來(lái)操作多少個(gè)字符(m)需要循環(huán)左移。

參考答案:

voidfunl(char*w)/*本函數(shù)的功能是將字符串中字符循環(huán)左移一個(gè)位置*/

{

inti;chart;

t=w[0];

fbr(i=O;i<strlcn(w)-1;i++)

w[i]=w[i+l];

w[strlen(w)-l]=t;

)

voidfun(char*w,intm)/*可調(diào)用funl函數(shù)左移字符*/

{

inti;

fbr(i=0;i<m;i++)funl(w);

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第07套:

程序通過(guò)定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲(chǔ)了一名學(xué)生的信息。函

數(shù)fun的功能是輸出這位學(xué)生的信息。

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把卜劃線刪除,使程序得出正確的結(jié)

果。

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

typedefstruct

{intnum;

charname[9];

charsex;

struct{intyear,month,day;}birthday;

floatscore[3];

}STU;

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

voidshow(STUtt)

{inti;

printf("\n%d%s%c%d-%d-%d",tt.num,tt.namc,tt.sex,

tt.birthday.year,tt.birthday.month,tt.birthday.day);

fbr(i=O;i<3;i++)

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

printf("%5.1f",tt.score[i]);

printf("\n");

)

main()

{STUstd={1,"Zhanghua";M\1961,10,8,76.5,78.0,82.0};

printf("\nAstudentdata:\n");

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

show(std);

)

解題思路:

本題是利用結(jié)構(gòu)體變量存儲(chǔ)了一名學(xué)生的信息。

第一處:tt變量在函數(shù)體fbn已經(jīng)使用,所以應(yīng)填:tt。

第二處:利用循環(huán)分別輸出學(xué)生的成績(jī)數(shù)據(jù),所以應(yīng)填:tt.score[i]。第三處:函數(shù)的調(diào)

用,所以應(yīng)填:std。

給定程序MODI1.C中函數(shù)fun的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)

和a[0]中的數(shù)對(duì)調(diào)、次最大數(shù)和a[l]中的數(shù)對(duì)調(diào)。

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!給定源程序:

#include<stdio.h>

#defineN20

intfun(int*a,intn)

{inti,m,t,k;

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

/**********und**********/

m=i;

fbr(k=i+1;k<n;k++)

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

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

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

)

main()

{intx,b[N]={11,5,12,0,3,6,9,7,10,8),n=10,i;

for(i=0;i<n;i++)printf("%d",b[i]);

printf("\n");

fun(b,n);

for(i=0;i<n;i++)printf("%d",b[i]);

printfl("\n");

}

解題思路:

第一外,環(huán)每循環(huán)一次,把當(dāng)前位置i賦值給m,所以應(yīng)改為:m=i;?

請(qǐng)編寫一個(gè)函數(shù)unsignedfun(unsignedw),w是一個(gè)大于10的無(wú)符

號(hào)整數(shù),若w是n(nN2)位的整數(shù),函數(shù)求出w的低n-1位的數(shù)作為函數(shù)值返回。

例如:w值為5923,則函數(shù)返回923;w值為923則函數(shù)返回23。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何你編寫的若干語(yǔ)句。

給定源程序:

#include<stdio.h>

unsignedfun(unsignedw)

(

if(w>10000)w%=10000;

elseifi(w>1000)w%=1000;

elseif(w>l00)w%=100;

elseif(w>10)w%=10;

returnw;

}

main()

{unsignedx;

printf("Enteraunsignedintegernumber:");scanf("%u",&x);

printf("Theoriginaldatais:%u\n",x);

if(x<10)printf("Dataerror!");

elseprintf("Theresult:%u\n",fun(x));

NONO();

}

解題思路:

本題是考察考生怎樣獲取一個(gè)符合要求的無(wú)符號(hào)整數(shù)。本題是應(yīng)用if條件語(yǔ)句首先判斷給

出的數(shù)是幾位數(shù),再模相應(yīng)的值,最后得出的余數(shù)就是結(jié)果。

參考答案:

unsignedfun(unsignedw)

※※※※※※※※※※※※※※※※※※※※※※※※※

第08套:

給定程序通過(guò)定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲(chǔ)了一名學(xué)生的學(xué)號(hào)、姓名和3

門課的成績(jī)。函數(shù)fun的功能是將該學(xué)生的各科成績(jī)都乘以一個(gè)系數(shù)ao請(qǐng)?jiān)诔绦虻南聞?/p>

線處填入正確的果。

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

typedefstruct

{intnum;

charname[9];

floatscore[3];

}STU;

voidshow(STUtt)

{inti;

printf("%d%s:",tt.num,);

fbr(i=O;i<3;i++)

printf("%5.1f",tt.score[i]);

printf("\n");

)

/**********ui*id**********/

voidmodify(STU*ss,floata)

{inti;

fbr(i=O;i<3;i++)

/**********ui*id**********/

ss->score[i]*=a;

main()

{STUstd={l,"Zhanghua",76.5,78.0,82.0};

floata;

printf("\nTheoriginalnumberandnameandscores:\n");

show(std);

printf("\nlnputanumber:");scanf("%f",&a);

/**********und**********/

modify(&std,a);

printlX"\nAresultofmodifying:\n");

show(std);

)

解題思路:

本題是利用結(jié)構(gòu)體存儲(chǔ)學(xué)生記錄并由實(shí)參SS返回。

第一處:實(shí)參SS是一個(gè)結(jié)構(gòu)型指針變量,所以應(yīng)填:STUo

第二處:該學(xué)生的各科成績(jī)都乘以?個(gè)系數(shù)a,所以應(yīng)填:scored。

第三處:函數(shù)的調(diào)用,由于函數(shù)定義時(shí)使用的指針結(jié)構(gòu)型變量,所以應(yīng)填:&std。

給定程序M0D11.C中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返

回。例如:若k=10,則應(yīng)輸出:3628800。

請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。

注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!給定源程序:

#include<stdio.h>

longfun(intk)

(

/************命und************/

if(k>0)

return(k*fun(k-l));

/************************/

elseif(k=0)

returnIL;

}

main()

{intk=10;

printf("%d!=%ld\n",k,fun(k));

)

解題思路:

第一處:條件判斷缺少圓括號(hào)。

第二處:判斷相等的符號(hào)是==。

程序定義了NxN的二維數(shù)組,并在主函數(shù)中自動(dòng)賦值。請(qǐng)編寫函數(shù)

fun(inta[][N],intn),函數(shù)的功能是:使數(shù)組左下三角元素中的值乘以n。例如:若n

的值為3,a數(shù)組中的值為

|197||397|

a=[238|則返回主程序后a數(shù)組中的值應(yīng)為|698|

|456||121518|

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

請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何你編寫的若干語(yǔ)句。

給定源程序:

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N],intn)

{

inti,j;

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

for(j=O;j<=i;j++)

a[i][j]*=n;

)

main()

{inta[N][N],n,i,j;

printf("*****Thearray*****\n");

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

{fbr(j=0;j<N;j++)

{a[i][j]=rand()%10;printf("%4d",a[i][j]);}

printf("\n");

}

don=rand()%10;while(n>=3);

printf("n=%4d\n",n);

fun(a,n);

printf("*****THERESULT*****\n");

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

{for(j=0;j<N;j-H-)printf("%4d",a[i][j]);

printf("\n");

)

NONO();

}

解題思路:

本題是利用兩重循環(huán)給二維數(shù)組左下三角元素中的值乘以n。

參考答案:

intfun(inta[][N],intn)

{

intij;

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

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

a[i][j]*=n;

)

※※※※※※※※※※※※※※※※※※※※※※※※※

第09套:

給定程序中,函數(shù)fun的功能是將不帶頭節(jié)點(diǎn)的單向鏈表結(jié)點(diǎn)數(shù)據(jù)域中的數(shù)據(jù)從小到大排

序。即若原鏈表結(jié)點(diǎn)數(shù)據(jù)域從頭至尾的數(shù)據(jù)為:10、4、2、8、6,排序后鏈表結(jié)點(diǎn)數(shù)據(jù)域從

頭至尾的數(shù)據(jù)為:2、4、6、8、10。

請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)

果。

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

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

給定源程序:

#include<stdio.h>

#include<stdlib.h>

#defineN6

typedefstructnode{

intdata;

structnode*next;

}NODE;

voidfun(NODE*h)

{NODE*p,*q;intt;

p=h;

while(p){

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

q=p.next;

/**********8und**********/

while(q)

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

{t=p->data;p->data=q->data;q->data=t;}q=q->next;

}

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

p=p.next;

)

}

NODE*creatlist(inta[])

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

h=NULL;

for(i=0;i<N;i-H-)

{q=(NODE*)malloc(sizeof(NODE));q->data=a[i];

q->next=NULL;

if(h==NULL)h=p=q;

else{p->next=q;p=q;}

)

returnh;

)

voidoutlist(NODE*h)

{NODE*p;

P=h;

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

{printf^"\nHead");

do

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

printfi("->End\n");

main()

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論