版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2022年江蘇省泰州市全國計算機(jī)等級考試
C語言程序設(shè)計真題(含答案)
學(xué)校:班級:姓名:考號:
一、2.填空題(10題)
1.以下程序的運行結(jié)果是【】。
#include<stdio.h>
main()
{intfun();fun();}
fun()
{staticinta[3]={O,l,2};
inti;
for(i=0;i<3;i++)a[i]+=a[i];
for(i=0;i<3;i++)printf("%d,",a[i]);
printf("\n");)
2.數(shù)據(jù)庫系統(tǒng)中實現(xiàn)各種數(shù)據(jù)管理功能的核心軟件稱為【】。
3.單元測試又稱模塊測試,一般采用【】測試。
4.下面程序的運行結(jié)果是()。##include<stdio.h>main(){inta,s,n,
m;a=2;s=0;n=l;m=l;while(m<=4){n=n*a;s=s+n;++m;}
printf("s=%d",s);}
5.若有以下程序
main()
{inta=4,b=3,c=5,t=0;
if(a<b)t=a;a=b;b=t;
if(a<c)t=a;a=c;c=t;
printf("%d%d%dln",a,b,c);
)
執(zhí)行后輸出結(jié)果為o
6.類是一個支持集成的抽象數(shù)據(jù)類型,而對象是類的【】。
7.語句:x++;、++x;、x=x+l;、x=l+x;,執(zhí)行后都使變量x中的值增
1,請寫出一條同一功能的賦值語句(不得與列舉的相同)【】。
8.若輸入thistestterminal,以下程序的輸出結(jié)果為:terminaltestthiso
請?zhí)羁铡?/p>
#defineMAXLINE20
[]
{inti;
char*pstr[3],str[3][MAXLINE];
for(i=0;i<3;++)pstr[i]=str[i];
for(i=0;i<3;i++)scanf("%s",pstr[l]);
sort(pstr);
for(i=0;i<3;i++)prntf("%s",pstr[i]);
sort([])
char*pstr[3];
{inti,j;
char*p;
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
if(strcmp(*(pstr+i,*(pstr+j)>0
{p=*(pstr+i);
*(pstr+i=【】;
*(pstr+j)=p;
)
9.下面程序的功能是輸出數(shù)組s中最大元素的下標(biāo),請?zhí)羁铡?/p>
main()
{intk,p,s[]={l,-9,7.2,-10,3);
for(p=0,k=p;p<6;p++)
if(s[p]>s[k])[]
printf("%d\n",k);}
10.當(dāng)線性表的操作無插入和刪除時,采用【】結(jié)構(gòu)為好。
二、單選題(10題)
11.現(xiàn)有以下結(jié)構(gòu)體說明和變量定義,如圖所示,指針P、q、r分別指
定一個鏈表中連續(xù)的3個結(jié)點。
datadatancxldatanext
....................A|AI----1-------HBI---1-------HcI—|----?......
TPTqG
structnode
{hardata;
structnode*next;)*P,*q,*r;
現(xiàn)要將q和r所指結(jié)點交換前后位置,同時要保持鏈表的結(jié)構(gòu),下列
不能完成此操作的語句是()。
A.q-:>next=r->next;p—:>next=r;rm:>next=q;
B.q-:>next=r;q->next=r->next;r->next=q;
C.q-:>next=r->next;r->next=q;p->next=r;
D.q-:>next=q;p->next=r;q->next=r->next;
12.將一棵有100個結(jié)點的完全二叉樹從上到下,從左到右依次對結(jié)點
進(jìn)行編號,根結(jié)點的編號為1,則編號為49的結(jié)點的左孩子的編號為
A.98B.99C.50D.48
13.若有定義“inta,b,c;"以下程序段的輸出結(jié)果是()。
a=l1;b=3;c=0;
printf("%d\n,,,c=(a/b,a%b));
A.2B.0C.3D.l
14.設(shè)長度為n的鏈隊列用單循環(huán)鏈表表示,若只設(shè)頭指針,則入隊操作
的時間復(fù)雜度為0
A.O(l)B.O(log2n)C.O(n)D.O(n2)
15.在inta=3,int*p=&a;中,*p的值是()
A.變量a的地址值B.無意義C.變量p的地址值D.3
16.下面的哪個保留字不能作為函數(shù)的返回類型()。
A.voidB.intC.newD.long
17.對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)
/2的排序方法是()。
A.快速排序B.冒泡排序C.直接插入排序D.堆排序
18.下列關(guān)于線性表、棧和隊列的敘述,錯誤的是0。
A.線性表是給定的n(n必須大于零)個元素組成的序列
B.線性表允許在表的任何位置進(jìn)行插入和刪除操作
C.棧只允許在一端進(jìn)行插入和刪除操作
D.隊列允許在一端進(jìn)行插入在另一端進(jìn)行刪除
19.設(shè)有如下函數(shù)定義:
#include<stdio.h>
intfun(intk)
{if(k<1)return0;
elseif(k==1)return1;
elsereturnfun(k-l)+l;
)
若執(zhí)行調(diào)用語句“n=fUn(3);",則函數(shù)fun總共被調(diào)用的次數(shù)是()。
A.2B.3C.4D.5
20.有如下程序main(){charch[2][5]={"6937","8254"},*p[2];inti,
j,s=0;for(i=0;i<2;++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[il[jl
>'\0';j+=2)s=10*s+p[i]|j]-'0';printf("%d\n",s);}該程序的輸出結(jié)果
是
A.69825B.63825C.6385D.693825
三、程序設(shè)計題(10題)
21.編寫函數(shù)fun(),其功能是:實現(xiàn)兩個字符串的連接(不要使用庫函
數(shù)strcat),即把p2所指的字符串連接到pl所指的字符串的后面。例
如,分別輸入下面兩個字符串:“FirstString——”“SecondString”程序
輸出:“FirstString——SecondString”注意:部分源程序給出如下。請
勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。試題程序:
#includeVsidlib.h>
%includeVntdio.h>
4includeVconio.h>
voidfun(charpl[].charp2[])
(
I
voidmain()
(
charsl[80],$2[40]i
system(i
printf(*Entersiands2An*)?
?canf(**?si?s2)i
prind(=%s\n*?si)i
printf("s2=%An"?s2)i
printf("Invokefun(si.s2)An")i
fun(?l?s2>i
printf("Afterinvoking:\n*>:
printf("%s\n*?si)t
22.規(guī)定輸入的字符串中只包含字母和+號。編寫函數(shù)fun,其功能是:除了字符串前導(dǎo)和
尾部的母號外,將其他的*號全部刪除。形參h已指向字符串中第一個字母,形參P指向字
符串中最后一個字母。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。
例如,若字符串中的內(nèi)容為“"fVBCPEW""*",刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是
“…?ABCDEFG…
注■:部分源程序給出如下。
詁勿改動主函效main和其他島最中的任何內(nèi)容,僅在函數(shù)firn的花括號中填入你編寫的若干語句。
試痍程序:
#inrlude<Atdio.h>
voidfun(char*&char叱.。**p)
tnain()
\char48H,%>(;
printf('*Enlera訪電卬?
用嶼
t=f?s;
whfle(*t)
t++:
t-;
while(*t=***)
1-;
while(*t==1*')
t-;
wh舊*f=T巧
f++;fun(sX0;
printf(,fThestringafterdel?led:\n");
pute(ft);
23.請編寫函數(shù)proc(),該函數(shù)的功能是:計算n門課程的平均分,計
算結(jié)果作為函數(shù)值返回。例如,有6門課程的成績是90.5,72,80,
61.5,55,60,則函數(shù)的值為69.83o注意:部分源程序給出如下。
請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的
花括號中填入所編寫的若干語句。試題程序:
includeV*dio.h>
floatproc(float■a.intn)
voidmain()
<
float5coref30]0<90.5?72?80.61.5?55?6O)?
aven
averproc(scorc.6>?
print?"\nAveragcscoreis:%5.2f\nM.aver)i
24.編程計算下列表達(dá)式:s=n!(n從鍵盤上輸入)
25.請編寫函數(shù)voidproc(intx,intpp[],int*n),它的功能是:求出能
整除x且不是偶數(shù)、不為1的各整數(shù),并按從大到小的順序放在PP所
指的數(shù)組中,這些除數(shù)的個數(shù)通過形參n返回。
例如,若x的值為30,則有3個數(shù)符合要求,它們是15,5,3o
注意:部分源程序給出如下。
請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括
號中填入所編寫的若干語句。
試題程序:
Ctnrludr<como.h>
?vnrludrV*idio.h>
Umrlude<vtdhkh>
raidpruc<HM■?intppCJ?,每(?n)
Ridmmn()
mi1000]?ai?i?
"CLS*)?
anttiregefnumber(\n*)?
?can1(.%4"?&*)i
p<roc<K?Atv?&n>i
(or”,?-1il>?*0ii——)
|>nnt((*Sd*?arr£i])i
print!(e\n")?
26.
編寫函數(shù)如n,其功能是:刪除一個字符串中指定下標(biāo)的字符。其中,
a指向原字符串,刪除指定字符后
的字符串存放在b所指的數(shù)組中,n放指定的下標(biāo)。
例:輸入一個字符串"world",然后輸入3,則調(diào)用該函數(shù)后的結(jié)果為
"word"o
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)丘m的花括
號中填入你編寫的若干語句。
試題程序:
#inelude<5tdio.h>
#include<conio.h>
#dcfineLEN20
voidfiinfchara(]tcharb[],intn)
voidmain()
.(charstrl[LENJ.str2(LEN];
intn;
printf(wEnterthestringzXn");
gets(slrl);
printfEnterihepositionrfthestringdeleted:*1);
fun(strLstr2,n);
prinrfC^Thenewstringis:%s\n?Lr2);
27.n個人的成績存放在score數(shù)組中,請編寫函數(shù)proc(),它的功能是
將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在down
所指的數(shù)組中。例如,當(dāng)score數(shù)組中的數(shù)據(jù)為{99,80,40,56,59,
84,60,76,100}時,函數(shù)返回的人數(shù)應(yīng)該是4,down中的數(shù)據(jù)應(yīng)為
40565960。注意:部分源程序給出如下。請勿改動main()函數(shù)和其
他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編寫的若干
語句。試題程序:
9aneludek>
9inriudeVcooio.h>
Stnrludr<Ndxxh>
SincludeV,tr?ng.h>
uMproc(miscorrf;.mt???m4owrCl>
raidmainC)
inil?n?down[9]t
mi?corr{9]*
?0?7<.|00)|
?ywt?n(-CLS-)i
R*proe<Mx>e*?9?dowiOi
pnntf(*\ndowntotbeaverage?corraret*)?
k>r<i,Oiyn■+?>
pnntf(*%d*?downf|]>i
print".\n*)t
28.
編寫一個函數(shù),該函數(shù)可以統(tǒng)計一個長度為2的字符串在另一個字符串
中出現(xiàn)的次數(shù)。例如,假定輸入的字符串為abcdefabcdeabceabcdef,子
字符串為cd,則應(yīng)當(dāng)輸出3。注意:部分源程序給出如下。請勿改動
主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號中填入
所編寫的若干語句。試題程序:
8mclude^,Htdbb.hJ>
8Miclwd*<?MUOLk>
9IBrlttd*<BtdKKk>
9iarludrVwiring,
ntpmiciiar?Mr.char?M^Hrtr?
roidMMIH>
cliar
KMfll
*ClJ5*)|
pnMf(-aAtVW??e)i
get?(Btr)i
pnMf<attAfV,
getw(?ubatr>e
W(Mr),
pwts(Mibair)i
■?prac《ur,MIIM”*
pmiRKAB*?■)?
29.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入
結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,其功能是:按分?jǐn)?shù)的高低排列學(xué)
生的記錄,高分在前。
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括
號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#defineM16
typedefstruct
(
charnum[10];
intS;
)
STREC:
voidproc(STRECa[])
(
inti,j;
STRECt;
for(i=l;i++)/*用冒泡法來按從高到低
排序*/
for(j=0;j++)0
if(a[j].s)//*按分?jǐn)?shù)的高低排列學(xué)生
的記錄,高分在前*/
{t=a[j];a[j]=a[j+l];a[j+l]=t;)
)
voidmain
{
STRECstu[M]={{"GA005",85),{"GA003",76},
{"GA002",69},{"GA004",85),"GA001",91),
{"GA007",72),{"GA008",64),{"GA006",87),
{"GAO15",85),{"GA013",91),{"GAO12",64),
{"GAO14",91),{"GAO11",66),{"GAO17",64},
{"GAO18",64),{"GA016",72}};
inti;
proc(stu);
printf("Thedataaftersorted:\n");
for(i=0;i++)
if(i%4==0)
〃每行輸出4個學(xué)生記錄
printf("n");
printf("%s%4d",stu[i],num,stu[i].s);
}
printf("\n");
30.編寫函數(shù)fun(),其功能是:求出1?1000中能被7或11整除,但
不能同時被7和11整除的所有整數(shù),并將其放在a所指的數(shù)組中,通過
n返回這些數(shù)的個數(shù)。注意:部分源程序給出如下。請勿改動main()
函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入所編
寫的若干語句。試題程序:
儀k>
△ificludeVcoxxh>
9includeVctdio,
eid?n)
wdidmain<)
mtaa[lOOO]?B?ki
fun<*a?&*a)i
(oce-Oib<iiih++)
10?-0)
IpnotfC*%i
I〃一行。9個It
el?e
pnm{(aK$d-?“Ch]”
pnnift*\n*>B
四、2.程序修改題(10題)
31.下列給定程序中函數(shù)fun()的功能是:從低位開始取出長整型變量s
中偶數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在t中。例如,當(dāng)s中的數(shù)為
7654321時,t中的數(shù)為642。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
/*************found**************/
voidfun(longs,longt)
{longsI=10;
s/=10;
*t=s%10;
/*************found**************/
while(s<0)
{s=s/100;
*t=s%10*sl+*t;
sl=sl*10;
)
)
main()
{longs,t;
clrscr();
printf("\nPleaseenters:");scanf
("%ld",&s);
fun(s,&t);
printf("Theresultis:%ld\n",t);
)
32.給定程序中函數(shù)fun的功能是:將一個由八進(jìn)制數(shù)字字符組成的字
符串轉(zhuǎn)換為與其值相等的十進(jìn)制整數(shù)。規(guī)定輸入的字符串最多只能包含
5位八進(jìn)制數(shù)字字符。
例如,若輸入:77777,則輸出將是:32767。
請改正程序中的錯誤,使它能得到正確結(jié)果。
[注意]不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
[試題源程序]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
intfun(char*p)
(
intn;
/**********found**********/
n=*p-'o';
p++;
while(*p!=0){
/**********found**********/
n=n*8+*p-'o';
p++;
)
returnn;
}
main()
(
chars[6];inti;intn;
printf("Enterastring(Ocataldigits):");
gets(s);
if(strlen(s)>5)
(
printf("Error:Stringtoolonger!\n\n");
exit(O);
)
for(i=0;s[i];i++)
if(s[i]<'O'||s[i]>7)
printf("Error:%cnotisocataldigits!\n\n",s[i]);
exit(O);
)
printf("Theoriginalstring:");
puts(s);
n=fun(s);
printf("\n%siSconveredtointegernumber:%d\n\n",s,n);
}
33.給定程序M0D11.C中函數(shù)fun的功能是:計算n的5次方的值(規(guī)
定n的值大于2、小于8),通過形參指針傳回主函數(shù);并計算該值的個
位、十位、百位上數(shù)字之和作為函數(shù)值返回。
例如,7的5次方是16807,其低3位數(shù)的和值是15。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1jlinclude<stdio.h>
2ifinclude<math.h>
3intfun(intn,int*value)
4{intd,s,i;
5/?育???????????found,*****,******
6d-0;s-0;
7for(iwl;i<-5;i++).d?d*n;
8*value-d;
9for(i?l;i<w3;i++)
10{s-s^d%10;
11w*founcj***
12d?d\10;
13
14returns;
16main()
17(intn,sum,v;
18do
19{printf(H\nEntern(2<n<8):w);
RH
scanf(%dr&n);)
20while(n<?21In>?8);
21sum-fun(n,4v);
22printf(w\n\nTheresult:\nvalue?
%dsum-%d\n\n",vrsum);
23
34.下列給定程序中,函數(shù)fun()的功能是:求整數(shù)x的y次方的低3位
值。例如,整數(shù)5的6次方為15625,此值的低3位值為6250
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
longfun(intx,inty,long*p)
{inti;
longt=l;
/******不*******fk)und不***不**********!
for(i=l;i<y;i++)
t=t*x;
*p=t;
/**************^)und***************/
t=t/1000;
returnt;
}
main()
{longt,r;intx,y;
printf("\nlnputxandy:");scanf
("%ld%ld",&x,&y);
t=fun(x,y,&r);
printf("\n\nx=%d,y=%d,r=%ld,last=
%1d\n\n",x,y,r,t);
)
35.下列給定程序中,函數(shù)fun()的功能是計算并輸出high以內(nèi)的素數(shù)
之和。high由主函數(shù)傳給fun()函數(shù)。若high的值為100,則函數(shù)的值
為1060o
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
#include<math.h>
intfun(inthigh)
(
intsum=0,n=0,j,yes;
while(high>=2)
yes=l;
for(j=2;j<=high/2;j++)
/*************found**************/
ifhigh%j==O
yes=0;
break;
/*************found**************/
if(yes==0)
sum+=high;
n++;
)
high-;
)
returnsum;
)
main()
(
clrscr();
printf("%d\n",fun(lOO));
)
36.N個有序整數(shù)數(shù)列已放在一維數(shù)組中,給定下列程序中,函數(shù)fun()
的功能是:利用折半查找算法查找整數(shù)m在數(shù)組中的位置。若找到,則
返回其下標(biāo)值:反之,則返回-1。
折半查找的基本算法是:每次查找前先確定數(shù)組中待查的范圍:low和
high(low<high),然后把m與中間位置(mid)中元素的值進(jìn)行比較。如果
m的值大于中間位置元素中的值,則下一次的查找范圍放在中間位置之
后的元素中;反之,下次查找范圍落在中間位置之前的元素中。直到low
>high,查找結(jié)束。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#defineN10
/*********不***found*不***不***不********不**/
voidfun(inta[],intm)
{intlow—0,high=N-l,mid;
while(low<=high)
{mid=(low+high)/2;
if(m<afmid])
high=mid-l;
/*************found*********************/
elseif(m>=a[mid])
low=mid+l;
elsereturn(mid);
)
return(-l);
)
main()
{inti,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;
printf("a數(shù)組中的數(shù)據(jù)如下:");
for(i=0;i<N;i++)printf("%d",a[i]);
printf("Enterm:");scanf("%d",&m);
k=fun(a,m);
if(k>=0)printf("m=%d,index=%d\n",m,k);
elseprintf("Notbefound!\n");
37.下列給定程序中,函數(shù)fun()的功能是:將m(lSmqO)個字符串連接
起來,組成一個新串,放入pt所指字符串中,例如:把3個串a(chǎn)bc,CD,
EF串聯(lián)起來,結(jié)果是abcCDEF。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<string.h>
#include<stdio.h>
/*************found**************/
intfun(charstr[][10],intm,char*pt)
{intk,q,i,j=O;
for(k=0;k<m;k++)
{q=strlen(str[k]);
j+=q;
for(i=0;i<q;i++)
/*************found**************/
pt[i]=str[k,i];
pt+=q;
pt[O]=0;
)
Pf
}
main()
{intm,h;
chars[10][10],p[120];
clrscr();
printf("\nPleaseenterm:");
scanf("%d",&m);gets(s[01);
printf("\nPleaseenter%dstring:In",m);
for(h=0;h<m;h++)gets(s[h]);
fun(s,m,p);
printf("\nTheresultis:%s\n",p);
38.給定程序MODH.C中函數(shù)fun的功能是:應(yīng)用遞歸算法求形參a
的平方根。求平方根的迭代公式如下:
xl=-(xO+—)
2xO
例如,a為2時,平方根值為:1.414214O
請改正程序中的錯誤,使它能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
1?include<stdio.h>
2finclude<math.h>
3/****?*??**found**********/
4doublefun(doublea,dounlexO)
5{doublexl,y;
6xl?(x0>a/xO)/2.0;
7/**********found***w******/
8if(fabs(xl-xo)>0.00001)
9y?fun(arxl);
10elsey-xl;
11returny;
12
13main()
14{doublex;
15printf("Enterx:w);scanf
16printf("Thesquarerootof%lf
w
is%lf\nrxrfun(xr1.0));
17
39.下列給定程序中,函數(shù)fun()的功能是:統(tǒng)計字符串substr在字符串
srt中出現(xiàn)的次數(shù)。例如,若字符串為aaas1kaaas,子字符串為as,則
應(yīng)輸出20
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
fun(char*str,char*substr)
{inti,j,k,num=0;
/*************found**************/
for(i=0,str[i],i++)
for(j=i,k=0;substr[k]==str[j];k++,j++)
if(substr[k+l]=='\0')
{num++;
break;
)
returnnum;
)
main()
{charstr[80],substr[80];
printf("Inputastring:");
gets(str);
printf("Inputasbustring:");
gets(substr);
printf("%d\n",fun(str,substr));
40.給定程序MODH.C中fun函數(shù)的功能是:分別統(tǒng)計字符串中大寫
字母和小寫字母的個數(shù)。
例如,給字符串s輸入:AAaaBBbl23CCccccd,則應(yīng)輸出結(jié)果:upper=
6,lower=8O
請改正程序中的錯誤,使它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1finclude<stdio.h>
2/………?found………?/
3voidfun(char*srinta,intb)
4(
5while(*s)
6{if(*s>-&&*s<?2)
7/?**?****w*found**********/
8?a?a+l;
9if(*s>?,a*&&*s<-1zf)
10/…?……found………?/
11
12
13)
14}
15main()
16{chars[100];intupper-Q,lower
?0;
17printf("\nPleaseastring:n);
gets(s);
18fun(sr&upper,slower);
19printf(H\nupper-%dlower■
w
%d\nrupperzlower);
20)
五、程序改錯題(2題)
41.下列給定程序中,函數(shù)proc()的功能是:用遞歸算法計算斐波拉契
級數(shù)列中第n項的值。從第一項起,斐波拉契級數(shù)序列為1,1,2,3,
5,8,13,21,…例如,若給n輸入8,該項的斐波拉契級數(shù)值為21。
請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main
()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:
ninclude<ai<ho.b>
brMproc(mtc>
//????found????
?wiich(g>i
corOrreturnOi
//????????
cate11cawtireiurn11
}
muni<proc(g1)4pcoc(g-2)>i
midnuiiaC>
km?fibiifMnt
pnfii(<*Input?tv)i?c?af(<Kdfl?&n>i
pnntf<*B-%d\n*?n>i
fib=peoc<n>i
prmt??fib=-Kd\n\n*?rtb)i
42.下列給定程序中,函數(shù)proc的功能是根據(jù)輸入的:個邊長(整型值),
判斷能否構(gòu)成三角形:若能構(gòu)成等邊三角形,則返回3;若是等腰三角
形,則返回2;若能構(gòu)成三角形則返回1;若不能,則返回0。
例如,輸入3個邊長為3,4,5,實際輸入時,數(shù)與數(shù)之間以Enter鍵分
隔而不是逗號。
請修改程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<math.h>
intproc(inta,intb,intc)
if(a+b>c&&b-c>a&&a+c〉b)
if(a==b&&b==c)
//****found****
return1;
elseif(a==b||b==C||a==c)
return2;
//****found****
elsereturn3;
}
elsereturn0;
)
voidmain
(
inta,b,c,shape;
printf("\nlnputa,b,c:");
scanf("%d%d%d",&a,&b,&c);
printf("\na=%d.b=%d,c=%d\n",a,b,c);
shape=proc(a,b.c):
printf("\n\nTheshape:%d\n",shape);
)
六、操作題(2題)
43.給定程序中,函數(shù)fun的功能是:調(diào)用隨機(jī)函數(shù)產(chǎn)生20個互不相同
的整數(shù)放在形參a所指數(shù)組中(此數(shù)組在主函數(shù)中已置0)。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確
的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
linclude<stdlib.h>
2*include<stdio.h>
3*defineN20
4voidfun(int*a)
5(inti.x,n?0;
6x?rand()%20;
7/****??**?*found*****???**/
8while(n<_1_)
9(for(i?0;i<n;i++)
10/???*******found******?***/
11if(x-a[i))_2_;
12/**********found**********/
13if(iM_3_){a[n]-x;n++;)
14x?rand()%20;
15)
16}
17main()
18(intx[N)-(0}
19fun(x);
20printf(wTheresult:\nH);
21for(iw0;i<N;i++)
n
22(printf("%4drx[i]);
23if((i4-l)%5-?0)printf(R\nH);
24}
25printf(w\n\nw);
26
44.以下程序的運行結(jié)果是【】。
#include<stdio.h>
longfib(intg)
{switch(g)
{case0:return0;
case1:
case2:return1;}
return(fib(g-l)+fib(g-2));}
main()
{longk;
k=fib(5);
printf("k=%51d\n",k);}
參考答案
1.0240480,2,4\r\n0,4,8解析:本題主要考查for循環(huán)語句的使用以
及靜態(tài)局部變量的特點。
2.數(shù)據(jù)庫管理系統(tǒng)
數(shù)據(jù)庫管理系統(tǒng)(DBMS)
3.白盒法白盒法
4.s=30s=30解析:分析循環(huán)條件“m=l,m<=4",所以循環(huán)4次。第1
次n=n*a=2,s=s+n=2;m=2。第2次:n=n*a=4,s=s+n=6;m=3。第
3次:n=n*a=8,s=s+n=14;m=4o第4次:n=n*a=16,s=s+n=30o
5.503503解析:此處需注意的是:如果if后面的條件為真,只執(zhí)行其
后的一條語句或一條復(fù)合語句,如果if后面的條件為假,只執(zhí)行else后
面的一條語句或一條復(fù)合語句。先判斷表達(dá)式“a<b”為假,不執(zhí)行,t=a”,
但執(zhí)行"a=b;b=t;",s的值為3,b的值為0。在判斷表達(dá)式“a<c”,
值為真,所以執(zhí)行后面的3條語句,t=a;a=c;c=t",結(jié)果a的值為5,c
的值為3,所以最后輸出的結(jié)果為5、。和3。
6.實例將屬性、操作相似的對象歸為類,也就是說,類是具有共同屬性、
共同方法的對象的集合。所以,類是對象的抽象,對象則是其對應(yīng)類的
一個實例。
7.x+=1;
8.main()pstr*(pstr+j)
9.k=p;k=p;解析:為要尋找數(shù)組中的最大元素的下標(biāo),需先預(yù)設(shè)1個
臨時最大元素的下標(biāo),并順序逐一考查數(shù)組的元素,當(dāng)發(fā)現(xiàn)當(dāng)前元素比
臨時最大元素更大時,就用當(dāng)前元素的下標(biāo)更新臨時最大元素下標(biāo)。直
至考查了數(shù)組的全部元素后,這臨時最大元素下標(biāo)就是數(shù)組的最大元素
下標(biāo)。通常預(yù)設(shè)的最大元素下標(biāo)是數(shù)組的首元素下標(biāo),考查是從首元素
開始順序向后繼元素考查。程序中,存儲臨時最大元素下標(biāo)的變量是k,
變量p控制順序考查的循環(huán)控制變量。當(dāng)發(fā)現(xiàn)當(dāng)前元素s[p]比臨時最大
元素s[k)更大時,應(yīng)該用p更新ko所以在空框處應(yīng)填入代碼“k=p;”。
10.順序順序解析:當(dāng)線性表的操作無插入和刪除時,在對線性表進(jìn)行
操作時,不能改變元素的位置,采用順序結(jié)構(gòu)的效率高于鏈?zhǔn)浇Y(jié)構(gòu)。因
為采用順序結(jié)構(gòu),對元素的查找可通過計算得到。
11.D
由題目中線性鏈表的定義可知,要將q和r所指的結(jié)點交換前后位
置,只要使q指向r的后一個結(jié)點,P指向r結(jié)點,r指向q結(jié)點即
可。而在選項D中,r->next=q,這時r指向的節(jié)點為q;p->next=r,
這時P指向的節(jié)點為r;q->next:r->next,因為r節(jié)點已經(jīng)指向q,所
以執(zhí)行這個語句后q又指向q,所以選項D不正確。
12.A
13.AC語言中,逗號運算符可以把兩個以上(包含兩個)的表達(dá)式連接
成一個表達(dá)式。逗號運算符的優(yōu)先級是所有運算符中級別最低的,逗號
運算符保證左邊的子表達(dá)式運算結(jié)束后才進(jìn)行右邊的子表達(dá)式的運算。
也就是說,逗號運算符是一個序列點,其左邊所有子表達(dá)式運算都結(jié)束
后,才對其右邊的子表達(dá)式進(jìn)行運算,并以最右邊表達(dá)式的值作為整個
逗號表達(dá)式的值。因此C的值為“a%b”,即“11%3=2”。故本題答案為A
選項。
14.C
15.D
16.C
17.D
各種排序方法中最壞情況下需要比較的次數(shù)分別為眉泡排序n(n-
1)/2、快速排序n(n-l)/2、簡單插入排序n(n-l)/2>希爾排序0(nl.5)、
簡單選擇排序n(n-l)/2、堆排序O(nlog2n)
18.A解析:線性表的插入和刪除允許在任何位置進(jìn)行,所以B選項的
說法是正確的;棧的操作只允許在棧頂進(jìn)行,因此,棧稱為先進(jìn)后出表
(FILO,FirstInLastOut),或“后進(jìn)先出''表(LIFO,LastInFirstOut),所以
C選項說法也是正確的,?隊列(queue)是只允許在一端刪除,在另一端插
入的順序表,允許刪除的一端叫做隊頭(front),允許插入的一端叫做隊
尾(rear),因此隊列亦稱作先進(jìn)先出(FIFO,FirstInFirstOut)的線性表,
或后進(jìn)后出(LILO,LastInLastOut)的線性表。所以D選項說法也是正確
的。
19.B執(zhí)行調(diào)用語句“n=fim(3);”,3被當(dāng)作實參傳遞進(jìn)去,進(jìn)行了一次調(diào)
用。3被當(dāng)作實參傳進(jìn)去后,程序會執(zhí)行“elsereturnfun(k-1)+1;",函數(shù)
被調(diào)用了第2次,參數(shù)是3-1,也就是2。2被當(dāng)作參數(shù)傳進(jìn)去后,程序
會執(zhí)行"elsereturnfun(k-l)+1;”函數(shù)被調(diào)用了第3次,參數(shù)是2-1,也
就是1。I被當(dāng)作實參傳進(jìn)去后,程序會執(zhí)行“elseif(k=l)return1;",函
數(shù)不再被遞歸調(diào)用。所以最終結(jié)果為3次。故本題答案為B選項。
20.C解析:該題稍微難一點。主要要搞清楚以下幾點:①定義了一個
指針數(shù)組char*p⑵后,程序中第一個循環(huán)for(i=0;i<2;i++)p[i]=ch[i];
的作用,是使指針數(shù)組的p[0]元素(它本身是一個指針)指向了二維數(shù)組
ch的第一行字符串,并使指針數(shù)組的p[l]元素指向二維數(shù)組ch的第二
行字符串,這樣,就使指針數(shù)組P和二維數(shù)組Ch建立起了一種對應(yīng)關(guān)
系,以后對二維數(shù)組ch的某個元素的引用就有兩種等價的形式:ch[i][j]
或②對二維數(shù)組Ch的初始化,使其第一行ch[O]中存入了字符
串“693
21.
【解析】本題考查字符串連接函數(shù)的實現(xiàn)。本題通過兩個for循環(huán)完成
功能。第一個循環(huán)的作用是計算出字符串的長度,如果pl是‘\0'(即
此字符是字串尾),退出循環(huán),i中保存的數(shù)值即是字串長度。第二個循
環(huán)的作用是循環(huán)遍歷字串p2的字符,利用語句“pl[i++]=p2|j]將p2中
的字符逐個插到字串pl后。
22.
(答案1
voidfnn((Jiar*a,char*h,char*p)
{mti=0;
char*q=a;
while(q<h)
(
咽=*q;q++;i++;
)
while(q<p)(
if(*q|二,巧
(
加仁*q;i++:
1,
q++;
I
while(*q)
(
a(i土,;》.甲+;
)
a(i]=W;
}
(解析】
h和p分別指向第一個和最后個字母,先將前導(dǎo)”號進(jìn)行保存.再保存中間的非*號字符,然后保存
尾“號,加上結(jié)束標(biāo)識符-
23.
【解析】要計算n門課程的平均分,首先可以求得n門課程的總分,然
后除以n得到其平均分,最后將其平均分返回到主函數(shù)中。
24.\n\t#include'stdio.h'
\nmain
\n{longt=l;
\ninti;
\nfor(i=1;i<=10;i++)
\nt=t*i;
\nprintf('%ld',t);}
\n
25.
【解析】按照題目中要求,求出能整除x且不是偶數(shù)的各整數(shù)。首先
判斷小于等于整數(shù)x的所有奇數(shù)是否能被x整除,將能被x整除的奇
數(shù)放入數(shù)組pp中。最后將數(shù)組pp中元素的個數(shù)返回到主函數(shù)中。
26.
I答案】
voidfun(chara[J,charH|.in:n)
(inii,k=0;
/*將不是指定下標(biāo)的字符存人數(shù)組b中*/
b[k?+卜叩h
b|k上/?在字符串最后加上結(jié)束標(biāo)識符*/
)
(解析】
根據(jù)題意要蒯除字符串中指定下標(biāo)的字將,也就是保得非指定下標(biāo)的字符.所以if語句為說!』),在字
符串木是加上字符率結(jié)束標(biāo)識符W
27.
【解析】要找到所有學(xué)生中成績低于平均分?jǐn)?shù)的人數(shù),首先需要算出所
有學(xué)生的平均成績。然后將所有學(xué)生的成績與平均成績相比較。將低于
平均分?jǐn)?shù)學(xué)生的記錄存放在新的數(shù)組中,并將低于平均分?jǐn)?shù)的學(xué)生數(shù)返
回給主函數(shù)。
28.
【解析】要計算出主字符串中包含子字符串的個數(shù),應(yīng)該檢查主字符串
中從第一個到最后一個字符。每出現(xiàn)一個計數(shù)變量加1,最后將得到的
個數(shù)返回給主函數(shù)。
29.voidproc(STRECa[])
{
inti,j;
STRECt;
for(i=l;i<M;i++)//用冒泡法來按從高到低排序
for(j=0;j++)
if(a[j].s)//按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前
{t=a[j];a[j]=a[j+l];a[j+l]=t;}
)
30.
【解析】根據(jù)題意,所寫函數(shù)要用for循環(huán)實現(xiàn)對整數(shù)1~1000的遍歷;
通過if語句找出能被7或11整除,但不能同時被7和11整除的所有整
數(shù),因為同時被7和11整除的整數(shù)一定能被77整除,且不能被77整
除的數(shù)不一定就是能被7或11整除,可得出表達(dá)式“(i%7==0||i%ll==O)
&&i%77!=0";再按題目要求,將找出來的整數(shù)放在a所指的數(shù)組中,
通過n返回這些數(shù)的個數(shù)即可。
31.(1)錯誤:voidfun(longslongt)正確:voidfun(longslong*t)(2)錯誤:
while(s<0)正確:while(s>0)⑴錯誤:voidfun(longs,longt)正確:void
fun(longs,long*t)\r\n(2)錯誤:while(s<0)正確:while(s>0)解析:本
題考查函數(shù)調(diào)用方式和while循環(huán)語句中條件限制的方法。主函數(shù)中fun()
的調(diào)用方式說明fun()函數(shù)的參數(shù)應(yīng)當(dāng)為指針類型,所以voidfun(long
s,long。正確的寫法應(yīng)該是voidfun(longs,long*t)0
32.(1)錯誤:*p正確:*p(2)錯誤:'o';正確3o';⑴錯誤:*p\r\n正確:
*p\r\n(2)錯誤:'o';\r\n正確:'o';
33.(l)d=l;s=0;(2)d=d/10;(l)d=1;s=0;(2)d=d/10;解析:
本題中函數(shù)的功能是計算n的5次方的值(規(guī)定n的值大于2、小于8),
通過形參指針傳回主函數(shù);并計算該值的個位、十位、百位上數(shù)字之和
作為函數(shù)值返回。本題解題過程首先是求5次方,然后對結(jié)果進(jìn)行截取
以及求和。
34.(1)錯誤:for:(i=l;i<y;i++)正確:for(i=l;i<=y;i++)(2)錯誤:
t=t/1000;正確:t=t%1000;⑴錯誤:for:(i=l;i<y;i++)正確:for(i=l;i
<=y;i++)\r\n(2)錯誤:t=t/1000;正確:t=t%1000;解析:我們先用
簡單的思想理解一下該程序,如果當(dāng)x=y=l時,程序的問題出在哪兒?
很簡單吧,所以for(i=l;i<y;i++)的循環(huán)條件應(yīng)該是for(i=l;i++),
另外,t=t/1000;中的錯誤是混淆了和“%”的定義對這樣的細(xì)節(jié)問題
務(wù)必注意。
35.(1)錯誤:ifhigh%j
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年房屋出租押金條款合同
- 2024年建筑項目施工質(zhì)量控制合同
- 2024年度產(chǎn)品代理銷售合同服務(wù)內(nèi)容
- 2024年技術(shù)咨詢合同標(biāo)的及其屬性
- 2024年房產(chǎn)交易代理權(quán)協(xié)議
- 2024年房產(chǎn)交易合同公證
- 2024年度銷售代理合同代理區(qū)域及銷售目標(biāo)
- 2024幕墻工程碳排放交易合同
- 2024年保密期限合同
- DB4114T 196-2023 冬小麥節(jié)水栽培技術(shù)規(guī)程
- 《建筑施工技術(shù)》課后習(xí)題答案(大學(xué)期末復(fù)習(xí)資料)
- 公司環(huán)境行政處罰事件處置預(yù)案
- 廣東開放大學(xué)風(fēng)險投資(本2022春)-練習(xí)4答案
- DB65∕T 3253-2020 建筑消防設(shè)施質(zhì)量檢測評定規(guī)程
- 二年級蘇教版數(shù)學(xué)上冊《7的乘法口訣》教案(公開課三稿)
- (完整PPT)半導(dǎo)體物理與器件物理課件
- ASTM B366 B366M-20 工廠制造的變形鎳和鎳合金配件標(biāo)準(zhǔn)規(guī)范
- JIS G4304-2021 熱軋不銹鋼板材、薄板材和帶材
- 2022年中級經(jīng)濟(jì)師-人力資源管理專業(yè)押題模擬試卷3套及答案解析
- 小學(xué)綜合實踐活動《認(rèn)識校園植物》優(yōu)秀PPT課件
- XRD在薄膜材料研究中應(yīng)用
評論
0/150
提交評論