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

下載本文檔

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

文檔簡介

2021年廣東省揭陽市全國計算機等級考試

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

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

一、2.填空題(10題)

1.樹中度為零的結(jié)點稱為O

2.以下程序的運行結(jié)果為【】。

#defineN5

main()

{inta[N]={1,2,3,4,5},i,temp;

for(i=0;i<N/2;i++)

{temp=a[i];

a[i]=a[N-i-l];

a[N-i-l)=temp;

}

printf("\n");

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

}

3.長度為n的順序存儲線性表中,當(dāng)在任何位置上插入一個元素概率

都相等時,插入一個元素所需移動元素的平均個數(shù)為【】。

4.下列的for語句的循環(huán)次數(shù)為o

for(x=1,y=0;(y!=19)&&(x<7);x++);

5.在面向?qū)ο蠓椒ㄖ校?)是具有相似性質(zhì)的對象的集合。

6.設(shè)a、b、c為整形數(shù),且a=2,b=3,c=4則執(zhí)行完以下語句后,a

的值是【】。

a*=16+(b++)-(++c);

7.數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類型,它們是____數(shù)據(jù)模型、

邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。

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

#include<stdio.h>

voidfun(intx)

{if(x/2>0)fun(x/2);

printf("%d",x);

)

main()

{fun(3);printf("\n");

)

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

charch='B';

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

10.有以下程序:

#definef(x)x*x

main()

{inti;

i=f(4+4)/f(2+2);

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

)

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

二、單選題(10題)

11.以下函數(shù)的時間復(fù)雜度和空間復(fù)雜度為()

Functionfn)

(n<=1)

Functkx)(n-1)?Function(n-2);

A.T(n)=O(2An),S(n)=O(n)

B.T(n)=O(l),S(n)=O(l)

C.T(n)=O(2An),S(n)=O(1)

D.T(n)=O(n),S(n)=O(n)

12.

(23)以下是while語句的基本形式:

while(表達式){語句;)

其中“表達式”()。

A)必須是邏輯表達式B)必須是關(guān)系表達式

C)必須是邏輯表達式或關(guān)系表達式D)可以是任意合法的表達式

13.有以下程序

include<stdio.h>

main()

{chara[30],b[30];

scanf("%s",a);

gets(b);

printf("%s\n%s\n”,a,b);

)

程序運行時若輸入:

howareyou?Iamfine<回車>

則輸出結(jié)果是

A.howareyou?Iamfine

B.howareyou?1amfine

C.howareyou?Iamfine

D.howareyou?

14.定義無符號整數(shù)類為UInt,下面可以作為類UInt實例化值的是

A)B)369C)0.369D)

A.-369B.369C.0.369D.整數(shù)集合{1,2,3,4,5}

15.有以下程序

#include<stdio.h>

main()

{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;

*q=*(p+5);

printf("%d%d\n",*p,*q);

)

程序運行后的輸出結(jié)果是

A.運行后報錯B.66C.611D.510

16.有以下程序:

#include<stdio.h>

#defineSUB(a)(a)-(a)

main()

(

inta=2,b=3,c=5,d;

d=SUB(a+b)*c;

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

)

程序的運行結(jié)果是()o

A.0B.-12C.-20D.10

17.輸入序列為(A,B,C,D),不可能得到的輸出序列是____.

A.(A,B,C,D)B.(D,C,B,A)C.(A,C,D,B)D.(C,A,B,D)

18.設(shè)有以下函數(shù):voidfun(intn,char*s){...}則下面對函數(shù)指針的定

義和賦值均正確的是()o

A.void(*pf)();pf=fun;

B.void*pf();pf=fun

C.void*pf();*pf=fun;

D.void(*pf)(int,char);pf=&fun;

19.向一個棧頂指針為HS的鏈式棧中插入一個s所指的結(jié)點時,則執(zhí)行

Oo

A.HS->next=s

B.S->next=HS->nextHS->next=s

C.s->next=HSHS=s

