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

下載本文檔

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

文檔簡介

2022年福建省泉州市全國計算機等級考試

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

學(xué)校:班級:姓名:考號:

一、2.填空題(10題)

1.在面向?qū)ο蠓椒ㄖ?,【】描述的是具有相似屬性與操作的一組對象。

2.已知字符A的ASCII碼值為65,以下語句的輸出結(jié)果是【】。

charch='B";

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

3.設(shè)有定義:intn,*k=&n;以下語句將利用指針變量k讀寫變量n中

的內(nèi)容,請將語句補充完整。

scanf("%d”,);

printf("%d\n",);

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

main()

(

charstrl[]=Howdoyoudo",*p=strl;

strcpy(strl+strlen(strl)\2"esshe");

pfinff("%s\n",pl);

}

5.以下程序的輸出結(jié)果是【】。

main()

{intx=0;

sub(&x,8,1);

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

)

sub(int*a,intn,intk)

{if(k<=n)sub(a,n/2,2*k);

*a+=k;

)

6.下面程序的輸出結(jié)果是【】。

#include<stdio.h>

main()

{char*p={"BOOL""OPK","H","SP");

inti;

for(i=3,i>=0;i--,i--)printf("%",*p[i]);

printf("\n");

)

7.若有以下程序

main()

{inta[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-21,32,-33,0));

inti,j,s=O;

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

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

{if(a[i][j]<0)continue;

if(a[i][j]==O)break;

s+=a[i][j];

)

}

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

)

執(zhí)行后輸出結(jié)果是【】。

8.是數(shù)據(jù)庫應(yīng)用的核心。

9.下列程序的輸出結(jié)果是【】。

main()

(

inta[]={2,4,6},*ptr=&a[0],x=8,y,z;

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

z=(*(ptr+y)<x)?*(ptr+y):x;

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

)

10.以下sstrcpy。函數(shù)實現(xiàn)字符串復(fù)制,即將t所指字符串復(fù)制到s所指

向內(nèi)存空間中,形成一個新的字符串s。清填空。

voidsstrcpy(char*s,char*t)

{while(*s++=[]);}

main()

{charstr1[100],str2[]="abcdefgh";

strcpy(strl,str2);

printf('%s\n",strl);

二、單選題(10題)

11.線性鏈表中結(jié)點的結(jié)構(gòu)為(data,next)o已知指針p所指結(jié)點不是尾結(jié)

點,若在*p之后插入結(jié)點*s,則應(yīng)執(zhí)行下列()操作。

A.s->next=p;p->next=s;

B.s->next=p->next;p->next=s;

C.s->next=p->next;p=s;

D.p->next=s;s->next=p;

12.

有以下程序:

main

{intnum[4][4]={l,2,3.4},{5,6,7,8},{9,10,11,

12.},{13,14,15.16}),i,j;

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

{for(j=0;j<i;j++)printf("%4c",);

for(j=;J<4;j++)printf("%4d",num

[i][j]);

printf("\n");})

若要按以下形式輸出數(shù)組右上半三角

1234

678

1112

16

則在程序下劃線處應(yīng)填入的是()o

A.i-1B,iC,i+1D.4—i

13.設(shè)有如下定義:intx=10,y=3,z;則語句printf('%d\n",z=(x%y,x/y));的輸

出結(jié)果是0。

A.lB.0C,4D,3

14.假設(shè)所有變量均為整型,則表達式(a=2,b=5,b++,a+b)的值是()。

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

15.有如下程序:#include<stdioh>msin(){chars[]="ABCD",*P;

for(p=s+l;p<s+4;p++)Printf("%s\n",p);}該程序的輸出結(jié)果是

()o

A.ABCDBCDCDDB.ABCDC.BCDD.BCDCDD

16.有以下程序段

#include<stdio.h>

voidfun(char*fname,char*st)

{FILE*myf;

inti;

myf=fopen(fname,"w");

for(i=O;i<strlen(st);i++)fputc(st[i],myf);

fclose(myf);

1

main()

{fun("test.t","newworld");

fun("test.t","hello,");)

程序執(zhí)行后,文件test.t中的內(nèi)容是

A.A.hello,

B.newworldhello,

C.newworld

D.hello,rid

17.

(10)F列方法中,屬于白盒法設(shè)計測試用例的方法的是(

A)錯誤推測B)因果圖C)基本路徑測試D)邊界值分析

18.當(dāng)用戶要求輸入的字符串中含有空格時,應(yīng)使用的輸入函數(shù)是()o

