




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2022年陜西省榆林市全國計(jì)算機(jī)等級考試
C語言程序設(shè)計(jì)真題(含答案)
學(xué)校:班級:姓名:考號:
一、2.填空題(10題)
1.在面向?qū)ο蠓椒ㄖ?,【】描述的是具有相似屬性與操作的一組對象。
2.下面程序的運(yùn)行結(jié)果是:[]o
typedefunionstudent
{charnameflO];
longsno;
charsex;
floatscore[4];
}STU;
main()
{STUa[5];
Printf("%d\n",sizeof(a));
)
3.語句"int(*ptr)()「的含義是____是指向函數(shù)的指針,該函數(shù)返回一
個(gè)int型數(shù)據(jù)。
4.以下程序的輸出結(jié)果是【】。
#include<stdlib.h>
main()
{char*sl,*s2,m;
s1=s2=(char*)malloc(sizeof(char));
*sl=15;*s2=20;m=*sl+*s2;
printf("%d\n",m);
)
5.下列程序的輸出結(jié)果是【】。
main()
{inta=l,b=2;
a-a+b;b=a-b,a=a-b;
printf("%d,%d\n",a,b);
)
6.有以下程序段,且變量已正確定義和賦值
for(s=1.0,k=l;k<=n;k++)s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
請?zhí)羁眨瓜旅娉绦蚨蔚墓δ芘c之完全相同
s=1.0;k=l;
while([]){s=s+1.0/(k*(k+l));[];)
printf("s=%f\n\n",s);
7.某二叉樹中度為2的結(jié)點(diǎn)有18個(gè),則該二叉樹中有【】個(gè)葉子結(jié)
占
/\\\O
8.排序是計(jì)算機(jī)程序設(shè)計(jì)中的一種重要操作,常見的排序方法有插入排
序、【】和選擇排序等。
9.以下程序的運(yùn)行結(jié)果是【】°
main()
{inta=2,b=7,c=5;
switch(a>0)
(
case1:
switch(b<0)
{casel:printf("@");break;
case2:pnntf("!");break;
)
case0:
switch(c==5)
{case0:pnntf("*");break;
casel:printf("#");break;
case2:printf("$");break;
)
default:printf("&");
)
printf("\n");
)
10.以下程序運(yùn)行的結(jié)果是【】。
#include<conio.h>
#include<stdio.h>
#defineM100
voidfun(intm,int*a,int*n)
{inti,j=0;
for(i=1;i<=m;i++)
if(i%7==0IIi%ll==O)
a[j++l=i;
*n=j;}
main()
{intaa[M],n,k;
clrscr();
fun(10,aa,&n);
for(k=0;k<n;k++)
if((k+1)%20==0)printf("\n");
elseprintf("%4d",aa[k]);
printf("\n");}
二、單選題(10題)
11.有以下程序:
#include<stdio.h>
#include<string.h>
main()
(
printf("%d\n",strlen("0\t\n\0C01
)
程序運(yùn)行后的輸出結(jié)果是()o
A.3B.13C.lD.O
12.在數(shù)據(jù)庫設(shè)計(jì)中,將E-R圖轉(zhuǎn)換成關(guān)系數(shù)據(jù)模型的過程屬于
()。
A.需求分析階段B.概念設(shè)計(jì)階段C.邏輯設(shè)計(jì)階段D.物理設(shè)計(jì)階段
13.輸入序列為(A,B,C,D),不可能得到的輸出序列是
A.(A,B,C,D)B.①,C,B,A)C.(A,C,D,B)D.(C,A,B,D)
(37)以下程序的輸出結(jié)果是().
#includc<stdio.h>
voidprt(int*x,int*y,int*z)
{primfC%d,%d,%d\n?*xry,*(zz));}
main()
(inta=10,b=40tc=20;
prt(&a,&b.&c);
prt(&a.&b,&c);}
A)11,42,31B)11,41,20
12,22,4112,42,20
C)11,21,40D)11,41,21
14.11,21,2112,42,22
15.以下說法正確的是()。
A.C語言只接受十進(jìn)制的數(shù)
B.C語言只接受二進(jìn)制、八進(jìn)制、十六進(jìn)制的數(shù)
C.C語言只接受二進(jìn)制、十進(jìn)制、十六進(jìn)制的數(shù)
D.C語言只接受八進(jìn)制、十進(jìn)制、十六進(jìn)制的數(shù)
16.如果最常用的操作是取第i個(gè)結(jié)點(diǎn)及其前驅(qū),最節(jié)省時(shí)間的存儲方式
是()。
A.單鏈表B.雙向鏈表C.單循環(huán)鏈表D.順序表
17.遞歸式的先序遍歷一個(gè)n節(jié)點(diǎn),深度為d的二叉樹,則需要??臻g的
大小為()
A.O(logn)B.O(nlogn)C.O(n)D.O(d)
18.下列關(guān)于宏的敘述中正確的是()。
A.宏替換沒有數(shù)據(jù)類型限制
B.宏定義必須位于源程序中所有語句之前
C.宏名必須用大寫字母表示
D.宏調(diào)用比函數(shù)調(diào)用耗費(fèi)時(shí)間
19.設(shè)棧S和隊(duì)列Q的初始狀態(tài)為空,元素el,e2,e3,e4,e5和e6依
次通過棧S,一個(gè)元素出棧后即進(jìn)隊(duì)列Q,若6個(gè)元素出隊(duì)的序列是e2,
e4,e3,e6,e5,el,則棧S的容量至少應(yīng)該是()。
A.6B.4C.3D.2
20.若有下列定義(設(shè)int類型變量占2個(gè)字節(jié)):
inti=8,j=9;
則下列語句:
printf("i=%%d,j=%%d\n",i,j);
輸出的結(jié)果是()。
A.i=8,j=9B.i=%d,j=%dC.i=%8,j=%9D.8,9
三、程序設(shè)計(jì)題(10題)
21.請編寫函數(shù)proc(),函數(shù)的功能是求出二維數(shù)組周邊元素之和,作
為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。
例?.苦:?曾用中的一為,
01234
597?$
4383,
38?87
則函數(shù)值為59。
注意:部分源程序給出如下。
請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括
號中填入所編寫的若干語句。
試題程序:
3include<襁疝&hJ>
*indudeVcociio.h>
Mithelud*
SdefineM4
0drfinrNS
UMpmr(mi.
void)
miMCMXN]?((
M?t,?j.
?p4cm<"CLS*>i
pniMf(*Tbeorminal<kubi\n*>i
(oKiM0iYMii**)
Itor沁Nij++)
pnntf<e%6d?
prinil<*\n*)>
ywpcoc<ae)?
pniuf(*\nTheH<f\???>>?
prmd<*\ne)i
22.規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,其功能是:
除了字符串前導(dǎo)的。號之外,將串中其他*號全部刪除。在編寫函數(shù)時(shí)不
得使用C語言提供的字符串函數(shù).
例如.字符串中的內(nèi)容為????A.BC.DEF?G????*?除后,字符串中的內(nèi)容應(yīng)當(dāng)
是:“????ABCDEFG”。
注意:部分源程序在文件PR0G1.C中。
請勿改動主函數(shù)nuin和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。
tindude<stdio.h>
voidfun(char?a)
main()
Ichar>[81];voidNONO();
prinlf('Enterastring:\nn);geto(t);
fun(>);
printf("Thestringafterdeleted:\nN);pulfl(a);
NONO();
I
voidNONO()
1/?本?效用于打開文件,輸入數(shù)據(jù).調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文件。./
FILE■in..out;
inti;chari[81];
m=fopen(-in.M,T);
ouKxfbpen(Moul.dat","ww);
far<i=0;i<10;i??)
I
w
bcanf(in/%8v8);
Ma
^pnntf(out,%s\n9?);
I
fdme(in);
fcloae(oul);
23.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案
的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,學(xué)生的記錄由學(xué)號
和成績組成,N名學(xué)生的記錄已放入主函數(shù)的結(jié)構(gòu)體數(shù)組s中。請編寫
函數(shù)fun(),其功能是把指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄存放在b所指的數(shù)
組中,分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)由函數(shù)值返回。
如輸入的分?jǐn)?shù)是60、69,則應(yīng)當(dāng)把分?jǐn)?shù)在60?69的學(xué)生記錄輸出,包
含60分和69分的學(xué)生記錄。主函數(shù)中把60放在low中,把69放在
high中o
注意:部分源程序給出如下。
請勿改動主函數(shù)main。和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
#include<stdio.h>
#defineN16
typedefstruct
(
charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b,int1,inth)
voidmain()
{
STRECs[N]={{"GA005”,85},{“GA003”,76},
{“GA002”,69},{“GA004”,
85},{uGA001”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GAO1
5”,85},{“GA013”,
94},{“GA012”,64},{“GAO14”,91},{“GAO11”,90},{“GAO17”,64},{“GAO
18”,64},{“GAO16”,72}};
STRECh[N];
inti,n,low,high,t;
printf("Enter2integernumberlow&high:,,);
scanf("%d%d”,&low,&high);
if(high<low)
{t=high;high=low;low=t;}
n=fun(s,h,low,high);
printf("Thestudent'sdatabetween%d--%d:\n”,low,high);
for(i=0;i<=""p="">
printf(4t%s%4d\n”,h[i].num,h[i].s);
printf(4t\n^^);
)
24.請編一個(gè)函數(shù)voidproc(intintppfN]),tt指向一個(gè)M行N
列的二維數(shù)組,求出二維數(shù)組每行中最大元素,并依次放入pp所指的
一維數(shù)組中。二維數(shù)組中的數(shù)已在主函數(shù)中給出。
注意:部分源程序給出如下。
請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括
號中填入所編寫的若干語句。
試題程序:
Umcludc<C9tdao.
=includrVconio.h>
Sinclude<Mdbb.
9drGneM3
ddefineN4
2dpfocCinttt[M3[N2pptNj)
void>
mi34.54?84.78?
(23.12l?
(28.M.39.93F)i
mt
*ywietn<*CIJI*)?
prmlfCThefiginaldata
hr(L0“V、,j++>
pnotf(
pnnff(
prodMr*p)i
primf<*\nTherr&uh
k-O&k<TM』一?)
pnnifL;4d".pTkl><
25.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,編寫函數(shù)fun(),
其功能是根據(jù)以下公式求兀的值(要求精度0.0005,即某項(xiàng)小于0.0005
時(shí)停止迭代)O
^=l+±+|2Sa+12<22<3+12S2x32<4++
233x53x5x73x5x7x9
Ix2x…X”
3x5x???x(2n+1)
程序運(yùn)行后,若輸入精度0.0005,則程序應(yīng)輸出為3.140578。
注意:部分源程序給出如下。
請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
#include<stdio.h>
#include<conio.h>
#include<math.h>
doublefun(doubleeps)
(
}
voidmain()
(
doublex;
printf("Inputeps:");
scanf("%lF',&x);
u,,
printf(\neps=%lf,PI=%lf\n5x,fun(x));
26.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,編寫函數(shù)fun(),
其功能是實(shí)現(xiàn)B=A+A5即將矩陣A加上A的轉(zhuǎn)置,結(jié)果存放在矩陣
B中。計(jì)算結(jié)果在main()函數(shù)中輸出。
舉例如下。
輸入如下的矩陣:其轉(zhuǎn)置矩陣如下:
123147
456258
789369
程序輸出:
26
610
1014
注意:部分源程序給出如下。請勿改動主函數(shù)main。和其他函數(shù)中的
任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。
試題程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
voidfun(inta[3][3],intb[3][3])
(
)
voidmain()
(
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3];
inti,j;
system(“CLS”);
fun(a,t);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%7r,t[i][j]);
printf("\n");
)
)
27.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項(xiàng)目中包含一個(gè)源程序文件progl.c。在此程序中,編寫函數(shù)fun(),
其功能是將兩個(gè)兩位數(shù)的正整數(shù)a、b合并成一個(gè)整數(shù)放在c中。合并
的方式是將a中的十位數(shù)和個(gè)位數(shù)依次放在c數(shù)的十位和千位上,b中
的十位數(shù)和個(gè)位數(shù)依次放在c數(shù)的百位和個(gè)位上。
例如,當(dāng)a=45,b=12時(shí),調(diào)用該函數(shù)后,c=5142o
注意:部分源程序給出如下。
請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入編寫的若干語句。
試題程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
voidfun(inta,intb,long*c)
{'
)
main()
(
inta,b;
longc;
printf("Inputa,b:^^);
scanf("%d%d”,&a,&b);
fun(a,b,&c);
printff'Theresultis:%ld\n,,,c);
28.編寫fun()函數(shù),它的功能是:利用以下所示的簡單迭代方法求方程
cos(y)-y=0的一個(gè)實(shí)根。
yn+l=cos(yn)
迭代步驟如下:
⑴取yl初值為0.0;
(2)y0=yl,把yl的值賦給y。;
(3)y1=cos(y0),求出一個(gè)新的y1;
(4)若y0=yl的絕對值小于0.000001,則執(zhí)行步驟
(5),否則執(zhí)行步驟(2);
(5)所求yl就是方程COS(y)-y=0的一個(gè)實(shí)根,作為函數(shù)值返回。
程序?qū)⑤敵鼋Y(jié)果Result=0.7390850
請勿改動main。函數(shù)與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括
號中填入所編寫的若干語句。
部分源程序給出如下。
試題程序:
BinclwirVcomoih>
includeVounh.h>
4ifirltMlrVktdm.h>
HoelfaM>
voidRMtaC>
I
FILE
AMIM-,《*<》■
pnfiiK■Re*?ih?HI\B*.CI?)I
ou<?fope?i<<Ui*?ew*)i
fpnntl(oui?*Kr?c<M)i
(done<ou?><
29.請編寫函數(shù)proc(),該函數(shù)的功能是:將M行N列的二維數(shù)組中的
字符數(shù)據(jù),按列的順序依次放到一個(gè)字符串中。例如,若二維數(shù)組中
的數(shù)據(jù)為:
WWW
SSS
HHH
III
則字符串中的內(nèi)容應(yīng)是WSHIWSHIWSHL
注意:部分源程序給出如下。
請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括
號中填人所編寫的若干語句。
試題程序:
#tncludeVzdtd
林WineM4
8dtfitwN3
voidproc<ckmr<??>[N)?clur?b>
M>ldmatn(>
char41003?W[MXN]M(IW.W?W).
3'S\S\I.CH\*H\1H4.)?(T?'
r.THi
inii小
print"'The
(or(i-“yMX*4?)
<lor《?)
pnrn((aHlc*.w£iltj]h
peoc<w?a)i
prmtf<"TheA
pm*<a)s
pnnrf<<\n\n")i
30.
假定輸入的字符串中只包含字母和*號。請編寫函數(shù)proc(),它的功能
是:將字符串中的前導(dǎo)*號全部刪除,中間和后面的*號不刪除。例如,
若字符串中的內(nèi)容為****a*bc*def*g****,刪除后,字符串中的內(nèi)容則
應(yīng)當(dāng)是a*bc*def*g****。注意:部分源程序給出如下。請勿改動main
()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入
所編寫的若干語句。試題程序:
svAcludk*Vadia
Smcludr<como,h>
voidproc<ciwir??tr>
VUidHNliB()
rtuir?tr{Sl
prmdCvEnter■?thngt\n*H
proc<Mr>i
prail(<*TheMI”delrtedt\B*><
Mt)sI
四、2.程序修改題(10題)
31.下列給定程序中,函數(shù)fun()的功能是:判斷一個(gè)整數(shù)m是否是素
數(shù),若是返回L否則返回0。在main。函數(shù)中,若fun()返回1則輸出
YES,若fun()返回0則輸出NO!
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
intfun(intm)
{intk=2;
while(k<=m&&(m%k))
/*************found*********************/
k++
/*************found*********************/
if(m=k)
return1;
elsereturnO;
)
main()
{ihtn;
clrscr();
printf("\nPleaseentern:");
scanf("%d",&n);
if(fun(n))printf("YES\n");
elseprintf("NO!\n");
32.給定程序MODH.C中fun函數(shù)的功能是:求出以下分?jǐn)?shù)序列的前
n項(xiàng)之和。
23581321
I*293959T*13*
和值通過函數(shù)值返回main函數(shù)。
例如,若n=5,則應(yīng)輸出:8.391667o
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1*include<stdio.h>
2…?…吉??一found
3fun(intn)
4(inta-2,b-1.c,k;
5doubles-0.0;
6for(k?1;k<=n;k++)
7(s?s>1.0*a/b;
8/found★***???★★★★**/
9c-a;a?=b;b+,c;
10}
11return(s);
12}
13main()
14(intn?5;
15printf(w\nThevalueoffunction
w
is:%lf\nrfun(n));
16
33.下列給定程序中,函數(shù)fun()的功能是:找出一個(gè)大于給定整數(shù)m且
緊隨m的素?cái)?shù),并作為函數(shù)值返回。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
intfun(intm)
{inti,k;
for(i=m+l;;i++)
{for(k=2;k<i;k++)
/*************found**************/
if(i%k!=0)
break;
/*************found**************/
if(k<i)
retum(i);
)
)
main()
{intn;
clrscr();
printf("\nPleaseentern:");
scanf("%d",&n);
printf("%d\n",fun(n));
}
34.以下程序可把輸入的十進(jìn)制數(shù)以十六進(jìn)制數(shù)的形式輸出。
請?jiān)跈M線上填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序;
main()
charb[17]={"0123456789ABCDEF"};
intc[64],d,i=0,base=16;
longn;
printf("Enteranumberin'');
scanf("%ld",&n);
do{
/*****************found****************/
c[i]=;i++;n=n/base;}
while(n!=0);
printf("Transmitenewbase:\n");
for(—i;i>=0;—i)
/***************found*******************/
{d=cfi];printf("%c",b);}
printf("\n");
35.下列給定程序中,函數(shù)fun()的功能是:計(jì)算s所指字符串中含有t
所指字符串的數(shù)目,并作為函數(shù)值返回。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<string.h>
#include<stdio.h>
#defineN80
intfun(char*s,char*t)
{intn;
char*p,*r;
n=0;
while(*s)
{P=s;
/**************found***************/
r=p,
while(*r)
if{*r==*p){r++;p++;}
elsebreak;
/**************found***************/
if(*r==O)
n++;
s++;
)
returnn;
)
main()
{chara[N],b[N];intm;
clrscr();
printf("\nPleaseenterstringa:");
gets(a);
printf("\nPleaseentersubstringb:");
gets(b);
m=fun{a,b);
printf("\nTheresultis:m=%d\n",m);
)
36.下列給定程序中函數(shù)fun()的功能是;先將在字符串s中的字符按逆
序存放到t串中,然后把s中的字符按正序連接到t串的后面。例如:
當(dāng)S中的字符串為ABCDE時(shí),則t中的字符串應(yīng)為EDCBAABCDEo
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*s,char*t)
(
inti,sl;
sl=strlen(s);
for(i=0;i<sl;i++)
t[i]=s[sl-l];
for(i=0;i<si;i++)
/*********不*不*found***不*不*不*不*不**
t[sl+i]=s[i];
t[2*sl]-'\0';
)
main()
{chars[100],t[100];
clrscr();
printf("\nPleaseenterstrings:");
scanf("%s",s);
fun(s,t);
printf("Theresultis:%s\n",t);
}
37.下列給定程序中,函數(shù)fun()的功能是:依次取出字符串中所有的字
母,形成新的字符串,并取代原字符串。
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
voidfun(char*S)
(
inti,j;
for(i=0,j=0;s[i]!='\0';i++)
/*************found************/
if((s[i]>='A'&&s[i]<='Z')&&(s[i]>='a'&&S[i]<="z',))
s[j++]=s[i];
/*************found*************/
s[j]="\O'';
)
main()
charitem[80];
clrscr();
printf(t4\nEnterastring:");
gets(item);
printf(t4\n\nThestringis:\%S\n",item);
fun(item);
printf("\n\nThestringofchanging
is:\%S\n",item);
38.下列給定程序中,函數(shù)fun()的功能是:輸出M行N列整數(shù)方陣,
然后求兩條對角線上的各元素之和,返回此和數(shù)。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動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[il[i]+xx[i][n-i-l];
return(sum);
)
main()
{intaa[M][M]={{l,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));
39.給定程序M0D11.C中函數(shù)fun的功能是:計(jì)算n!。
例如,給n輸入5,則輸出120.000000。
請改正程序中的錯誤,使程序能輸出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1*include<stdio.h>
2doublefun(intn)
3{doubleresult-1.0;
4/found*…
5ifn-?0
6return1.0;
7while(n>1n<170)
8/???foundf**********/
9result*■n--
10returnresult;
11)
12main()
13{intn;
14printf(HInputN:w);
15scanf(w%dw,&n);
ww
16printf(\n\n%d!-%lf\n\nrn,fun(n));
17
40.給定程序MOD11.C中函數(shù)fun的功能是:將s所指字符串中的字
母轉(zhuǎn)換為按字母序列的后續(xù)字母(但z轉(zhuǎn)換為A,z轉(zhuǎn)換為a),其他字符
不變。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1finclude<stdio.h>
2*include<ctype.h>
3voidfun(char*s)
4(
5/**?******wfound*******??**/
6while(*s!-"e')
7{if(*s>-,A,||*s>-,a,
&&*s<?1z?)
8{if(*s-12')WA,
9elseif(*3?=,z1)*s**a1;
10else*s+■1;
11
12;/………Found?…★……/
13!Cs)++;
14;1
151
16main()
17{chars(80);
18printf(w\nEnterastringwith
length<80.:\n\n");gets(s);
19printf(w\nThestring:\n\nw);
puts(s);
20fun(s);
21printf(w\n\nTheCords:\n\nw);
puts(s);
22
五、程序改錯題(2題)
41.
下列給定程序中,函數(shù)proc()的功能是:利用插入排序法對字符串中
的字符按從小到大的順序進(jìn)行排序。插入法的基本方法是:先對字符串
中的頭2個(gè)元素進(jìn)行排序,然后把第3個(gè)字符插入到前2個(gè)字符中,插
入后前3個(gè)字符依然有序;再把第4個(gè)字符插人到前3個(gè)字符中,待排
序的字符串已在主函數(shù)中賦予。請修改程序中的錯誤,使它能得出正
確的結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得
更改程序的結(jié)構(gòu)。試題程序:
5mclu4cVari”
Umdudc<Mduxb>
9defineM80
voidprocCdur?arv)
(mtt?j?mcharchi
n*Mrhe(arr)?
(or<i?l.ynii++)
//????€O?MI????
Ic"?rrtGi
whiiet<j>-0)&&(cb<.nfi])]
?rr£j-^
一—t
■n£j+lj-cbi
void>
char4M]-?QWERTYUK>PASI)FGHJKLMNB
VCXZ%
pnntf(eTheongiiMilMs\ne?a>i
proc(a)i
*TheMringafter8rtz.
KAn\n*??)i
42.
下列給定程序中,proc()函數(shù)的功能是:根據(jù)形參m,計(jì)算下列公式
的值。t=l+l/2+1/3+1/4+...+1/m例如,若輸入10,則應(yīng)輸出
2.928968。請修改程序中的錯誤,使它能計(jì)算出正確的結(jié)果。注意:
不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試
題程序:
5include<sldlib.h>
二include<con?o.h>
5includeVstdio.h>
doubleproc(intm)
(
doublet=1.0;
iniit
for(i=2ii<=mn-F+)
//***?found????
t+=1.O/ks
//????found????
returnis
}
voidnuin()
{ini
sy5tem("CI.S*),
pnnifCw\nPlca>renterintegernumber:w>i
prinifC*\nTheresultis%lf\nH?proc(m))(
六、操作題(2題)
43.以下函數(shù)用來求出數(shù)組的最大元素在數(shù)組中的下標(biāo)并存放在k所指
的存儲單元中。請?zhí)羁铡?/p>
#include<conio.h>
#include<stdio.h>
intfun(int*s,intt,int*k)
{inti;
*k=0;
【】
if(s[*k]<s[i])*k=i;
return【】;}
main()
{inta[10]={876,675,896,101,301,401,980,431,451,777),k;
fun(a,10,&k);
printf("%d,%d\n",k,a[k]);}
44.以下程序運(yùn)行后的輸出結(jié)果是[]0
#include<string.h>
voidfun(char*s,intP,intk)
{inti;
fbr(i=p;i<k-l;i++)s[i]=s[i+2];
main()
{chars[]="abcdefg";
fun(s,3,strlen(s));puts(s)
)
參考答案
1.類類解析:在面向?qū)ο蠓椒ㄖ校惷枋龅氖蔷哂邢嗨茖傩耘c操作的一
組對象。
2.8080解析:數(shù)組a是共用體變量,共用體類型變量所占的內(nèi)存長度為
最大成員的長度,即單精度數(shù)組的長度,為4x4=16,因此,數(shù)組a所占
的內(nèi)存長度為5x16=80,所以最后輸出的s的值為80。
3.ptrptr解析:本題考查函數(shù)指針的概念。函數(shù)指針的定義格式是:類型
標(biāo)識符(*旨針變量名X)。注:“類型標(biāo)識符”為函數(shù)返回值的類型。
4.40
40解析:本題中指針si和s2都指向同一個(gè)內(nèi)存中的地址。因此語句
“*s2=20;”執(zhí)行后,*\u3000sl=*s2=20。所以m最后的值為40。
5.21
6.k<=nk++k<=n\r\nk++解析:本題要求將—for循環(huán)改成while
循環(huán)。首先要保證循環(huán)條件相同,在for循環(huán)中,每次執(zhí)行循環(huán)之后,
循環(huán)控制變量k都會加1,而while循環(huán)則沒有,故需在循環(huán)體中增加
改變k數(shù)值的語句“k++
7.1919解析:根據(jù)二叉樹的性質(zhì):在任意一棵二叉樹中,度為。的結(jié)點(diǎn)
(即葉子結(jié)點(diǎn))總是比度為2的結(jié)點(diǎn)多一個(gè)。本題中度為2的結(jié)點(diǎn)數(shù)為18,
故葉子結(jié)點(diǎn)數(shù)為18+1=19個(gè)。
8.交換排序交換排序解析:常見的排序方法有插入排序(包括簡單插入
排序法和希爾排序法等)、交換排序(包括冒泡排序和快速排序法等)和選
擇排序(包括簡單選擇排序和堆排序等)。注意:常見的排序方法及其作
用機(jī)制和區(qū)別。
9.#&解析:首先看最外面的switch,其表達(dá)式為a>0,結(jié)果為真(即
1),從easel:標(biāo)號處開始執(zhí)行。這里又是一個(gè)switch語句,其表達(dá)式為
b<00,結(jié)果為假(即0),由于沒有case。:或default:標(biāo)號,所以直接跳
過此switch語句。因?yàn)闆]有遇到break;語句,所以繼續(xù)執(zhí)行進(jìn)入內(nèi)部
第2個(gè)switch語句,其表達(dá)式為c==5,結(jié)果為真,從easel:標(biāo)號處開
始執(zhí)行,輸出一個(gè)#,遇到break;語句,跳出該內(nèi)部switch語句,最后
執(zhí)行default:標(biāo)號后的輸出語句輸出一個(gè)&后,整個(gè)外部switch語句執(zhí)行
完畢。程序最后輸出的換行符不會顯示,所以本題應(yīng)該填#&。
10.77解析:解答本題的關(guān)鍵是要讀懂程序,要找出能被7或11整除
的所有整數(shù),注意數(shù)學(xué)中的“或”和C語言中的“或”的區(qū)別,但在此處,
if條件語句中用了“H”運(yùn)算符,若要找能同時(shí)被7和11整除的所有整
數(shù)則在if的條件中應(yīng)使用“&&”運(yùn)算符。
當(dāng)然,如果m的值輸入50,即表達(dá)式fun(10,aa,&n);為fun(50,
aa,&n);時(shí)輸入結(jié)果為:711142122283335424449。
11.AC語言中的轉(zhuǎn)義字符也是一個(gè)字符。字符串“0\\t\\n\\0C011\\l",共有
字符U、Nt,、Nn,3個(gè)字符。strlen遇到\\0,字符計(jì)數(shù)結(jié)束,因此計(jì)數(shù)為
3O故本題答案為A選項(xiàng)。
12.CE-R圖轉(zhuǎn)換成關(guān)系模型數(shù)據(jù)則是把圖形分析出來的聯(lián)系反映到數(shù)據(jù)
庫中,即設(shè)計(jì)出表,所以屬于邏輯設(shè)計(jì)階段。
13.D
14.B
15.DC語言中,整型常量可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制表示。故本
題答案為D選項(xiàng)。
16.D
17.D
18.A宏定義寫在函數(shù)的花括號外,作用域?yàn)槠浜蟮某绦?,通常在文件?/p>
最開頭,所以B選項(xiàng)錯|誤。宏名一般用大寫字母,但不是必須用大寫字
母,所以C選項(xiàng)錯誤。宏展開不占運(yùn)行時(shí)間,只占編譯時(shí)間,函數(shù)調(diào)用
占運(yùn)行時(shí)間(分配內(nèi)存、保留現(xiàn)場、值傳遞、返回值),所以D選項(xiàng)錯
誤。故本題答案為A選項(xiàng)。
19.C
20.B
本題考查函數(shù)的輸出格式。在printf函數(shù),格式說明符中有兩個(gè)“%”說
明;將第1個(gè)%后面的字符原樣輸出,并不輸出其對應(yīng)r的變量值。
21.
【解析】要求二維數(shù)組周邊元素之和,首先應(yīng)該判斷數(shù)組中的每一個(gè)
元素是否是周邊元素。找出所有的周邊元素后求和,返回給主函數(shù)。
周邊元素的下標(biāo)特點(diǎn)為行或列的下標(biāo)為?;騈—1。根據(jù)此特點(diǎn),找出
所有的周邊元素然后求和。
22.
程序設(shè)計(jì)題解析:
【考點(diǎn)分析】
本題考查:指針型變最定義;wh丑e循環(huán)語句;語句條件
表達(dá)式;字符串結(jié)束標(biāo)識
【解題思路】
函數(shù)fun的功能:除了字符串前導(dǎo)的*號之外,將串中其他+號全部刪
除。
【解答本題】
(1)定義一個(gè)臨時(shí)指針P,初始指向原串首地址;(2)利用循環(huán)語句把字
符串前導(dǎo)*號拷貝到原串;(3)繼續(xù)移動指針,把串中和串尾的非*號字
符拷貝到原串;(4)為修改后的字符串賦結(jié)束字符,、0\
【解題寶典】
要刪除字符串中的指定字符,我們通常采用保留非指定字符的方法。
可以將非指定字符保留在原串,即將需要保留的字符從原串的起始位
置重新賦值;也可以保留到新串,即新建一個(gè)字符串,存放要保留的
字符。
23.intfun(STREC*a,STREC*b,int1,inth)
inti,j=0;
for(i=0;i<=""p="">
if(a[i].s>=l&&a[i].s<=h)
/*將分?jǐn)?shù)高于1,低于h的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/
b[j++]=a[i];
returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/
)
本題使用循環(huán)判斷結(jié)構(gòu)實(shí)現(xiàn)題目要求。循環(huán)語句用于遍歷結(jié)構(gòu)體數(shù)組;
條件語句用于判斷當(dāng)前元素是否符合條件,若符合條件則將其存入結(jié)構(gòu)
體數(shù)組b中。變量j為數(shù)組b元素下標(biāo),最后變量j+1為學(xué)生人數(shù),作
為函數(shù)值返回。
24.
【解析】按照題目中要求,求出二維數(shù)組每行中最大元素,并依次放
入pp所指的一維數(shù)組中。首先比較二維數(shù)組中每一行的元素,然后找
出每一行中的最大元素,放入一維數(shù)組pp中,最后返回到主函數(shù)當(dāng)
中。
25.doublefun(doubleeps)
(
doubles=0.0,sl=1.0;
intn=l;
while(sl>=eps)/*當(dāng)某項(xiàng)大于精度要求時(shí),繼續(xù)求下一項(xiàng)*/
{s=s+sl;/*求和*/
sl=sl*n/(2*n+l);
/*求多項(xiàng)式的每一項(xiàng)*/
n++;
)
return2*s;
該題考核的是通過迭代法求給定多項(xiàng)式的值。迭代法是讓計(jì)算機(jī)對一組
指令(或一定步驟)進(jìn)行重復(fù)執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時(shí),
都從變量的原值推出它的一個(gè)新值。需要注意變量的數(shù)據(jù)類型和賦初值
操作。
定義double類型變量s,并為其賦初值,用來存放多項(xiàng)式的某一項(xiàng)和
最后的總和。從第2項(xiàng)開始,以后的每一項(xiàng)都是其前面一項(xiàng)乘以
n/(2*n+l)o程序用si來表示每一項(xiàng),用s表示求和后的結(jié)果。需注意
變量si和s的初值都為1.0,因?yàn)檠h(huán)變量從第2項(xiàng)開始累加。
26.voidfun(inta[3][3],intb[3][3])
(
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[i][j>a[i]rj]+a[j][i];
/*把矩陣a加上a的轉(zhuǎn)置,存放在矩陣b中*/
)
行列數(shù)相等的二維數(shù)組的轉(zhuǎn)置就是行列互換。即轉(zhuǎn)置后的第i行第j列
正好對應(yīng)原矩陣的第j行第i歹本題使用兩層循環(huán)實(shí)現(xiàn)矩陣的轉(zhuǎn)置,
并將計(jì)算結(jié)果存入矩陣b中,外層循環(huán)控制矩陣的行下標(biāo),內(nèi)層循環(huán)控
制矩陣的列下標(biāo)。
27.voidfun(inta,intb,long*c)
(
/*b%10獲取b的個(gè)位數(shù),a/10獲取a的十位數(shù),a%10獲取a的個(gè)位
數(shù),b/10獲取b的十位數(shù)*/
*c=b%10+(a/10)*10+(b/10)*100+(a%10)*1000;
)
本題主要考核如何取出a和b的個(gè)位數(shù)和十位數(shù),取出后如何將其表示
成C中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),因此分別對它們
除以10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個(gè)位
數(shù)。將得到的數(shù)對應(yīng)乘以1000、10。、10、1,即可得到c的千位數(shù)、百
位數(shù)、十位數(shù)、個(gè)位數(shù)。注意使用c時(shí)要進(jìn)行指針運(yùn)算。
28.
【解析】進(jìn)入fun()函數(shù),根據(jù)題中給出的求解步驟,首先yl初值為
0.0;若yO-yl的絕對值大于0.000001就循環(huán)進(jìn)行迭代,即“yO-yl;
yl-cos(yO);",直到滿足題目中的要求,返回yl,即實(shí)根。本題考查
了do-while用法。
29.
(2)錯誤:if(*r==0)
正確:if(*r=='\0')
【解析】由于后面的語句控制變量r是指向字符串t的指針,而不是指
向字符串str的指針,因此,“r=p;”應(yīng)改為“r=t;while循環(huán)結(jié)束
后,如果r指向字符串t的結(jié)束符,證明字符串str中包含一個(gè)t字符
串,因此,“if(*r=O)”應(yīng)改為“if(*『='\0')”。
30.
【解析】題目中要求將字符串中的前導(dǎo)*號全部刪除,首先將指針P移
動到第一個(gè)不是*的字符,將指針P之后的字符放入原來的字符串中,
并為新的字符串添加結(jié)束符。
31.(1)錯誤:k++正確:k++(2)錯誤:if(m=k)正確:if(m==k)(l)錯誤:
k++正確:k++\r\n(2)錯誤:if(m=k)正確:if(m==k)解析:函數(shù)fun()的
功能是判斷m是否為素?cái)?shù):m從2開始作為除數(shù),并對m取余,若不
存在一個(gè)數(shù)使得余數(shù)為。,則m為素?cái)?shù),程序的錯誤在于if(m=k)語句
中的邏輯表達(dá)式寫成了賦值表達(dá)式。
32.(l)doublefun(intn)(2)c=a;a+=b;b=c;(l)doublefun(intn)(2)c=a;a+=b;
b=c;解析:本題中函數(shù)的功能是求出分?jǐn)?shù)序列的前n項(xiàng)之和。首先根
據(jù)題干中給出的公式推出每一項(xiàng)之間的關(guān)系,求出每一項(xiàng)的表達(dá)式,然
后求得數(shù)列的和。每一項(xiàng)的分母是前一項(xiàng)的分子,分子是前一項(xiàng)分子和
分母的和。
33.⑴錯誤:if(i%k!=O)正確:if(i%k=O)(2)錯誤:if(k<i)正確:if(k>=i)(l)
錯誤:if(i%k!=O)正確:if(i%k=O)\r\n⑵錯誤:if(k<i)正確:if(k>=i)解
析也許剛接觸C語言的學(xué)習(xí)者對素?cái)?shù)的概念不清楚,在這里說明一下,
素?cái)?shù)就是質(zhì)數(shù),本題的任務(wù)是隨便輸入一個(gè)整數(shù)m,然后在m的后面尋
找緊跟m的一個(gè)質(zhì)數(shù),作為函數(shù)值返回。
for(i=m+1;;i++){
是從m后面的一位開始循環(huán),將m后面一位的值賦予io然后;我們依
次判斷m后面的一位是否為素?cái)?shù)。
for(k=2;k<i;k++)
if(i%k==0)
是一個(gè)簡單的數(shù)學(xué)判斷問題,判斷i被賦予的值與k的余數(shù)是否為零。
34.(1)錯誤:缺少語句正確:應(yīng)填入n%base或%16(2)錯誤:缺少語句
正確:應(yīng)填入[d](l)錯誤:缺少語句正確:應(yīng)填入n%base或%16\1"\11(2)
錯誤:缺少語句正確:應(yīng)填入回解析:在該程序中,字符數(shù)組b存儲
十六進(jìn)制的16個(gè)數(shù)字符,整型數(shù)組c存儲譯出的十六進(jìn)制數(shù)的各位數(shù)
值。從整數(shù)n譯出它的各位十六進(jìn)制數(shù)值,需采用除16取余的方法,
即求n除16的余,得到它的十六進(jìn)制的個(gè)位數(shù),接著將n除以16。在
n不等于0的情況下循環(huán),能順序求出n的十六進(jìn)制的個(gè)位數(shù)、十位數(shù)、
百位數(shù)等。程序中變量base已預(yù)置16,所以在第1個(gè)空框處可填代碼
n%base或n%16。當(dāng)n的十六進(jìn)制數(shù)的個(gè)位、十位、百位等依次存
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GA 1812.3-2024銀行系統(tǒng)反恐怖防范要求第3部分:印鈔造幣企業(yè)
- 設(shè)備承包租賃合同協(xié)議
- 貨車輪胎購貨合同協(xié)議
- 訓(xùn)練營入股合同協(xié)議
- 貨物配送協(xié)議書范本
- 設(shè)備儀器轉(zhuǎn)讓合同協(xié)議
- 調(diào)解婆媳矛盾協(xié)議書范本
- 《第03節(jié) 探究外力做功與物體動能變化的關(guān)系》教學(xué)設(shè)計(jì)1
- 2022年全國高中數(shù)學(xué)聯(lián)賽 B1卷試題
- 31屆化學(xué)初賽試題及答案
- 2025陜西漢中漢源電力(集團(tuán))限公司招聘56人易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年北京市西城區(qū)中考一模道德與法治試卷(含答案)
- 年產(chǎn)30萬噸生物航煤項(xiàng)目可行性研究報(bào)告(僅供參考)
- 南京師范大學(xué)自主招生個(gè)人陳述范文與撰寫要點(diǎn)
- 浙江省A9協(xié)作體2024-2025學(xué)年高二下學(xué)期4月期中聯(lián)考語文試卷(含答案 )
- (四調(diào))武漢市2025屆高中畢業(yè)生四月調(diào)研考試 語文試卷(含答案詳解)
- 公司事故隱患內(nèi)部報(bào)告獎勵制度
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)(創(chuàng)新創(chuàng)業(yè)課程)完整全套教學(xué)課件
- 中國農(nóng)業(yè)文化遺產(chǎn)與生態(tài)智慧智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學(xué)
- 中考語文作文專題復(fù)習(xí):以小見大的寫作技巧
- Unit 1 Looking forwards Understanding ideas 教學(xué)設(shè)計(jì)-高中英語外研版(2019)選擇性必修第四冊
評論
0/150
提交評論