2022年江蘇省南京市全國計算機等級考試C語言程序設計真題(含答案)_第1頁
2022年江蘇省南京市全國計算機等級考試C語言程序設計真題(含答案)_第2頁
2022年江蘇省南京市全國計算機等級考試C語言程序設計真題(含答案)_第3頁
2022年江蘇省南京市全國計算機等級考試C語言程序設計真題(含答案)_第4頁
2022年江蘇省南京市全國計算機等級考試C語言程序設計真題(含答案)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

2022年江蘇省南京市全國計算機等級考試

C語言程序設計真題(含答案)

學校:班級:姓名:考號:

一、2.填空題(10題)

1.請在以下程序第一行的下劃線處填寫適當內(nèi)容,使程序能正確運行。

(double,double);

main()

{doublex,y;

scanf("%lf%lf,&x.&y);

printf("%lf\n...,max(x,y));

)

doublemax(doublea,doubleB)

{return(a>b?a=B);}

2.以下程序中,函數(shù)fun的功能是計算x2-2x+6,主函數(shù)中將調(diào)用fun函

數(shù)計算:

yl=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

請?zhí)羁铡?/p>

#include"math.h"

doublefun(doublex){retum(x*x-2*x+6);}

main()

{doublex,yl,y2;

printf("Enterx:");scanf("%lf',&x);

yl=fun([]);

y2=fun([]);

printf("y1=%lf,y2=%lf\n",y1,y2);

)

3.執(zhí)行下面程序段后,k的值是【】。

r=l;n=203;k=l

do{k*=n%10*r;n/=10;r++;}while(n);

4.以下程序的輸出結果是【】。

#include<stdio.h>

main()

{inti;

fbr(i=,a,;i<T;i++,i++)printf("%c",i-,a,+,A,);

printf("\n");

5.在使用putchar和getchar函數(shù)處理字符時,必須在程序的開頭出現(xiàn)包

含頭文件的命令行是【】。

6.設函數(shù)findbig已定義為求3個數(shù)中的最大值,以下程序?qū)⒗煤瘮?shù)

指針調(diào)用findbig函數(shù)。請?zhí)羁铡?/p>

main()

{intfindbig(int,int,int);

int(*f)(),x,y,z,big;

f=[]o

scanf("%d%d%d",&x,&y,&z);

big=(*f)(x,y,z);

printf("big=%d\n",big);

7.若x=3,y=2,z=l,表達式z-=x<y?x++:++y的值為

8.軟件測試是保證軟件質(zhì)量的重要手段,而軟件測試的主要和重要的測

試方法是通過測試數(shù)據(jù)和【】的設計來實現(xiàn)。

9.下列程序的輸出結果是【】°

intt(intx,inty,ntcp,intdp)

{cp=x*x+y*y;

dp=x*x-y*y;

)

main()

{inta=4,b=3,c=5,d=6;

t(a,b,c,d);

printf("%d%d\n",c,d);

)

10.以下程序的輸出結果是【】。

#include<stdio.h>

voidfun()

{staticinta=0;

a+=2;printf("%d",a);

)

main()

{intcc;

for(cc=l;cc<4;cc++)fun();

printf("\n");

二、單選題(10題)

11.有以下程序:#includeMain(){charel.c2;.

cl='A'+8」4';c2='A'+'8'」5';.printf("%c,%d\n",,cl.c2);}

已知字母A的ASCI碼為65.程序運行后的輸出結果是()。

A.E.68B.D.69C.E,DD.輸出無定值

12.

(14)下列選項中,不能作為合法常量的是().

A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0

13.設初始輸入序列為123,4,5,利用一個棧產(chǎn)生輸出序列,下列()序列

是不可能通過棧產(chǎn)生的。

A.1,2,3,4,5B.5,3,4,1,2C.4,3,2,1,5D.3,4,5,2,1

14.下列敘述中,不正確的是

A.數(shù)據(jù)庫技術的根本目標是要解決數(shù)據(jù)共享的問題

B.數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)的物理結構必須與邏輯結構一致

C.數(shù)據(jù)庫設計是指設計一個能滿足用戶要求,性能良好的數(shù)據(jù)庫

D.數(shù)據(jù)庫系統(tǒng)是一個獨立的系統(tǒng),但是需要操作系統(tǒng)的支持

15.設有6個結點的無向圖,該圖至少應有()條邊才能確保是一個連通圖。

A.5B.6C.7D.8

16.下列敘述中錯誤的是()。

A.C程序可以由多個程序文件組成

B.一個C語言程序只能實現(xiàn)一種算法

C.C程序可以由一個或多個函數(shù)組成

D.一個C語言函數(shù)可以單獨作為一個C語言程序文件存在

17.數(shù)據(jù)的存儲結構是指o

A.數(shù)據(jù)所占的存儲空間量B.數(shù)據(jù)的邏輯結構在計算機中的表示C.數(shù)

