版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2021年山西省陽(yáng)泉市全國(guó)計(jì)算機(jī)等級(jí)考試
C語(yǔ)言程序設(shè)計(jì)真題(含答案)
學(xué)校:班級(jí):姓名:考號(hào):
一、2.填空題(10題)
1.Jackson方法是一種面向[]的結(jié)構(gòu)化方法。
2.有以下程序:
#include<string.h>
structSTU
{charname[10];
intnum;};
voidf(char*name,intnum)
{structSTUs[2]={{"SunDan",20044},{"Penghua",20045)};
num=s[0].num;
strcpy(name,s[0].name);
}
main()
{structSTUs[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
p=&s[l];f(p->name,p->num);
printf("%s%d\n",p->name,p->num);
)
程序運(yùn)行后的輸出結(jié)果是【】。
3.若有定義inta[4][4]={{l,2,3,4},{0},{4,6,8,10},{1,3,
5,7}),則初始化后,得到的初值是o
4.表示“整數(shù)x的絕對(duì)值大于5”時(shí)值為“假”的C語(yǔ)言表達(dá)式是
5.在面向?qū)ο蠓椒ㄖ?,?lèi)之間共享屬性和操作的機(jī)制稱(chēng)為o
6.以下程序的輸出結(jié)果是____o
main()
{inta=l,b=2;
a=a+b;b=a-b;a=a-b;
printf("%d,%d\n",a,b);
)
7.在一個(gè)容量為15的循環(huán)隊(duì)列中,若頭指針front=6,尾指針Year
9,則該循環(huán)隊(duì)列中共有【】個(gè)元素。
8.以下程序運(yùn)行后的輸出結(jié)果是____o
main()
charc;intn=100;
floatf=10;doublex;
x=f*=n/=(c=50);
printf("%d%An",n,x);
9.以上程序運(yùn)行后的輸出結(jié)果是【】。
main()
{inti=10,j=0;
do
{j=j+i;i-;)
while(i>2);
printf("%d\n",j);
10.有以下程序
intfa(intx){returnx*x;}
intfb(intx){returnx*x*x;}
intf(int(*fl)(),int(*f2)(),intx)
{returnf2(x)-fl(x);}
main()
{inti;i=f(fa,fb,2);printf("%d\n",i);)
程序運(yùn)行后,輸出結(jié)果是【】。
二、單選題(10題)
11.有以下程序:
main
{intx,i;
for(i=l;i<=50;i++)
{x=i:
if(x%2=0)
if(x%3=0)
if(X%7=0)
printf("%d,i)”;
}
)
輸出結(jié)果是()。
A.28B.27C.42D.41
12.以下選項(xiàng)中,能用作用戶標(biāo)識(shí)符的是()。
A._0_B.8_8C.voidD.unsigned
13.以下敘述中錯(cuò)誤的是()。
A.C語(yǔ)言的可執(zhí)行程序是由一系列機(jī)器指令構(gòu)成的
B.用C語(yǔ)言編寫(xiě)的源程序不能直接在計(jì)算機(jī)上運(yùn)行
C.通過(guò)編譯得到的二進(jìn)制目標(biāo)程序需要連接才可以運(yùn)行
D.在沒(méi)有安裝C語(yǔ)言集成開(kāi)發(fā)環(huán)境的機(jī)器上不能運(yùn)行C源程序生成
的.exe文件
14.以下關(guān)于指針的說(shuō)法錯(cuò)誤的是()。
A.可以向指針中寫(xiě)入任意數(shù)據(jù)
B.可以向指針?biāo)竷?nèi)存單元中寫(xiě)入數(shù)據(jù)
C指針可以指向與其基類(lèi)型相同的普通變量
D.可以通過(guò)加法運(yùn)算,使指針指向下一個(gè)內(nèi)存單元
15.有以下程序:
#include<stdio.h>
main()
(
chars[]="abcde”;
s+=2;
printf(“%d\n”,s[O]);
}
程序的運(yùn)行結(jié)果是OO
A.輸出字符c的ASCII值B.程序出錯(cuò)C.輸出字符cD.輸出字符a的
ASCII值
16.若有定義語(yǔ)句:char*sl="OK",*s2="ok";,以下選項(xiàng)中,能夠輸
出"0K"的語(yǔ)句是
A.A.if(strcmp(sl,s2)==0)puts(sl);
B.if(strcmp(sl,s2)!=0)puts(s2);
C.if(strcmp(sl,s2)==l)puts(sl);
D.if(strcmp(sl,s2)!=0)puts(sl);
17.下列程序的運(yùn)行結(jié)果是()。
auin<)
wiide<+!■(,一?1),
A.2,3,2B.2,3,1C.l,3,3D,3,1,2
18.用二進(jìn)制來(lái)編碼字符串“abcdabaa",需要能夠根據(jù)編碼,解碼回原來(lái)
的字符串,最少需要。長(zhǎng)的二進(jìn)制字符串
A.12B.14C.18D.24
19.有說(shuō)明語(yǔ)句“inta,b;",如果輸入111222333,使得a的值為111,b
的值為333,則以下正確的語(yǔ)句是()。
A.scanf("%3d%*3d%3d",&a,&b);
B.scanf("%*3d%3d%3d",&a,&b);
C.scanf("%3d%3d%*3d",&a,&b);
D.scanf("%3d%*2d%3d",&a,&b);
20.計(jì)算機(jī)硬件組成中,CPU包含____o
A.控制器和存儲(chǔ)器B.控制器和運(yùn)算器C.控制器、運(yùn)算器和存儲(chǔ)器D
內(nèi)存儲(chǔ)器和外存儲(chǔ)器
三、程序設(shè)計(jì)題(10題)
21.使用VC++2010打開(kāi)考生文件夾下progl中的解決方案。此解決方
案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,請(qǐng)編寫(xiě)一個(gè)函
數(shù),用來(lái)刪除字符串中的所有空格。例如,輸入asdafaaz67,則輸出為
asdafaaz670注意:部分源程序在文件progl.c中。請(qǐng)勿改動(dòng)主函數(shù)
main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編
寫(xiě)的若干語(yǔ)句。試題程序:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<stdlib.h>
voidfun(char*str)
)
main()
(
charstr[81];
charMsg[]="Inputastring:n;
intn;
FILE*out;
printf(Msg);
gets(str);
puts(str);
fun(str);
printf(?****str:%s\nn,str);
out=fopen("out.dat”,;
fun(Msg);
fprintf(out,'*%sn,Msg);
fclose(out);
)
22.
編寫(xiě)函數(shù)fun(),其功能是:求SS所指字符串中指定字符的個(gè)數(shù),并
返回此值。例如,若輸入字符串“123412132",輸入字符為“1”,則輸出
3O注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)
中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入編寫(xiě)的若干語(yǔ)句。試
題程序:
Stnclu<WVzdhbu
*tficlu4e<como.
更includeVvldia
SdefineM8)
mi(UA(char?ch&rc>
midnitin()
char〈M].chi
wywtvfli(-C?LS")?
prwii(<?\nPloutemtefaxrifigi*)?
<?>?
<?\nPI?awEitr.chart")s
ch-<)?
print1<<\nThenumberoftbechar舟/d\?*<(an
ch))i
23.編寫(xiě)函數(shù)fun,其功能是:將s所指字符串中除了下標(biāo)為奇數(shù),同時(shí)
ASCH碼值也為奇數(shù)自q字符之外。
其余所有字符全部刪除,串中剩余字符所形成的一個(gè)新串放在所指的數(shù)
組中。
例如,若s所指字符串的內(nèi)容為“ABCDEFG12345",其中字符A的ASCII
碼值為奇數(shù),但所在元素的
下標(biāo)為偶數(shù),因此需要?jiǎng)h除;而字符1的ASCII碼值為奇數(shù),所在數(shù)組
中的下標(biāo)也為奇數(shù),因此不應(yīng)當(dāng)刪除,
其他依此類(lèi)推。最后t所指數(shù)組中的內(nèi)容應(yīng)為“135”。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括
號(hào)中填入你編寫(xiě)的若干語(yǔ)句。
試題程序:
#1ncltide<stdio.k>
#include<3tring.h>
voidfun(char*s,chart[D
I
)
main()*
(
chars(100],t[100];
printff'XnPIeaseenterstrings:n);
scanf("%s",§X
加n(s,0;
printf(n\n,nieresultid:%s\n,f4);
I
24.使用VC++2010打開(kāi)考生文件夾析下progl中的解決方案。此解決
方案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,請(qǐng)編寫(xiě)一個(gè)
函數(shù)fun(),它的功能是將ss所指字符串中所有下標(biāo)為奇數(shù)的字母轉(zhuǎn)換
為大寫(xiě)字母(若該位置上不是字母,則不轉(zhuǎn)換)。
例如,若輸入“abc4Efg",則應(yīng)輸出“aBc4EFg”。
注意:部分源程序在文件progl.c中。請(qǐng)勿改動(dòng)主函數(shù)main。和其他函
數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。
試題程序:
1#include<conio.h>
2#include<stdio.h>
3tinclude<string.h>
4#include<stdlib.h>
5voidfun(char*ss)
6{
7
8}
9voidmain()
10{
11FILE*wf;
12char81],s[81]="abc4Efg”;
13system(℃LSM);
14printf(H\nPleaseenteranstring
within80characters:\nM);
15gets(tt);
16printf(n\n\nAfterchanging,
w
thestringXn%srtt);
17fun(tt);
18printf(?'NnbecomesXn;
19/
20wf=fopen("out?dat","w");
21fun(s);
n
22fprintf(wfJ*srs);
23fclose(wf);
24/??????#??????***?/
251
25.
假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫(xiě)函數(shù)proc(),它的功能
是:使字符串中前部的*號(hào)不得多余m個(gè);若多余m個(gè),則刪除多余的
*號(hào);若少于或等于m個(gè),則什么也不做,字符串中間和尾部的*號(hào)不刪
除。例如,字符串中的內(nèi)容為****A*BC*DEF*G****,若m的值為2,
刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是**A*BC*DEF*G****;若m的值為
4,則字符串中的內(nèi)容仍為****A*BC*DEF*G****°n的值在主函數(shù)中輸
入。在編寫(xiě)函數(shù)時(shí),不得使用c語(yǔ)言提供的字符串函數(shù)。注意:部分源
程序給出如下。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅
在函數(shù)proc()的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。試題程序:
FmclockVadidh>
*曲CIMJTVCOCUD.h>
midproc<char?n)
voidmainf>
(char
M
*Efitrr*Mnngz\n>igru(?tr)i
prinr?*Enitrni|?
proc<
pnntfC*Tbf?Afterdelrtrd:\n*)t
iMitwCstrH
26.
請(qǐng)編寫(xiě)函數(shù)fun(),其功能是:找出2M整型二維數(shù)組中最大元素的值,
并將此值返回調(diào)用函數(shù)。注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main
()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入
編寫(xiě)的若干語(yǔ)句。試題程序:
Sdr6ncM4
sincludeVzdicx.h>
iiMfun<inta£J£M]>
voidRMin()
initrr[2][M]-IS.B.3.45?7C.-4.12.2>i
prttii"?fnAx-,d\na?fwn<arr>)4
27.
請(qǐng)編寫(xiě)一個(gè)函數(shù)proc(),它的功能是:比較2個(gè)字符串的長(zhǎng)度(不得
調(diào)用C語(yǔ)言中求字符串長(zhǎng)度的函數(shù)),函數(shù)返回較長(zhǎng)的字符串。若2個(gè)
字符串長(zhǎng)度相等,則返回第1個(gè)字符串。例如,若輸入jiangxiv;Enter>;
beijing<;Enter>;則函數(shù)返回jiangxio注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的
花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。試題程序:
8ktldiMWb>
rh*r?prodclur?n?char?t)
moidmain<)
chara(20j?b[10j??p??qa
pnnih*InputlihMnng:")i
A)I
prindCwlapM<2th3rm(,*)t
IRtMb),
pnntt(>K?n?p|roc<a?b))i
28.請(qǐng)編寫(xiě)一個(gè)函數(shù),用來(lái)刪除字符串中的所有空格。例如,輸入
abcdefgh,則輸出為abcdefgho注意:部分源程序給出如下。請(qǐng)勿改
動(dòng)main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號(hào)
中填入所編寫(xiě)的若干語(yǔ)句。試題程序:
£EclwicVwtdlO.h>
3mrludr<<1ypc-b>
<>t)clu<l*VconitKh>
#MirludrVwdhh
midprocKchar?MI)
char?tr[8lJi
*CLS*)t
pruiiR*Input??tnngs*)?
r〃
Mr>t
prodMT》i
prwitfC*???Mr?KAn*?str)?
29.
請(qǐng)編寫(xiě)一個(gè)函數(shù),用來(lái)刪除字符串中的所有空格。
例如,輸入asdafaaz67,則輸出為asdafaaz67o
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括
號(hào)中填入你編寫(xiě)的若干語(yǔ)句。
試題程序:
#i^lude<stdK.h>
#i)iclude<ctype.h>
#iiiclude<conio.h>
vodfun(char*stz)
(
)
main()
{char$tr[81];
charMsgf]=uInputastring:7';
intn;
printf(Msg);gets(str);puts(str);{un(str);
printfC****str:%8\nM,str);
30.使用VC++2010打開(kāi)考生文件夾下progl中的解決方案。此解決方
案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,請(qǐng)編寫(xiě)函數(shù)
fun(),該函數(shù)的功能是統(tǒng)計(jì)各年齡段的人數(shù)。N個(gè)年齡通過(guò)調(diào)用隨機(jī)
函數(shù)獲得,并放入主函數(shù)的age數(shù)組中。要求函數(shù)把。?9歲的人數(shù)存
放在d[0]中,把10?19歲的人數(shù)存放在d[l]中,把20?29歲的人數(shù)存
放在d[2]中,依此類(lèi)推,把100歲(含100歲)以上年齡的人數(shù)都存放在
d[10]中。結(jié)果在主函數(shù)中輸出。
注意:部分源程序在文件progl.c中。請(qǐng)勿改動(dòng)main()函數(shù)和其他函數(shù)
中的任何內(nèi)容,僅在函數(shù)fun()的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。
試題程序:
1#include<stdio.h>
21defineN50
3tdefineM11
4voidfun(int?a,int?b)
51(
6
7)
8doublernd()
9(
10statict?29,c=217,m=1024,r=0;
11r=(r*t+c)%m;
12return((double)r/m);
13J
14voidmain()
i.
16FILE?wf;
17intage[N]rird[MJ;
18intb(N]-[32,45,15,12,86,49,
97,3,44,52,17,95,63);
19for(i-0;i<N;i)
20age[i]-(int)(115*rnd());
/?產(chǎn)生一個(gè)隨機(jī)的年齡教組*/
21printf(**rheoriginaldata
22for(i-0;i<N;i**)
23printf((i+1)*10=0?
4dw,age[i]);/*每行*出10冷敏?/
24printf(??\n\nw);
25fun(age,d);
26for(i=0;i<10;i++)
H
27printf(-%4d--%4d:%4d\nr
i?10,i^l0^9.d[i]);
M
28printf("Over100:^4d\nrd[10]);
29/***???******?????/
30wf-fopen(Mout.datMww);
31fun(brd);
32for(i=0;i<10;1??+)
w
33fprintf(wf.^d—Md:%4d\nri
-10,
34fprintf(wfr'KXrer100:%4dn,d[10]);
35fclose(wf);
四、2.程序修改題(10題)
31.給定程序MODU.C中函數(shù)fun的功能是:比較兩個(gè)字符串,將長(zhǎng)
的那個(gè)字符串的首地址作為函數(shù)值返回。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1tinclude<stdio.h>
2/****?*****foundw*********/
3charfun(char*srchar*t)
4{intsl?0rtl?0;char*ss,*tt;
5ss-s;tt?t;
6while(*ss)
7{sl++;
8/*********?found***????*??/
9(*ss)
10
11while(*tt)
12{tl++;
13/***?*?****found**********/
14
15}
16if(tl>sl)returnt;
17elsereturns;
18)
19main()
20{chara[80]rb[80);
21printf(w\nEnterastring:w);
gets(a);
22printf("\nEnterastringagain:
;gets(b);
23printf(w\nThelongeris:\n\n\
fun(arb));
24
32.下列給定程序中,函數(shù)fun()的功能是:用冒泡法對(duì)6個(gè)字符串按由
小到大的順序進(jìn)行排序。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
#defineMAXLINE20
/*************found**************/
fun(char*pstr[6])
{inti,j;
char*p;
for(i=0;i<5;i++)
{for(j=i+l;j<6;j++)
/*************found**************/
{if(strcmp(*(pstr+i),pstr+j)>0)
p=*(pstr+i);
/*************found**************/
*(pstr+i)-pstr+j;
*(pstr+j)=p;
main()
{inti;
char*pstr[6],str[6][MAXLINE];
clrscr();
for(i=0;i<6;i++)pstr[i]=str[i];
printf("\nEnter6string(lstringateach
line):\n");''
for(i=0;i<6;i++)scanf("%s",pstr[i]);
fun(pstr);
printf("Thestringsaftersorting:\n");
for(i=0;i<6;i++)printf("%s\n",pstr[i]);
)
33.給定程序中函數(shù)fun的功能是:根據(jù)整型形參m,計(jì)算如下公式的
值。
例如,若m中的值為5,則應(yīng)輸出:1.463611。
請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
[注意]不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
[試題源程序]
#include<stdiO.h>
doublefun(intm)
(
doubley=1.0;
inti;
/*************found*************/
for(i=2;i<m;i++)
/*************found*************/
y+=l/(i*i);
retum(y);
1.
main()
(
intn=5;
printf("\nTheresultis%lf\n",fun(n));
}
34.給定程序M0D11.C中函數(shù)fun的功能是:先將s所指字符串中的
字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序連
接到t所指串的后面。
例如:當(dāng)S所指的字符串為:“ABCDE”時(shí),則t所指的字符串應(yīng)為:
“EDCBAABCDE”。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
finclude<stdio.h>
2?include<string.h>
3voidfun(char*srchar*t)
4(
5/?**??***??**found***??**????*/
6inti;
7si?strlen(s);
8for(i-0;i<sl;i++)
9/?………??found…………/
10t[i]?s[sl-i];
11for(i-0;i<sl;i++)
12t[sl+i]=s[i];
13t[2*sl]-?XO';
14
15main()
16{chars[100],t(100];
17printf(w\nPleaseenterstring
Mwn
s:);scanf(%srs);
18fun(srt);
wn
19printf(Theresultis:%s\nrt);
20
35.下列給定程序中,函數(shù)fun()的功能是:輸出M行N列整數(shù)方陣,
然后求兩條對(duì)角線上的各元素之和,返回此和數(shù)。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
#defineM5
ihtfun(intn,intxx[][])
{inti,j,sum=0;
printf("\nThe%dx%dmatrix:\n",M,M);
for(i=0;i<M;i++)
{for(j=0;j<M;j++)
printf("%4f',xx[i]|j]);
printf("\n");
for(i=0;i<n;i++)
sum+=xx[i][i]+xx[i][n-i-1];
return(sum);
main()
{intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
(6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7));
clrscr();
printf("\nThesumofallelementson2
diagnalsis%d",fun(M,aa));
36.下列給定程序中,函數(shù)fun()的功能是:用冒泡法對(duì)6個(gè)字符串按由
大到小的順序進(jìn)行排序。
請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
#defineMAXLINE20
voidfun(char*pstr[6])
(
inti,j;
char*p;
for(i=0;i<5;i++)
for(j=i+l;j<6;j++)
/*************found*************/
if(strcmp((pstr+i),(pstr+j))<0)
p=*(pstr+i);
*(pstr+i)=*(pstr+j);
/*************found*************/
*(pstr+j)=*p;
main()
inti;
char*pstr[6],str[6][MAXLINE];
clrscr();
for(i=0;i<6;i++)
pstr[i]=str[i];
printf("/nEnter6string(lstringateachline):\n");
for(i=0;i<6;i++)
scanf("%s",pstr[i]);
fun(pstr);
printf("Thestringsaftersorting:\n");
for(i=0;i<6;i++)
printf("%s\n",pstr[i]);
)
37.給定程序中,函數(shù)fun()的功能是:求輸入的兩個(gè)數(shù)中較小的數(shù)。
例如:輸入510,結(jié)果為minis5O
請(qǐng)改正fun()程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序、
#include<stdio.h>
#include<conio.h>
/*************found**************/
intfun(intx,y)
{intz;
z=x<y?x:y;
return(z);
}
main()
{inta,b,c;
scanf("%d,%d\n",&a,&b);
c=fun(a,b);
printf("minis%d",c);
)
38.給定程序中函數(shù)fun的功能是:將一個(gè)由八進(jìn)制數(shù)字字符組成的字
符串轉(zhuǎn)換為與其值相等的十進(jìn)制整數(shù)。規(guī)定輸入的字符串最多只能包含
5位八進(jìn)制數(shù)字字符。
例如,若輸入:77777,則輸出將是:32767。
請(qǐng)改正程序中的錯(cuò)誤,使它能得到正確結(jié)果。
[注意]不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
[試題源程序]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
intfun(char*p)
(
intn;
/**********^Qund**********/
n=*p-'o';
P++;
while(*p!=0){
/**********^Qund**********/
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);
39.下列給定程序中,函數(shù)fun()的功能是:從s所指字符串中,找出t
所指字符串的個(gè)數(shù)作為函數(shù)值返回。例如,當(dāng)s所指字符串中的內(nèi)容為
abcdabfab,t所指字符串的內(nèi)容為ab,則函數(shù)返回整數(shù)3。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
intfun(char*s,char*t)
{intn;char*p,*r;
n=0;
while(*s)
{P=s;
r=t;
while(*r)
/**************found**************/
if(*r==*p){r++;p++)
elsebreak;
/*************found**************/
if(r=='\O')
n++;
s++;
)
returnn;
main()
{chars[100],t[100];intm;
clrscr();
printf("\nPleaseenterstrings:");
scanf("%s",s);
printf("\nPleaseentersubstringt:");
scanf("%s",t);
m=fun(s,t);
printf("\nTheresultis:m=%d\n",m);
40.給定程序MODE.C中函數(shù)fun的功能是:求整數(shù)x的y次方的低
3位值。例如,整數(shù)5的6次方為15625,此值的低3位值為625。
請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
;linclude<stdio.h>
2!longfun(intxrintlong*p)
3i{inti;
4longt?l;
5\/**?****??****found***?**??*****/
i
6for(i-1;i<y;i++)
7
8*p-t;
9i/…?………found…………?/
10!t-t/1000;
11?returnt;
12;}
13!main()
?
14i{longt,r;intxry;
15;printf(w\nlnputxandy:
!scanf(M%ld%ldw,&x,iy)
i
16it?fun(x,v,&r);
w
17!printf(\n\nx-%dry?%d,
w
(last-%ld\n\nrxry#rrt);
18;1
五、程序改錯(cuò)題(2題)
41.
下列給定程序中,函數(shù)proc()的功能是:用下面的公式求兀的近似值,
直到最后一項(xiàng)的絕對(duì)值小于指定的數(shù)(參數(shù)num)為止。71/4^1-1/
3+1/5-1/7+…例如,程序運(yùn)行后,輸入0.0001,則程序輸出3.1414。
請(qǐng)修改程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main
()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:
二includeh>
include<math.h>
s*includeVstdio.h>
floatproc(floatnum)
(
inisi
floatn.t?DI:
t011pinO,n=liN=11
found?***
whileC4num)
(
pi=pt+11
n=n4-2j
//????found?■??
t=x%m
>
pi=pi*4$
returnph
J
voidm^inC>
floatnl?n2i
sy5teni<-€LSH)s
print(("Enterafloatnumber:")i
scanf(*%P.&?nl)i
n2,fcproc(nl)i
printfC*%6,4f\n*.n2>i
42.
下列給定的程序中,函數(shù)proc()的功能是:計(jì)算并輸出k以內(nèi)最大的
10個(gè)能被13或17整除的自然數(shù)之和。k的值由主函數(shù)傳人,若k的值
為600,則函數(shù)的值為5671。請(qǐng)修改程序中的錯(cuò)誤,使它能得出正確的
結(jié)果。注意:不要改動(dòng)main()函數(shù),不得增行或刪行,也不得更改
程序的結(jié)構(gòu)。試題程序:
sindudcli>
$inciuorVcooio.b>
Sinriude<C*tdliKIC>
iniproc<mt
initn-0/fnc-0?ji
win*(lO*,2J&&(ntr^I0M
//????found????
if<(kKlSMO)H(kKn?O>>
I1????+hime++“
k--i
//????found????
returnmi
voidmBin(>
sy?tctn(*CLS*)?
pnoi((*^id\n*?proc(600>>;
六、操作題(2題)
43.請(qǐng)補(bǔ)充main()函數(shù),該函數(shù)的功能是:從鍵盤(pán)輸入一個(gè)長(zhǎng)整數(shù),如
果這個(gè)數(shù)是負(fù)數(shù),則取它的絕對(duì)值,并顯示出來(lái)。例如,輸入>123456,
結(jié)果為:123456o注意:部分源程序給出如下。請(qǐng)勿改動(dòng)main()函
數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫(xiě)的若干表達(dá)式或語(yǔ)
句。試題程序:
3mdudeV-tdlihb>
生includrVh>
更ificludeVconio.h2>
voi4m*in()
loci,ininutni
*C*KS*>?
printfC*Knierthe<kiiai\ii0)?
?can(<|l))i
prmtf(????theobaolvic“Is???\?*)?
if(num*CO)
■】
prtntf(13]>i
44.有以下程序:
intfa(intx){returnx*x;}
intfb(intx){retumx*x*x;}
intf(int(*fl)(),int(*f2)(),(intx)
{returnf2(x)-fl(x);}
main()
{inti;i=f(fa,fb,2);printf("%d\n",i);}
程序運(yùn)行后,輸出結(jié)果是【】。
參考答案
1.數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)解析:Jackson方法是一,種面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化
方法。
2.SunDan20042SunDan20042解析:f函數(shù)中形參1用的是顯式傳地址
的方式,因此p->name的值發(fā)生改變,而形參2用的傳值的方式,在
調(diào)用時(shí)不改變實(shí)參的值,因此p->num的值不發(fā)生變化。
3.00解析:二維數(shù)組可以看成是按矩陣形式排列的,題目中給二維數(shù)組
賦初值是按行分段賦值的,a⑷⑷可以分解為4個(gè)一維數(shù)組,其數(shù)組名
分別為a[0]、a[l]xa[2]、a[3],這4個(gè)一維數(shù)組都有4個(gè)元素,a⑼的元
素為a[0][0]、a[0][l]xa[0][2]sa[0][3]o
4.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本題考查基本邏輯表達(dá),“整
數(shù)x的絕對(duì)值大于5”時(shí)值為“假”,即整數(shù)x的絕對(duì)值小于等于5,也就
是整數(shù)x要大于等于-5且要小于等于5。這里“且”用“與(&&)”表示,所
以C語(yǔ)言表達(dá)式為:(x>-5)&&(x<5)o
5.繼承繼承
6.21
7.3
8.220.0或220或220.或220.000000220.0或220或220.或2
20.000000解析:所有的賦值運(yùn)算符的優(yōu)先級(jí)都相同,它們的結(jié)合性為
從右至左,它們返回的表達(dá)式值為賦給變量的值.所以,語(yǔ)句
x=f*=n/=(c=50):—x=#=n/=50;-x=#=2;(n的值變成2)-x=20;o故
最終輸出的結(jié)果應(yīng)該是:220.000000
9.5252解析:do...while語(yǔ)句的形式為:
do
(
語(yǔ)句;
}while(條件表達(dá)式)
當(dāng)條件表達(dá)式為非零時(shí),繼續(xù)執(zhí)行循環(huán)體,直到條件表達(dá)式為零時(shí)退出
循環(huán)。
10.44解析:在主函數(shù)中調(diào)用函數(shù)f,函數(shù)f有三個(gè)參數(shù),形參fl與f2
分別是兩個(gè)指向函數(shù)的指針。在f中執(zhí)行f2(x)-fl(x),實(shí)際上是執(zhí)行了
32
fb(2)-fa(2),故執(zhí)行i=(fa,fb,2)后i的02-2=4o
11.C
只有當(dāng)3個(gè)if條件同時(shí)成立,即能夠同時(shí)被2、3、7整除時(shí),才輸出i
的值,而從。到50能夠同時(shí)被2、3、7整除的數(shù)只有42,故選擇C
選項(xiàng)。
12.AC語(yǔ)言的標(biāo)識(shí)符由字母、數(shù)字、下劃線組成,且第1個(gè)字符必須是
字母或下劃線。另外,關(guān)鍵字不能作為標(biāo)識(shí)符。B選項(xiàng)中以數(shù)字8開(kāi)頭,
所以錯(cuò)誤。C選項(xiàng)與D選項(xiàng)中用的是關(guān)鍵字“void”與“unsigned",所以錯(cuò)
誤。故本題答案為A選項(xiàng)。
13.D
c語(yǔ)言的可執(zhí)行程序是由一系列機(jī)器指令組成的。用C語(yǔ)言編寫(xiě)的源
程序必須經(jīng)過(guò)編譯生成二進(jìn)制目標(biāo)代碼,再經(jīng)過(guò)連接才能運(yùn)行,并且
可以脫離c語(yǔ)言集成開(kāi)發(fā)環(huán)境。故答案為D)。
14.A指針變量必須區(qū)分基類(lèi)型,可以向指針?biāo)竷?nèi)存單元寫(xiě)入與基類(lèi)型
相同的數(shù)據(jù),而不能寫(xiě)入任意數(shù)據(jù),選項(xiàng)A錯(cuò)誤,選項(xiàng)B正確;指針可
以指向與其基類(lèi)型相同的普通變量,選項(xiàng)C正確才旨針是一個(gè)內(nèi)存地址,
它是一個(gè)整數(shù),可以通過(guò)加法運(yùn)算,使指針指向下一個(gè)內(nèi)存單元,選項(xiàng)
D正確。故本題答案為A選項(xiàng)。
15.B在C語(yǔ)言中,數(shù)組名類(lèi)似于一個(gè)指向數(shù)組首地址的指針常量,一
旦定義就不能修改其內(nèi)容。所以本題中的“s+=2;”語(yǔ)句讓數(shù)組名S的內(nèi)
容加2是錯(cuò)誤的,編譯無(wú)法通過(guò)。故本題答案為B選項(xiàng)。
16.D
解析:strcmp(sl,s2)的作用是比較字符串si和s2。參數(shù)strl,str2如
果相同,則返回0,如果strl大于str2則返回一個(gè)正整數(shù),如果str1小
于str2則返回一個(gè)負(fù)整數(shù)。本題中si,s2不相同,A)選項(xiàng)不會(huì)輸出任
何字符,B)選項(xiàng)輸出ok,C)選項(xiàng)不輸出任何字符,D)選項(xiàng)會(huì)輸出
OKo
17.D本題考查while循環(huán)。第一次循環(huán),y=y-l,y=2,循環(huán)條件成立,
X=l,X++后值為1,x自加變成2,進(jìn)入循環(huán),a=a+l=l,判斷if語(yǔ)句條
件是否成立,y<x不成立,接著執(zhí)行下一次循環(huán)。第二次循環(huán),x=2,y-
1=1.循環(huán)條件成立,進(jìn)入循環(huán),a=a+l=2,判斷if語(yǔ)句的控制條件是否
成立,y<x成立,執(zhí)行break語(yǔ)句。退出循環(huán)。結(jié)果為D。
18.B
19.A
根據(jù)題意,要使a的值為111,b的值為333,必須在讀入時(shí)指定a的
讀入寬度為3,b的讀入寬度為3,且a和b的控制字符之間必須額外
增加%*控制符,用于跳過(guò)中間的3位輸入數(shù)字,選項(xiàng)A正確。本題答
案為A選項(xiàng)。
20.B
21.1voidfun(char*str)
2{
3inti=O;
4char*p=str;
5while(*p)
61
7if(*p!=")/*刪除空格*/
8{
9str[i++]=*p;
10)
11P++;
12}
13str[i]=N(y;/*加上結(jié)束符*/
14)
本題要求刪除所有空格,即保留除了空格以外的其他所有字符。由于
C語(yǔ)言中沒(méi)有直接刪除字符的操作,因此對(duì)不需要?jiǎng)h除的字符采用“保
留”的操作。用指針P指向字符串中的每一個(gè)字符,每指向一個(gè)字符都
判斷其是否為空格,若不是空格則將其保存到數(shù)組Str。
22.
【解析】此題考查用for循環(huán)遍歷字符串和通過(guò)條件表達(dá)式*ss!='\0
'來(lái)判斷字符串是否結(jié)束。給字符串加上結(jié)束標(biāo)識(shí)‘\0',通過(guò)for循
環(huán)遍歷字符串中每一個(gè)字符,在遇到結(jié)束標(biāo)識(shí)前,如果遇到指定(即用戶
輸入)字符,變量i加1,最后將變量i返回,即用戶輸入字符在字符串
中出現(xiàn)的次數(shù)。
23.
I答案】
voidfun(('har*s,chart[J)
I.
inti.j=0.n;
n=stricn(s);
fbr(isO;i<n;i++)
呻%2!以>&[%2]刈
{tbM>J;/*將下標(biāo)為奇數(shù)同時(shí)ASCII碼值為奇數(shù)的字符放人數(shù)組t中*/
J++;
)
tfi]=w;產(chǎn)最后加上結(jié)束標(biāo)識(shí)符*/
)
【解析】
用循環(huán)遍歷字符串,通過(guò)if語(yǔ)句將下標(biāo)和ASCII碼都為奇數(shù)的字符保
存到數(shù)組中,在字符串末尾加上結(jié)束標(biāo)識(shí)符。
24.1voidfun(char*ss)
2{
3inti;
4for(i=O;ss[i]!='\\0';i++)/*將ss所指字符串中所有下標(biāo)為奇數(shù)的字母
轉(zhuǎn)換為大寫(xiě)字母*/
5if(i%2==l&&ss[i]>='a'&&ss[i]<='z')
6ss[i]=ss[i]-32;
7)
本題要求將給定字符串ss中下標(biāo)為奇數(shù)的字母轉(zhuǎn)換為大寫(xiě)字母。需要
先判斷下標(biāo)為奇數(shù)的字母是否是小寫(xiě)字母,如果是再通過(guò)其轉(zhuǎn)換方法
進(jìn)行轉(zhuǎn)換。從C語(yǔ)言的學(xué)習(xí)中知道,只要將小寫(xiě)字母減去32即轉(zhuǎn)換成
大寫(xiě)宇母,將大寫(xiě)字母加上32即換轉(zhuǎn)成小寫(xiě)字母。本程序用if語(yǔ)句實(shí)
現(xiàn)轉(zhuǎn)換功能。
25.
【解析】題目中要求字符串前部的*不得多于m,首先要計(jì)算出字符串
前部的*號(hào)的個(gè)數(shù),與變量m進(jìn)行比較。當(dāng)字符串前部的*多于m個(gè)時(shí),
刪除多余的*。規(guī)定不能用字符串函數(shù)處理,可以通過(guò)移動(dòng)字符串的首
指針來(lái)實(shí)現(xiàn)。
26.
【解析】此題考查的是數(shù)組的查找算法。使用for循環(huán)嵌套完成對(duì)二維
數(shù)組的遍歷。題目要求出最大值,則應(yīng)采用將所有元素遍歷一遍,逐個(gè)
比較的方式完成。定義變量max,將第一個(gè)元素賦值max,然后通過(guò)for
循環(huán)將元素逐個(gè)與max比較,遇到比max大的則賦值max,替換原有
數(shù)據(jù),當(dāng)嵌套的for循環(huán)結(jié)束后,max即為二維數(shù)組中的最大值。
27.
【解析】題目中要求不能用C語(yǔ)言中提供的求字符串長(zhǎng)度的函數(shù),可以
通過(guò)移動(dòng)字符串指針來(lái)計(jì)算字符串的長(zhǎng)度。定義2個(gè)變量分別存放2個(gè)
字符串的長(zhǎng)度,最后比較2個(gè)字符串的長(zhǎng)度,返回相對(duì)較長(zhǎng)的那一個(gè)字
符串。
28.
【解析】根據(jù)題目中要求刪除字符串中所有的空格,需要檢查字符串中
的每一個(gè)字符。將不是空格的字符放入原來(lái)的字符串中,形成新的字符
串。在新的字符串的末尾加上結(jié)束符。
29.[答案]
voidfun(char*str)
{inti=(h
char
whi砥*遍歷字符串*/
(
/*如果當(dāng)前元素不為空格*/
)--
/*將當(dāng)前元素保存到市中*/
蛔十";
.收.
)
P++;
}
s用戶字符串最后加上結(jié)束標(biāo)記符幅力
[解析]
題目要求刪除空格,也就是重新保存空格以外的其他字符。通過(guò)循環(huán)刪
除字符串中的每一個(gè)空格,將非空格字符進(jìn)行重新保存。
30.1voidfun(int*a,int*b)
2{
3inti,j;
4for(j=0;j<M;j++)
5b[]==0;/*_且b初始化為0*/
6for(i=0;i<N;i++)
7if(a[i]>=100)
8b[10]++;/*如果年齡大于等于100,b[lo]自增1*/
9else
10b[a[i]/10]++;/*如果年齡小于100,則將其分別統(tǒng)計(jì)到b[a[i]/10]中*/
11}
<m;j++)
<n;i++)
本題是一個(gè)分段函數(shù)的問(wèn)題,用兩個(gè)循環(huán)來(lái)完成。第1個(gè)循環(huán)的作用
是使數(shù)組b中的所有元素值都為0。這個(gè)循環(huán)不能省略,因?yàn)槿粑磳?duì)數(shù)
組b中的元素賦初值,則它們的值將是不可預(yù)測(cè)的。第2個(gè)循環(huán)的作
用是分別統(tǒng)計(jì)數(shù)組a中各年齡段的人數(shù)。當(dāng)a[i]>100時(shí),按題意要將
其統(tǒng)計(jì)到b[10]中。else的作用是如果年齡小于100,則將其分別統(tǒng)計(jì)到
b[a[i]/10]中。由運(yùn)算優(yōu)先級(jí)可知先進(jìn)行a[i]/10的運(yùn)算,所得結(jié)果作為b
的下標(biāo)。若a用為0~9,a[i]/10的值為0,且0?9歲的人數(shù)正好存入b[0]
中。若a國(guó)為10?19,a[i]/10的值為1,且10?19歲的人數(shù)正好存入
b[l]中,依此類(lèi)推。</n;i++)
</m;j++)
31.(l)char*fun(char*schar*t)(2)ss++;(3)tt++;(1)char*fun(char*s,
char*t)(2)ss++;(3)tt++;解析:本題中函數(shù)的功能是比較兩個(gè)字符串,
將長(zhǎng)的那個(gè)字符串的首地址作為函數(shù)值返回。解題思路是對(duì)調(diào)試過(guò)程中
產(chǎn)生的錯(cuò)誤提示進(jìn)行跟蹤,也就是題干中給出的錯(cuò)誤標(biāo)識(shí)符號(hào)下的語(yǔ)句。
32.(1)錯(cuò)誤:fun(char*pstr[6])正確:voidfun(char*pstr[6])(2)錯(cuò)誤:
if(strcmp(*(pstr+i)pstr+j)>0正確:if(strcmp(*(pstr+i)*(pstr+j))>0(3)錯(cuò)
誤:*(pstr+i)=pstr+j;正確:*(pstr+i)=*(pstr+j);(l)錯(cuò)誤:fun(char*pstr[6])
正確:voidfun(char*pstr[6])\r\n(2)錯(cuò)誤:if(strcmp(*(pstr+i),pstr+j)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:近十年公費(fèi)師范畢業(yè)生教師職業(yè)認(rèn)同演變、離職預(yù)警模型構(gòu)建及干預(yù)策略實(shí)證研究
- 2025版帶物業(yè)增值服務(wù)物業(yè)房產(chǎn)買(mǎi)賣(mài)合同書(shū)3篇
- 二零二五版新能源研發(fā)及生產(chǎn)廠房買(mǎi)賣(mài)合同范本3篇
- 二零二五年度廚具行業(yè)人才培養(yǎng)與輸送合同4篇
- 二零二五年度贖樓金融產(chǎn)品合作合同4篇
- 二零二五年度出軌婚姻解除后的子女撫養(yǎng)權(quán)及財(cái)產(chǎn)分割協(xié)議4篇
- 2025年度宗教活動(dòng)場(chǎng)地租賃合同范本3篇
- 二零二五年度彩鋼屋面防水隔熱一體化工程承包協(xié)議3篇
- 二零二五年度彩磚知識(shí)產(chǎn)權(quán)保護(hù)采購(gòu)合同3篇
- 2025年人力資源經(jīng)理員工關(guān)系與勞動(dòng)爭(zhēng)議處理協(xié)議3篇
- GB/T 45120-2024道路車(chē)輛48 V供電電壓電氣要求及試驗(yàn)
- 春節(jié)文化常識(shí)單選題100道及答案
- 華中師大一附中2024-2025學(xué)年度上學(xué)期高三年級(jí)第二次考試數(shù)學(xué)試題(含解析)
- 12123交管學(xué)法減分考試題及答案
- 2025年寒假實(shí)踐特色作業(yè)設(shè)計(jì)模板
- 24年追覓在線測(cè)評(píng)28題及答案
- 高考滿分作文常見(jiàn)結(jié)構(gòu)
- 心肌梗死診療指南
- 食堂項(xiàng)目組織架構(gòu)圖
- 原油脫硫技術(shù)
- GB/T 2518-2019連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
評(píng)論
0/150
提交評(píng)論