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

下載本文檔

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

文檔簡介

2021年山西省運城市全國計算機等級考試

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

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

一、2.填空題(10題)

1.以下程序的輸出結(jié)果是#include<stdio.h>structstiintx;int*y;}*p;

intdt[4]={10,20,30,40);structstaa[4]={50,&dt[0],60,&dt[0],

60,&it[0],60,&dt[0],);main(){p=aa;printf("%d\n",++(p->x));]

2.執(zhí)行下面程序后,輸出結(jié)果是【】。

main()

{chars[12]="verygood!";

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

)

3.在Windows環(huán)境下,可以利用單擊、雙擊、拖動這三種鼠標操作之

一的【】操作實現(xiàn)窗口的移動。

4.用以下語句調(diào)用庫函數(shù)malloc,使字符指針st指向具有H個字節(jié)的

動態(tài)存儲空間,請?zhí)羁?。st=(char*)[];

5.若有以下程序

main()

{chara;

a='H'-'A'+'0';

printf("%c\n",A)

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

6.若a=l,b=2,則表達式!(x=A)H(y=B)&&0的值是____。

7.面向?qū)ο蟮某绦蛟O(shè)計方法中涉及的對象是系統(tǒng)中用來描述客觀事物

的——個O

8.x和y都是double型變量,x的初值為4.0,y的初值為2.0,則表達

式pow(y,fabs(x))的值為。

9.以下程序調(diào)用函數(shù)swap將指針s和t所指單元(a和B)中的內(nèi)容交

換,請?zhí)羁?。main(){inta=10,b=20,*s,*t;s=&a;t=&b;()

printf("%d%d",a,B);}swap(int*ss,int*tt){intte;te=*ss;*ss=*tt;

*tt=te;}

10.當所有結(jié)點的權(quán)值都相等時,用這些結(jié)點構(gòu)造的二叉排序樹是【】。

二、單選題(10題)

11.有以下程序:

#include<stdio.h>

voidmain()

{char*s="\ta\018bc”;

for(;*s!='\0';s++)

printf("*”);

printf("\n”);

}

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

******B*********c************

12.有以下程序段chareh;intk;ch='a';k=12;printf("%c,%d,

",ch,ch,k);printf("k=%d\n",k);已知字符a的ASCII碼值為97,

則執(zhí)行上述程序段后輸出結(jié)果是

A.因變量類型與格式描述符的類型不匹配輸出無定值

B.輸出項與格式描述符個數(shù)不符,輸出為零值或不定值

C.a,97,12k=12

D.a,97,k=12

(24)有以下程序:

/include<stdio.h>

tnain()

{intx;

scanf("%d",&x);

if(x<=0);else

if(x!=5)printf("%d\n",x);

}

程序運行時,輸入的值在哪個范圍才會有輸出結(jié)果().

13.A)不等于5的整數(shù)B)大于()且不等5的整數(shù)

C)大于0或等于5的整數(shù)D)小于5的整數(shù)

14.結(jié)構(gòu)化分析方法是面向()的自頂向下、逐步求精進行需求分析的

方法

A.對象B.數(shù)據(jù)結(jié)構(gòu)C.數(shù)據(jù)流D.目標

15.若變量已正確定義,有下列程序段:

inta=3,b=5,c=7;

if(a>B)a=b;c=a;

if(c!=A)c=b;

printf("%d,%d,%d\n",a,b,C);

其輸出結(jié)果是()。

A.程序段有語法錯B.3,5,3C.3,5,5D.3,5,7

16.下列有關(guān)數(shù)據(jù)庫的描述,正確的是____o

A.數(shù)據(jù)庫是一個DBF文件B.數(shù)據(jù)庫是一個關(guān)系C.數(shù)據(jù)庫是一個結(jié)構(gòu)

化的數(shù)據(jù)集合D.數(shù)據(jù)庫是一組文件

(30)若輸入“abcdef"、“abdef",以下程序的輸出結(jié)果為().

^^include-stdio.h>

#includc<string.h>

main()

{intn;

charsl[20],s2[20],*pl/p2;

scanR”%s”,sl);

scanfl[u%s\s2);

