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

下載本文檔

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

文檔簡介

2022年廣東省茂名市全國計算機等級考試

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

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

一、2.填空題(10題)

1.以下程序的功能是建立一個帶有頭結點的單向鏈表,鏈表結點中的數(shù)

據(jù)通過鍵盤輸入,當輸入數(shù)據(jù)為-1時,表示輸入結束(鏈表頭結點的data域

不放數(shù)據(jù),表空的條件是ph>next==NULL),請?zhí)羁铡?/p>

#include<stdio.h>

structlist{intdata;structlist*next;};

structlist*creatlist()

{structlist*p,*q,*ph;inta;ph=(structlist*)malloc(sizeof(structlist));

p=q=ph;printf("Inputanintegernumber;entre-1toend:\n");

scanf("%d",&a);

while(a!=-l)

{p=(structlist*)malloc(sizeof(structlist));

[]=a;q->next=p;[]=p;scanf("%d",&a);}

p->next=,\O;retum(ph);}

main()

{structlist*head;head=creatlist();}

2.若輸入Ihaveatest.#,則以下程序的運行結果為【】。

#include<stdio.h>

main()

{FILE*fp;

charstr[l00],filename[10];

inti=0;

if((fp=fbpen("test","w"))=NULL)

{printf("cannotopenthefile!\n");

exit(O);

}

getchar();

gets(str);

while(str[i]!-#')

{if(str[i]>-a'&&str[i]<-z')

str[i]=str[i]-32;

fputc(str[i],fp);

i++;

}

fclose(fp);

fp=fbpen("test","r");

fgets(str,strlen(str)+l,fp);

pr血f("%s\n",str);

fclose(fp);

}

3.以下程序運行后的輸出結果是【】。

main()

{inti,m=0,n=0,k=0;

fbr(i=9;i<=ll;i++)

switch(i/10)

{case0:m++;n++;break;

case1:n++;break;

default:k++;n++;

printf("%d%d%d\n",m,n,k);

4.C語言中用表示邏輯值為“真”,用數(shù)字“0”表示邏輯值為“假

5.以下程序運行后的輸出結果是o

#inClude<strinq.h>

char*ss(char*s)

{char*p;t;

p=S+l;t=*s;

while(*p){*(p-1)=*p;p++;}

*(p-l)=t;

returns;

)

main()

{char*p,str[10]="abcdefgh";

p=ss(str);

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

}

6.執(zhí)行下面程序后,輸出結果是【

main()

{chars[12]="verygood!";

printf("%d",strlen(s));

)

7.在面向對象方法中,類的實例稱為。

8.若有以下程序

main()

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

inti,j,s=0;

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+=afi皿;

)

printf(n%d\nn,s);

執(zhí)行后輸出結果是o

9.若有下列定義和語句:

char*sl="12345",*s2="1234";

printf("%d\n",strlen(strcpy(sl,s2)));

則輸出結果為o

10.在一個容量為25的循環(huán)隊列中,若頭指針fix)nt=16,尾指針rear=9,

則該循環(huán)隊列中共有【】個元素。

二、單選題(10題)

11.

(9)關系衣中的每一行記錄稱為一個().

A)字段B)元組C)屬性D)關鍵碼

12.設有定義的語句:“charcl=92,c2=92;”,則以下表達式中的值為

零的是()。

A.clAc2B.cl&c2C.~c2D.cl|c2

13.執(zhí)行下面程序中的輸出語句后,輸出結果是0。

#include<stdio.h>

voidmain0

{inta;

grintfC,(a=3*5,a*4,a+5));

)

A.65B.20C.15D.10

14.下列程序的輸出結果是()。

main

{inti=l,j=2,k=3;

if(i++==l&&(++j==3==||k++==

3))

printf("%d%d%d\n",i,j,k);

)

A.l23B.234C.223D.233

15.

(16)下列敘述中正確的是().

A)調用printR)函數(shù)時,必須要有輸出項

B)使用putchar。函數(shù)時,必須在之前包含頭文件stdio.h

C)在C語言中,整數(shù)可以以二進制、八進制或十六進制的形式輸出

D)調節(jié)gctchar()函數(shù)讀入字符時,可以從鍵盆上輸入字符所對應的ASCH碼

