版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2023年遼寧省丹東市全國計算機(jī)等級考試
C語言程序設(shè)計測試卷(含答案)
學(xué)校:班級:姓名:考號:
一、2.填空題(10題)
1.下面程序的功能是:從輸入的正整數(shù)中選3個數(shù)進(jìn)行輸出,要求這些
數(shù)都是2的倍數(shù),請?zhí)羁铡?/p>
main()
{intaJ=0;
scanf("%dH,&A);
do
{if(a>0&&a%2==0)
{printf(u%d\nM,A);i+-;}
if(i!=3)
{scanf(u%dH,&A);}
}while(());
)
2.下列程序的功能:對輸入的一行字符中的數(shù)字字符的字面值累加,輸
出此累加和,請?zhí)羁铡?/p>
#include<stdio.h>
#include<ctype.h>
main()
{charc;
inta,s=0;
while()
if(isdigit(c))
{a=c-'0';s+=a;}
printf("s=%d';s);
3.以下程序的輸出結(jié)果是【】。
main()
{char*p[]={“BOOL“,“OPK“,”H“,“SP”};
inti;
for(i=3,i>=0;i-,i-)printf(1,%cn,*p[i]);
printf(n\nH);
)
4.下面程序的運(yùn)行結(jié)果是【
voidswap(int*a,int*b)
(
int*tp;
t=a;a=b;b=t;
1
main()
(
intx=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf(n%d%d\n",*p/q);
)
5.以下程序運(yùn)行后的輸出結(jié)果是()。
#include<stdio.h>
main()
{intx=20;
printf("%d",0<x<20);
printf("%d\nu,0<x&&x<20);
6.有以下程序:
#include<stdio.h>
main()
{intt=l,i=5;
for(;i>=0;i—)t*=i;
printf(n%d\nu,t);
)
執(zhí)行后的輸出結(jié)果是【
7.若輸入字符串:(圖片),則以下while循環(huán)體將執(zhí)行【】次。
while((ch=getchar())=='e')printf("*");
8.若有如下結(jié)構(gòu)體說明:
structSTRU
{inta,b;charc:doubled;
stmctSTRU*p1,*p2;
);
請?zhí)羁眨酝瓿蓪數(shù)組的定義,t數(shù)組的每個元素為該結(jié)構(gòu)體類型。
[]t[20]
9.軟磁盤最外邊的磁道數(shù)是【】號磁道。
10.以下程序運(yùn)行后的輸出結(jié)果是【】
#include<stdio,h>fun(inta)
{intb=0;staticintc=3;
b++;c++;
return(a+b+c);
main()
inti,a=5;
for(i=0;i<3;i++)prinff(n%d%d",i,fun(a));
printf(M\nH);
二、單選題(10題)
11.有如下程序main(){charch⑵[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[i][j]
>'\0';j+=2)s=10*s+p[i]葉O;printf("%d\n\s);}該程序的輸出結(jié)果
是
A.69825B.63825C.6385D.693825
12.程序調(diào)試的任務(wù)是()。
A.設(shè)計測試用例B.驗證程序的正確性C.發(fā)現(xiàn)程序中的錯誤D.診斷和
改正程序中的錯誤
13.
(2)已知二義樹后序遍歷序列是CDABE,中序遍歷序列是CADEB,看的前序遍歷序列是
().、
A)ABCDEB)ECABDC)EACDBD)CDEAB
14.有以下程序
#include<stdio.h>
intfun(intx,inty)
{if(x==y)return(x);
elsereturn((x+y)/2);
main()
{inta=4,b=5,c=6;
printf("%d\n”,fun(2*a,fun(b,c)));
)
程序運(yùn)行后的輸出結(jié)果是
A.3B.6C.8D.12
15.對十移動平均算法,是計算某變量之前n個數(shù)值的算術(shù)平均,正確的
說法是()
A.空間復(fù)雜度是0(1)B.空間復(fù)雜度是O(n)C.空間復(fù)雜度是O(logn)D.
空間復(fù)雜度是O(nlogn)
16.有以下程序:
#include<stdio.h>
main()
{intb[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=l;
for(i=0;i<3;i++)
for(j=l;j<=i;j++)t+=b[i][b|j][i]];
printf(n%d\n",t);
)
程序運(yùn)行后的輸出結(jié)果是()oA.lB.3C.4D.O
17.有如下程序:
main
{intx=l,a=0,b=0;
switch(x)
case0:b++;
case1:a++;
case2:a++.b++;
)
printf("a=%d,b=%d\n",a,b);
}
該程序的輸出結(jié)果是()。
A.a=2,b=lB.a=l,b=lC.a=l,b=0D.a=2,b=2
18.有以下程序:
#include<stdio.h>
main()
(
inty=9;
for(;y>0;y-)
if(y%3==0)
printfCu%d,,,-y);
}
程序的運(yùn)行結(jié)果是()o
A.852B.963C.741D.875421
19.對長度為n的線性表進(jìn)行順序查找,在最壞情況下需要比較的次數(shù)
為()。
A.125B.n/2C.nD.n+1
20.帶有頭節(jié)點的單向鏈表head,其3個數(shù)據(jù)節(jié)點A、B、C的連接關(guān)
系如下圖所示:
p
headdtnextdtnextdtnext
頭節(jié)點ABC
節(jié)點類型的定義為
structlink
{doubledt;
structlink*next;
};
若指針P指向A節(jié)點,在不改變P指向的前提下,以下選項中不能訪
問C節(jié)點數(shù)據(jù)成員dt的表達(dá)式是()O
A.*(*p).next->next->dt
B.p->next->next->dt
C.(*(*(*p).next),next),dt
D.(*(p->next->next)).dt
三、程序設(shè)計題(10題)
21.
學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放人結(jié)構(gòu)
體數(shù)組stu中,請編寫函數(shù)proc(),其功能是:按分?jǐn)?shù)的高低排列學(xué)生
的記錄,高分在前。注意:部分源程序給m如下。請勿改動main()
函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編
寫的若干語句。試題程序:
&iacludeh>
"MineMII
trtiedrfstruct
chari?uinLIO]i
mt
STRIX,.
vodproc<STREl**])
mti?ji
STRECti
for(i-INVM,++)/,州?立法按從?■IL
樽序?/
Cor(j"Oij<M-)
??4J1?<?[?+H?)/?核》散的昌?梅列伊4
的記*?高分住■?/
)
voidmain<)
STRECMW[M]-<<-GA005".Ml.<*GA003"
7??
(?GA002"<491.<*GAOO4\S5)?LGAOOI.?9I).
(?GAOO7".72ld*GAOO8*.?4).(?GA004".B7I.
<"GAOI$a.tS)?<*GAOI3*?I1)?CGA012M.MI.
CGAOU".9ll.rGAOir.M).CGAO|7".M).
<aGA0l8a.?4h<<GA01C*,7t)li
mtii
pffor(ntw>i
pnntf(aThrdata“1rfnoried>\a'')i
for<i**Oii<Mii++)
〃修行■由4個學(xué)生圮上
printK*\n*)(
pnnt(<<XM%4da?*tu(iXa)(
22.請編寫函數(shù)proc(),它的功能是計算:s=(In(1)4-ln(2)+In(3)
4-…+ln(m))0.5在C語言中可調(diào)用log(n)函數(shù)求In(n)o例如,
若nl的值為30,則proc()函數(shù)值為8.640500o注意:部分源程序
給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函
數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:
Uinclu4rVzdlik.h>
9includeVcomo.h>
,includeVtldCh>
includr<OMth.k>
doubleprocCuMm)
)
voednwiatH>
?y?tefn(dS)i
pnntfCaHAn>?proc(30))i
23.
請編寫函數(shù)proc(),該函數(shù)的功能是:將M行N列的二維數(shù)組中的數(shù)
據(jù),按行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個數(shù)存放在形
參n所指的存儲單元中。例如,若二維數(shù)組中的數(shù)據(jù)為:13233343
1424344415253545則一維數(shù)組中的內(nèi)容應(yīng)該是1323334314243444
15253545O注意:部分源程序給出如下。請勿改動main()函數(shù)和
其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編寫的若
干語句。試題程序:
UincludeV?ididh>
BidprodUM("HM?b.im?n.mtmm.mtnn)
raidmain(>
totarril0][]0]?((33,33.33.33).(44.44.44.44).
{S$.SS.S5.5$H.??ji
ui<?C100]-iO)?n?Oi
e
pnfM?"ThrnMtnxt\n>i
(or<iwOiiOt[+?)
for?>
pnM((*X3J*??rr[iXj]H
pnntfC-Xn")?
pnx<*rr?a?6n?3?4)?
pnnth*ThcAamy.f).
IWO.YIHi*?)
printf<*Yt3d.?*[i])i
pnnth
24.請編一個函數(shù)fun(ohlr*str),該函數(shù)的功能是把字符串中的內(nèi)容逆置。
例如,字符串中原有的字符串為asdf9,則謫用該函數(shù)后,串中的內(nèi)容為
9fdsao
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號
中填人所編寫的若干語句。
試題程序:
#include<string.h>
#include<conio.h>
#include<stdio.h>
#defineN100
voidfun(char*str)
(
)
voidmain
(
chara[Nl;
FILE*out:
printf(nEnterastring:");
gets(a);
printf("Theorigiralstringis:");
puts(a);
fun(a):
printf("Thestringaftermodified:");
puts(a);
strcpy(a,^Welcome!");
fun(a);
ut=fopen("outfile.dat“,“w");
fprintf(out,n%sH.a);
fclose(out);
}
25.請編寫函數(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()的
花括號中填入所編寫的若干語句。試題程序:
Sinclude<sfdio.h>
floatproc(float?a.intn>
voidmain()
float?core[30],sx{90.5.72.80.61,5.55.60).
aven
aver?-proc(stcore.6)t
print?"\nAveragescoreis:%5.2(\n".aver)j
26.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入
結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc(),該函數(shù)的功能是:把高于等于
平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,高于等于平均分的學(xué)生人數(shù)通
過形參n傳回,平均分通過函數(shù)值返回。注意:部分源程序給出如下。
請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的
花括號中填入所編寫的若干語句。試題程序:
■inclvd*<MAQIIL>
?MMWMU
trpv4e4—
Ichar
40MMe??
)
:TTKKl*i
doubleH?r(FnilX'?a.STItEt'.,■??>
ruwlmaM<)
STRIT???(M]?((*GAOS*.?1.(*GAM*.7?H
1"GAOZ.??、?I?Gg..31?<*GA0l???”?
<,GA07.g.].GAM,M.<*GWM.
(aGA09*.MKI>GAIIe.nu(*GAir.nK
(*GAI0*.90HI
STRECMM」
NMi
dOwMeavet
proH**??!??A?)?
print”,TheS44etawWli.
b.h*r(KMXT.3(?\a*.auw>?
for<??0?Yiu〉
pruM”?%?外,1V?1G1―NJa,
pnntl(
27.請編寫函數(shù)proc,其功能是:將str所指字符串中除下標(biāo)為偶數(shù)、同
時ASCII碼值為奇數(shù)的字符外,其余的字符都刪除,串中剩余字符所形
成的一個新串放在t所指的數(shù)組中。例如,若str所指字符串中的內(nèi)容為
ABCDEFG12345,其中字符B的ASCII碼值為偶數(shù),所在元素的下標(biāo)為
奇數(shù),因此必須刪除;而字符A的ASCII碼值為奇數(shù),所在數(shù)組中的下
標(biāo)為偶數(shù),因此不應(yīng)當(dāng)刪除。依此類推,最后t所指的數(shù)組中的內(nèi)容應(yīng)
是ACEGO
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號
中填人所寫的若干語句。
試題程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidproc(char*str,chart[])
(
}
voidmain
(
charstr[1001,t[100];
system(nCLS");
printf("\nPleaseenterstringstr:n);
scanf(n%Sn,str);
proc(str,t);
printf(H\nTheresultiS:%s\n",t);
28.…請編寫函數(shù)。fun能是:判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)
據(jù)的位數(shù)不超過4位),并將結(jié)果通過函數(shù)值返回。例如:若輸入的數(shù)
據(jù)為123,則輸出結(jié)果為:輸入的數(shù)字是3位。注意:部分源程序存在
PROG1.C中,請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函
數(shù)fun的花括號中填入所縮寫的若干語句。試題程
?include<stdio.h>
voidNONOO;
intfun(intn)
main()
{intn,place;
do{
printf("請輸入一個4位以內(nèi)的正整數(shù):");
scanf("id1,,&n);
>while(n<0IIn>9999);
place=fun(n);
printf(1"愉人的數(shù)字是1d位\n**,place);
NONOO;
)
voidNONOO
</?本語數(shù)用于打開文件,帖人數(shù)據(jù),調(diào)用語數(shù),輸出數(shù)物,關(guān)閉文件。?/
FILE?fp,?wf;
inti,n,place;
fp-fopen("c:\test\in.dat","r");
wf-fopen("c:\fcest>put.datH,"w");
for(1-0;i<10;i*4)
(
fscanf(fp,"W",(n);
place-fun(n);
fprintf(wf,"W\n",place);
i
fclose(fp);
fclose(wf);
序:1
29.請編寫一個函數(shù),用來刪除字符串中的所有空格.例如,輸入
abcdefgh,則輸出為abcdefgho注意:部分源程序給出如下。請勿改
動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號
中填入所編寫的若干語句。試題程序:
£mclucfteh>
3mrlude<rtypc.h>
?includeVeftidb>
3Mirludr<*rd!ib.hA
?noidprocXHuir??ir>
voidnuin<)
charatlCSIJ(
*CLS*>?
pruidCInput???nngt")?
get?(?tr)i
|>roc<*rr>i
prtntfC*????lri/?\rT.wr)i
30.編寫函數(shù)fun,其功能是:求ss所指字符串中指定字符的個數(shù),并返
回此值。例如,若輸入字符串123412132,輸入字符為1,則輸出3。
注意:部分源程序在文件PRO。.C中。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括
號中填入你編寫的若干語句。
?include<stdio.h>
#include<獻(xiàn)ring,h>
defineM81
intfun(char?ss,charc)
tnain()
Ichar?[M],ch;
voidNONO();
printf(0\nPle?Menterastring:**)?gels(a);
printf("\nPleaseenterachar:");ch=j(etchar();
printf(**\nThcnumberoftherharis:%d\n",fun(a,ch));
NONO();
I
voidNONO()
!/?本函數(shù)用于打開文件,It人測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。?/
inti;
FILE?rf.?wf;
chara[M],b[M],ch;
rf=fbpen("in.dat",*r");
wf=fopen("out.dat"."w");
for(i=0;i<10;i+?)
I
fi?anf(rf,a);
ficanf(rf."%?*.b);
ch=?b;
fprintf(wf."%c?%d\n",ch,fun(a,ch));
I
fcloee(rf);
fcioee(wf):
四、2.程序修改題(10題)
31.下列給定程序中,函數(shù)fun()的功能是:根據(jù)輸入的3個邊長(整型
值),判斷能否構(gòu)成三角形:若能構(gòu)成等邊三角形,則返回3,若是等腰
三角形,則返回2,若能構(gòu)成三角形則返回1,若不能,則返回0。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<math,h>
intfun(inta,intb,intc)
{if(a+b>c&&b+c>a&&a+c>b)
{if(a==b&&b==c)
//*************Icund1不不不不不不不不不不不不不不/f
return1;
elseif(a==b||b==c||a==c)
return2;
//*T**T**T**T**T**T**T**T**T**T**T**T**T*?11n0j個個個個個個個個-個k-個k-個k-個k-個k-個x/
elsereturn3;
elsereturn0;
main()
{inta,b,c,shape;
printf(H\nInputa,b,c:");
scanf("%d%d%dn,&a,&b,&c);
printf(M\na=%d,b=%d,c=%d\n",a,b,c);
shape=fun(a,b,c);
printf(n\n\nTheshape:%d\nM,shape);
}
32.給定程序MOD11.C中函數(shù)fun的功能是:輸出M行M列整數(shù)方
陣,然后求兩條對角線上元素之和,返回此和數(shù)。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1?include<stdio.h>
2?defineM5
3/…………found…………/
4intfun(intn,intxx[][])
5(int1,j,sum?0;
HH
6printf(\nThe%dx%dmatrix:\nr
M,M);
7for(i-0;i<M;
8{for(j-0;j<M;
9/……*…**found…………/
10printf("if",xx(i][j]);
11printf("\n");
12}
13for(i-0;i<n;i++)
14sum+■xx[i](i]+xx[i][n-i-1];
15return(sum);
16
17main()
18{intaa[M][M]-({l#2r3,4r5)t
[4,3,2,1,0},[6,7,8,9,0},{9,8,7,6,5},
(3,4,5,6,7));
19printf("\nThesumofallelements
on2diagnalsis%d."rfun(M,aa));
20
33.下列給定程序中,函數(shù)fun()的功能是:從n個學(xué)生的成績中統(tǒng)計出
低于平均分的學(xué)生人數(shù),此人數(shù)由函數(shù)值返回,平均分存放在形參aver
所指的存儲單元中。例如輸入8名學(xué)生的成績:
80.5607290.59851.58864
則低于平均分的學(xué)生人數(shù)為4(平均分為75.5625)0
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
#defineN20
intfun(float*s,ihtn,float*aver)
{floatave40.0;
intcount=0,k,i;
for(k=0;k<n;k++)
/^1*^1*^1*1*1**X**1^/
/平不不不不不不不不不不不不rciinri不不不不不不不不不不不不不不/
t=s[k];
ave=t/n;
for(i=0;i<n;i++)
if(s[i]<ave)count++;
/*1**1*^1*^1**1*1*1**X**1^*1^?1**X*f
/斗不不不不不不不不不不不不rcnnri不不不不不不不不不不不不不不/
*aver=&ave;
returncount;
}
main()
{floats[30],aver;
intm,i;
clrscr();
printf("\nPleaseenterm:");scanf
(“%d”,&m);
printf("\nPleaseenter%dmark:\n",m);
for(i=0;iprintf(M\nThenumberofstudents:
%d\nH,fun(s,m,&aver));
printf("Ave=%f\nM,aver);
)
34.下列給定程序中函數(shù)fun()的功能是:將長整型數(shù)中每一位上為偶數(shù)
的數(shù)依次逆向取出,構(gòu)成一個新數(shù)放在t中。高位在低位,低位在高位。
例如當(dāng)s中的數(shù)為25846513時,t中的數(shù)為6482。請改正函數(shù)fun()
中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
voidfun(longS,long*t)
(
intd;
longsl=l,i=l;
*t=0;
while(s/i>0)
i=i*10;
i=i/10;
while(s>0)
d=s/i
/*1**1**!<*1**!**!*1*!**!**!**!**!**!**!**!*、!?*!**!**!*/
/個個個個個個個個個個個個個T/~\I]nn個個個個個個個個個個個個個/
if(d%2!=0)
/木木木木木木木木木木木木木found木木木木木木木木木木木木木/
t=d*sl+t;
sl*=10;
)
S=S%i;
i=i/10;
}
)
main()
(
longS,t;
clrscr();
printf(n\nPleaseenterS:");
scanf(u%ldM,&s);
fun(S,&t);
printf(HTheresultis:%ld\n'\t);
}
35.給定程序MOD11.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)!
tfinclude<stdio.h>
linclude<math.h>
3intfun(intn,int*value)
4{intd,s,i;
5found……*
6d?0;s?0;
7for(i?l;i<*5;i*+).d*d*n;
8*value-d;
9for(i?l;i<?3;i++)
10{s-s+d%10;
************found*********1
12d?d\10;
13
14returns;
15
16main()
17(intntsum,v;
18do
19{printf(**\nEntern(2<n<8):w);
scanf("%d"r&n);)
20while(n<?211n>-8);
21sum-fun(n,4v);
22printf("\n\nTheresult:\nvalue-
%dsum?%d\n\n"rvrsum);
23
36.給定程序M0D11.C中函數(shù)fun的功能是:求出以下分?jǐn)?shù)序列的前
n項之和。和值通過函數(shù)值返回到main函數(shù)。
23581321
T'293959T才……
例如,若n=5,則應(yīng)輸出:8.391667。
請改正程序中的錯誤,使它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1?linclude<stdio.h>
/************found************
3voidfun(intn)
4{inta,b,c,k;doubles;
5s?0.0;a-2;b?1;
6for(k-1;k<-n;k++){
7/…………found**………?
8s-s*(Double)a/b;
9c=a;a?a4-b;b-c;
10
11returns;
12
13main()
14(intn?5;
15printf(n\nThevalueoffunction
is:%lf\nw,fun(n));
16
37.已知一個數(shù)列從0項開始的前3項:0,0,1,以后的各項都是其相
鄰的前3項之和。下列給定的程序中,函數(shù)fun()的功能是:計算并輸出
該數(shù)列前n項的和sum。n的值通過形參傳入。例如,當(dāng)n=10時,程序
的輸出結(jié)果應(yīng)為96.0000000
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#inckide<conio.h>
#include<stdio.h>
doublefun(intn)
(
doublesum,SO,SI,S2,S;
intk;
sum=1.0;
if(n<=2)
sum=0.0;
s0=0.0;
si=0.0;
s2=1.0;
/^j/
/個*T**T**T**T*個個*T*個*T*個個個TC]lt^ri*T**T**T**T**l**T**T**T**T**T**T**T**T*/
for(k=4;k<n;k++)
S=S0+S1+s2;
Sum+=s;
S0=sl;
Sl=s2;
/?1??!??!??1??14?f??f??f??f??1??1??(??1*1*!??£??f??f?*X**1**X*?1??1??!??1??1?/
不**********10iir)ci不不不不不不不不不不不不不/
S2=S;
returnsum;
)
main()
(
intn;
clrscr();
printf(nInputN=");
scanf(u%d",&n);
printf(n%f\nn,fun(ni);
38.下列給定程序中,函數(shù)fun()的功能是:從3個紅球,5個白球,6個
黑球中任意取出8個作為一組,進(jìn)行輸出。在每組中,可以沒有黑球,
但必須要有紅球和白球。組合數(shù)作為函數(shù)值返回。正確的組合數(shù)應(yīng)該是
15。程序中i的值代表紅球數(shù),j的值代表白球數(shù),k的值代表黑球數(shù)。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注童:不要改動main函數(shù),不得增行或刪行,也不得更改程序的蛀構(gòu)。
試題程序:
#include<stdio.h>
intfun()
{inti,j,k,sum=0;
printf(M\nTheresult:\n\n");
f7*7*7*7*7*7*7*7*7*£1*1*7,7.7.*1**1**1*7.*1*q./
/不不不不不不不不不不不不不不[()]]]]([不不不不不不不不不不不不不不不/
for(i=0;i<=3;i++)
{for(j=l;j<=5;j++)
{k=8-i-j;
J/
/不不不不不不不不不不不不不不iintl不不不不不不不不不不不不不不不不不不/
if(k>=l&&k<=6)
{sum=sum+l;
printf(nred:%4dwhite:%4d
black:%4d\n",i,j,k);
)
)
)
returnsum;
)
main()
{intsum;
sum=fun();
printf("sum=%4d\n\n",sum);
)
39.下列給定程序中,函數(shù)fun()的功能是;利用插入排序法對字符串中
的字符按從小到大的順序進(jìn)行排序。插入法的基本方法是:先對字符串
中的頭兩個元素進(jìn)行排序,然后把第3個字符插入到前兩個字符中,插
入后前3個字符依然有序;再把第4個字符插入到前3個字符中,待排
序的字符串已在主函數(shù)中賦予。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<String.h>
#include<stdio.h>
#defineN80
voidinsert(char*aa)
{ihti,j,n;charch;
n=strlen(aa);
for(i=l;i<n;i++)
//
frTwrTwrTwrTwrTwrTwrTwrTwrTw?Tw?T??[??[??[??[??[??[??[??TwrTwrTwrTwrTw?[??[?t
{c=aa[i];
j=i-l;
while((j>=0)&&(ch<aafjl))
{aa[j+l]=aa[j];
j-;
)
aa[j+l]=ch;
)
}
main()
{chara[NJ="QWERTYUIOPASDFGHJKIMNBVCXZM;
inti;
printf("Theoriginalsiring:%s\n'\a);
insert(a);
printf(HThestringaftersorting:
%s\n\nn,a);
40.在主函數(shù)中從鍵盤輸入若干個數(shù)放入數(shù)組中,用。結(jié)束輸入并放在
最后一個元素中。下列給定程序中,函數(shù)fun()的功能是計算數(shù)組元素中
值為負(fù)數(shù)的平均值(不包括0)。
例如:數(shù)組中元素的值依次為43,47,-21,53,-8,12,0,則程序的
運(yùn)行結(jié)果為-25.333333。
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
doublefun(intx[])
doublesum=0.0;
intc=0,i=0;
t1/
/*I*n**I**I**T**T**T**r*T**T**T'*r*rrrA]]口][不不不不不不不不不不不不不/
while(x[i]==0)
if(x[i]<0)
sum=siim+x[il;
c++;
}
i++;
)
/*1**1**1**1**1**1*4,71/
/*T**T**T**T**7**T**T*****T**T**T**T*?11Fl/-1個個個個個個個個個個個/
sum=sum\c;
returnsum;
main()
(
intxllOOO];
inti=0;
clrscr();
printf("\nPleaseentersomedata(endwith
0):”);
do
(
scanf(u%dH,&x[i]);
}while(x[i++]!=0);
printf(,'%f\nH,fun(x));
)
五、程序改錯題(2題)
41.
下列給定的程序中,函數(shù)proc()的功能是:將str所指字符串中出現(xiàn)
的tl所指字符串全部替換成t2所指字符串,所形成的新的字符串放在
w所指的數(shù)組中。在此處,要求U和t2所指字符串的長度相同。例如,
當(dāng)str所指字符串中所指的內(nèi)容為abcdabcdef9,tl所指字符串中的內(nèi)容
為be,t2所指字符串中的內(nèi)容為11時,結(jié)果在w所指的數(shù)組中的內(nèi)容
應(yīng)為alldalldefg。請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:
不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試
題程序:
?mrltMi*<aiWhlkll>
■mrlvtir<??nag,b>
mlpforidiaf??tr?cW**tl?dwr
Mrcpy<w??rr>?
whir(?*>
whtlr<r>
ri?eb*raka
wtuie(?<)(????r??4-??r
ria*'+
<CLS*>>
prmii<*\mPV?w??1**Mrw***tt>>?
KMU<
prwid<*\nP1e?*rc?Metwhstragtl(*>i
KMlf<>?
prwuK*\AP1MM?M*raMhurwgt2a*>?
if<?trica(ti>*-strimfG)
|Noc(atr?tl.U.w>?
ptnMf(*\aTWe/.?八
)
ebe*Enori?aria?<
42.
下列給定程序中,函數(shù)fun的功能是求兩個非零正整數(shù)的最大公約數(shù),
并作為函數(shù)值返回。
例如,若nmnl和num2分別為49和21,則輸出的最大公約數(shù)為7;若
num1和num2分別為27和81,
則輸也的最大公約數(shù)為27o
請改正程序中的錯誤,使它能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或硼行,也不得更改程序的結(jié)構(gòu)!
試題程序:
#tnclude<stdio.h>
fun(>ntajntb)
(int3
if(a<b)
Ega汨=t;
r=^a%b;
whi!e(r!=O)
■
{a=b;b=r;T=a%b;}
/********?**■*學(xué),*~訓(xùn)4,*******?豐
return?;
)
voidmain()
|intnuml9num2fa;
printfCInputnumlnum2:M);
scanfC%d%d".&numL&num2);
printf(nnum1num2=%d\n\n*miml,nuni2);
a=<un(numl,num2);
prin出FiemaxfnrnncommOTdivisoris%d\n\n"㈤;
六、操作題(2題)
43.函數(shù)delete(s,i,n)是作用是從字符串s中刪除從第i個字符開始的n
個字符,請?zhí)羁铡?/p>
voiddelete(charslJ,inti,intn)
{intj,k,length=O;
while(s[length])
[];
-i;
j=i
)
if(I])
{k=i+n;
if(i+n<=length)
while(k<length)
s|j++J=slk++J;
s[j尸\0';
}
44.以下fun函數(shù)的功能是在N行M列的整型二維數(shù)組中,選出一個
最大值作為函數(shù)值返回,請?zhí)羁铡?設(shè)M,N已定義)
intfun(inta[N][M])
{inti,j,row=0,col=0;
for(i=0;i<N;i++)
for(j=O;j<M;j++)
if(a[i][j]>a[row][col])(row=i;col=j;)
return();
}
參考答案
l.i<3
2.
分析題目可知,程序中運(yùn)用函數(shù)c=getchar。從標(biāo)準(zhǔn)輸入設(shè)備讀取下一
個字符,而且是一行的字符(即沒有換行),所以條件為
(c=getchar())!-\\n'o
\r\n
\r\n
3.S0
4.3535解析:在主函數(shù)中通過定義和賦初值使p和q分別指向了X和
y.執(zhí)行函數(shù)調(diào)用“swap(p,q)1把p和q中的地址值傳給了形參指針.變
量a和b,a和b分別指向了實參x和y。在函數(shù)sw叩()中交換了指針變
量a和b的值,并沒有交換a和b指向的實參的值,所以函數(shù)調(diào)用返回
后x和y依舊是原來的值。
5.1010解析:表達(dá)式0<x<20,首先計算0<x,其值為1,再計算
20,其值為1,輸出1;表達(dá)式0<x&&x<20,0<x為1,x<20為0,
再計算1&&0,其值為0,輸出0。所以輸出結(jié)果為10。
6.00解析:本題是計算5*4*3*2*1*0的值,結(jié)果為0。
7.00解析:函數(shù)getchar。是從鍵盤得到用戶輸入的一個字符。用戶輸入
的第1個字符是a,不管后面輸入的是什么ch的值都是宣,因此條件
(ch=getchar())==?為假,這個循環(huán)不會被執(zhí)行。
8.structSTRUstructSTRU解析:結(jié)構(gòu)體類型是構(gòu)造數(shù)據(jù)類型,是用戶自
己定義的一種類型。
結(jié)構(gòu)體類型的定義:
struct結(jié)構(gòu)體類型名
成員項表;
定義結(jié)構(gòu)體變量的的形式為:
struct結(jié)構(gòu)體類型名變量1,變量2,……
其中變量包括:一般變量、指針變量、數(shù)組變量等。
9.0
10.1011121210111212解析:用static關(guān)鍵字聲明的變量稱為靜態(tài)局部變
量。靜態(tài)局部變量只在編譯時賦一次初值,以后再次調(diào)用函數(shù)時不再重
新賦初值,而是保留上次函數(shù)調(diào)用結(jié)束時的值。程序中的變量c為靜態(tài)
變量,當(dāng)再次調(diào)用fun函數(shù)時,變量c不再被賦初值,變量c的值為上
次調(diào)用fun函數(shù)時所保留下來的值,具體在程序運(yùn)行過程中的體現(xiàn)如下:
當(dāng)i=0時,第一次調(diào)用fun(5),這時a=5,b=0,c=3,執(zhí)行b++,c++,
得到b=l,c=4,則a+b+c=10,返回主函數(shù)輸出010;當(dāng)i=l時,第二
次調(diào)用fun(5),這時a=5,b=0,c=4,執(zhí)行b++,C++,得到b=l,c=5,
貝IJa+b+c=ll,返回主函數(shù)輸出111;當(dāng)i=2時,第三次調(diào)用fun(5),這
時a=5,b=0,c=5,執(zhí)行b++,C++,得到b=l,c=6,則a+b+c=12,返
回主函數(shù)輸出212;當(dāng)i=3時,循環(huán)結(jié)束,所以輸出結(jié)果為:010111212o
1LC解析:該題稍微難一點°主要要搞清楚以下幾點:①定義了一個
指針數(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]|jl
或p[i][j]o②對二維數(shù)組Ch的初始化,使其第一行ch[O]中存入了字符
串“693
12.D程序調(diào)試的任務(wù)是診斷和改正程序中的錯誤。
13.C
14.B
15.A
16.C
本題考查了兩層for循環(huán)。外層循環(huán)增量i的值作為內(nèi)層循環(huán)執(zhí)行次數(shù)
的值使用。
17.A
當(dāng)x為1時,執(zhí)行easel,a自加等于1,因為case1后沒有break,接
著執(zhí)行case2,此時a的值為2,b自加為1,故選擇A選項。
18.A第1次for循環(huán),y的值為9,“y%3”的值為0,滿足if條件輸出“?
?廣即先自減后輸出,所以輸出8;第2次for循環(huán),y的值為7,“y%3”
的值為1,不滿足if條件,不執(zhí)行printf語句;第3次for循環(huán),y的
值為6,“y%3”的值為Q滿足if條件輸出即先自減后輸出,所以
輸出5;第4次for循環(huán),y的值為4,不滿足if條件,不執(zhí)行printf語
句;第5次for循環(huán),y的值為3,滿足if條件,輸出2;第6次for循
環(huán),y的值為1,不滿足if條件,不執(zhí)行printf語句。故本題答案為A
選項。
19.CC?!窘馕觥繉€性表進(jìn)行順序查找時,從表中的第一個元素開始,
將給定的值與表中逐個元素的關(guān)鍵字進(jìn)行比較,直到兩者相符,查找到
所要找的元素為止。在最壞情況下,要查找的元素是表的最后一個元素
或查找失敗,這兩種情況都需要將這個元素與表中的所有元素進(jìn)行比較,
因此比較次數(shù)為no
20.A
link結(jié)構(gòu)體中的next是鏈表中下一個節(jié)點的地址。由于p當(dāng)前指向節(jié)
點A,因此p->next是B的地址。p->next->next是C的地址,訪問C
的節(jié)點數(shù)據(jù)成員dt可以使用C的地址訪問,即p->next->next->dt,選
項B正確?;蛘呤乖陆庖谩?”運(yùn)算符:(*p)表示節(jié)點A,(*p).next表
示B的地址,*((*p).next)表示節(jié)點B,(*((*p).next)).next表示C的地
址,*((*((*p).next)).next)表示節(jié)點C,所以C的數(shù)據(jù)成員dt可以表示
為(*((*(*p).next).next)).dt,因為“『運(yùn)算符優(yōu)先級高于“*”運(yùn)算符,所以
也可以寫為(*(*(*p).next).next).dt,選項C正確。同理,也可以既使用
指針運(yùn)算符,又使用解引用運(yùn)算符來訪問C的節(jié)點數(shù)據(jù)成員出,即
(*(p->next->next)).dt,選項D正確。選項A中,*p表示A節(jié)點,
(*p).next表示節(jié)點B的地址,由于運(yùn)算符的優(yōu)先級高于“*”運(yùn)算
符,因此先執(zhí)行即表達(dá)式(*可.優(yōu)*1?>11強(qiáng)1?〉出引用了(2節(jié)點的數(shù)
據(jù)成員dt,然后再執(zhí)行解引用運(yùn)算“*",這是錯誤的。故本題答案為A
選項。
21.
【解析】要按分?jǐn)?shù)的高低排列學(xué)生的記錄,可以使用冒泡排序法。將每
一個學(xué)生的成績與其他學(xué)生的成績相比較,對不符合要求的記錄交換位
22.
【解析】由題目中所給表達(dá)式可知,表達(dá)式的值為m項表達(dá)式的和然后
開平方??梢允紫韧ㄟ^m次循環(huán)求得m項表達(dá)式的和,然后將其和開
平方并返回到主函數(shù)當(dāng)中。
23.
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年自動化設(shè)備快速運(yùn)輸合同3篇
- 二零二五版家電回收與翻新銷售合同范本3篇
- 二零二五版茶葉種植基地農(nóng)業(yè)科技示范推廣合同3篇
- 二零二五版礦山洞采礦施工環(huán)保責(zé)任合同3篇
- 二零二五年度建筑工程款抵頂工業(yè)地產(chǎn)使用權(quán)合同3篇
- 二零二五版LNG運(yùn)輸及船舶維修合同3篇
- 二零二五版企業(yè)股份回購合同協(xié)議書6篇
- 二零二五年高鐵站廣告牌施工與商業(yè)合作合同范本3篇
- 二零二五年度深圳物業(yè)管理合同規(guī)定2篇
- 二零二五年度防雷安全風(fēng)險評估與整改合同3篇
- 農(nóng)民工工資表格
- 【寒假預(yù)習(xí)】專題04 閱讀理解 20篇 集訓(xùn)-2025年人教版(PEP)六年級英語下冊寒假提前學(xué)(含答案)
- 2024年突發(fā)事件新聞發(fā)布與輿論引導(dǎo)合同
- 地方政府信訪人員穩(wěn)控實施方案
- 小紅書推廣合同范例
- 商業(yè)咨詢報告范文模板
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 幼兒園籃球課培訓(xùn)
- AQ 6111-2023個體防護(hù)裝備安全管理規(guī)范知識培訓(xùn)
- 老干工作業(yè)務(wù)培訓(xùn)
- 基底節(jié)腦出血護(hù)理查房
評論
0/150
提交評論