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

下載本文檔

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

文檔簡介

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

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

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

一、2.填空題(10題)

1.以下程序的輸出結果是#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í)行下面程序后,輸出結果是【】。

main()

{chars[12]="verygood!";

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

)

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

一的【】操作實現窗口的移動。

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

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

5.若有以下程序

main()

{chara;

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

printf("%c\n",A)

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

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

7.面向對象的程序設計方法中涉及的對象是系統中用來描述客觀事物

的——個O

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

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

9.以下程序調用函數swap將指針s和t所指單元(a和B)中的內容交

換,請?zhí)羁铡ain(){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.當所有結點的權值都相等時,用這些結點構造的二叉排序樹是【】。

二、單選題(10題)

11.有以下程序:

#include<stdio.h>

voidmain()

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

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

printf("*”);

printf("\n”);

}

程序運行后的輸出結果是()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í)行上述程序段后輸出結果是

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

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

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

}

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

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

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

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

方法

A.對象B.數據結構C.數據流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);

其輸出結果是()。

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

16.下列有關數據庫的描述,正確的是____o

A.數據庫是一個DBF文件B.數據庫是一個關系C.數據庫是一個結構

化的數據集合D.數據庫是一組文件

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

^^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);}程序運行后的

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

19.算法的時間復雜度是指

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

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

20.有以下程序:

#include<stdio.h>

main()

{charb[]="happynewyear”,k;

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

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

)

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

A.hAppynewyeArB.HappynewyearC.HAPPYNEWYEAR

D.HaPPYNEWYEaR

三、程序設計題(10題)

21.

N名學生的成績已在主函數中放入一個帶有頭結點的鏈表結構中,h指

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

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

數和其他函數中的任何內容,僅在函數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)

〃產牛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ī)定輸入的字符串中只包含字母和+號。編寫函數fun,其功能是:除了字符串前導和

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

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

例如,若字符串中的內容為“****A*BC?DEF*G"*,****,刪除后,字符串中的內容應當是

”…*ABCDEFG*

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

請勿改動主函敷main和算他函級中的任何內容.僅在函數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。在此程序中,編寫函數fun(),

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

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

例如,輸入一個字符串“World”,然后輸入3,則調用該函數后的結果

為“Word”。

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

請勿改動主函數main()和其他函數中的任何內容,僅在函數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.請編寫函數proc(),它的功能是計算:s=(In(1)4-ln(2)+In(3)

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

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

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

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

Uincludrh>

母include<cocuo.h>

9inrludeh>

&include<ZthatK

doublepcoc<tfMm)

vmdfnam<?

dS>g

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

)

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

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

值加上n。例如,a數組中的值為:

1234g