據(jù)在計算機中的順序存儲方式D.存儲在外存中的數(shù)據(jù)

18.下面程序輸出的結果是main(){intx;x=-3+4*5-6;printf("%d",

x);x=3+4%5-6;printf("%d",x);x=-3+4%6/5;printf("%d",x);

x=(7+6)%5/2;printf("%d",x);}

A.ll1-31B.ll-321C.12-321D.ll121

19.設有定義inta=2,b=3,c=4;,則以下選項中值為。的表達式

是o

A.(!a==l&&(!b==O)

B.(a<b)&&!c||l

C.a&&b

D.a||(b+b)&&(c-a)

20.有下列程序:

#include<stdio.h>

main()

I

charv[4][10]=|"efg","abed","mnopq"hijkl"|,*p[4],t;

inti,j;

for(i=0;i<4;i++)

p[>]=v[i];

for(i=0;i<3;i++)

for(j=i+1;j<4;j++)

if(*p[i]>*p[j])

It=*p[i];*p[i]=*p[j];*p[j]=t;}

for(i=0;i<4;i++)

printf("%s",v[i]);

I

程序執(zhí)行后的輸出結果是0。

A.abcdefghijklmnopq

B.afgebedhnopqmijklhnopqmijkl

C.efgabedmnopqhijkl

D.mijklhnopqebedafg

三、程序設計題(10題)

21.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案

的項目中包含一個源程序文件progl.co此程序定義了NXN的二維數(shù)

組,并在主函數(shù)中自動賦值。請編寫函數(shù)該函數(shù)的功能是使數(shù)組下三角

元素中的值乘以no

例如,若n的值為3,a數(shù)組中的值為

197

238

456

則返回主程序后,a數(shù)組中的值應為

397

698

121518

注意:部分源程序給出如下。

請勿改動函數(shù)main。和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括

號中填入你編寫的若干語句。

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

voidfun(inta[][N],intn)

(

)

main()

(

inta[N][N],n,i,j;

printf("*****Thearray*****\n");

for(i=0;i<n;i++)<p=""x/n;i++)<>