D.S->next=HSHS=HS->next

20.下面是有關(guān)C語言字符數(shù)組的描述,其中錯誤的是()。

A.不可以用賦值語句給字符數(shù)組名賦字符串

B.可以用輸入語句把字符串整體輸入給字符數(shù)組

C.字符數(shù)組中的內(nèi)容不一定是字符串

D.字符數(shù)組只能存放字符串

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

21.請編寫函數(shù)proc,它的功能是計算:

s=(In(l)4+ln(2)4+ln(3)+...+In(m))0.5

在C語言中可調(diào)用log(n)函數(shù)求ln(n)o

例如,若m的值為30,則proc函數(shù)值為8.640500。

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

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

中填人所編寫的若干語句。

試題程序:

#include<stdlib.h>

#include<conio.h>

#inclllde<stdio.h>

#include<math.h>

doubleproc(intm)

)

voidmain

system("CLS");

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

22.有N個學(xué)生,每個學(xué)生的信息包括學(xué)號、性別、姓名、四門課的成

績,從鍵盤上輸入N個學(xué)生的信息,要求輸出總平均成績最高的學(xué)生信

息,包括學(xué)號、性別、姓名和平均成績。

23.

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

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

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

主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(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*?■)!

24.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放

人結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,它的功能是:把指定分數(shù)范圍

之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分數(shù)范圍之外的學(xué)生人數(shù)由函

數(shù)值返回。

例如,輸入的分數(shù)是70和79,則應(yīng)當(dāng)把分數(shù)低于70和高于79的學(xué)生

數(shù)據(jù)輸出,不包含70分和79分的學(xué)生數(shù)據(jù)。主函數(shù)中把70放在low

中,把79放在heigh中。

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

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

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

試題程序:

#include<stdio.h>

#defineM16

typedefstruct

(

charnum[10];

ints:

)

STREC;

intproc(STREC*a,STREC*b,int1,inth)

(

)

voidmain

