版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年零售商鋪出租協(xié)議樣本
- 2024智能制造!智能工廠建設(shè)與運(yùn)營(yíng)合同
- 2024年金融產(chǎn)品認(rèn)籌登記服務(wù)合同3篇
- 2024年高科技企業(yè)員工知識(shí)產(chǎn)權(quán)歸屬及使用補(bǔ)充協(xié)議3篇
- 中國(guó)民用航空飛行學(xué)院《獸醫(yī)微生物學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 防汛搶救知識(shí)培訓(xùn)課件
- 長(zhǎng)治職業(yè)技術(shù)學(xué)院《內(nèi)科護(hù)理學(xué)上》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年股權(quán)讓渡協(xié)議及合作框架
- 2024年行政效率提升合同3篇
- 重塑團(tuán)隊(duì)文化的步驟計(jì)劃
- 《中國(guó)心力衰竭診斷和治療指南(2024)》解讀
- 服裝廠生產(chǎn)計(jì)劃模板
- 高速公路機(jī)電工程標(biāo)準(zhǔn)化施工管理質(zhì)量控制
- 頭條號(hào)策劃方案
- 維護(hù)社會(huì)穩(wěn)定規(guī)定
- 《牙髓血運(yùn)重建術(shù)》課件
- 山東省濟(jì)南市歷城區(qū)2023-2024學(xué)年四年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 工程管理培訓(xùn)教案
- 2006年高考數(shù)學(xué)試卷分析
- (完整版)二年級(jí)乘加乘減口算100題
- 函授學(xué)生畢業(yè)生登記表
評(píng)論
0/150
提交評(píng)論