(

for(j=0;j<=""p="">

(

a[i][j]=rand()%10;

printf("%4d”,a[i皿);

)

printfC4\n^^);

)

n=rand()%4;

printf(<<n=%4d\n,,,n);

fun(a,n);

printf("*****TheResult*****\n*);

for(i=0;i<=""p="">

{

for(j=0;j<=""p="">

printf("%4d”,a[i皿);

printf(t4\n^^);

22.

請編寫一個函數(shù)voidproc(chara[],charbE3,intn),其功能是:刪除

一個字符串中指定下標的字符。其中,a指向原字符串,刪除后的字符

串存放在b所指的數(shù)組中,n中存放指定的下標。例如,輸入一個字符

串student,然后輸入5,則調(diào)用該函數(shù)后的結果為studet。注意:部分

源程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,

僅在函數(shù)proc的花括號中填入所編寫的若干語句。試題程序:

#includeVstdlib.h>

冬include<stdio.h>

#include<conio.h>

5defineN20

voidproc(char],charb[].intn)

(

}

voidmain()

(

charstr![N].?tr2[N];

intni

systemCHCI-S*,)i

printf("Enterthestrings\n")i

gets(Mrl)i

printf(*EnterthepositionoftheMrtngdeleted:

")i

scan1(-%d*?i

proc(strl?str2?n)t

printf("Thenewstringis:%*\n"."r2》t

I

23.

學生的記錄由學號和成績組成,M名學生的數(shù)據(jù)已在主函數(shù)中放人結構

體數(shù)組stu中,請編寫函數(shù)proc(),其功能是:按分數(shù)的高低排列學生

的記錄,高分在前。注意:部分源程序給m如下。請勿改動main()

函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編

寫的若干語句。試題程序:

=includeViU&kh>

4defineMIt

tvtwdrffttrurt

rharnuanLIO]s

ml

KTRfX,.

BidprocXSTKECa[}>

mii?ji

STREXrt?

forti-l?2MII++)/?

I?岸“

for(jflBOij<ZMIij■?-4-)

M?0工Ya[,+11N八被分散的離低礴“學4

*記錄?高分在??/

《??6】,山】?《0+5山+1]78)

voidfMIB()

STRECMULM]-(<?GAOO5".t5l.<*GA003*

7".

(?<;AO(>2*.69|.<'GA004??85)?(?(;Aoo廣?9H.

(?(;A007".72HCGAOOR*?,0?(eGAOO4".B7).

《?<;AOlS..a5l?<?(;A<M3..91).,?(;AOlZ"?e4)?

《?GAOlL.6CGAO16..72”i

HMii

pror(?tn>i

pnnt(("Thedataaffet?ortrdt\n*)i

for<1**OgyM???+)

寓,%4=?0>

〃?行?出W個學生id1

print”*\n")?

(Mifiifi*Mu%4d°num.,lM(i}<.)i

24.

編寫一個函數(shù),該函數(shù)可以統(tǒng)計一個長度為2的字符串在另一個字符串

中出現(xiàn)的次數(shù)。例如,假定輸入的字符串為abcdefabcdeabceabcdef,子

字符串為cd,則應當輸出3。注意:部分源程序給出如下。請勿改動

主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號中填入

所編寫的若干語句。試題程序:

Uinclude<b>

includeVenio*k>

Minclude<stdto.ii>

"iocludr<Mring.h>

intprocCchax??tr.char??utmtr)

voidmamC)

charMr[8l]?uibs<r[3]i

m<m

)?

prrnM'?人主字句*.?!!

get?(?tr)?

字椅事,>>.

p?t*(ntr)s

pvt?(?ulMtr>i

ti*pror<9itr?Mibstr)i

pm?f(*nmKAB*?n)i

25.使用VC++2010打開考生文件夾析下progl中的解決方案。此解決

方案的項目中包含一個源程序文件progl.c。在此程序中,請編寫一個

函數(shù)fun(),它的功能是將ss所指字符串中所有下標為奇數(shù)的字母轉(zhuǎn)換

為大寫字母(若該位置上不是字母,則不轉(zhuǎn)換)。

例如,若輸入“abc4E慮”,則應輸出“aBc4EFg”。

注意:部分源程序在文件progl.c中。請勿改動主函數(shù)main。和其他函

數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。

試題程序:

1#include<conio.h>

2tinclude<stdio.h>

3tinclude<string.h>

4linclude<stdlib.h>

5voidfun(char*ss)

6{

7

8}

9voidmain()

10{

11FILE?wf;

nM

12chartt[81]zs[81]?abc4Efg;

13system(MCLSM);

14printf(H\nPleaseenteranstring

within80characters:\nM);

15gets(tt);

16printf(H\n\nAfterchanging,

thestringVn,s”,tt);

17fun(tt);

MM

18printf(\nbecomes\n%s\nrtt);

19//

20wf=fopen("out-dat","w");

21fun(s);

22fprintf(wfr-%s”,s);

23fclose(wf);

24/??????????*??*???/

25)

26.

假定輸入的字符串中只包含字母和*號。請編寫函數(shù)proc(),它的功能

是:使字符串中前部的*號不得多余m個;若多余m個,則刪除多余的

*號;若少于或等于m個,則什么也不做,字符串中間和尾部的*號不刪

除。例如,字符串中的內(nèi)容為****A*BC*DEF*G****,若m的值為2,

刪除后,字符串中的內(nèi)容則應當是**A*BC*DEF*G****;若m的值為

4,則字符串中的內(nèi)容仍為****A*BC*DEF*G****°n的值在主函數(shù)中輸

入。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。注意:部分源

程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅

在函數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:

8mdud*Va矗<x

佑include<cofiio.

midpTuc<ctuir???min)

voidfBain(>

(HuifJtifiion

IKIRIK*Fnirr?Mrtnfl:\i>a>*tr)i

pnmKm.a)"Kdwi

proc(

priDtfC,ThrMrttigA(lrf<ir!rt?d:\na)i

27.請編一個函數(shù)intfun(inta),它的功能是:判斷a是否是素數(shù),若a是

素數(shù),返回1;若不是素數(shù),返回0°A的值由主函數(shù)從鍵盤讀入。

28.規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,其功能是:

除了字符串前導的*號之外,將串中其他*號全部刪除。在編寫函數(shù)時,

不得使用c語言提供的字符串函數(shù)。

例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符

串中的內(nèi)容應當是:

****ABCDEFG。

注意:部分源程序在文件PROG1.C中。

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括

號中填入你編寫的若干語句。

tinclude<stdin,h>

voi<]fun(rhjir*a)

main()

char81];voidNONO();

pnntffHEnterAstring:\n**);gete(B);

fun(3):

printf("Thestringafterdeleted:\n");puta(>);

NONO();

voidNONO()

|/?本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù).關閉文件,?/

FILE?in,?out;

inti;chars[81];

in=fopcn("in.dat*f**r**);

out=fopcn("out.dal**,Mw");

for(is0$i<I

(?canf(int**%?*,?);

fun(i):

fpnnlf(out.*%?\n**,5);

fcloec(in);

lcloBe(out);

29.請編一個函數(shù)fun(ohlr*str),該函數(shù)的功能是把字符串中的內(nèi)容逆置。

例如,字符串中原有的字符串為asdf9,則調(diào)用該函數(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[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

ut=fopen("outfile.dat","w");

fprintf(out,"%s".a);

fclose(out);

30.請編一個函數(shù)voidproc(inttt[M][N],intpp[N]),tt指向一個M行N

列的二維數(shù)組,求出二維數(shù)組每行中最大元素,并依次放入pp所指的

一維數(shù)組中。二維數(shù)組中的數(shù)已在主函數(shù)中給出。

注意:部分源程序給出如下。

請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc。的花括

號中填入所編寫的若干語句。

試題程序:

UmcludlcV

=includeVconio.h>

5include<Mdbkb>

8defineM3

ssdefineN4

gidproctini.inf

voidmainC>

mt(34?54.M.7中?

IB*乂.93.ltl?

int—NJ.G小lu

n)mt?tn<.<:]£)i

pnnif("TheriginaldatahtX**)t

lor<i-0,yMii*?)

+>

printfc*?

print“'iT】,

pror(Mr?p)i

prtniff*\nThe

foe(k-<hltVM$k-?)

pnnif("c'<d*.pTkw;)i

pravlf(e\*B)t

四、2.程序修改題(10題)

31.下列給定程序中,函數(shù)fun()的功能是,?計算函數(shù)F(x,y,z)=(x+y)/(x-

y)+(z+y)/(z-y)的值。其中x和y不相等,z和y不等。例如,當x的值

為9,y的值為11,2的值為15時,函數(shù)值為-3.50。

請改正程序中的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

#include<math,h>

/*********不不不*不f^)und?不不不*不不不*字不不*******/

#defineFU(m,n)(m/n)

floatfun(floata,floatb,floatc)

{floatvalue;

value=FU(a+b,a-b)+FU(c+b,c-b);

/***********不*found*******不***不******/

return(Value);

}

main()

{floatx,y,z,sum;

printf("Inputxyz::");

scanf("%f%f%f,&x,&y,&z);

printf("x=%f,y=%f,z=%f\n",x,y,z);

if(x==y||y==z){printf("Dataerror!\n");

exit(0);}

sum=fun(x,y,z);

printf("Theresultis:%5.2f\n",sum);

)

32.給定程序M0D11.C中函數(shù)fun的功能是:交換主函數(shù)中兩個變量

的值。例如:若變量a中的值原為8,b中的值為30程序運行后a中的

值為3,b中的值為80請改正程序中的錯誤,使它能計算出正確的結

果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!

1*include<stdio.h>

2/………found………?/

3voidfun(intx,inty)

4(

5intt;

6/………found…?……/

7t-x;x?y;y?t;

8}

9main()

10(

11inta,b;

12a?8;b?3;

13fun(&a,&b);

w

14printf(%dr%d\n”,a,b);

15

33.下列給定程序中,函數(shù)fun()的功能是:先從鍵盤上輸入一個3行3

列的矩陣的各個元素的值,然后輸出主對角線元素之和。

請改正函數(shù)fun()中的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

intfun()

(

inta[3][3],sum;

inti,j;

/*************found**************/

sum=l;

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

/*************found**************/

scanf("%d",a[i][j]);

)

for(i=0;i<3;i++)

sum=sum+a[i][i];

printf("Sum=%d\n",sum);

)

main()

{

fun();

)

34.給定程序M0D11.C中函數(shù)fun的功能是:比較兩個字符串,將長

的那個字符串的首地址作為函數(shù)值返回。

請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!

tinclude<stdio.h>

2/***?*?****found**********/

3charfun(char*srchar*t)

4{intsl?0rtl?0;char*ssr*tt;

5ss?s;tt-t;

6while(*ss)

7{sl++;

8/?*??**?*??found*?*****???/

9(*ss)

10}

11while(*tt)

12(

13/***?*?****found****??*???/

14(*tt)**;

15)

16if(tl>sl)returnt;

17elsereturns;

18)

19main()

20{chara[80],b[80];

21printf(R\nEnterastring:H);

gets(a);

22printf("XnEnterastringagain:

");gets(b);

23printf(R\nThelongeris:\n\n\

fun(a,b));

24

35.給定程序MODU.C中函數(shù)fun的功能是:將十進制正整數(shù)m轉(zhuǎn)換

成k(2WkS9)進制數(shù),并按高位到低位順序輸出。

例如,若輸入8和2,則應輸出1000(即十進制數(shù)8轉(zhuǎn)換成二進制表示

是1000)o

請改正fun函數(shù)中的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù)。不得增行或刪行,也不得更改程序的結構!

1finclude<conio.h>

2?include<stdio.h>

3voidfun(intm,intk)

4(

5intaa[20]9i;

6for(i-0;m;

7(

8/**********found********??/

9aa[i]-m/k;

10m/-k;

11)

12for(;i;i-)

13/**********found***ww****?/

ww

14printf(%draa[i]);

15}

16main()

17(

18intb;n;

19!printf(w\nPleaseenteranumber

?andabase:\nR);

wM

20iscanf(%d%dr&n,6b);

21?fun(n,b);

22!printf(w\nw);

23i)

36.下列給定程序中,函數(shù)fun()的功能是:求出以下分數(shù)序列的前n項

之和。

2/1,3/2,5/3,8/5,13/8,21/13...........

和值通過函數(shù)值返回main。函數(shù)。例如,若輸入n=5,則應輸出8.391667。

請改正程序中的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

/*************found**************/

fun(intn)

{inta=2,b=l,c,k;

doubles=0.0;

for(k=l;k<=n;k++)

{s=s+1.0*a/b;

/*************found**************/

c=a;a+=b;b+=c;

)

return(s);

)

main()

{intn=5;

clrscr();

printf("\nThevalueoffunctionis:

fun(n));

37.下列給定程序中,函數(shù)fun()的功能是讀入一個字符串(長度<20),

將該字符串中的所有字符按ASCII碼降序排序后輸出。

例如:輸入dafhc,則應輸出hfdcao

請改正程序中的錯誤,使它能得到正確結果。

注意:不要改動main函數(shù),不得增行或刪行,敢不得更改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

/*************found**************/

intfun(chart口)

charc;

血i,j;

for(i=0;i<strlen(t)-l;i++)

for(j=i+l;i<strlen(t);j++)

if(t[i]<tU])

c=t[j];

/*************found**************/

t[i]=t[i++];

t[i]=c;

main()

chars[81];

clrscr();

printf("\nPleaseenteracharacter

string:");

gets(s);

printf("\n\nBeforesorting:\n%S",s);

fun(s);

printf("\nAftersortingdecendingly:\n

%s",s);

38.給定程序M0D11.C中函數(shù)fun的功能是:在字符串的最前端加入

n個*號,形成新串,并且覆蓋原串。

注意:字符串的長度最長允許為79o

請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構!

1?include<stdio.h>

2*include<string.h>

3voidfun(chars[],intn)

4(

5chara[80],*p;

6inti;

7/found***,?**★*★*/

8s?p;

9for(i-0;i<n;i++)a[i]-**

10do

11{a[i]?*p;

12i++;

13

14//………found…??……/

15while(*p++)

16a[i]-0;

17strcpy(sra);

18)

19main()

20(intn;chars[80];

21printf(M\nEnterastring:w);

gets(s);

22printf(w\nThestring\"%s\w\nw;

23printf(w\nEntern(numberof*):

wH

");scanf(%dr;

24fun(s,n);

25printf(w\nThestringafterinsert:

\w%s\w\nw,s);

26

39.給定程序MOD11.C中函數(shù)fun的功能是:判斷一個整數(shù)是否是素

數(shù),若是返回1,否則返回0。

在mai()函數(shù)中,若fun返回1輸出YES,若fun返回。輸出NO!。

請改正程序中的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù)。不得增行或刪行,也不得更改程序的結構!

1?include<stdio.h>

2intfun(intm)

3{intk-2;

4while(k<-m&&(m%k))

5/…………"und…………/

6k++

7/…………found??………?/

8if(m-k)

9return1;

10elsereturn0;

11)

12main()

13{intn;

14printf(w\nPleaseentern:"

w

scanf("%dr&n);

15if(fun(n))printf(MYES\nw);

16elseprintf(nNO!\n°);

17

40.下列給定程序中函數(shù)fun()的功能是計算1/n!的值。

例如:給n輸入5,則輸出0.0083330

請改正程序中的錯誤,使它能得到正確結果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

#include<conio.h>

/******+****found*************/

intfun(intn)

{doubleresult=1.0;

if(n==0)

return1.0;

while(n>1&&n<170)

result*=n++;

result=l/result;

returnresult;

)

main()

{

intn;

printf("InputN:");

scanf("%d",&n);

printf("\nl/%d!=%If\n",n,fun(n));

}

五、程序改錯題(2題)

41.已知一個數(shù)列從。項開始的前3項為0,0,1,以后的各項都是其

相鄰的前3項之和。下列給定的程序中,函數(shù)proc的功能是:計算并

輸出該數(shù)列前n項的和sum。n的值通過形參傳人。例如,當n=20

時,程序的輸出結果應為42762.0000000

請修改程序中的錯誤,使它能得到正確結果。

注意:不要改動maiil函數(shù),不得增行或刪行,也不得更改程序的結

構。

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

doubleproc(intn)

(

doublesum,sO,si,s2,s;

intk;

sum=l.0;

if(n<=2)

sum=0.0;

s0=0.0;

sl=0.0;

s2=l.0;

//****^^und****

for(k=4;k<n;k++)

)

(

s=s0+sl+s2;

sum+=S:

sO=sl;

sl=s2;

//***und****

s2=s;

returnsum;

)

voidmain

(

intn;

system("CLS");

printf("InputN=");

scanf("%d",&nJ;

printf("%f\n",proc(n));

)

42.下列給定的程序中,函數(shù)proc()的功能是:計算并輸出k以內(nèi)最大

的10個能被15或18整除的自然數(shù)之和,k的值由主函數(shù)傳人。若k

的值為800,則函數(shù)的值為7605。

請改正程序中的錯誤,使它能得出正確的結果。

注意:不要改動main。函數(shù),不得增行或刪行,也不得更改程序的結

構。

試題程序:

=rncludrVzdicx.

ginclM<ic<coeio.h>

8iadudrVstdlihh>

mtproc<mtk)

mtm-0?mc?0?ji

id

//????found????

?-m?htfMr-4(?.)

k-i

//????(o?md????

rwtum

voidm*in(>

?ysiem(*CLS*)i

pra>tf<*Xd\ft?.peoc(S00》八

六、操作題(2題)

43.若變量x、y已定義為int類型且X的值為33,y的值為3,請將輸

出語句printf((),x/y);補充完整,使其輸出的計算結果形式為:x/y=llo

44.下列給定程序中,函數(shù)fun()的功能是:按順序給s所指數(shù)組中的元

素賦予從2開始的偶數(shù),然后再按順序?qū)γ?個元素求一個平均值,并

將這些值依次存放在w所指的數(shù)組中。若s所指數(shù)組中元素的個數(shù)不是

5的倍數(shù),多余部分忽略不計。例如,s所指數(shù)組有14個元素,則只對

前10個元素進行處理,不對最后的4個元素求平均值。

請改正函數(shù)fun()中的錯誤,使它能得出正確的結果。

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。

試題程序:

#include<stdio.h>

#defineSIZE20

fun(double*s,double*w)

{intk,i;doublesum;

for(k=2,i=0;i<SIZE;i++)

{s[i]=k;k+=2;}

sum=0.0;

for(k=0,i=0;i<SIZE;i++)

{sum+=s[i];

/*************found**************/

if(i+l%5==0)

{w[k]=sum/5;Sum=0;k++;}

)

returnk;

)

main()

{doublea[SIZE],b[SIZE/5];

inti,k;

k=fun(a/b);

printf("Theoriginaldata:\n");

for(i=0;i<SIZE;i++)

{

if(i%5==0)printf("\n");

printf("%4.0f7a[i]);

)

printf{"\n\nTheresult:\n");

for(i=0;i<k;i++)prmtf("%6.2f',b[i]);

printf("\n\n");

參考答案

1.doublemax或externdoublemaxdoublemax或externdoublemax解析:

函數(shù)聲明是對所用到的函數(shù)的特征進行必要的聲明,編譯系統(tǒng)以函數(shù)聲

明中給出的信息為依據(jù),對調(diào)用表達式進行檢測,以保證調(diào)用表達式

與函數(shù)之間的參數(shù)正確傳遞.函數(shù)聲明的一般格式為:類型標識符函

數(shù)名(類型標識符形參,…);這些信息就是函數(shù)定義中的第一行的內(nèi)容。

本題中main()函數(shù)需要調(diào)用max()函數(shù),在main()之前就需要聲明函數(shù)

max。,并且可以用extern說明符使變量的作用域擴充到需要用到它的

函數(shù),所以,填寫doublemax(或externdoublemax)。

2.x+8sin(x)x+8,sin(x)解析:考查考生對函數(shù)調(diào)用相關知識的了解。用

x+8代替函數(shù)fun(doublex)中形式參數(shù)x;用sin(x)代替函數(shù)fun(double

x)中形式參數(shù)xo

3.00解析:本題考查的是do和hile循環(huán)。第一次執(zhí)行循環(huán)體,因為

k=],r=l,n=20,所以k=1*20%10*1=0,n=20/10=2,r=2;第二次執(zhí)行循環(huán)

體,k=0*2%10*2=0,n=10/10=1,r=3;第三次執(zhí)行循環(huán)

體,k=0*l%10*3=0,n=1/10=0,r=4,所以k的值為0。

4.ACEACE解析:在本題中,for循環(huán)體每執(zhí)行完一次,變量i的值自加兩

次。i的初值為\'a\;執(zhí)行一次循環(huán)后變?yōu)閈七\;之后再變成Ve\;當其變?yōu)閈陵

時,循環(huán)條件若不滿足,循環(huán)終止,故本題共輸出3個字符。表達式1

Va\=\ue008\AV\ue009,即表示輸出i對應的大寫字母,結果為ACEO

5.#include"stdio.h"#include'stdio.h'解析使用putchar和getchar函數(shù)時,

必須在程序的開頭出現(xiàn)包含頭文件#include,stdio.h'的命令行。putchar的

函數(shù)調(diào)用形式為:putchar(字符變量或字符常量);getchar函數(shù)的調(diào)用形

式為:變量=getchar();getchar后的一對圓括號內(nèi)沒有參數(shù),但這一對圓

括號不可少。

6.findbigfindbig解析:f是指向函數(shù)的指針變量,根據(jù)題意要求,空格

處應填入findbigo

本題目考查:C語言中指向函數(shù)的指針變量定義的一般形式為;

數(shù)據(jù)類型標識符(*指針變量名)();

“數(shù)據(jù)類型標識符”表示函數(shù)返回值的類型。

函數(shù)的調(diào)用可以通過函數(shù)名調(diào)用,也可以通過函數(shù)指針調(diào)用。在給函數(shù)

指針變量賦值時,只需給出函數(shù)名而不必給出參數(shù)。(*p)()表示定義一個

指向函數(shù)的指針變量,專門用來存放函數(shù)的入口地址,可以先后指向不

同的指針變量。用函數(shù)指針調(diào)用函數(shù)時,只需要將(*p)代替函數(shù)名即可,

在(*僅之后的括號中,根據(jù)需要寫上參數(shù)。

7.-2。-2O解析:表達式z-=x<y?x++:++y相當于先執(zhí)行++y,再執(zhí)行z-

=x<y?x:y,最后執(zhí)行x++,其中z-=x<y?x:y等價于z=z-(x<y?x:y),由

于x值為3,y值為3,x<y不成立,返回y的值,z-y的值為-2,賦給

zo

8.測試實例測試實例解析:進行軟件測試時,應精心設計測試實例和選

擇測試數(shù)據(jù),以對系統(tǒng)進行全面測試。

9.5656解析:本題中a,b,c,d是實參,x,y,cp,dp是形參。C語

言規(guī)定,實參變量對形參變量的數(shù)據(jù)傳遞是“值傳遞”,即單向傳遞,只

由實參傳給形參,而不能由形參傳回來給實參。在內(nèi)存中,實參單元與

形參單元是不同的單元。在調(diào)用函數(shù)時,給形參分配存儲單元,并將實

參對應的值傳遞給形參,調(diào)用結束后,形參單元被釋放,實參單元仍保

留并維持原值。因此,程序的輸出結果是56。

10.246246解析:本題考查靜態(tài)(static)局部變量的使用。fun函數(shù)中的靜

態(tài)局部變量a所占用的存儲單元在程序運行過程中始終不釋放,即當下

一次調(diào)用該函數(shù)時,該變量仍然保留上一次函數(shù)調(diào)用結束時已有的值,

3次調(diào)用fun函數(shù)分別得到2,4,6。

11.A

[解析]本題目中字符變量cl是字符A的ASCII碼加上4.即69所對應

的字符E。字符變量c2是字符A的ASCII碼加上3.即68所對應的字

符D:但是打印輸出時,cl以%c的格式輸出,所以是E,c2以%d

的格式輸出,所以是68.

12.B

13.B

14.B解析:B選項錯誤,原因是,數(shù)據(jù)庫應該具有物理獨立性和邏輯獨

立性,改變其一而不影響另一個。

15.A:在一個無向圖G中,若從頂點Vi到頂點Vj有路徑相連,則稱Vi

和Vj是連通的。連通圖是指任意兩個結點之間都有一個路徑相連。6個

節(jié)點的無向圖,至少要5個邊才能確保是任意兩個節(jié)點之間都有路徑相

連。下圖是一種可能的連接方式:故本題選A°

16.B在一個C語言程序中可以實現(xiàn)多種算法,所以B選項錯誤。故本

題答案為B選項。

17.B解析:數(shù)據(jù)元素在計算機存儲空間中的位置關系與它們的邏輯關系

不一定是相同的,而且一般不可能相同。數(shù)據(jù)的邏輯結構在計算機存儲

空間中的存放形式稱為數(shù)據(jù)的存儲結構,也稱數(shù)據(jù)的物理結構。

18.A解析:本題考查的是算術運算符的各種運算,x=-3+4*5-6=-3+20-

6=11;x=3+4%5-6=3+4-6=l;x=-3+4%6/5=-3+4/5=-3+0=-3;

X=(7+6)%5/2=13%5/2=3/2=1。故正確答案為選項A)o

19.A解析:選項A中(!a==l)&&(!b==0)7(!2=

=l)&&(!b==O).(O==l)&&(!b==O)-0&&(!b==0)-0(&&右邊表達式

(!b==0)被“短路”):選項B中(a<b)&&!c||l-(2<

3)&&!4||1->1&&0||1->0||1->1;選項C中a&&b—2&&3-1;選項

Da||b+b)&&(c-a)一2||(b+b)&&(c-a)一1(11右邊表達式(b+b)&&(c-a)被“短

路”)。所以本題選A。

20.B

程序首先定義二維字符數(shù)組v,使用4個字符串初始化,另外定義字符

指針數(shù)組Po通過第1個for循環(huán),將v的4個字符串的首地址賦給

po第2for循環(huán)通過兩層內(nèi)嵌循環(huán)將p中元素指向的字符串首字母進行

排序交換。規(guī)則是將指向的字符串的首字母字符按照字母表中的順序

排序后交換。注意,這里交換的是首字母,而不是整個字符串,所以

程序輸出:afgebcdhnopqmijklo本題答案為B選項。

21.voidfun(inta[][nl,intn)

{

inti,j;

for(i=0;i<=""p="">

for(j=0;j<=i;j++)

/*矩形的下三角時,積相乘*/

a[i][j]=a[i][j]*n;

)

首先從數(shù)組中找出要乘以n的元素。這其實就是找出將被挑出的元素在

原數(shù)組中的分布規(guī)律的過程。通過觀察得出,要被處理的元素下標的范

圍是從每行中第1個元素開始,直到列數(shù)等于該行行數(shù)為止。即數(shù)組下

三角元素的列下標①小于等于(<=)行下標①。找到這個規(guī)律后,依次從

數(shù)組中取得符合要求的元素,然后乘以n°

22.

【解析】按照題目中的要求,刪除一個字符串中指定下標的字符。首先,

將指定下標之前的字符放入字符數(shù)組b中,然后將指定下標之后的字符

也放入字符數(shù)組b中,最后為新的字符數(shù)組b添加結束符。

23.

【解析】要按分數(shù)的高低排列學生的記錄,可以使用冒泡排序法。將每

一個學生的成績與其他學生的成績相比較,對不符合要求的記錄交換位

置。

24.

【解析】要計算出主字符串中包含子字符串的個數(shù),應該檢查主字符串

中從第一個到最后一個字符。每出現(xiàn)一個計數(shù)變量加1,最后將得到的

個數(shù)返回給主函數(shù)。

25.1voidfun(char*ss)

2{

3inti;

4for(i=0;ss[i]!='\\0';i++)/*將ss所指字符串中所有下標為奇數(shù)的字母

轉(zhuǎn)換為大寫字母*/

5if(i%2==l&&ss[i]>='a'&&ss[i]<='z')

6ss[i]=ss[i]-32;

7}

本題要求將給定字符串ss中下標為奇數(shù)的字母轉(zhuǎn)換為大寫字母。需要

先判斷下標為奇數(shù)的字母是否是小寫字母,如果是再通過其轉(zhuǎn)換方法

進行轉(zhuǎn)換。從C語言的學習中知道,只要將小寫字母減去32即轉(zhuǎn)換成

大寫宇母,將大寫字母加上32即換轉(zhuǎn)成小寫字母。本程序用if語句實

現(xiàn)轉(zhuǎn)換功能。

26.

【解析】題目中要求字符串前部的*不得多于m,首先要計算出字符串

前部的*號的個數(shù),與變量m進行比較。當字符串前部的*多于m個時,

刪除多余的*。規(guī)定不能用字符串函數(shù)處理,可以通過移動字符串的首

指針來實現(xiàn)。

27.\n#include,,stdio.h"

\nintfun(inta)

\n{intI;

\nif(a==2)return1;1=2;

\nwhile((a%I)!=01<=sqrt((float)a))

\nl++;

\nif(a%I==O)

\n{printf("%disnotaprime!,5,a);

\nreturn0;}

\nprintf("%disaprime!”,a);

\nreturn1;}

\nmain

\n{intx;

\nprintf(€t\\npleaseenteranumber:");

\nscanf("%d",&x);

\nprintf("%d\\n'',fim(x));}

\n

28.

程序設計題解析:

【考點分析】

本題考查:指針型變量定義;while循環(huán)語句;if語句條件表達式;字

符串結束標識'\\0'。

【解題思路】

函數(shù)fun的功能:除了字符串前導的*號之外,將串中其他。號全部刪

除。解答本題,(1)定義一個臨時指針P,初始指向原串首地址;(2)利

用循環(huán)語句把字符串前導*號拷貝到原串;(3)繼續(xù)移動指針,把串中和

串尾的非*號字符拷貝到原串;(4)為修改后的字符串賦結束字符,NT。

【解題寶典】

要刪除字符串中的指定字符,通常采用保留非指定字符的方法??梢?/p>

將非指定字符保留在原串,即將需要保留的字符從原串的起始位置重

新賦值;也可以保留到新串,即新建一個字符串,存放要保留的字

符。

29.\n\tcharch;

\ninti,m,n;

\ni=O:

\nm=n=strlen(str)-1;//求字符串str長度

\nwhile(i<(n+l)/2)//循環(huán)逆置交換

\n{

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm—;

\n}

\n【解析】在fun函數(shù)中,首先求行字符串的長度,然后通過循環(huán)進行

字符交換。要注意的是,如果字符串長度是奇數(shù),則最中間的元素在

逆置前后的位置是沒有改變的。\n

30.

【解析】按照題目中要求,求出二維數(shù)組每行中最大元素,并依次放

入pp所指的一維數(shù)組中。首先比較二維數(shù)組中每一行的元素,然后找

出每一行中的最大元素,放入一維數(shù)組pp中,最后返回到主函數(shù)當

中。

31.(1)錯誤并defineFU(mn)(m/n)正確井defineFU(mn)(m)/(n)⑵錯誤:

return(Value);正確:return(value);⑴錯誤;#

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論