pl=sl;

p2=s2;

n-strcmp(php2);

printf(M%d\nM,n);}

A)-1B)0C)MabcderD)”abdef'

18.有以下程序:#inchide

Main(){lntx=l,y=O;if(!x)y++;elseif(x==O)if(x)y+=2;Elsey+=3;print("%d\n",y);}程序運行后的

輸出結(jié)果是()。A.2B.1C.0D.3

19.算法的時間復(fù)雜度是指

A.算法的執(zhí)行時間B.算法所處理的數(shù)據(jù)量C.算法程序中的語句或指

令條數(shù)D.算法在執(zhí)行過程中所需要的基本運算次數(shù)

20.有以下程序:

#include<stdio.h>

main()

{charb[]="happynewyear”,k;

for(k=0;b[k];k++)

print/%c”,b[k]-'a'+'A');

)

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

A.hAppynewyeArB.HappynewyearC.HAPPYNEWYEAR

D.HaPPYNEWYEaR

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

21.

N名學(xué)生的成績已在主函數(shù)中放入一個帶有頭結(jié)點的鏈表結(jié)構(gòu)中,h指

向鏈表的頭結(jié)點。請編寫函數(shù)fun(),其功能是:找出學(xué)生的最高分,

并由函數(shù)值返回。注意:部分源程序給出如下。請勿改動main。函

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

的若干語句。試題程序:

?seller<*td>o.Ii>

■incItMir<Mdlikh>

,(MtiwN?

Mntet

<

dmiblr■I

?iruci*U?<?ATKII

)?

typedrlAirtirl?lmiSTREl'i

double{unCSTKfl'?h>

STREC*cre*t(double??>

C

STREC?b??p.?QI

iati-Oi

《STREC?)alkx(Mtto“§TRET))?

p—>?"Oi

wMZYN)

〃產(chǎn)牛8個41點的■*.看分At存入9我中

<

QTSTRET?)mallor?MMohSTREO)t

p-q?

J

p->BTM-NULI.I

rrtEhi//ftHttAKHitit

>