16.有以下程序:main(){chars[]="ABCD",*p;for(p=s+l;p<s+4;p++)

printf("%s\n",p);}程序運行后的輸出結果是()。

A.ABCDBCDCDDB.ABCDC.BCDD.BCDCDD

17.以下敘述中正確的是0。

A.C語言的源程序不必通過編譯就可以直接運行

B.C語言中的每條可執(zhí)行語句最終都將被轉換成二進制的機器指令

C.C源程序經(jīng)編譯形成的二進制代碼可以直接運行

D.C語言中的函數(shù)不可以單獨進行編譯

18.以下不正確的敘述是()。

A.在C程序中,逗號運算符的優(yōu)先級最低

B.在C程序中,APH和aph是兩個不同的變量

C.若a和b類型相同,在執(zhí)行了賦值表達式a=b后b中的值將放人a中,

而b中的值不變

D.當從鍵盤輸入數(shù)據(jù)時,對整型變量只能輸入整型數(shù)值,對實型變量只能

輸入實型數(shù)值

19.給定下列代碼:已知n是一個整數(shù):foo()時間復雜度為0(1),上述

代碼的時間復雜度是0

for(inti=l;I<n;i*=3)

for(intj=i/3;j<i;j++)

Foo();

}

)

A.O(logn)B.O(n)C.O(n*log(n))D.O(log(n)A2)

20.有以下程序:

#include<stdio.h>

voidsub(doublea,double*pb);

intmain()

{doublex,y;

scanff<%lf%lf,,&x,&y);

sub(x,&y);

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

)

voidsub(doublea,double*pb)

{a=a-*pb;

*pb=*pb-a;

)

程序運行時輸入10.23.5并按<£田6「>鍵,則輸出結果為()。

A.x=10.200000y=-3.200000

B.x=6.700000y=-13.700000

C.x=7.000000y=-3.500000

D.x=13.400000y=-7.000000

三、程序設計題(10題)

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

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

fun(),其功能是統(tǒng)計s所指字符串中的數(shù)字字符個數(shù),并將其作為函

數(shù)值返回。例如,s所指字符串中的內容是

2def35adh253kjsdf7/kj8655x,函數(shù)fun()返回值為11注意:部分源程序在

文件prog1.c中。請勿改動主函數(shù)main()和其他函數(shù)中的任何內容,僅在

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

1iinclude<stdio.h>

2voidNONO();

3intfun(char*s)

4/(

5

6}

7main()