A.scanfB.getcharC.getsD.getc

19.若變量均已正確定義并賦值,以下合法的C語言賦值語句是()。

A.x=y==5;B,X=n%2,5:C,x+n=i;D,x=5=4+1:

20.下列程序的輸出結(jié)果是

#include"stdio.h"

#defineN3

#defineM3

voidfun(inta[M][N])

{printf("%d\n",*(a[l]+2));}

main()

{inta[M][N];

inti,j;

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

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

a[i][j]=i+j-(i-j);

fun(a);)

A.3B.4C.5D.6

三、程序設(shè)計題(10題)

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

的項目中包含一個源程序文件progl.co在此程序中,請編寫函數(shù)fun(),

其功能是將一個數(shù)字字符串轉(zhuǎn)換成一個整數(shù)(不得調(diào)用C語言提供的將

字符串轉(zhuǎn)換成整數(shù)的函數(shù))。例如,若輸入字符串“-1234”,則函數(shù)把它

轉(zhuǎn)換成整數(shù)值-1234。

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

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

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

試題程序:

#include<stdio.h>

#include<string.h>

longfun(char*p)

(

)

voidmain()

(

chars[6];

longn;

printf("Enterastring:\n");

gets(s);

n=fun(s);

printf("%ld\n”,n);

}

22.請編寫一個函數(shù),用來刪除字符串中的所有*。例如,輸入

abc*de*f*gh,則輸出為abcdefgh。注意:部分源程序給出如下。請勿

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

號中填入所編寫的若干語句。試題程序:

19tnclvd*Vzdto*h>

9includeVctype

9mHudeVcoaio.b>

istnriude<?t<Uii>?

“idpFoc*(ch??aif)

midHUIMI<)

char]i

wyvietnC*CLSa)i

pnmf("Input?Mnngt>)?

get>(*tr)?

ptfiMutr)i

proc(*tr)t

pnntf(fl■??ttrcKs\n*?*tr)i

23.學(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<M;i++)/*用冒泡法來按從高到低

排序*/

for(j=0;j<M-l;j++)o

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),

{"GA014",91),{"GAOH",66),{"GA017",64},

{"GAO18",64),{"GA016",72}};

inti;

proc(stu);

printf("Thedataaftersorted:\n");

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

(

if(i%4==0)

〃每行輸出4個學(xué)生記錄

printf("n");

printf("%s%4d",stu[i],num,stu[i].s);

)

printf("\n");

)

24.從鍵盤上輸出10個整數(shù)存入一維數(shù)組中,按由大到小的順序輸出。

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

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

26.編寫函數(shù)fun,其功能是:將s所指字符串中除了下標(biāo)為奇數(shù),同時

ASCH碼值也為奇數(shù)自q字符之外。

其余所有字符全部刪除,串中剩余字符所形成的一個新串放在所指的數(shù)

組中。

例如,若s所指字符串的內(nèi)容為“ABCDEFG12345",其中字符A的ASCII

碼值為奇數(shù),但所在元素的

下標(biāo)為偶數(shù),因此需要刪除;而字符1的ASCII碼值為奇數(shù),所在數(shù)組

中的下標(biāo)也為奇數(shù),因此不應(yīng)當(dāng)刪除,

其他依此類推。最后t所指數(shù)組中的內(nèi)容應(yīng)為“135”。

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

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

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

試題程序:

#1nelude<stdio.k>

#include<gtring.h>

voidfun(char*s,chart[J)

I

)

main()?

(

char4100],t[100];

printff'XnPIeaseenterstrings:rt);

scanf("%s",§X

printfC'XnTTieresultis:%s\n'f4);

I

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

案的項目中包含一個源程序文件progl.Co在此程序中,請編寫函數(shù)fun(),

其功能是找出一維整型數(shù)組元素中最大的值及其所在的下標(biāo),并通過形

參傳回。數(shù)組元素中的值已在主函數(shù)中賦予。

主函數(shù)中x是數(shù)組名,n表示x中的元素個數(shù),max存放最大值,

index存放最大值所在元素的下標(biāo)。

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

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

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

試題程序:

#include<time.h>

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

(

)

voidmain()