(78910

??II12131415

1117III,20

21t22324ts

著n的值為2?0,”上■序網?■1?中的假力|

3234s

a?s9io

??1314IS14IS

IS19202120

123242526271

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

請勿改動main()函數和其他函數中的任何內容,僅在函數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.請編一個函數voidproc(inttt[M][N],intpp[N]),tt指向一個M行N

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

一維數組中。二維數組中的數已在主函數中給出。

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

請勿改動main。函數和其他函數中的任何內容,僅在函數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.請編寫函數proc,其功能是:將str所指字符串中除下標為偶數、同

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

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

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

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

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

是ACEGO

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

請勿改動main函數和其他函數中的任何內容,僅在函數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….請編寫函數。fun能是:判斷形參n中的正整數是幾位數(輸入數

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

據為123,則輸出結果為:輸入的數字是3位。注意:部分源程序存在

PROG1.C中,請勿改動主函數main和其他函數中的任何內容,僅在函

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

?includeOtdio.h>

voidNONOO;

intfun(intn)

main()

{intn,place;

do(

printf(”請輸入一個4位以內的正整數:

scanf;

)while(n<0IIn>9999);

place-fun(n);

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

NONO();

)

voidNONO()

</?本函數用于打開文件,輸入數據,調用雨數,輸出數據,關閉文件.

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.以下程序可把輸入的十進制數以十六進制數的形式輸出。

請在橫線上填上適當的內容并把橫線刪除,使它能得出正確的結果。

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

試題程序;

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.下列給定程序中,函數fun()的功能是:依次取出字符串中所有的數

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

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

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

試題程序:

#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中函數fun的功能是輸出M行M列整數方陣,

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

#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.下列給定函數中,函數fun()的功能是:統計字符串中各元音字母(即

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

aboot,則應輸出是10220。

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

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

試題程序:

#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.下列給定程序中,函數fun()的功能是:利用插入排序法對字符串中

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

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

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

序的字符串已在主函數中賦予。

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

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

試題程序:

#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.下列給定程序中,函數fun()的功能是:刪除字符串s中所有空白字

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

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

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

試題程序:

#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.下列給定程序中,函數fun()的功能是:實現兩個整數的交換。例如

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

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

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

試題程序;

#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.下列給定程序中,函數fun()的功能是:用遞歸算法計算斐波拉契級

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

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

該項的斐波拉契級數值為13。

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

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

試題程序:

#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中函數fun的功能是:首先將大寫字母轉換為

對應小寫字母;若小寫字母為a?u,則將其轉換為其后的第5個字母;

若小寫字母為v?z,使其值減21o轉換后的小寫字母作為函數值返回。

例如,若形參是字母A,則轉換為小寫字母f若形參是字母W,則轉換

為小寫字母b。

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

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

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中函數fun的功能是:找出100至n(不大于

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

數作為函數值返回。

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

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

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.

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

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

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

n=ll時,程序的輸出結果應為32.197745o請修改程序中的錯誤,使

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

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

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.下列給定程序中,函數proc的功能是:讀入一個字符串(長度

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

例如,輸入opdye,則應輸出deopy。

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

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

構。

試題程序:

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

程序運行后,輸出結果是【】。

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

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

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

長度為5。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數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)函數的返回值為字符串s包含的字符個數(不計

最后的'\\01)。

3.拖動拖動

4.malloc(ll)

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

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

5.77解析:字符型數據可作為整型參加算術運算,其值為其對應的

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

字符7。

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

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

7.實體實體

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

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

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

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

a、b的值,實現數據交換需要進行地址傳遞,所以函數的形參都應該是

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

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

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

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

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

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

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

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

8不屬于八進制中的數字,所以“\\018”不是一個轉義字符,而“\\01”是轉

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

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

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

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

13.B

14.C

Co【解析】結構化分析方法是面向數據流進行需求分析的方法,采用

自頂向下、逐層分解,建立系統的處理流程,以數據流圖和數據字典

為主要工具,建立系統的邏輯模型。

15.B

解析:本題考查的是程序結構設計中if語句的應用,當if判斷條件成

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

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

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

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

結構形式并存放于統一的存儲介質內,是多種應用數據的集成,并可被

各個應用程序所共享。數據庫中的數據具有“集成”、“共事”之特點。

17.A

18.C

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

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

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

的值還是初始值0。

19.D

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

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

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

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

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

數。

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

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

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

C選項。

21.

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

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

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

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

注意的是,h是指向結構體類型的指針變量,引用它指向的結構體的成

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

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分別指向第一個和最后?個字母,先將前導,號進行保存.再保存中間的非*號字符.然后保存

尾*號,加上結束標識符-

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

(

inti,k=0;

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

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

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

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

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

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

束標志

25.

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

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

平方并返回到主函數當中。

26.

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

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

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

上。

27.

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

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

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

中。

28.voidproc(char*strochart[3])

\n(

\ninti,j=0;

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

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

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

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

\n}

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

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

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

新的字符串數組添加結束符。

\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修時史量統計位歙

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

*n*以10.it修狗斯

(

bitsx;

n-n/10;

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

跳出的條件的理解,以及理解取數字位數的方法。【解題思路】通過

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

變量來統計一個多位數的位數。

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

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

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

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

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

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

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

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

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

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

下標),取十六進制數字符表中的字符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)以及

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

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

一下就可以了。

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]);解析:二

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

格式輸出函數中,血型數據輸出時對應的控制符是%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后的

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

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

溫馨提示

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

評論

0/150

提交評論