{char*s=M2def35adh253kjsdf

7/kj8655x";

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

10printf("%dXn*',fun(s));

11NONO();

12)

13voidNONO()

14(/?本函數(shù)用于打開文件、輸入數(shù)據(jù)、調

用函數(shù)、輸出數(shù)據(jù)及關閉文件。*/

15FILE*fp,*wf;

16inti;

17chars[256];

18fp=fopen("in.dat","r1');

,wf=fopen("out.dat","w“);

20for(i-0;i<10;i++){

21fgets(s,255,fp);

fprintf(wf,M%d\nMfun(s));

■r

24fclose(fp);

■25)fclose(wf);

22.請編寫函數(shù)voidproc(intx,intpp[],int*n),它的功能是:求出能

整除x且不是偶數(shù)、不為1的各整數(shù),并按從大到小的順序放在PP所

指的數(shù)組中,這些除數(shù)的個數(shù)通過形參n返回。

例如,若x的值為30,則有3個數(shù)符合要求,它們是15,5,3o

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

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

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

試題程序:

<mrludeVcomo.h>

.tmrludr<widio.h>

fmdude<?tdhk.h>

midpn>r<rnf>?mimt?n)

Eidmain()

mia*?rv(IOOO]?ii

?y?tcm(sCLSw)?

antfitrgefnumber(\n*)?

?can1(.%4"?&*)i

p<roc<K?Atv?&n>i

(or(l?9一1i>,0iI——)

|>nnt((*Sd*?arr£i]^

print!(*\n")?

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

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

fun(),其功能是將形參s所指字符串放入形參a所指的字符數(shù)組中,

使a中存放同樣的字符串。說明:不得使用系統(tǒng)提供的字符串函數(shù)。

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

函數(shù)中的任何內容,僅在函數(shù)fun()指定的部位填入所編寫的若干語

句。試題程序:

jl[include<stdio.h>

2#defineN20

3voidNONO();

4voidfun(char*a,char?s)

5{

6

鬟}

8main()

9{charsl[N],*s2="abcdefghijk";

10fun(si,s2);

11printf(?'%s\n",si);

12printf("%s\n",s2);

13NONO();

M}

15voidNONO()

16{/*本函數(shù)用于打開文件、榆入數(shù)據(jù)、調

用函數(shù)、輸出數(shù)據(jù)及關閉文件*/

17FILE*fp,*wf;

18inti;

19charsl(256]fs2[256];

MwMM

fp=fopen(in.datrr);

21wf-fopen(nout.daf1,Mww);

for(i=0;i<10;i+4-){

23fgets(s2f255,fp);

24fun(si,s2);

25fprintf(wf,n%s”,si);

■}

27fclose(fp);

28fclose(wf);

K)

24.

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

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

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

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

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

8mcludehJ>

#MiclwdrVcoato.

*IBcIttd*<BtdKKk>

9iarlwdrV,icng.

atpmiclmr?Mftchar?sobirtrI

*oidMMIH>

cliav)}?

MMfll

?yulMnl*ClJBT)t

e)i

g#(?(B(F)I

pnMf<attAfV,

*<t.(?i?bstr)e

pwts(?ub?tr>?

■-prac<Mr.MiiMr>s

prauR'■=KW\B*?■)!

25.

請編寫函數(shù)proc(),它的功能是計算:s=(1-ln(1)-In⑵-In(3)

-...-In(m))2s作為函數(shù)值返回。在C語言中可調用log(n)函數(shù)求

In(n)olog函數(shù)的引用說明是doublelog(doublex)o例如,若m的

值為10,則proc()函數(shù)值為198.934454O注意:部分源程序給出如

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

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

&itfeHudeVMidhkb>

sindudeVcooio.h>

tinclutl*VNidux.h>

,indude<math.h>

dmibkproHmim)

void)

?y?tean(?CLS*)i

pnfiih*%f\ne?ptoc(IO)>i

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

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

fun(),它的功能是計算下列級數(shù)和,和值由函數(shù)值返回。

23?

S=]+X+工+<+…+"

2!3!n!例如,當n=10,x=0.3時,函數(shù)值為

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

main。和其他函數(shù)中的任何內容,僅在函數(shù)fun()的花括號中填入你編

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

1iinclude<conio?h>

2tinclude<stdio.h>

3linclude<math.h>

4linclude<stdlib?h>

5doublefun(doublex,intn)

饕{

7

8}

9voidmain()

10{

11FILE*wf;

12system("CLS");

13printf(r,%ffun(0.3,10));

14/*****************/

15wf-fopen("out.daf\MwH);

16fprintf(wf,”,fun(0.3,10));

17fclose(wf);

18/*****************/

施)

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

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

其功能是將M行N列的二維數(shù)組中的數(shù)據(jù),按列的順序依次存放到一

維數(shù)組中,將一維數(shù)組中數(shù)據(jù)的個數(shù)存放在形參n所指的存儲單元中。

例如,若二維數(shù)組中的數(shù)據(jù)為

33333333

44444444

55555555

則一維數(shù)組中的內容應是

33445533445533445533

4455

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

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

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

試題程序:

#include<stdio.h>

voidfun(int(*s)[10],int*b,int*n,intmm,intnn)

main()

(

intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printfC'Thematrix:\n");

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

(

for(j=O;j<4;j++)

printf(“%3d”,w[i皿);

printf("\n”);

)

fun(w,a,&n,3,4);

printff'TheAarray:\n^^);

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

printf("%3d”,a[i]);

28.請編寫函數(shù)proc(),其功能是:利用以下所示的簡單迭代方法求方

程cos(x)-x=0的一"1K實根。

xn+l=COS(xn)

迭代步驟如下:

⑴取xl初始值為。0;

(2)x0=xl,把?XI的值賦給x0;

(3)xl=cos(xO),求出一個新的xl;

(4)若xO-xl的絕對值小于0.000001,則執(zhí)行步驟

(5),否則執(zhí)行步驟(2);

(5)所求xl就是方程cos(x)-x=0的一個實根,作為函數(shù)值返回。

程序將輸出結果root=0.739085c

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

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

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

試題程序:

£rnciudc<como<

£include<matKh>

9includeV篡tdao.!C>

HMIprocC)

floaiK)*0.0?SOI

do

>0,獻I

whde(UIM<WO-K!>>le~S)?

rmintM!,

vo?dmaixi<)

I1(M1f-procC>i

priarf(*root?%f\n*?

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

例如,字符串中原有的字符串為asdf9,則調用該函數(shù)后,串中的內容為

9fdsao

請勿改動main函數(shù)和其他函數(shù)中的任何內容,僅在函數(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):

printff'Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fon(a);

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

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

fclose(out);

30.請編寫函數(shù)proc,其功能是:將str所指字符串中除下標為偶數(shù)、同

時ASCH碼值為奇數(shù)的字符外,其余的字符都刪除,串中剩余字符所形

成的一個新串放在t所指的數(shù)組中。例如,若str所指字符串中的內容為

ABCDEFG12345,其中字符B的ASCII碼值為偶數(shù),所在元素的下標為

奇數(shù),因此必須刪除;而字符A的ASCII碼值為奇數(shù),所在數(shù)組中的下

標為偶數(shù),因此不應當刪除。依此類推,最后t所指的數(shù)組中的內容應

是ACEG°

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

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

中填人所寫的若干語句。

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidproc(char*str,chart[])

(

}

voidmain

(

charstr[100],t[100];

system("CLS");

printf("\nPleaseenterstringstr:");

scanf("%S",str);

proc(str,t);

printf("\nTheresultiS:%s\n",t);

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

31.下列給定程序中,函數(shù)ftm()的功能是;求S的值。設

S=(22/l*30))*(42/(3*5))*(62/(5*7))*...*(2k)2/((2k-l)*(2k+l))

例如,當k為10時,函數(shù)的值應為1.533852。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

/********不***不*f^)und***不***********I

fun(intk)

{ihtn;floats,w,p,q;

n=l;

s=1.0;

while(n<=k)

{w=2.0*n;

p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

returns

main()

{clrscr();

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

}

32.給定程序MOD11.C中函數(shù)fun的功能是:讀入一個字符串(長度<

20),將該字符串中的所有字符按ASCII碼升序排序后輸出。

例如,若輸入:edcba,則應輸出:abcdeo

請改正程序中的錯誤,使它能統(tǒng)計出正確的結果。

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

1finclude<stdio.h>

2tinclude<string.h>

3voidfun(chart[])

4(

5charc;

6inti,j;

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

8for(i?strlen(t);i;i--)

9for(j?0;j<i;j++)

10/**********found***********/

11if(t[j)<t[j+1))

12(

13c-t(j];

14t(j)-t[j?11;

15t[j*1]-c;

16

17

18main()

19(

20chars[81];

21printf(w\nPleaseenteracharacter

string:°);

22gets(s);

23printf("\n\nBeforesorting:\n

\“%s\"”,s);

24fun(s);

25printf("\nAftersortingdecendingly:

\ns);

26}

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

如下公式的值。

23m

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

請改正函數(shù)firn中的錯誤或在橫線處填上適當?shù)膬热莶褭M線刪除,使

它能計算出正確的結果。

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

1Jfinclude<stdio.h>

2idoublefun(intm)

3J(

4!doublet=1.0;

5iinti;

6for(i?2;i<wm;i++)

7…m*found……*…

8t1.0-1/i;

9??????ww**founcj**********

10i-------

11!)

12;main()

13:{

14!intm;

?

15iprintf(H\nPleaseenter1integer

iw

inumbers:\n);

16!scanf(H%dn&m);

ir

ww

17iprintf(\n\nTheresultis%lf\nr

fun(m));

18!)

34.下列給定程序中,函數(shù)ftm()的功能是:從字符串s中,刪除所有小

寫字母

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

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

試題程序:

#include<stdio.h>

voidfun(char*s)

{inti,j;

for(i=j=O;s[i]!='\0';i++)

if(sill!='c')

s[j]=s[i];

/**************d*************j

s[i]='\O';

}

main()

{chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:")

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);printf("\n\n"):

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

S=f(-n)+f(-n+1)+...+★0)+可1)+*2)+...f(n)的值。

例如,當n為5時,函數(shù)值應為10.407143of(x)函數(shù)定義如下:

r(x+iy(x-2)xX)

f(x)0或x=2

L(x-iy(x-2)x<0

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math,h>

/**************^^)und***************I

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=0.0,y;

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

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

/**************d**************j

returns

}

main()

{clrscr();

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

36.下列給定程序中,函數(shù)ftm()的功能是::求k!(k<13),所有階乘的

值作為函數(shù)值返回。例如:若k=10,則應輸出3628800。

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

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

改程序的結構。

試題程序:

#include<conio.h>

#include<stdio.h>

longfiin(intk)

/*************nd**************/

ifk>0

return(k*fun(k-1));

/*************nd**************/

elseif(k=0)

return1;

main()

{intk=10;

clrscr();

print,("%d!=%ld\n",k,fun(k));

37.給定程序MOD11.C中函數(shù)ftin的功能是:應用遞歸算法求形參a

的平方根。求平方根的迭代公式如下:

xl=;(xO+為

例如,a為2時,平方根值為:1.414214O

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

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

1(include<stdio.h>

2finclude<math.h>

3/?*?*?**??*found**********/

doublefun(doublea,dounlexO)

{doublexl,y;

6xl?(x0>a/xO)/2.0;

7/**********found**********/

8if(fabs(xl-xo)>0.00001)

9y?fun(a,xl);

10elsey-xl;

11returny;

12)

13main()

14{doublex;

15printf("Enterx:*);scanf

w

(-%lfr&x);

16printf(RThesquarerootof%lf

w

is%lf\nrxrfun(x,1.0));

17

38.給定程序中函數(shù)fun的功能是:將一個由八進制數(shù)字字符組成的字

符串轉換為與其值相等的十進制整數(shù)。規(guī)定輸入的字符串最多只能包含

5位八進制數(shù)字字符。

例如,若輸入:77777,則輸出將是:32767。

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

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

[試題源程序]

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

intfun(char*p)

intn;

/********************!

n=*p-'o';

p++;

while(*p!=0){

/********************/

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

fbr(i=0;s[i];i++)

if(s[i]<'0'||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);

I

s

39.下列給定程序中,函數(shù)fim()的功能是:統(tǒng)計字符串substr在字符串

srt中出現(xiàn)的次數(shù)。例如,若字符串為aaas1kaaas,子字符串為as,則

應輸出20

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

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

試題程序:

#include<stdio.h>

fun(char*str,char*substr)

{inti,j,k,num=0;

/***************************/

for(i=0,str[i],i++)

fbr(j=i,k=0;substr[k]=str[j];k++,j++)

if(substr[k+l]=-\0')

{num++;

break;

returnnum;

}

main()

{charstr[80],substr[80];

printf("Inputastring:");

gets(str);

printf("Inputasbustring:");

gets(substr);

printf("%d\n",fiin(str,substr));

40.以下程序可把輸入的十進制數(shù)以十六進制數(shù)的形式輸出。

請在橫線上填上適當?shù)膬热莶褭M線刪除,使它能得出正確的結果。

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

試題程序;

main()

(

charb[17]={"0123456789ABCDEF"};

intc[64],d,i=0,base=16;

longn;

printff'Enteranumber:\n");

scanf("%ld",&n);

do{

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

c[i]=;i++;n=n/base;}

while(n!=0);

printf("Transmitenewbase:\n");

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

/********不********不****************/

nn

{d=c[i];printf(%c9b);}

printsn\nn);

}

五、程序改錯題(2題)

41.下列給定程序中,函數(shù)proc()的功能是:對M名學生的學習成績,

按從低到高的順序找出前m(mWO)名學生來,并將這些學生數(shù)據(jù)存放

在一個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返

回。

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

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

構。

試題程序:

UincludeHL>

3include<como.h>

Hmcludr<strigh>

■mdudc<Mdio.h>

0ckfiaeM10

fypedel?tmct??

(

char?mn[lO]i

UuHI

I

STVi

STU?proc<STU?(]?inim)

STUHM】??“

iati.j.ki

//????found????

?I*rallocCm<MM<O?STU))t

bCi]-4Oi

for(k*Oik<mik<^+>

<

//????found????

for-?->

YbCl].?)

//????louftd????

bGl?*iooi

1

mumu

I

Iouguh(STU?[]?F1LE?pf>

(

mtii

fortifyMi-?)

fprmikpl.*No*S?Mirk-*%d\n*?

?GIflam*Hl1?>!

fpriatKpf.r\n\i?e>i

?

?wdnwiiB()

I

STUMI>(MJ-(<-AOI??77K(wA02%g5|.

*A04"AOS\75l.

CA<M?AO7??76)J-A0?-.UI.

CAM%WI.<eAIO??78H.

STU?p<)nkn

MHi?mt

■EKLS"

pniH,(?????THERESULT,???\a*)i

<xitre>ult(?1?(atdowi)g

linndCXnGivrthenianbefo(ihrMudeats

whohavelowvrKorvt*>a

?cAid(eXda?&m)i

wKile<m>10)

(

|>nnd<9\nGiwthenumberofIhr

?i&E.whohavelowvrMorvs"h

tcuf<?%4??&m)i

|4>r<kr-proc<MU.OB)i

pr?tf<?????THERESULT-??八、”

a

pnntf<*Thelow3\n>i

lor(i-0.yniii*?)

prmt(<*K?KdXn^tpOrderfij.ntim*

p4)rtkr{tX?).

(rrc<pOr4rr>i

42.

下列給定程序中,函數(shù)proc()的功能是:輸出M行M列整數(shù)方陣,

然后求兩條對角線上的各元素之和并將其返回。請修改程序中的錯誤,

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

刪行,也不得更改程序的結構。試題程序:

#inclod*<.ntdhlkh>

SincludeVcoftdh>

9includeV?uho.h>

*defineM5

ff????ioufMi????

mtprocCmi1WJ(])

H*Il?j.

pri?H(*\?TWB%dM)?

for(i-Oiy

,

locCj-+)

//???■found????

pcimK?%4「?H?

pnntf(<\ns)(

oii++)

■urn,-nxLiJCij*i-l]i

r*tum(?utn);

voidfimin()

tat

S?2.0U)9H.0.5.7*3|.Ua.|t94>h

*CLS*>?

prm<f(w\nThew<WailtkmmtBon2

?%*.?eroc(M.arr))8

六、操作題(2題)

43.以下程序運行后的輸出結果是【】。(注:如果結果中含有回車,可

加一空格寫在一行,例如:

111

111

111

可以寫成:11111111lo

#include<stdio.h>

mala()

{inti,j,a[][3]={l,2,3,4,5,6,7,8,9};

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

fbr(j=i+l;j<3;j++)a[j][i]=0;

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

{forG=O;j<3;j++)printf("%d",a[i][j]);

printf("\n");

}

}

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

案的項目中包含一個源程序文件blankl.c。在此程序中,函數(shù)fun()的功

能是在形參s所指宇符串中尋找與參數(shù)c相同的字符,并在其后插入一

個與之相同的字符,若找不到相同的字符則不做任何處理。

例如,若s所指字符串為"baacda",c中的字符為a,執(zhí)行后s所指字

符串為"baaaacdaa”。

請在程序的下劃線處填入正確的內容并將下劃線刪除,使程序得出正

確的結果。

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

不得增行或刪行,也不得更改程序的結構!

試題程序:

#include<stdio.h>

voidfun(char*s,charc)

{inti,j,n;

I*********found*********/

for(i=0;s[i]!=[1];i++)

if(s[i]==c)

(

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

n=【2】;

while(s[i+l+n]!='\0')

n++;

for(j=i+n+1;j>i;j—)

s[j+l]=s|j];

/******************/

S[j+1]=[3];

i=i+l;

)

)

main()

{chars[80]=,,baacda\c;

printf("\nThestring:%s\n'Vs);

printf(M\nlnputacharacter:9,);

scanf("%c",&c);

fun(s,c);

printf(n\nTheresultis:%s\n”,s);

參考答案

l.p->dataqp->data,q解析:本題考查的是鏈表這一數(shù)據(jù)結構對結構體

變量中數(shù)據(jù)的引用。鏈表的特點是結構體變量中有兩個域,一個是數(shù)據(jù),

另一個是指向該結構體變量類型的指針,用以指明鏈表的下一個結點。

2.1HAVEATEST.

3.130130解析:本題主函數(shù)中用了一個fbr循環(huán),循環(huán)了3次:當i=9

時,i/10=0,執(zhí)行switch語句中caseO分支,m和n的值各增1,變?yōu)?

和1,然后遇到break語句,退出switch語句;當i=10和11時,i/10都

等于1,執(zhí)行switch語句中的easel分支,兩次使n增1,變?yōu)?,退出

switch語句。故該空格處應該填130。

4.非0非0解析:邏輯運算中,非0表示邏輯“真”,用。表示邏輯“假”。

5.bcdefghabcdefgha解析:在本題定義的ss()函數(shù)中首先定義了一個指

針P和一個字符變量t,然后讓p指向參數(shù)指針s的下一個位置s+1,并

讓t保存S位置的字符.然后使用一個while循環(huán)將p指向的內容賦給

它前面一個位置,即將參數(shù)s所指的字符串從第2個字符開始整體往前

移動一位。循環(huán)結束時,p指向原s串的結束標志處,所以讓*(p-l)=t;

即是將原s串的第1個字符復制到s串的最后一個位置。整個函數(shù)實現(xiàn)

的是讓一個字符串循環(huán)左移一位。故主函數(shù)中最后輸出的字符串是

'bcdefgha'o

6.1010解析:strlen(s)函數(shù)的返回值為字符串s包含的字符個數(shù)〈不計

最后的\\0)。

7.對象對象解析:類描述的是具有相似性質的一組對象。例如,每本具

體的書是一個對象,而這些具體的書都有共同的性質,它們都屬于更一

般的概念“書”這一類對象。一個具體對象稱為類的實例。

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

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

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

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

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

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

9.44解析:strcpy(sl,s2)函數(shù)的作用是將字符串s2中的內容拷貝到字符

串si中的內容覆蓋。strlen()函數(shù)是求字符串的長度。本題實際上是要求

s2字符串的長度,即是4°

10.1818解析:設循環(huán)隊列的容量為n。若rear>fix)nt,則循環(huán)隊列中的

元素個數(shù)為rear-front;若rear<front,則循環(huán)隊列中的元素個數(shù)為

n+(rear-front)o題中,frontal6,rear=9,rear<front,所以,循環(huán)隊列

中的元素個數(shù)為m+(rear-front)=25+(9-16)=18o

11.B

12.A

當值相同時按位異或,則為0,按位或與按位與時仍不變,負數(shù)也為非

0o

13.B

14.D

本題考夢自增運算符,,++,,、邏輯與運算符“&&”和邏輯或運算符“II”。

自增運算符“++”出現(xiàn)在變量之前,表示先使用變量的值加1,再使用變

量的值進行運算;出現(xiàn)在變量之后,表示先使用變量的值進行運算,

再使用變量的值加lo當邏輯與運算符“&&”兩邊的運算對象都為真

時.,邏輯表達式的值才為真;當邏輯或運算符“II”只要一個值為1,值

就為1。根據(jù)運算符的優(yōu)先級,題中應先計算內層括號中的值。++j是

先自加后運算,因此運算時j的值等于3,所以表達式++j=3成立,即

表達式的值為1;1與任何數(shù)都為進行或(||)運算,結果都為1,因此

k=3的表達式i++是先運算后自加,因此運算時i為1,所以i++=l成

立,自加1后i=2。if語句的條件為真即“1”,所以輸出i、j、k的值分

別是2,3,3o

15.B

16.D解析:本題中首先定義一個字符數(shù)組s,并將字符串ABCD存到數(shù)

組s中,定義了一個字符指針變量p,在接下來for循環(huán)中,循環(huán)體共執(zhí)

行了三次,第一次P指向s[l],所以此時輸出的p所指字符串的值為

BCD,第二次循環(huán)p指向s[2],此時輸出p所指的字符串的值為CD,

第三次循環(huán)P指向s[3],此時輸出的p所指的字符串的值為D。所以,

4個選項中選項D符合題意。

17.B解析:本題考核的知識點是C程序從編寫到生成可執(zhí)行文件的步

驟。C語言采用編譯方式將源程序轉換為二進制的目標代碼,編寫好一

個C程序到完成運行一般經(jīng)過以下幾個步驟:編輯;編譯,就是將已經(jīng)

編輯好的源程序翻譯成二進制的目標代碼,經(jīng)編譯后的得到的二進制代

碼還不能直接執(zhí)行,因為每一個模塊往往是單獨編譯的,必須把經(jīng)過編

譯的各個模塊的目標代碼與系統(tǒng)提供的標準模塊連接后才能運行;連接,

將各模塊的二進制目標代碼與系統(tǒng)標準模塊經(jīng)連接處理后,得到具有絕

對地址的可執(zhí)行文件,它是計算機能直接執(zhí)行的文件;執(zhí)行,執(zhí)行一個

經(jīng)過編譯和連接的可執(zhí)行的目標文件。由以上定義可知,選項A、C、

D均不正確。所以,4個選項中選項B符合題意。

18.D

19.B

2O.Asub函數(shù)接收兩個參數(shù):double類型變量a,double指針變量pb0

首先將a與pb指向的變量值相減,結果存放在a中;然后再將pb指向

的變量值與a的新值相減,結果存放在pb指向的內存空間中。sub函數(shù)

不會修改實參x的值,但會修改實參y的值。當輸入10.23.5時,實參

x的值為10.2,y的值為3.5,執(zhí)行sub函數(shù)后,x的值不變,y的值變

成32。故本題答案為A選項。

21.intfun(char*s)

2;{intn=0;

3char*p;

4:;for(p=s;*p!=,\\0';pJ__+)

if((*p>,o,)&&(<,9,))

6n++;

7returnn;

8}要統(tǒng)計字符串中數(shù)字字符的個數(shù),首先應定義變量n,并將其初始化

為0,然后遍歷字符串,逐個判斷字符是否為數(shù)字字符,判斷條件為該

元素的ASCII值在字符0和9的ASCII值之間,若判斷條件成立,則

使n的值加1,否則,繼續(xù)判斷下一個字符,直到字符串結束。

22.

【解析1按照題目中要求,求出能整除x且不是偶數(shù)的各整數(shù)。首先

判斷小于等于整數(shù)x的所有奇數(shù)是否能被x整除,將能被x整除的奇

數(shù)放入數(shù)組pp中。最后將數(shù)組pp中元素的個數(shù)返回到主函數(shù)中。

23.1voidfun(char*a,charts)

2{while(*s!:'o1)

3{*a=*s;4a++;5s++;}7*a=N(y;}要將指針變量s所指的字符串存入指針

變量a所指的字符串中,程序要求不能使用系統(tǒng)提供的字符串函數(shù)。

本題可以使用循環(huán)語句,依次取出a所指字符串中的元素,將其存入s

所指的字符串中,最后為s所指的字符串添加字符串結束標志

24.

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

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

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

25.

【解析】首先我們應定義一個變量來表示其和,另一個來表示其項數(shù),

然后通過循環(huán),求得其差值,最后把和的平方返回到主函數(shù)中。

26.1doublefun(doublex,intn)

2{

3inti;

4doubles=1.0,sl=1.0;

5for(i=l/i<=n;i++)

6{si=si*i;/*各項中的階乘*/?s=s+pow(x,i)/si;/*按公式求出*/}Returns;10}

程序定義了變量S1和s,si表示每項的分母(即各項的階乘),S存放累

加和。循環(huán)語句控制累加的次數(shù),在循環(huán)體中進行階乘和累加操作,

將累加的結果存入S中。此處使用了求乘方函數(shù)pow(X,i),其含義是

求X的i次方的值。

27.voidfun(int(*s)[10],int*b,int*n,intmm,intnn)

(

intij;

for(j=0;j<nn;j++)/*將二維數(shù)組中的數(shù)據(jù)按列的順序依次存入一維數(shù)

組中*/

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

(

b[*n]=*(*(s+i)+j);

*n=*n+l;/*通過指針返回元素個數(shù)*/

)

)

題目要求實現(xiàn)將二維數(shù)組元素存入一維數(shù)組。使用for循環(huán)語句來控制

二維數(shù)組元素的下標,同時使用指針變量配合操作。

可以用兩個循環(huán)來處理問題,由于是按列的順序取出,因此第1個循

環(huán)用于控制列下標,第2個循環(huán)用于控制行下標。

28.

【解析】本題比較簡單

溫馨提示

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

評論

0/150

提交評論