(

inti,x[20],max,index,n=10;

srand((unsigned)time(NULL));

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

(

x[i]=rand()%50;

printf("%4d,,,x[i]);

/*輸出一個隨機數(shù)組*/

)

printf(n\nH);

fun(xfnf&max,&index);

printf("Max=%5d,Index=%4d\n”,max,index);

28.

下列程序定義了MXM的二維數(shù)組,并在主函數(shù)中賦值。請編寫函數(shù)proc

0,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返回給

主函數(shù)中的s。例如,若a數(shù)組中的值為:

■■01284

5974S

43B34

21098則返回主程序后,s的值為3.750000。注意:部分源程序給出

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

()的花括號中填入所編寫的若干語句。試題程序:

Hiviclud*h>

?bncludr<Mdlak.hA

■drfiiwMS

IOMM*proc<miw[J[MJ)

VOMRiBinC)

Imt[M)[M]?10?I?1?4?!?4?

》?0J.2.I?O?,??”

biii?1?

dcnaHe>i

?)r*ictn<?CI*S*)i

pninf(a>???Thrarrajr????\B->I

(ot(i*OiHCMii44>

《lor《?)

(pni>tf(MK4d*

prvntK>\n*>t

proc<a>i

printlc*????THERESULT????\B*)I

*Tlw?umUi*?S)I

29.

學(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()的花括號中填入所編

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

尊tfidiMle<ind,K.h>

#defineMIt

iViwdrf?trurt

rharnutnclOji

ttil

STRKf.

wedprociSTKEV?[])

mi

STRECti

forG-hYM“++)/?州■通法技

樽岸“

fcx(j?O“VM-I“??》

11(101八接分散的育伍林**4

立記立?鼻分在■?/

<—必].山]■山?1].?[>+1]-Z

voidmain<)