(

STRECstu[M]={{"GA005",55),{"GA003",96},

{"GA002",80),{"GA004",68),

{"GA001"88},{"GA007",74},

{"GA008",85),{"GA006",89},

{"GAO15",90),{"GA013,,?53),

{"GAO12",66},{"GAO14",82)

{"GAOH",73},{"GAO17",69),

{"GA018",64),{"GA016",86}};

STRECh[M];

inti,n,low,heigh,t;

printf("Enter2integernumberlow&

heigh:");

scanf("%d%d",&low,&heigh);

if(heigh<low)

t=heigh:

heigh=low;

low=t;

)

n=proc(stu,h,low,heigh);

printf("Thestudent'sdataout

%d--%d:\n",low,heigh);

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

printf("%S%4d\n",h[i].num,h[i].s);

//輸出指定分數(shù)范圍內(nèi)的學(xué)生記錄

printf("\n");

)

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

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

其功能是將a、b兩個兩位正整數(shù)合并成一個新的整數(shù)放在c中。合并

的方式是將a中的十位數(shù)和個位數(shù)依次放在變量c的千位和十位上,b

中的十位數(shù)和個位數(shù)依次放在變量c的個位和百位上。

例如,當(dāng)a=45,例如,調(diào)用該函數(shù)后c=4251。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(inta,intb,long*c)

(

)

main()

{

inta,b;

longc;

printff'Inputa,b:");

scanf("%d%d”,&a,&b);

fun(a,b,&c);

printf("Theresultis:%ld\n,,,c);

)

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

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

數(shù),其功能是從傳入的num個字符串中找出最長的一個字符串,并通

過形參指針max傳回該字符串的地址(用****作為結(jié)束輸入的標識)。

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

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

試題程序:

1#include<conio.h>

2#include<stdio.h>

3#include<string.h>

4#include<stdlib.h>

5char*fun(char(*a)[81],intnum,char*max)

6{

7

8)

9voidmain()

10{

11FILE*wf;

12charss[10][81],*ps=NULL;

13chars[3][81]={"abed","deg","diegns"),*p=NULL;

14inti=0,n;

15system("CLS");

16printf("輸入若干個字符串:");

17gets(ss[i]);

18puts(ss[i]);

19while(!stremp(ss[i],"****")==0)/*用4個星號作為結(jié)束輸入的標志

*/

20{

21i++;

22gets(ss[i]);

24puts(ss[i]);

25)

26n=i;

27ps=fun(ss,n,ps);

28printf("\nmax=%s\n",ps);

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

31p=fun(s,3,p);

32fprintf(wf,"%s",p);

33fclose(w0;

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

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

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

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

例如,若輸入“abc4E螃”,則應(yīng)輸出“aBc4EFg”。

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

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

試題程序:

1#include<conio.h>

2#include<stdio.h>

3frinclude<string.h>

4#include<stdlib?h>

5voidfun(char*ss)

6{

7

8}

9voidmain()

10{

IlFILE*wf;

MM

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

13system(MCLSM);

14printf(M\nPleaseenteranstring

within80characters:\nM);

15gets(tt);

16printf(n\n\nAfterchanging,

M

thestringVn%srtt);

17fun(tt);

18printf(M\nbecomes\ng

19//

MMMM

20wf=fopen(out.datrw);

21fun(s);

22fprintf(wf,w%sw,s);

23fclose(wf);

24//

251

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

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

其功能是根據(jù)以下公式計算S,并將計算結(jié)果作為函數(shù)值返回,通過形

參傳入。

5=1+-一--+;+...+-----------

1+21+2+3I+2+3+—+n

例如,若n的值為11時,函數(shù)的值為1.833333。

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

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

floatfun(intn)

{

)

voidmain()

(

intn;

floats;

system(“CLS”);

printffAnPleaseenterN:");

scanf("%d”,&n);

s=fun(n);

printf("Theresultis:%f\n”,s);

}

29.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入

結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,其功能是:按分數(shù)的高低排列學(xué)

生的記錄,高分在前。

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

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

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

試題程序:

#include<stdio.h>

#defineM16

typedefstruct

{

charnumflO];

intS;

)

STREC:

voidproc(STRECa[])

(

inti,j;

STRECt;

for(i=l;i++)/*用冒泡法來按從高到低

排序*/

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

if(a[j].s)//*按分數(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),

{"GA015",85),{"GA013",91),{"GAO12",64),

{"GAO14",91),{"GA011",66),{"GAO17",64},

{"GA018",64),{"GAO16",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");

)

30.

請編寫一個函數(shù)voidproc(intm,intk,intxxE3),該函數(shù)的功能是:

將大于整數(shù)m且緊靠m的k個素數(shù)存入所指的數(shù)組中。例如,若輸入

206,則應(yīng)輸出232931374143。注意:部分源程序給出如下。請勿

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

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

與includehj>

9includeVcooflo.h>

>include<stdiah>

vo?dprocimtmttnlk?mt

voedouirtlC)

mim?n*?rv{lCXM>]i

aEe?n《*CLS*>i

pn?tf("\nP1?i?cmirrtwoiategers?*)i

—"XdMd*.K.m.K.n)?

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

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

如下公式的值。

23m

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

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

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

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

1tinclude<stdio.h>

2doublefun(intm)

3

doublet=1.0;

5inti;

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

**********found**********

8t-1.0-1/i;

9****found**********

10

11

12main()

13

14intm;

15printf(H\nPleaseenter1integer

numbers:\n");

RR

16scanf(%dr&m);

w

17printf("\n\nTheresultis%lf\nr

fun(m));

18

32.給定程序MODU.C中fun函數(shù)的功能是:分別統(tǒng)計字符串中大寫

字母和小寫字母的個數(shù)。

例如,給字符串s輸入:AAaaBBbl23CCccccd,則應(yīng)輸出結(jié)果:upper=

6,lower=8o

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

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

1#include<stdio.h>

2/………?found………?/

3voidfun(char*srinta,intb)

4

5while(*s)

6{if(*s>-'A'4&*s<?'Z')

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

8

9if(*s>?,a*&&*s<??z1)

10/…?……found……★…/

11*b,b+l;

12s++;

13

14)

15main()

16{chars[100];intupper-Q,lower

?0;

17printf("\nPleaseastring:n);

gets(s);

18fun(sr&upper,slower);

19printf(H\nupper-%dlower■

w

%d\nrupperzlower);

20)

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

如下公式的值。

11.1..1

V=一十——十?一一?一+…+‘’

!004100200*200300*300m*m

例如,若m=2000,則應(yīng)輸出:0.000160。

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

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

1ilinclude<stdio.h>

i/*?**?*******found************/

3!fun(intm)

?

4;(doubley,0,d;

5\inti;

6!/…………found…………/

7for(i,100,i<?mri+=100)

8(d=(double)i?(double)i;

9!y+-1.0/d

10;}

I

11ireturn(y);

12\}

13!main()

14i{intn?2000;

wH

15;printf(\nTheresultis%lf\ng

;fun(n));

16i}

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

N項之和SN,直到SN+1大于q為止,q的值通過形參傳入。

SN=2/1+3/2+4/3+(N+1)/N

例如,若q的值為50.0,則函數(shù)值為49.394948°

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

doublefun(doubleq)

{intn;doubles,t;

n=2;

s=2.0;

while(s<=q)

t=s

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

s=s+(n+l)/n;

n++;

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

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

returns;

main()

{clrscr();

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

35.下列給定函數(shù)中,函數(shù)fun()的功能是:統(tǒng)計字符串中各元音字母(即

A,E,I,O,U)的個數(shù)。注意:字母不分大小寫。例如,輸入THIsis

aboot,貝IJ應(yīng)輸出是10220。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

fun(char*s,intnum[5])

{intk,i=5;

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

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

num[i]=0;

for{;*s;s++)

{i=-l;

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

switch(s)

{case'a':case'A':{i=0;break;}

case'e':case'E':{i=l;break;}

case'i':caseT:{i=2;break;}

case'o':case'O':{i=3;break;}

case'u':case'U':{i=4;break;}

)

if(i>=0)

numfi]++;

)

}

main()

{charsl[81];intnuml[5],i;

clrscr();

printf("\nPleaseenterastring:");

gets(si);

fun{sl,numl);

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

printf("\n");

)

36.給定程序MODD.C中函數(shù)fun的功能是:從低位開始取出長整型

變量s中奇數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在1中。高位仍在高位,

低位仍在低位。

例如,當(dāng)s中的數(shù)為:7654321時,t中的數(shù)為:7531。

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

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

1linclude<stdio.h>

2/…………"und…………/

3voidfun(longs,longt)

4{longsl-10;

5*t-s%10;

6while(s>0)

7(s■s/100;

8*t■s%10*si?*t;

9/****w*******found*********??*/

10si?sl*100;

11

12

13main()

14{longs,t;

15printf("\nPleaseenters:w);

scanf(N%ldN,&s);

16fun(s,&t);

17printf(wTheresultis:%ld\nn^t);

IS

37.給定程序中函數(shù)fun的功能是:根據(jù)整型形參m,計算如下公式的

值。

例如,若m中的值為5,則應(yīng)輸出:1.463611。

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

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

[試題源程序]

#include<stdiO.h>

doublefun(intm)

(

doubley=1.0;

inti;

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

for(i=2;i<m;i++)

y+=l/(i*i);

return(y);

main()

(

intn=5;

printf("\nTheresultis%lf\n",fun(n));

)

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

之和。

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

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

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

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

試題程序:

#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:

%lf\n",fun(n));

39.給定程序M0D11.C中函數(shù)fun的功能是:根據(jù)輸入的三個邊長(整

型值),判斷能否構(gòu)成三角形:構(gòu)成的是等邊三角形,還是等腰三角形。

若能構(gòu)成等邊三角形函數(shù)返回3,若能構(gòu)成等腰三角形函數(shù)返回2,若

能構(gòu)成一般三角形函數(shù)返回1,若不能構(gòu)成三角形函數(shù)返回0。

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

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

1*include<stdio.h>

2tinclude<math.h>

3/??一★★★★…?■found

4voidfun(inta,intb,intc)

5(if(a*b>c&&b+c>a&&a+c>b){

6if(aMb&&bMc)

7return3;

8elseif(aMb||b--c||a~c)

9return2;

10???????foundn/

elsereturn1

12}

13elsereturn0;

14;}

main()

16{intarbrcrshape;

nn

17printf(\nlnputarbrc:);scanf

(“d%d%d-,&a,

HR

18printf(\na-%drb=%d,c-%d\n,

a,b,c);

19shape-fun(arb,c);

R

20printf(\n\nTheshape:%d\n*r

shape);

21

40.下列給定程序中,函數(shù)fun()的功能是:對N名學(xué)生的學(xué)習(xí)成績,按

從高到低的順序找出前叫mSO)名學(xué)生來,并將這些學(xué)生數(shù)據(jù)存放在一

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

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<alloc.h>

#defineN10

typedefstructss

{charnum[10];

ints;

}STU;

STU*fun{STUa[],intm)

{STUb[N],*t;

inti,j,k;

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

*t=calloc(m,slzeof(STU));

for(i=0;i<N;i++)b[i]=a[i];

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

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

if(b[i].s>b[j].s)j=i;

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

t[k].num=b[j].num;

t[kl.s=bfjls;

b[j].s=O;

returnt;

}

outresult(STUa[],FILE*pf)

{inti;

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

fprintf(pf,"No=%sMark-%d\n",

a[i].num,a[i].s);

fprintf(pf,"\n\n");

}

main()

{STUa[N]={{"AOI",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}};

STU*pOrder;

inti,m;

clrscr();

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

outresult(a,stdout);

printf("\nGivethenumberofthestudents

whohavebetterscore:");

scanf("%d",&m);

while(m>10)

{printf("lnGivethenumberofthe

studentswhohavebetterscore:");

scanf("%d",%m);

pOrder=fun(a,m);

printf。*****THERESULT*****kn");

printf("Thetop:\n");

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

printf("%s%d\n",pOrder[i].num,

pOrder[i].s);

free(pOrder);

)

五、程序改錯題(2題)

41.下列給定程序中,函數(shù)proc()的功能是:從m個學(xué)生的成績中統(tǒng)

計出低于平均分的學(xué)生人數(shù),此人數(shù)由函數(shù)值返回,平均分存放在形參

aver所指的存儲單元中。例如輸入8名學(xué)生的成績:

987867563489.578.576.5則低于平均分的學(xué)生人數(shù)為3(平均分為

72.187500)o請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:

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

題程序:

於includeVsidlib.h>

includeVxtdio.h>

include<conio.h>

於defineM20

intproc(float?inin?float?aver).

(

floatave?t=0.0>

intcount=O?k?it

for<k=0ik<nik4--F)

//???*found????

ave^t/m

for(i=?0ii<nii++)

if(s£i]<ave)count++?

//????found????

*aver-&avei

returncounti

)

voidmain()

(

floatstu[30]?avcn

inim?ii

systcm("CI-Sw)?

prind(*\nPlcascenterm:*)tscanf

("%d"?&m),

primfC"\nPlcascenter%dmark:\nw?m);

for(i=0ii<inii4-+)scanf("%f*.Mu-bi)?

printfCw\nThcnumberofstudents:

%d\n"wproc(stu.m.&.avcr))i

printfC"Ave%f\n*?avcr)i

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

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

例如,輸入opdye,則應(yīng)輸出deopy。

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

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

試題程序:

#include%string.h>

#include%stdlib.h>

#include<conio.h>

#include<stdio.h>

//***und****

intproc(charstr[])

(

charC;

unsignedi,j;

for(i=0;i<strlen(str)-1;i++)

for(j=i+l;j<strlen(str);j4-+)

if(str[i]>str[j])

(

c=str[j]:

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

str[j]=str[i++];

str[i]=C;

)

)

voidmain

(

charst/[81];

system("CLS");

printf("\nPleaseenteracharacter

string:");

gets(str);

printf("\nknBeforesorting:\n%s",str);

proc(str);

printf("\nAftersortingdecendingly:\n

%S",str);

)

六、操作題(2題)

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

main()

{charc='z';

printf("%c",c-25);}

44.當(dāng)m=l,n=2,a=3,b=2,c=4時,執(zhí)行d=(m=a!=B)&&(n=b>C)后,

m的值為()。

參考答案

1.葉子結(jié)點葉子結(jié)點解析樹中度為零的結(jié)點,也就是沒有后件的結(jié)點,

稱為葉子結(jié)點。

2.54321

3.n/2性表的任何位置插入一個元素的概率相等,即概率為p=l/(n+l),

則插入一個元素時所需移動元素的平均次數(shù)為E=l/(n+l)(n-i+l)=

n/2o

4.66解析:分析程序可知,每循環(huán)一次,x的值加1,然后檢測循環(huán)控

制條件(y!=19)&&(x<7),因y的值不變,故滿足x<7時循環(huán)6次。

5.類類解析:將屬性、操作相似的對象歸為類,也就是說,類是具有共

同屬性、共同操作性質(zhì)的對象的集合,是已經(jīng)定義了的關(guān)于對象的特征、

外觀和行為的模板。所以類是對象的抽象,它描述了屬于該對象類型的

所有對象的性質(zhì),而一個對象則是其劃應(yīng)類的一個實例。

6.28

7.概念概念

8.1313解析:函數(shù)fun是一個遞歸函數(shù)。執(zhí)行fun(3);,x=3,x/2=l>0,

又調(diào)用f(l),此時,x=l,x/2=0,不滿足繼續(xù)遞歸調(diào)用的條件,輸出1,

返回到fun(3)中,輸出3。所以本題的輸出結(jié)果為13。

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

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

10.2828解析:i=f(4+4)/f(2+2)=4+4x4+4/2+2x2+2=4+16+2+4+2=28。

11.A

12.D

13.B

14.B

15.C

解析:本題中第一行代碼對指針P進行了初始化,其指向數(shù)組a的第6

個元素,在其后的操作中p的值也沒有改變過,所以最后輸出

*p=*\u3000\u3000(p+0)\u3000\u3000=a\u3000[5]\u3000=6,而第二行代

碼中對q指向的值進行賦值,等價于*q=a[10]=ll,所以輸出結(jié)果*q為

Ik

16.C宏定義只是做簡單的替換,本題中SUB(a+b)*c=(a+b)-(a+b)*c=-20。

故本題答案為C選項。

17.D

18.A

函數(shù)指針的定義格式為函數(shù)類型(*指針變量名X形參列表);函數(shù)名和

數(shù)組名一樣代表了函數(shù)代碼的首地址,因此在賦值時,直接將函數(shù)指

針指向函數(shù)名就行了。所以選項A正確。

19.C

2O.D\n用來存放字符量的數(shù)組稱為字符數(shù)組。字符數(shù)組也可以是二維或

多維數(shù)組,對一個字符數(shù)組,如果不作初始化賦值,則必須說明數(shù)組長

度,還可用printf函數(shù)和scarlf函數(shù)一次性輸出/輸入一個字符數(shù)組中

的字符串,而不必使用循環(huán)語句逐個地輸入/輸出每個字符。通常用一個

字符數(shù)組來存放一個字符串。所以D選項不正確。

\n

21.doubleproc(intm)

\n{

\ninti;

\ndoubles=0.0;//s是表示其和

\nfor(i=1;i<=m;i++)

\ns=s+log(i);〃計算s=ln(l)+ln(2)+ln(3)+…+ln(m)

\nreturnsqrt(s);〃最后將其開平方的值返回到主函數(shù)中

\n}

\n【解析】由題目中所給表達式可知,表達式的值為m項表達式的和然

后開平方??梢允紫韧ㄟ^m次循環(huán)求得m項表達式的和,然后將其和

開平方并返回到主函數(shù)當(dāng)中。

\n

22.\n#include'stdio.h'

\n#defineN3

\nstructstudent

\n{longstu_num;charsex;

\ncharname[15];intscore[4];

\nfloataverage;};

\nmain

\n{intl,j,index;floatsum,max;

\nstructstudentstuarrfN];

\nfor(I=0;I{printf('pleaseinput%dstudentinformation:\\n',I+1);

\nscanf('%ld,%c,%s',&stuarr[I].stu_num,&stuarr[I].sex,stuarr[I].name);

\nfor(j=0;j<4;j++)

\nscanf('%d',&stuarr[I].scorefj]);}

\nfor(I=0;I{sum=0.0;

\nfor(j=0;j<4;j++)

\nsum+=stuarr[I].score[jl;

\nstuarr[I].average=sum/4.0;}

\nmax=stuarr[0].average;

\nindex=0;

\nfor(I=1;Iif(stuarr[I].average>max)

\n{max=stuarr[I].average;

\nindex=I;}

\nprintf(,總平均成績最高的學(xué)生信息是學(xué)號=%ld,性別=%c,姓名=%s,平

均成績

=%4.lf\\n',stuarr[index].stu_num,stuarr[index].sex,stuarr[index].nam

e,stuarr[index].average);

\n}\n

23.

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

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

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

24.\n\tintproc(STREC*a,STREC*b,intLinth)\n

\n

\n\t{\n

\n

\n\tinti,j=0;\n

\n

\n\tfor(i=0;i<M;i++)\n

\n

\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n

\n

\n\t[i].s<=100))//通過if語句,來判斷指定范圍替

\n

\n\t之外的數(shù)巾

\n

\n\tb[j++]=a[i];//放到b數(shù)組中\(zhòng)n

\n

\n\treturnj;//最后把其個數(shù)返回到主函數(shù)中\(zhòng)n

\n

\n\t}\n

\n

\n\t【解析】題目要求把指定范圍之外的數(shù)放到b中,將每一個學(xué)生的

成績與指定的成績相比較,將符合條件的學(xué)生成績放在數(shù)組b中,并

將符合要求的學(xué)生個數(shù)返回給主函數(shù)。\n

25.voidfun(inta,intb,long*c){/*b%10獲取b的個位數(shù),a/10獲取a的

十位數(shù),a%10獲取a的個位數(shù),b/10獲取b的十位數(shù)*/

*c=b/10+(a%10)*10+(b%10)*100+(a/10)*1000;}本題主要考核如何取

出a和b的個位數(shù)和十位數(shù),取出后如何將其表示成c中相應(yīng)的位數(shù)。

由于a和b都是只有兩位的整數(shù),因此分別對它們除以10可得到它們

的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。將得到的數(shù)對

應(yīng)乘以1000、100、10、1,即可得到c的千位數(shù)、百位數(shù)、十位數(shù)、個

位數(shù)。注意使用c時要進行指針運算。

26.1char*fun(char(*a)[81],intnum,char*max)

2{

3inti=0;

4max=a[0];

5for(i=0;i<num;i++)/*找出最長的一個字符串*/

6if(strlen(max)<strlen(a[i]))

7max=afi];

8retummax;/*傳回最長字符串的地址*/

9)

<strlen(a[i]))

解答本題之前,首先應(yīng)該明白ss是數(shù)組名,是指數(shù)組首元素的地址。

max是字符指針變量,可以指向一個字符串。假定max指向數(shù)組中第

1個字符串,它的長度最長。再使用循環(huán)語句遍歷字符串?dāng)?shù)組,使用條

件語句判斷該字符串的長度是否大于max指向的字符串的長度,如大

于,則max指向該字符串。保證max指向的字符串最長,并將其作為

函數(shù)值返回。</strlen(a[i]))

27.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語言的學(xué)習(xí)中知道,只要將小寫字母減去32即轉(zhuǎn)換成

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

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

28.floatfun(intn)

(

inti,sl=0;

floats=0.0;

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

(

sl=sl+i;/*求每一項的分母*/

s=s+1.0/sl;/*求多項式的值*/

)

returns;

)

首先需要根據(jù)題意分析表達式的規(guī)律,得出通項,然后再完成程序語句。

本題中公式的規(guī)律類似于求l+2+...+n的倒數(shù)之和??梢酝ㄟ^for循環(huán)

語句來實現(xiàn)第1項到第n項的變化。先根據(jù)題目要求定義變量,注意

該變量的數(shù)據(jù)類型。然后對其進行初始化操作,因為該變量相當(dāng)于累

加器,所以初值應(yīng)為0(或0.0,根據(jù)變量數(shù)據(jù)類型來確定),再通過for

循環(huán)語句來完成累加過程。

本題中si用來表示每一項的分母,每一項的分母都是由前一項分母加

項數(shù)得到的。注意,由于si定義成一個整型,因此在s=s+1.0/sl語句

中不能把1.0寫成1。

29.voidproc(STRECa[])

{

inti,j;

STRECt;

for(i=l;i++)//用冒泡法來按從高到低排序

fbr(j=O;j<M-l;j++)

if(a[j].s)//按分數(shù)的高低排列學(xué)生的記錄,高分在前

{t=a[j];a[j]=a[j+l];a[j+l]=t;)

)

30.

【解析】要將大于整數(shù)m且緊靠m的k個素數(shù)存入所指的數(shù)組中,首

先應(yīng)該判斷大于整數(shù)m且緊靠m的整數(shù)是否為素數(shù)。將緊靠m且為素

數(shù)的k個整數(shù)放入數(shù)組xx中。

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

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

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

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

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

32.(l)voidfun(char*sint*aint*b)(2)*a=*a+1;(3)*b=*b+1;(l)void

fun(char*s,int*a,int*b)\r\n(2)*a=*a+1;\r\n(3)*b=*b+1;解析:

該程序功能是統(tǒng)計字符串中的大小寫字母的個數(shù)。從已給定源程序的

main主函數(shù)開始入手,調(diào)用函數(shù)“fUn(s,&uper,&lower);”,傳參數(shù)uper,

lower的地址,對字符串s中的字符進行判斷,求得該字符串中大小寫

字母的個數(shù)。

33.(l)doublefun(intm)(2)for(i=100;i<=m;i+=100)(l)doublefun(int

m)(2)for(i=100;i<=m;i+=100)解析:本題中函數(shù)的功能是計算公式

的值。關(guān)于題干公式的求解過程,首先根據(jù)題干中給出的公式推出每一

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

34.(1)錯誤:doublefun(doubleq)正確:doublefun(intq)(2)錯誤:

s=s+(n+l)/n;正確:s=s+(double)(n+l)/n;(3)錯誤:returns;正確:

returnt;(1)錯誤:doublefun(doubleq)正確:doublefun(intq)\r\n(2)錯

誤:s=s+(n+l)/n;正確:s=s+(double)(n+l)/n;\r\n(3)錯誤:returns;正

確:returnt;解析:該程序中多次出現(xiàn)了函數(shù)調(diào)用過程中定義混亂的錯

誤,關(guān)于類似問題,我們在前面的試題中已經(jīng)做過比較詳細的解釋,主

要是對基礎(chǔ)知識的把握。在這里我們再對函數(shù)調(diào)用規(guī)則做一簡單說明。

C語言規(guī)定,在以下幾種情況下可以不在調(diào)用函數(shù)前對被調(diào)用函數(shù)做類

型說明。

⑴如果函數(shù)的值(函數(shù)的返回值)是整型或字符型,可以不必進行說明,

系統(tǒ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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論