wedoudiM<STRE('?b)

<

STREC?p<

pf

prvnd("heed*>?

do(

prwitf<*—>XOf*.pr>?)?

p-R->MXt|

I

〃■出作分立

wiiikCp->??!!-NULL)?

pnati(*\ii\n*>i

>

voidmam()

t

doubks[N]-(B5?100.99.85.91.72.M?87

STREC?hr

h^creeKa)1

<wth?t(h>?

maLfg/hh

22.輸出1900?2000年中所有的閏年。每輸出3個年號換一行。(判斷閏

年的條件為下面二者之一:能被4整除,但不能被100整除?;蛘吣鼙?/p>

400整除。)

23.規(guī)定輸入的字符串中只包含字母和+號。編寫函數(shù)fun,其功能是:除了字符串前導(dǎo)和

尾部的母號外,將其他的*號全部刪除。形參h已指向字符串中第一個字母,形參P指向字

符串中最后一個字母。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。

例如,若字符串中的內(nèi)容為“****A*BC?DEF*G"*,****,刪除后,字符串中的內(nèi)容應(yīng)當是

”…*ABCDEFG*

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

請勿改動主函敷main和算他函級中的任何內(nèi)容.僅在函數(shù)fiin的花括號中填入你編寫的若干語句。

試建程序:

#inrlude<atdio.h>

voi<lfun(char*a,char?h.char*p)

I

)

tnain(),

Ichar481

printf(MEnleraMringAn");

getafs);

whUe(*t)

t++:

J

I?

while(舞=")

l一~;

whi陽*f=1巧

f++;fun(sX0i

printf(,rThestringafterdeleted:』”);

pute(ft);

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

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

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

刪除指定字符后的字符串存放在b所指的數(shù)組中,n中存放指定的下標。

例如,輸入一個字符串“World”,然后輸入3,則調(diào)用該函數(shù)后的結(jié)果

為“Word”。

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

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

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

#defineLEN20

voidfun(chara[],charb[],intn)

(

)

voidmain()

(

charstr1[LEN],str2[LEN];

intn;

system(“CLS”);

printf("Enterthestring:\n");

gets(strl);

printf("Enterthepositionofthestringdeleted:^^);

scanf("%d",&n);fun(strl,str2,n);

printf("Thenewstringis:%s\n^^,str2);

)'一

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

4-...+ln(m))0.5在C語言中可調(diào)用log(n)函數(shù)求In(n)o例如,

若nl的值為30,則proc()函數(shù)值為8.640500。注意:部分源程序

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

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

Uincludrh>

母include<cocuo.h>

9inrludeh>

&include<ZthatK

doublepcoc<tfMm)

vmdfnam<?

dS>g

pnm{(*XAn**proc(30>>i

)

26.程序定義了MxM的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函

數(shù)proc(inta口[M],intn),該函數(shù)的功能是使數(shù)組左下半三角元素中的

值加上n。例如,a數(shù)組中的值為:

1234g

(78910

??II12131415

1117III,20

21t22324ts

著n的值為2?0,”上■序網(wǎng)?■1?中的假力|

3234s

a?s9io

??1314IS14IS

IS19202120

123242526271

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

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

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

試題程序:

StnclutieVtime.Ii>

SincludeVwtdao.h>

3inrludeVcoaio.h>

9inriiide<Ndl,hh>

9S

roidpfoc<mtU][M,?witn>

voidtBAin()

itif”,??Uji

mtarr[S](5■」?2.3?4?5?6?7?,?,.IQ?11J2?I3?

14U$.I€J7?18,2,23.24.2Slg

■yaE?yf》i

pnmf(*????Thearray????\w->?

pniwtf("n"K4d\fie?ci>i

proc(arr?n)i

t>nntf<*????THFRPilJI.T????\n*>■

fort1**0|i〈Mil++)

(or(j?0ij<?M(?)

*%4di

pctotfC*\o")i

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

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

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

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

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

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

試題程序:

UmcludcVvtdxhhS>

UinrltMirVconio.h>

9includeVsldlibub>

sdefineM3

MdefineN4

voidpcoc(imtt[Mj[N'?mippfNj)

vmdmuni>

miI34?S4?84.7t1?

(n.B4.93.III.

IZ8,M.930i

mt|>[N].,.j?lu

prwilf("Theri*inaldata?.\■?九

loH件+)

for(j1O$jV、[j++)

pnntfC*KW*.ttr£iXjJ)e

printfC*\B*)I

proHz,.p)i

pru>tf(*\ftThereAuit

pnnif(*S4d*?K1*1)i

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

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

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

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

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

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

是ACEGO

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

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

29.下列程序判斷字符串s是否對稱,對稱則返回1,否則返回0;如

f("abba")返回1,ffabab")返回0。

30….請編寫函數(shù)。fun能是:判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)

據(jù)的位數(shù)不超過4位),并將結(jié)果通過函數(shù)值返回。例如:若輸入的數(shù)

據(jù)為123,則輸出結(jié)果為:輸入的數(shù)字是3位。注意:部分源程序存在

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

數(shù)fun的花括號中填入所縮寫的若干語句。試題程

?includeOtdio.h>

voidNONOO;

intfun(intn)

main()

{intn,place;

do(

printf(”請輸入一個4位以內(nèi)的正整數(shù):

scanf;

)while(n<0IIn>9999);

place-fun(n);

print--輸入的數(shù)字是位place);

NONO();

)

voidNONO()

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

FIL£?fp,?wf;

inti,n,place;

fp■fopen(Rc:\test\in.dat","r");

wf■fopen("c:\fcestk>ut.datWw");

for(i?0;i<10;i-H.)

(

fscanf(fp,",&n);

place-fun(n);

fprintf(wf/"%d\n"rplace);

)

fclose(fp);

fclose(wf);

序:)

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

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

請在橫線上填上適當?shù)膬?nèi)容并把橫線刪除,使它能得出正確的結(jié)果。

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

試題程序;

main()

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

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

longn;

printf("Enteranumber:\n");

scanf("%ld",&n);

do{

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

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

while(n!=0);

printf("Transmitenewbase:\n");

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

{d=c[i];printf("%c",b);}

printf("\n");

32.下列給定程序中,函數(shù)fun()的功能是:依次取出字符串中所有的數(shù)

字字符,形成新的字符串,并取代原字符串。

請改正函數(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++)

if(s[i]>='0'&&s[i]<='9')

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

s[j]=s[i];

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

S[j]="\0";

main()

{charitem[80];

clrscr();

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

printf("\n\nThestringis:\%s\n",item);

fun(item);

printf("\n\nThestringofchangingis:

\%s\n",item);

33.給定程序M0D11C中函數(shù)fun的功能是輸出M行M列整數(shù)方陣,

然后求兩條對角線上各元素之和,返回此和數(shù)。

#inClude<coMo.h>

#inClude<stdio.h>

#dehneM5

/************fOUnd************/

intfun(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++)

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

printf("%f,xx[i][j]);

printf("\n");

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

sum+=xx[i][i]+XX[i][[n-i-1];

return(sum);

main()

{intaa[M][M]={{1,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("\nThesumOfallelementsOn2diagnalsis%d."fun(M,aa));

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

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

aboot,則應(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'0':{i=3;break;}

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

)

if(i>=0)

num[i]++;

}

)

main()

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

clrscr();

printf("\nPleaseenterastring:");

gets(si);

fun{sl,numl);

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

printf("\n");

)

35.下列給定程序中,函數(shù)fun()的功能是:利用插入排序法對字符串中

的字符按從大到小的順序進行排序。插入法的基本方法是:先對字符串

中的頭兩個元素進行排序,然后把第3個字符插入到前兩個字符中,插

入后前3個字符依然有序;再把第4個字符插入到前3個字符中,待排

序的字符串已在主函數(shù)中賦予。

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

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

試題程序:

#include<string.h>

#include<stdio.h>

#defineN80

voidinsert(char*aa)

inti,j,n;charch;

n=strlen(aa);

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

ch=aa[i];

j=i-l;

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

while((j>=0)||(ch>aa[j]))

aa[j+l]=aa[j];

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

aa[j]=ch;

main()

chara[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";

inti;

printf("Theoriginalstring:%S\n",a);

insert(a);

printf("Thestringaftersorting:%S\n\n",a);

36.下列給定程序中,函數(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);

)

37.下列給定程序中,函數(shù)fun()的功能是:實現(xiàn)兩個整數(shù)的交換。例如

給a和b分別輸入60和65,輸出為:a=65b=60

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

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

試題程序;

#include<stdio.h>

#include<conio.h>

voidfun(inta,b)

{intt;

/*************found***********,

t=b;b=a;a=t;

}

main()

{inta,b;

clrscr();

printf("Entera,b:");scanf("%d%d",

&a,&b);

fun(&a,&b);

printf("a=%db=%d\n",a,b);

38.下列給定程序中,函數(shù)fun()的功能是:用遞歸算法計算斐波拉契級

數(shù)列中第n項的值。從第一項起,斐波'拉契級數(shù)序列為1,1,2,3,

5,8,13,21...........例如,若給n輸入7,

該項的斐波拉契級數(shù)值為13。

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

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

試題程序:

#include<stdio.h>

longfun(intg)

switch(g);

{case0:return0;

switch(g)

case1;case2:retum1;

return(fun(g-l)+fun(g-2));

main()

longfib;intn;

printf("Inputn:");scanf("%d",&n);

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

fib=fun(n);

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

}

39.給定程序M0D11.C中函數(shù)fun的功能是:首先將大寫字母轉(zhuǎn)換為

對應(yīng)小寫字母;若小寫字母為a?u,則將其轉(zhuǎn)換為其后的第5個字母;

若小寫字母為v?z,使其值減21o轉(zhuǎn)換后的小寫字母作為函數(shù)值返回。

例如,若形參是字母A,則轉(zhuǎn)換為小寫字母f若形參是字母W,則轉(zhuǎn)換

為小寫字母b。

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

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

1*include<stdio.h>

2*include<ctype.h>

3charfun(charc)

4(if(o-^1&&c<-Z)

5/found………….

6JC+32;

7if(c>-fa'&&c<?*uf)

8*************found*************

9c-c-5;

10elseif(c>-'v,z?)

11c?c-21;

12returnc;

13

14main()

15{charcl,c2;

16printf(H\nEnteraletter(A-Z):

;cl-getchar();

17if(isupper(cl))

18(c2?fun(cl);

19printf(w\n\nTheletter\,%c\1

changetocl,c2);

20;

21Jelseprintf(R\nEnter(A-Z)!\nw);

22!

40.給定程序M0D11.C中函數(shù)fun的功能是:找出100至n(不大于

1000)之間三位數(shù)字相等的所有整數(shù),把這些整數(shù)放在s所指數(shù)組中,個

數(shù)作為函數(shù)值返回。

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

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

1;tinclude<stdio.h>

2!IdefineN100

3intfun(int*s,intn)

4{int

5j?0;

6for(i?100;i<n;i++){

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

8k?n;

9a-k%10;k/-10;

10b?k%10;k/-10;

11/found?

12c-k%10

13if(a—b&&a?-c)s[

14}

15returnj;

16}

17main()

18{inta[N],n,num-0ri;

19do

20{printf(w\nEntern(<*1000):

www

);scanf(%dr&n);}

21while(n>1000);

22num-fun(a,n);

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

nw

24for(i?0;i<num;i++)printf(%5dr

a[i));

25printf(w\n\nw);

26

五、程序改錯題(2題)

41.

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

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

輸出該數(shù)列前n項的平方根之和sum。n的值通過形參傳入。例如,當

n=ll時,程序的輸出結(jié)果應(yīng)為32.197745o請修改程序中的錯誤,使

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

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

Biiwlud*VsidLIx.h>

Rmrlu<i<Vcocis.h>

3KficlwirV、tdx>?

9includeVmath.b>

//????loufid????

proc(ini*>

doublexiE??0?<|?N??1iniki

*um01.Oi

ifwm-O.O.

w0w0,Oi,1?。?0|R,L。.

fotC-LhV)

??fO++Ni

num+.M)Ft(■)?

>0?。1i*l—W2I*2**I

//????(oumi????

rtiuni?um

voidrauiiti()

ratnt

?y?tem("CLS*>?

print!<*InputN-*)?

!?*,《?%d*?&■)!

fkfimfcetprorCa))<

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>

//****found****

intproc(charstr[])

(

charc;

unsignedi,j;

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

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

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

(

c=str[j]:

//****found****

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

str[i]=c;

)

}

voidmain

(

charstr[81];

system("CLS");

printf("\nPleaseenteracharacter

string:");

gets(str);

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

proc(str);

printf("\nAftersortingdecendingly:\n

%s",str);

)

六、操作題(2題)

43.有以下程序:

intfa(intx){returnx*x;}

intfb(intx){retumx*x*x;}

intf(int(*fl)(),int(*&)(),(intx)

{returnf2(x)-fl(x);}

main()

{inti;i=f(fa,fb,2);printf("%d\n",i);)

程序運行后,輸出結(jié)果是【】。

44.請補充函數(shù)fun(),該函數(shù)的功能是:把一個字符串中的字符(字母)

按從小到大排序,并把這個全部由字母組成的字符串保存在原串中,函

數(shù)返回這個字符串的長度。例如;輸入“cixbr2.3",如果為bcirx,字符串

長度為5。

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

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

上填入所編寫的若干表達式或語句。

#include<stdio.h>

#defineN20

intfun(char*str)

inti=0,j=0,k=-0,m=0;

chart;

char*p=str;

while(*p)

(

if((*p>='A'&&*p<=Z)||(*p>='a'

&&*p<='z'))

[1

P++;

)

*(str+i)='\O';

[];

wh{ile(*(p+j))

k=j;

while(*(p+k))

(

if(*(p+k)<*(str+m)

(

t=*(str+m);

*(str+m)=*(p+k);

*(p+k)=t;

)

k++;

)

j++;

)

returni;}

main()

(

charstr[81];

ihtn;

clrscr();

printf("Inputtheoriginalstring");

gets(str);

printf("***TheOriginalstring***In");

puts(str);

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

n=fun(str);

puts(str);

printf("***Thelengthofnewstringis:

%d***\n",n);"」

參考答案

l.C

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

最后的'\\01)。

3.拖動拖動

4.malloc(ll)

malloc函數(shù)的格式是void*(或char*)malloc(size),size表示應(yīng)分配的存

儲區(qū),此題要分配11字節(jié)的單元,把11代入即可。

5.77解析:字符型數(shù)據(jù)可作為整型參加算術(shù)運算,其值為其對應(yīng)的

ASCII碼。'H'-'A',的結(jié)果是7,加O后是7的ASCII碼,所以輸出的是

字符7。

6.00解析:根據(jù)運算符的運算順序可知,該表達式最后運算的是與(&&)

運算,而任何表達式與“0”進行“與”運算,結(jié)果都為0。

7.實體實體

8.1616解析:函數(shù)運算不改變數(shù)據(jù)類型,所以結(jié)果也是double型,fabs(x)

是對x取絕對值,pow(y,fabs(x))是y的labs(x)次塞,即2.04。

0=16.000000(注意;結(jié)果為double型)。

9.swap(st);swap(s,t);解析:本題要在主函數(shù)中調(diào)用swap函數(shù)交換

a、b的值,實現(xiàn)數(shù)據(jù)交換需要進行地址傳遞,所以函數(shù)的形參都應(yīng)該是

需要交換的數(shù)據(jù)的地址,程序中通過“s=&a;t=&b;”將指針變量s和t

指向變量a、b的地址,因此,引用時直接引用指針變量s和t即可。

10.右子樹(單支樹)右子樹(單支樹)解析:二叉排序樹對于任意新結(jié)點,

若大于等于根結(jié)點,則在右子樹上建立。

11.Amain函數(shù)中定義一個字符指針s,指向字符串“\\ta\\018bc"。for循

環(huán)遍歷s指向的字符串中的字符,然后輸出根據(jù)題意可以理解為:s指

向的字符串中有多少個字符,就輸出多少個s指向的字符串中字符分別

是\\t(轉(zhuǎn)義字符)、a、\\01(轉(zhuǎn)義字符)、8、b、c,總共6個。其中因為

8不屬于八進制中的數(shù)字,所以“\\018”不是一個轉(zhuǎn)義字符,而“\\01”是轉(zhuǎn)

義字符。故本題答案為A選項。

12.D解析:輸出格式控制符%<:表示將變量以字符的形式輸出;輸出格

式控制符%<1表示將變量以帶符號的十進制整型數(shù)輸出,所以第一個輸

出語句輸出的結(jié)果為a,97;第二個輸出語句輸出的結(jié)果為k=12o

13.B

14.C

Co【解析】結(jié)構(gòu)化分析方法是面向數(shù)據(jù)流進行需求分析的方法,采用

自頂向下、逐層分解,建立系統(tǒng)的處理流程,以數(shù)據(jù)流圖和數(shù)據(jù)字典

為主要工具,建立系統(tǒng)的邏輯模型。

15.B

解析:本題考查的是程序結(jié)構(gòu)設(shè)計中if語句的應(yīng)用,當if判斷條件成

立時就執(zhí)行其后的相關(guān)語句,否則不執(zhí)行,本題中第一個if條件不成

立,故不執(zhí)行“a=b”,接著執(zhí)行“c=a”,此時第二個if條件也不成立,

故不執(zhí)行其后語句,最終c的值為3。

16.C解析:數(shù)據(jù)庫(Database,簡稱DB)是數(shù)據(jù)的集合,它具有統(tǒng)一的

結(jié)構(gòu)形式并存放于統(tǒng)一的存儲介質(zhì)內(nèi),是多種應(yīng)用數(shù)據(jù)的集成,并可被

各個應(yīng)用程序所共享。數(shù)據(jù)庫中的數(shù)據(jù)具有“集成”、“共事”之特點。

17.A

18.C

在ifelse語句中else,總是與離它最近的配對。本題目中x勸1所以!x

為0,所以執(zhí)行else酷句中的內(nèi)容,判斷(x==0)是否成立,因為x

為1所以條件不成立,所以else部分的近.else語句不再執(zhí)行,所以y

的值還是初始值0。

19.D

Do【解析】算法的時間復(fù)雜度是指算法需要消耗的時間資源。一般來

說,計算機算法是問題規(guī)模。09函數(shù)fin),算法的時間復(fù)雜度也因此

記做T(n)=O(f(n))。因此,問題的規(guī)模n越大,算法執(zhí)行的時間的增長

率與f(n)的增長率正相關(guān),稱作漸進時間復(fù)雜度(AsymptoticTime

Complexity)o簡單來說就是算法在執(zhí)行過程中所需要的基本運算次

數(shù)。

20.C程序定義一個字符數(shù)組b,并使用字符串“happynewyeai”進行初始

化。然后通過for循環(huán),遍歷字符數(shù)組b中的每個字符,再將b中的字

符元素修改為大寫字母。程序輸出:HAPPYNEWYEAR。故本題答案為

C選項。

21.

【解析】本題考查的是結(jié)構(gòu)體類型、指針型變量、鏈表和if語句等知識

點。需要用for循環(huán)遍歷鏈表中的每一個結(jié)點,用判斷語句比較結(jié)點數(shù)

據(jù)域的大小??梢酝ㄟ^while循環(huán)實現(xiàn)對最大成績的查找,具體步驟為

遍歷鏈表遇到比max大的值(max<h->s)則賦值給max,max=h->so需要

注意的是,h是指向結(jié)構(gòu)體類型的指針變量,引用它指向的結(jié)構(gòu)體的成

員時,要用指向運算符“一>”。

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

\nmain

\n{intl,n;

\nfor(n=0,I=1900;I<=2000;I++)

\n{if(I%4==0I0!=0||I@0==0)

\n{printf("%d”,I);n++;}

\nif(n%3==0)

\nprintf("\\n");}}}

\n

23.

I答案】

voidfnn((;har*a,char*h,char*p)

fiiHi-0;

char*q=a;

wlnlc(q<h)

(

a「匕*q;Q++;i++;

)

while(q<p)(

(

加上*q;i++;

),

q++;

I

while(*q)

(*

MiK*q;i+.中+;

}

a[i]=W;

}

【解析】

h和p分別指向第一個和最后?個字母,先將前導(dǎo),號進行保存.再保存中間的非*號字符.然后保存

尾*號,加上結(jié)束標識符-

24.voidfun(chara[],charb[],intn)

(

inti,k=0;

for(i=0;a[i]!='\0,;i++)

if(i!=n)/*將不是指定下標的字符存入數(shù)組b中*/

b[k++]=a[i];

b[k]=,\(r;/*在字符串最后加上字符串結(jié)束標志*/

本題要求刪除字符串中指定下標的字符,即把非指定下標的字符保留。

所以if語句條件表達式為“i!=n"。字符串最后不要忘記加上字符串結(jié)

束標志

25.

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

開平方。可以首先通過m次循環(huán)求得m項表達式的和,然后將其和開

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

26.

【解析】使數(shù)組左下半三角元素中的值加上n,首先要找出數(shù)組中下半

三角元素。數(shù)組中下半三角元素的特點是,其列下標小于等于行下

標。根據(jù)這個特點找出所有的下半三角元素再加上n放在原來的位置

上。

27.

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

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

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

中。

28.voidproc(char*strochart[3])

\n(

\ninti,j=0;

\nfor(i=0;str[i]!=\\0;i++)〃從數(shù)組的第一個元素開始,到其最后一個

\n{if(i%2==0str[i]%2l=o)〃下標為偶數(shù)、同時ASCII碼值為奇數(shù)的字符

\nt[j++]=str[i];}//如果成立,則把它放到t數(shù)組中

\nt[i]=\\o;〃字符串結(jié)束標志為\\0

\n}

\n【解析】題目中要求將字符串str中下標為偶數(shù),同時ASCII碼值為奇

數(shù)的字符放在數(shù)組t中。首先,需要檢查字符串str中下標為偶數(shù)的字符

其ASCII碼值是否為奇數(shù),將符合要求的字符放在數(shù)組t中。最后,為

新的字符串數(shù)組添加結(jié)束符。

\n

29.

intf(char)

{inti=0,j=0;

while(s[j])(j++;);

for(j—;i<j&&s[i]=s[j];i++,j—);

return(i-j)

}

30.

int修時史量統(tǒng)計位歙

while(n/10)0,若不為O.bits>>1.4

*n*以10.it修狗斯

(

bitsx;

n-n/10;

returnbits;【考點分析】主要考察考生對循環(huán)

跳出的條件的理解,以及理解取數(shù)字位數(shù)的方法?!窘忸}思路】通過

對指定的多位數(shù)每次除以10,去掉最后一位,直到為。結(jié)束,使用臨時

變量來統(tǒng)計一個多位數(shù)的位數(shù)。

31.(1)錯誤:缺少語句正確:應(yīng)填入n%base或%16(2)錯誤:缺少語句

正確:應(yīng)填入[d]⑴錯誤:缺少語句正確:應(yīng)填入n%base或%16"\11(2)

錯誤:缺少語句正確:應(yīng)填入⑷解析:在該程序中,字符數(shù)組b存儲

十六進制的16個數(shù)字符,整型數(shù)組c存儲譯出的十六進制數(shù)的各位數(shù)

值。從整數(shù)n譯出它的各位十六進制數(shù)值,需采用除16取余的方法,

即求n除16的余,得到它的十六進制的個位數(shù),接著將n除以16。在

n不等于0的情況下循環(huán),能順序求出n的十六進制的個位數(shù)、十位數(shù)、

百位數(shù)等。程序中變量base已預(yù)置16,所以在第1個空框處可填代碼

n%base或n%16。當n的十六進制數(shù)的個位、十位、百位等依次存放于

數(shù)組c中后,就從最高位至最低位,參照數(shù)組c[i]的內(nèi)容d(以其內(nèi)容為

下標),取十六進制數(shù)字符表中的字符b[d]輸出。所以在第2個空框處可

填入代碼⑷。

32.(1)錯誤;s|j]=s[i];正確:s[j++]=s[i];(2)錯誤:s[j]="\O";正確:

s[j]='\O';⑴錯誤;s[j]=s[i];正確:s[j++]=s[i];\r\n(2)錯誤:s[j]='\\O';

正確:s[j]=\'\\O\';解析:有循環(huán)條件if(s[i]>=\'0\'&&s[i]<=V9V)以及

題目要求“依次取出字符串中所有的數(shù)字字符”可知,S[j]=s[i];表述錯誤。

sU]='\\O';中是一個常識性語法錯誤,學(xué)習(xí)者只要在平時訓(xùn)練的時候注意

一下就可以了。

33.intfun(intnintxx[][])改為intfun(intnintxx[][M))printf("%fxx[i][j]);

改為printf("%d"xx[i][j]);intfun(intn,intxx[][])改為intfun(intn,int

xx[][M))\r\nprintf('%f,xx[i][j]);改為printf('%d,'xx[i][j]);解析:二

維數(shù)組作為函數(shù)形參時,二維長度不可缺省,只能省略一維的長度。在

格式輸出函數(shù)中,血型數(shù)據(jù)輸出時對應(yīng)的控制符是%d.

34.(1)錯誤:fun(char*sintnum[5])正確:voidfun(char*sinthum[5])(2)

錯誤:num[i]=0;正確:num[k]=0;(3)錯誤:switch(s)正確:switch(*s)(l)

錯誤:fun(char*s,intnum[5])正確:voidfun(char*s,inthum[5])\r\n(2)錯

誤:num[i]=0;正確:num[k]=0;\r\n(3)錯誤:switch(s)正確:switches)解

析:switch語句說明:

(l)switch后的表達式,可以是整型或字符型,也可以是枚舉類型的。在

新的ANSIC標準中允許表達式的類型為任何類型。

⑵每個case后的常量表達式只能是常量組成的表達式,當switch后的

表達式的值與某一個常量表達式的值一致時,程序就轉(zhuǎn)到此case后的

語句開始執(zhí)行。如果沒有一個常量表達式的值與s

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論