STREl*MMLM]-(<aGA005*?a5I.{*GA003

7??

(;A0024?^l?<eGAo04e?S5)?(*GAoor?9l

?GAOO7F2GA00B*.61)?(*GA0(MM.B71?

s9M

GAoi$.as<;A013*t>lh(*GA0l2.64l.

*GA0Ua.9lGAOirJSGAO|7M,64I.

?GAOIL.64GAO16e.72)h

ifilii

pcoc(?tn>?

pnfM(("Tbe<UitaiirrMinY、1),

for<i**0iYM*i++)

ilCiKl32*0)

〃與行■出4個?生id0

printfC*\ns>?

pnni(<*H?Kid*?*tu(iXnum??iw(i]v?)?

pn>M(<

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的花括號

中填入所編

寫的若干語句。

試題程序:

#include<stdio.h>

#include<conio.h>

voidproc(char*str)

(一

)

voidmain

(

charstr[81];

printf("Enterastring:kn");

gets(str);

proc(str);

printf("Thestringafterdeleted:kn");

puts(str);}

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

31.給定程序MODII.C中fun函數(shù)的功能是:根據(jù)整型形參m,計算

如下公式的值。

t3s1—————>

23m

例如,若主函數(shù)中輸入5,則應(yīng)輸出-0.283333。

請改正函數(shù)fun中的錯誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使

它能計算出正確的結(jié)果。

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

1finclude<stdio.h>

2doublefun(intm)

3(

4doublet=1.0;

5inti;

6for(i?2;i<*m;1++)

7/W??????★??found**********/

8t-1.0-1/i;

9/???*?*****foundw*********/

10

11

12main()

13(

14intm;

15printf(w\nPleaseenter1integer

numbers:\nw);

Mn

16scanf(%dr&m);

ww

17printf(\n\nTheresultis%lf\nr

fun(m));

18)

32.下列給定程序中,函數(shù)fun()的功能是:用冒泡法對6個字符串按由

小到大的順序進行排序。

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

注意:不要改動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.給定程序M0D11.C中函數(shù)fun的功能是:求出以下分?jǐn)?shù)序列的前

n項之和。和值通過函數(shù)值返回到main函數(shù)。

23581321

T??5#TIT……

例如,若n=5,則應(yīng)輸出:8.391667。

請改正程序中的錯誤,使它能計算出正確的結(jié)果。

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

#include<stdio.h>

2/?????????*wwfound****w****w**/

3voidfun(intn)

4{inta,b,c,k;doubles;

5s,0.0;a?2;bw1;

6for(k-1;k<?n;k++)(

7/???****w**w*found*w****w*****/

8s■s*(Double)a/b;

9c?a;a?afb;b?c;

10I

11returns;

12}

13main()

14(intn?5;

15printf(w\nThevalueoffunction

w

is:%lf\nrfun(n));

16

34.下列給定程序中,函數(shù)fun()的功能是:計算

S=f(-n)+f(-n+l)+...+f(0)+f(l)+f(2)+...f(n)的值。

例如,當(dāng)n為5時,函數(shù)值應(yīng)為10.407143。f(x)函數(shù)定義如下:

「(x+iy(x-2)x>0

f(x)Y0

x=0或x=2

L(x-Mx-2)

x<0

請改正程序中的錯誤,使它能得山正確的結(jié)果。

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math,h>

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

f(doublex)

if(x==0.0||x==2.0)

return0.0;

elseif(x<0.0)

return(x-1)/(x-2);

else

return(x+1)/(x-2);

)

doublefun(intn)

(

inti;doubles=O.O,y;

for(i=-n;i<=n;i++)

{y=f(1.0*i);s+=y;}

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

returns

main()

{clrscr();

printf("%f\n",fun(5));

35.下列給定程序中函數(shù)fun()的功能是;先將在字符串s中的字符按逆

序存放到t串中,然后把s中的字符按正序連接到t串的后面。例如:

當(dāng)s中的字符串為ABCDE時,貝心中的字符串應(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);

)

36.下列給定的程序中,函數(shù)fun()的功能是:用選擇法對數(shù)組中的n個

元素按從小到大的順序進行排序。

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

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

試題程序:

#include<stdio.h>

#defineN20

voidfun(inta[],intn)

{inti,j,t,P;

for(j=O;j<n-l;j++)

/*************fou

{p=j

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

if(a[i]<a[p])

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

p=j;

t=a[p];a[p]=a[j];a[j]=t;

)

)

main()

{inta[N]={9.6,8,3,-l},i,m=5;

printf("排序前的數(shù)據(jù):");

for(i=0;i<m;i++)printf("%d",a[i]);

printf("\n");

fun(a,m);

printf("排序后的順序:");

for(i=0;i<m;i++)printf("%d",a[i]);

printf("\n");

)

37.下列給定程序中,函數(shù)fun()的功能是:給一維數(shù)組a輸入任意4個

整數(shù),并按如下的規(guī)律輸出。例如輸入1,2,3,4,程序運行后輸出以

下方陣:

4123

3412

2341

1234

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

注意,?不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

試題程序;

#include<stdio.h>

#defineM4,

voidfun(inta)

{inti,j,k,m;

printf("Enter4number:");

for(i=0;i<M;i++)scanf("%d",&a[i]);

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

for(i=M;i>0;i—)

{k=a[M-l];

forj>0;j-)

a[j]=a[j+l];

a[0]=k;

for(m=0;m<M;m++)printf("%d",a[m]);

printf("\n");

main()

{inta[M];

fun(a);printf("\n\n");

38.下列給定程序中,函數(shù)fun()的功能是:根據(jù)形參m的值(2)£9),

在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由main()函數(shù)輸出。

例如,若輸入2,則輸出12

24

輸入4,貝脖俞出1234

2468

36912

481216

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).

試題程序:

#include<conio.h>

#include<stdio.h>

#defineM10

intaiM][MI={0};

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

fun(int**a,intm)

{intj,k;

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

for(k=0;k<m;k++)

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

a[j][k]=k*j;

main()

{inti,j,n;

clrscr();

printf("Entern\n");scanf("%d",&n);

fun(a,n);

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

{for(j=O;j<n;j++)

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

printf("\n");

39.下列給定程序中,函數(shù)fun()的功能是:刪除字符串s中所有空白字

符(包括Tab字符、回車符及換行符)。輸入字符串時用‘#'結(jié)束輸入。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).

試題程序:

#include<string.h>

#include<stdio.h>

#include<ctype.h>

fun(char*p)

{int!i,t;charc[80];

for(i=0,t=0;p[i];i++)

if(!isspace(*(p+i)))c[t++]=p[i];

c[t]='\0';

strcpy(p,c);

main()

{charc,s[80];

inti=0;

printf("Inputastring:");

c=getchar();

while(c!='#')

(s[i]=c;i++;c=getchar();}

s[i]="\0";一

fun(s);

puts(s);

40.下列給定程序中,函數(shù)fun()的功能是:在字符串的最前端加入n個

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

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

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

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

試題程序;

#include<stdio.h>

#include<strzng.h>

#include<conio.h>

voidfun(chars[],intn)

chara[80],*p;

inti;

/*****************^Qund***************/

S=p;

for(i=0;i<n;i++)a[i]='*';

do

{a[i]=*p;

/*****************^Qund***************/

i++;

}while(*p);

a[i]=0;

strcpy(s,a);

)

main()

{intn;chars[80];

clrscr();

printf("\nEnterastring:");gets(s);

printf("\nThestring\%s\n",s);

printf("\nEntern(numberof*):");scanf("%d",&n);

fun(s,n);

printf("\nThestringafterinster:\%s\n",s);

五、程序改錯題(2題)

41.

給定程序中,函數(shù)proc()的功能是:使數(shù)組中的元素的值增加10倍。

修改其中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()

函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

Uinclude<vtdao.

aincludeVeonio.h>

ml

voidproc<vo?d)

iniji

phntf(*laMibfuncaftercalli<ig\a*)?

foc(j-Oej<lOij+?)

//????IOUMI????

prwiif(?m£j]?1。)i

voidnum()

iiHii

pcinth*lnmaanbeforecaJUng\n*)?

forti-SYIOil>?)

■tfi]?卜

pruidl.%3d?t

proc<)i

pnntf(*\BlnmainaftercAlli?g\nw>i

(oHi^OirdOii4*?)

print"■.in(i3)i

tftch(>i

42.

下列給定程序中,函數(shù)proc()的功能是:將長整型數(shù)中為偶數(shù)的數(shù)依

次取出,構(gòu)成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,

當(dāng)s中的數(shù)為87653142時,t中的數(shù)為8642。請修改程序中的錯誤,

使它能得出正確的結(jié)果。注意:不要改動main()函數(shù),不得增行或

刪行,也不得更改程序的結(jié)構(gòu)。試題程序:

#isirludr

修ifirludrVcoiiio.Ii>

?isicludr<"di6ll)

<roidptocCIcxig?*iong?O

mldi

longB1*li

?t*Oi

wliW(.>0)

//????(owmi????

i((dXl*O>

????found????

91dIVUIM)()

(long>*1?

nvwirmC*CLS")i

prwiiRv\nPtc?MenterHI*>Iacanf

proeO.&i)&

『ranTherrMihintKldXn*?Ot

六、操作題(2題)

43.請編寫一個函數(shù)intfun(int*s,intt,int*k),用來求出數(shù)組的最小

元素在數(shù)組中的下標(biāo)并存放在k所指的存儲單元中。

例如,輸入如下整數(shù):

234345753134436458100321135760

則輸出結(jié)果為6,100。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

(

)

main()

(

inta[10]={234,345,753,134,436,458,

100,321,

135,760),k;

clrscr();

fun(a,10,&k);

printf("%dr%d\n",k,a[k]);

)

44.funl函數(shù)的調(diào)用語句為funl(&a,&b,&c);o它將3個整數(shù)按由大到小

的JI匣序調(diào)整后依次放入a,b,c三個變量中,a中放最大數(shù),請?zhí)羁铡?/p>

voidfun2(int*x,int*y)

{intt;

t=*x;*x;*y;*y=t;

}"

voidfunl(int*pa,int*pb,int*pc)

{if(*pc>*pb)fun2([]);

if(*pa<*pc)fun2([]);

if(*pa<*pb)fun2([]);

參考答案

1.類類解析:在面向?qū)ο蠓椒ㄖ?,類描述的是具有相似屬性與操作的一

組對象。

2.B66B66解析:字符B的ASCII碼值為66,因此,按%c形式輸出

B,按%d形式輸出66,輸出結(jié)果為:B66。

3.k*kk*k解析:本題考查的知識點是scarf()函數(shù)和printf()函數(shù)的用法。

scanf()函數(shù)有兩個參數(shù),第一個參數(shù)是格式控制部分(格式控制部分是字

符串,主要由“%”號和格式字符組成)第二個參數(shù)是一地址列表(地址列

表是由多個地址組成,可以是變量的地址,也可以是字符串的首地址)。

而第一個空格處位于scanf()函數(shù)的第二個參數(shù)處,所以,第一個空應(yīng)該

填地址k。printf()函數(shù)有兩個參數(shù),第一個參數(shù)是輸出格式字符串(輸出

格式字符串是由控制輸出格式的字符和非格式字符組成的,通常是字符

常量。非格式字符作為輸出數(shù)據(jù)的間隔,輸出時原樣輸出)第二個參數(shù)為

一輸出表達式表(輸出表達式表是由若干個需要計算和輸出的表達式組

成的,表達式之間用逗號分隔開)。而第;個空位于printf()函數(shù)的第二

個參數(shù)處,所以應(yīng)該填*K。

4.HowdoessheHowdoesshe解析:strcpy(strl,sl):字符串拷貝函數(shù),作

用是將字符串si拷貝到字符數(shù)組strl中去。strlen(str):測試字符串str的

長度,函數(shù)的值為字符串中實際長度,不包括,\\0,在內(nèi)。本題中strlen(str

1)的值為13,則strcpy(strl+strlen(strl)/2'esshe')相當(dāng)于strcpy(strl+6'esshe');,

因此可得答案為Howdoessheo

5.77解析:在主函數(shù)中定義了一個變量x并賦初值0,然后執(zhí)行函數(shù)調(diào)

用語句,該語句的執(zhí)行過程為sub(&x,8,l)調(diào)用sub(&a,4,2),sub(&a,4,2)

調(diào)用sub(&a,2,4),sub(&a,2,4)中由于2<4,所以if后面括號里的判斷

為假,遞歸結(jié)束,執(zhí)行其后的*a+=k;語句此時x=x+k=0+4=4,回退到上

一層調(diào)用函數(shù)sub(&x,4,2)中,執(zhí)行后面的語句,x=x+k=4+2=6,再回推

到最上一層調(diào)用函數(shù)sub(&x,8,1)執(zhí)行后面的語句,x=x+k=6+l=7,所以

最后輸出7o

6.SO

7.5858解析:本題中處理二維數(shù)組元素用了兩重循環(huán),外循環(huán)變量i表

示數(shù)組的行,內(nèi)層循環(huán)變量j表示數(shù)組的列。在第二重循環(huán)中首先判斷

數(shù)組元素的值是否小于0,若是則處理該行的下一個元素;若不是則判

斷的值是否等于0,若等于0則退出內(nèi)層循環(huán)開始處理下一行;

其他情況下,把的值加到變量s中。所以本程序段的功能是把每

行值為0的元素前面的所有大于0的元素值加到變量s中。

8.數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計

9.66解析:條件運算符的優(yōu)先級高于賦值運算符,因此本題先計算關(guān)系

表達式(*ptr+y)<x)?*(ptr+y):x的信再賦給變量z。當(dāng)y=0時,*(ptr+y)=2,

而x=8,(*(ptr+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=2,

所以z=2;當(dāng)y-1時,*(ptr+y)=4,(*(ptr+y)<x)條件為真,則整個條件

表達式的值為*(ptr+y)=4,所以z=4;當(dāng)y=2時,*(ptr+y)=6,(*(ptr+y)<

x)條件為真,則整個條件表達式的值為*(ptr+y)=6,所以z=6;循環(huán)結(jié)

束。因此輸出z的結(jié)果為6O

10.*t++或*(t++)*t++或*(t++)解析:主函數(shù)中定義了兩個字符型數(shù)組

strl和str2,并且給str2賦初值“abcdefgh”,接著調(diào)用函數(shù)strcpy(strl,str2),

將字符串str2的值賦給strlo在函數(shù)sstrcpy(*s,*t)中,用了一個while循

環(huán),每循環(huán)一次將形參指針t所指的字符賦給形參指針s所指向的存儲

空間,然后將指針s和t都移到下一個元素。所以空白處應(yīng)該填*t++或

*(t++)o

11.B

12.B

\n本題中要求輸出右上半角的數(shù),對角線上的數(shù)的下標(biāo)相同,所以j=i。

\n

13.D

14.B

15.D解析:本題考查指向字符串指針的運算方法。執(zhí)行p=s+l后,指針

變量P就指向字符串中的第二個字符“B”,然后輸出字符串“BCD”并換

行;下面繼續(xù)執(zhí)行循環(huán)語句,指針變量P指向下一個字符“C",輸出字

符串“CD”,最后一次循環(huán),p指向字符“D",輸出字符串“D”。

16.D

本題主要考查文件的操作。在本題的程序中,首先定義了一個無返回

值的函數(shù)fun,該函數(shù)帶有兩個指針類型的形參,其中第一個形參指向

需要被操作文件的文件名,而第二個形參指向被操作的字符串。在函

數(shù)體中,首先定義一個文件指針,然后以只寫的方式打開第一個形參

所指向的文件,接著執(zhí)行for循環(huán),循環(huán)結(jié)束的條件是循環(huán)變量小于被

操作字符串的長度,循環(huán)體中的程序fputc(st[i]的功能是將字

符串中的當(dāng)前字符輸入到文件中。由這些分析我們可以知道,函數(shù)fun

的作用是將字符串的內(nèi)容寫入到文件中。

在主函數(shù)中,兩次調(diào)用函數(shù)fun,當(dāng)?shù)谝淮握{(diào)用時,寫入文件的內(nèi)容為

newworld,然后第二次調(diào)用函數(shù),此時打開文件,文件的指針重新回

到開始,然后往文件中寫內(nèi)容“hello,",由于此時文件中已經(jīng)有內(nèi)容

“newworld”,則需要覆蓋前面一部分的內(nèi)容,因此,程序的最終輸出

結(jié)果是hello,rid,本題的正確答案選D。

17.C

18.C

解析:C語言提供了許多輸入函數(shù),其中有:getchar(輸入字符)、

scanf(格式輸入)和gets\u3OOO(輸入字符串)等。題目要求輸入的是字符

串,所以可以排除getchar,而且要求輸入的字符串中包含空格,而

scanf函數(shù)默認將輸入的空格字符作為分割符,所以空格不會被輸入,

故可排除scanf。getc的作用是從文件中輸入一個字符,故也不可取。

gets函數(shù)可以輸入一整行作為一個字符串,其中也包括空格字符,故

應(yīng)該選擇C。

19.AB選項中運算符“%”的運算對象為整數(shù)。C選項中不能將變量賦給

表達式“x+n”。D選項中不能將表達式“4+1”賦給常量5。故本題答案為

A選項。

20.B解析:若有以下定義:inta[3][4],i,j;且當(dāng)0<=i<3,0<=j<4則可以有以

下幾種方式來引用數(shù)組中的第i行,第j列的元

素:a國肛*(a[i]+j),*(*(a+i)+j),(*(a+i))|j],*(&a[0][0]+4*i+j)。

21.longfun(char*p)

(-

longn=0;

intflag=l;

if(*p=='-')/*負數(shù)時置flag為-1*/

{P++;Aag=-1;}

elseif(*p=='+')/*正數(shù)時置flag為1*/

P++;

while(*p!=’\0')

{n=n*10+*p-t\0,;/*將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)*/

P++;

)

returnn*flag;

1一

if語句的作用是判斷該字符串為正數(shù)還是負數(shù),while循環(huán)的作用是將

字符串轉(zhuǎn)換成相應(yīng)的整數(shù)。注意:*P是一個字符(如'夕、4),并不是一

個數(shù),要將其轉(zhuǎn)換成相應(yīng)的數(shù)字需令其減去'0'(而不是'\\0'),即*P-。'就

得到*P這個字符的相應(yīng)數(shù)字,如‘0'-'0'=0、8-0=8等。

22.

【解析】根據(jù)題目中要求刪除字符串中所有的*號,需要檢查字符串中

的每一個字符,將不是*號的字符放入原來的字符串中,形成新的字符

串,最后在新的字符串的末尾加上結(jié)束符。

23.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;}

24.\n#include'stdio.h'

\nmain

\n{inti,j,a[10];

\nfor(i=l;i<=10;i++)

\nscanf('%d',&a[i]);

\nfor(i=0;i<9=;i++)

\nfor(j=9;j>i;j-)

\nif(a[j-l]{t=a[j-l];

\na[j-l]=a[j];

\na[j]=t;}

\nfor(i=0;i<10;i++)

\nprintfC%d',a[i]);

\n}

\n

25.\n#include“stdio.h"

\nintfun(inta)

\n{intI;

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

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

\nl++;

\nif(a%I==0)

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

\nretum0;}

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

\nretum1;}

\nmain

\n{intx;

\nprintf("\\npleaseenteranumber:^^);

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

\nprintf(ct%d\\n,,,fun(x));}

\n

26.

【答案】

vcidfun(('har*s,chart[J)

I.

inti.j-0.n;

n=stricn(s);

fbr(isO;i<n;i++)

迎%2!聞&&m[%2!國)

{/*將下標(biāo)為奇數(shù)同時ASCH碼值為奇數(shù)的字符放人數(shù)組t中*/

J++;

)

產(chǎn)最后加上結(jié)束標(biāo)識符*/

)

【解析】

用循環(huán)遍歷字符串,通過if語句將下標(biāo)和ASCII碼都為奇數(shù)的字符保

存到數(shù)組中,在字符串末尾加上結(jié)束標(biāo)識符。

27.voidfun(inta[],intn,int*max,int*d)

(

inti;

*max=a[0];

*d=0;

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

if(*max<a[i])

{*max=a[i];*d=i;}

)

fun()函數(shù)形參max用來存放最大值,形參d用來存放最大值的下標(biāo)。由

于它們都是指針變量,因此在引用所指向的變量時,要進行指針運算。

循環(huán)語句用來遍歷數(shù)組元素,找出最大值。條件語句用來判斷該數(shù)組元

素是否最大。

28.

【解析】要求出數(shù)組周邊元素的平均值,首先要求出周邊元素的和,周

邊元素的特點為行或列下標(biāo)為0,或為N—1,根據(jù)其特點求出所有周

邊元素的和,再求出其平均值,并返回給主函數(shù)。

29.

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

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

置。

30.voidproc(char*str)

\n(

\nchar*p=str;

\nwhile(*p==*)p++;//通過p的移動來達到使p指向第一個不是*

號的字符

\nfor(;*p!=\0;p++,str++)//把從第一個不是*號的字符放到a中

\n*str=*P:

\n*str=\0;//最后用\0作為字符串結(jié)束標(biāo)志

\n}

\n【解析】題目中要求將字符串中的前導(dǎo)*號全部刪除,首先將指針P移

動到第一個不是*的字符,將指針P之后的字符放入原來的字符串中,

并為新的字符串添加結(jié)束符。

\n

31.(l)t=t-1.0/i;或t-=l.0/i;或t—=(double)l/i;(2)retumt;

(l)t=t-1.0/i;或t一=1.0/i;或t—=(double)l/i;(2)returnt;

解析:本題中函數(shù)的功能是計算公式的值。首先根據(jù)題干中給出的公式

推出每一項之間的關(guān)系,求出每一項的表達式,然后求得數(shù)列的值。其

中,每一項的值為1/n。

32.(1)錯誤:fun(char*pstr[6])正確:voidfun(char*pstr[6])(2)錯誤:

if(strcmp(*(pstr+i)pstr+j)>0正確:if(strcmp(*(pstr+i)*(pstr+j))>0(3)錯

誤:*(pstr+i)=pstr+j;正確:*(pstr+i)=*(pstr+j);(l)錯誤:fun(char*pstr[6])

正確:voidfun(char*pstr[6])\r\n⑵錯誤:if(strcmp(*(pstr+i),pstr+j)>0正

確:if(strcmp(*(pstr+i),*(pstr+j))>0\r\n(3)錯誤:*(pstr+i)=pstr+j;正確:

*(pstr+i)=*(pstr+j);解析:冒泡法對字符串排序的方法是將相鄰兩個字

符比較,將小的調(diào)到前面。令x等于字符串的第i位字符,若該字符的

前一位字符大于X,則將該字符與X互換位置。從字符山中的第2位字

符到字符串的最后一們字符重復(fù)以上過稈,即可完成排序??捎醚h(huán)語

句實現(xiàn)。

33.(l)doublefun(intn)(2)s=s+(double)a/b;(l)doublefun(intn)

◎s=s+(double)a/b;解析:本題中函數(shù)的功能是求出分?jǐn)?shù)序列的前n

項之和。首先根據(jù)題干中給出的公式推出每一項之間的關(guān)系,求出每一

項的表達式,然后求得數(shù)列的和。每一項的分母是前一項的分子,分子

是前一項分子和分母的和。

34.(1)錯誤;(l)f(doublex)正確:doublef(doublex)(2)錯誤;returns正

確:returns;(1)錯誤;(l)f(doublex)正確:doublef(doublex)\r\n(2)錯

誤;returns正確:returns;解析:該程序的流程是,fun()程序?qū)(n)

項循環(huán)累加,fun()程序采用條件選擇語句計算函數(shù)f(x)的值。本題錯誤

在于未定義函數(shù)f(doublex)的返回值類型。C語言規(guī)定,在未顯式聲明

的情況下,函數(shù)返回值默認為int型。

35.錯誤:正確:錯誤:正確:

t[i]=s[sl-l-i];解析:該題也是幾個循環(huán)語句的嵌套使用,難度并不大,

重要的足要讀懂程序,題目中賦值語句;并不能完成累計循

環(huán),所以正確的應(yīng)該是

36.(1)錯誤:p=j正確:p=j;(2)錯誤:p=j;正確:p=i;⑴錯誤:p=j正確:

p=j;\r\n(2)錯誤:p=j;正確:p=i;解析:題中所提到的“從小到大,的順

序。這類題都可以利用選擇法,即從后N個比較過程中,選擇一個最小

的與第一個元素交換,依次類推,即用第二個元素與后N-1個進行比較,

并進行交換。該題也是與我們常見的C語言排序題類似,當(dāng)然也是改錯

和編程題中的重點,請看同類試題

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論