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

下載本文檔

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

文檔簡介

2023年廣東省深圳市全國計算機等級考試

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

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

一、2.填空題(10題)

1.

在進行模塊測試時,要為每個被測試的模塊另外設計兩類模塊:驅動

模塊和承接碟塊,其中的作用是將測試數據傳送給被測試的模

塊,并顯示被測試模塊所產生的結果。

2.下面程序的功能是將一個字符串str的內容顛倒過來,請?zhí)羁铡?/p>

#include<string.h>

main()

{intij,【];charstr[]={"1234567");

for(i=0,j=strlen(str)[];i<j;i++,j-)

{k=str[i];str[i]=str[j];str[j]=k;}

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

3.設有下列程序:

#include<stdio.h>

#include<string.h>

main()

{inti;

chars[10],t[10];

gets(t);

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

{gets(s);

if(strcmp(t,s)<O)strcpy(t,s);

)

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

)

程序運行后,從鍵盤上輸入(<CR>代表回車符):CDEF<CR>BADEF

<CR>QTHRG<CR>,則程序的輸出結果是。

4.設有下列的程序段:

charstr[]="Hello";

char*ptr;

ptr=-str;

執(zhí)行上面的程序段后,*(ptr+5)的值為o

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

charch='B';

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

6.已知a=l,b=2,則表達式(a&B)&b||b的結果為()。

7.沒有char,a,b;,若要通過a&d運算屏蔽掉a中的其他位,只保留第2

位和第8位(右起為第1位),則b的二進制是【】。

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

structNODE

{intk;

structNODE*link;

);

main()

{structNODEm[5],*p=m,*q=m+4;

inti=0;

while(p!=q){

p->k=++i;p++;

q->k=i++;q—;

)

q->k=i;

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

printf("\n");

)

9.以下程序的輸出結果是【】。

voidfun()

{staticinta;

a+=2;

printf("%d",A);

)

main()

{intcc;

for(cc=1;cc<=4;cc++)fun();

printf("\n");

10.以下sstrcpyO函數實現字符串復制,即將t所指字符串復制到s所指

向內存空間中,形成一個新的字符串s。請?zhí)羁铡?/p>

voidsstrcpy(char*s,char*t)

{while(*s++=);}

main()

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

sstrcpy(strl,str2);

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

二、單選題(10題)

11.下面描述中,不屬于軟件危機表現的是()

A.軟件過程不規(guī)范B.軟件開發(fā)生產率低C.軟件質量難以控制D.軟件

成本不斷提高

12.以下敘述中正確的是o

A.用C程序實現的算法必須要有輸入和輸出操作

B.用C程序實現的算法可以沒有輸出但必須要輸入

C.用C程序實現的算法可以沒有輸入但必須要有輸出

D.用C程序實現的算法可以既沒有輸入也沒有輸出

13.

(13)數字字符0的ASCII值為48,運行下列程序的輸出結果是().

main()

{chara=T,b=2;

primR"%c,1bH);

printK"%d\n",b-a);

)

A)3,2B)50,2C)2,2D)2,50

14.已知字母A的ASCII碼為十進制的65,下面程序main(){char

chl,ch2;chl='A'+'5'-'3';ch2='A'+'6'-'3';printf("%d,%c\n",chl,ch2);}

的輸出是_________o

A.67,DB.B,CC.C,DD.不確定的值

15.在黑盒測試方法中,設計測試用例的主要根據是

A.程序外部功能B.程序內部邏輯C.程序數據結構D.程序流程圖

16.

(31)以下有關宏的描述不正確的是().

A)宏定義不做語法檢查B)雙引號中出現的宏名不進行替換

C)宏名無類型D)宏名必須用大寫字母表示

17.一個棧的初始狀態(tài)為空。現將元素1、2、3、4、5、A、B、C、

D、E依次入棧,然后再依次出棧,則元素出棱的順序是()。

A.A.12345ABCDEB.EDCBA54321C.ABCDE12345D,54321EDCBA

18.以下程序的輸出結果是____o#include<stdio.h>main(){int

a=200;#definea100printf("%d",a);#undefaprintf("%d",a);}

A.200100B.100100C.100200D,200200

19.下面判斷正確的是

A.char*a="china";等價于char*a;*a="china";

B.charstr[5]={"china");等價于charstr[]={"china”};

C.char*s="china";等價于char*s;s="china";

D.charc[4]="abc",d[4]="abc";等價于charc[4]=d[4]="abc";

20.程序中若有如下說明和定義語句

charfun(char*);

main()

(

char*s="one",a[5]={0},(*fl)()=fun,ch;

以下選項中對函數Fun的正確調用語句是o

A.(*fl)(a);B.*fl(*s);C.fun(&a);D.ch=*fl(s);

三、程序設計題(10題)

21.規(guī)定輸入的字符串中只包含字母和*號。編寫函數fun,其功能是:

刪除字符串中所有的*號。編寫函數時,不得使用C語言提供的字符串

函數。

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

中的內容應當是“ABCDEFG”。

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

請勿改動maini)函數和其他函數中的任何內容,僅在函數fun的花括號

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(chara)

(

voidmain

(

chars[81];

print{("Enterastring:\n");

gets(s):

fun(S);

printf("Thestringafterdeleted:\n");

puts(s);

)

22.請編寫一個函數,用來刪除字符串中的所有空格。例如,輸入

abcdefgh,則輸出為abcdefgho注意:部分源程序給出如下。請勿改

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

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

UVwtdtO.

3mrtudr<ctypc.

『snclixivVenicKh>

=r/irludrVwdhb.h;*

“”dprocXrhaf?z八

voidm*in4)

Huiratrftlji

?yutemC*CLS*)a

w

pritiifflnpyiA?tnngs?

fMitVxr》i

proc<ur)i

prifitf(*????lriXNn'.wr),

23.編寫函數fun,其功能是:根據以下公式求冗的值(要求精度0.0005,

即某項小于0.0005時停止迭代)。

n.I1x21x2x3Ix2x3x4Ix2x???xn

233x53x5x73x5x7x93x5x???x(2n+I)

程序運行后,若輸入精度

0.0005,則程序應輸出為3.14...

注意:部分源程序在文件PROG1.C中。

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括

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

Mittcludt*<sldi<?.h>

Mincludr<math,h>

doublefun(doublecps)

main()

dauhlex;voidNONO();

jirinlf("Input,件:;

^canf(*%IP,&x);printf(M\nepj?=%If.PI=%I八n".x,fun(x));

NONO();

voidNONO()

1/?本函數用『打開文件.輸入數據,調用函數出數據,關冏文件;?

FILE?fp.?wf;

inii;

diMiblcx;

fp=fopcn("in.dal*rw);

wfsfopcn(°out.daf*,**w*)?

!br(i=0;i<10;i^>)|

fncanfffp."%獷.&x);

fprintf(wf."%lf\n*.fun(x));

friose(fp);

fc|d6e(wfk;

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

案的項目中包含一個源程序文件progl.c。在此程序中,定義了NxN的

二維數組,并在主函數中賦值。請編寫函數fun(),其功能是求出數組

周邊元素的平均值并將其作為函數值返回給主函數中的s。例如,若a

數組中的值為

01279

19745

23831

45682

59141

則返回主程序后s的值應為3.375o

注意:部分源程序在文件progl.c中。

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

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

試題程序:

1#include<stdio.h>

2#include<conio.h>

3#include<stdlib.h>

4#defineN5

5doublefun(intw[][n])

6{

7

8}

9voidmain()

10{

11FILE*wf;

12inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,

13inti,j;

14doubles;

15system("CLS");

16printf("***Thearray***\n");

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

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

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

20printf("\n");

21}

22s=fun(a);

23printf("***TheResult***\n");

24printf("Thesumis:%lf\n",s);

25/******************/

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

27fprintf(wf,"%if',s);

28fclose(wf);

29/******************/

30}

25.m個人的成績存放在score數組中,請編寫函數proc(),它的功

能是:將高于平均分的人數作為函數值返回,將高于平均分的分數放

在up所指的數組中。例如,當score數組中的數據為100,80,76,

60,59,48,43,35,59時,函數返回的人數應該是4,up中的數據

應為100,80,76,95o注意:部分源程序給出如下。請勿改動

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

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

9include<COOKX.

SinHi>de<>tdao?

=indudcVNcn<.Ii>

impcocCiiM?cort{2?intm?int

〃?同高干不均分立人tt

vowaurniC)

iati?n?up(9j.

ini?core(9)—《IOO.8O.76.6O.59.

4S*43*3S?9S11

*01^*)t

proc(score*9.up)i

\niothe*Averagewcorrsfr:?ti)>

ioc(i?0N<ii.i++)

prmd??%d"?I<

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

ASCH碼值也為奇數自q字符之外。

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

組中。

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

碼值為奇數,但所在元素的

下標為偶數,因此需要刪除;而字符1的ASCII碼值為奇數,所在數組

中的下標也為奇數,因此不應當刪除,

其他依此類推。最后t所指數組中的內容應為“135”。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括

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

試題程序:

#1ncltide<stdio.k>

#include<3tring.h>

voidfun(char*s,chart[D

I

)

main()*

(

chars(100],t[100];

printff'XnPIeaseenterstrings:n);

scanf("%s",§X

加n(s,0;

printf(n\n,nieresultid:%s\n,f4);

I

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

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

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

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

其功能是將s所指字符串中除了下標為奇數同時ASCII值也為奇數的字

符之外的其余所有字符全部刪除,字符串中剩余字符所形成的一個新字

符串存放在t所指的數組中。

例如,若s所指字符串的內容為“ABCDEFG12345",其中字符A的

ASCII值為奇數,但所在元素的下標為偶數,因此需要刪除;而字符1

的ASCII值為奇數,所在數組中的下標也為奇數,因此不應當刪除,

其他依此類推。最后t所指數組中的內容應為“135”。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

(

)

main()

(

chars[100],t[100];

printf("\nPleaseenterstrings:");

scanf("%s”,s);

fun(s,t);

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

29.請編寫函數proc(),其功能是:計算并輸出下列多項式值。S=(1+1

/2)+(1/3+1/4)+...+(1/(2n-l)+1/2n)例如,若輸入10,

則輸出為S=3.597740on的值要求大于1但不大于100。注意:部分

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

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

sinciudch>

liotaMcproc<mtn)

voedVUIMI<)

itilm

double

printf<*\n1npuin.*)i

procin)i

pniMftSl\?**>><

30.編寫函數fun(),其功能是計算:

S作為函數值返回。

在C語言中可調用log(n)函數求ln(n)olog函數的引

用說明為:doublelog(doublex)。

例如,若m的值為20,則如n()函數值為6.506583。

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

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

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

試題程序:

?include<川dhhh>

ftmdudcVconao.h>

3tncltidkVstdio,h>

9rndudr<atKh>

ifooblr(wfi<mtm>

voidnuiiti()

“,tern(-CLS*)i

prtfiif<sK(\fi"?fttM2?!?i

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

31.下列給定程序中函數fun()的功能是計算1/n!的值。

例如:給n輸入5,則輸出0.0083330

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

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

intfun(intn)

{doubleresult=1.0;

if(n==0)

return1.0;

while(n>1&&n<170)

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

result*=n++;

result=l/result;

returnresult;

main()

intn;

printf("InputN:");

scanf("%d",&n);

printf("\nl/%d!=%If\n",n,fun(n));

32.下列給定程序中,函數fun()的功能是:根據整型形參n,計算如下

公式的值。

Al=l,A2=1/(1+A1),A3=l/(1+A2),An=(l/(1+A(n-1))

例如,若p=10,則應輸出0.617977。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

ihtfun(ihtn)

{floatA=l;inti;

/**************foudn********************/

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

A=1.0/(i+A);

returnA;

main()

{intn;

clrscr();

printf("\nPleaseentern:");

$canf("%d",&n);

printf("A%d=%lf\n",n,fun(n));

33.下列給定程序中函數fun()的功能是;從低位開始取出長整型變量s

中奇數位上的數,依次構成一個新數放在t中。例如,當s中的數為

4576235時,t中的數為4725。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

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

intfun(longS,long*t)

longsi=10;

*tiS%10;

while(s>0)

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

s=s%100;

*t=S%10*Sl+*t;

sl=sl*10;

main()

longS,t;

clrscr();

printf("\nPIeaseenterS:");

scanf("%ld”,&s);

fun(S,&t);

printff'Theresultis:%ld\n”,t);

)

34.下列給定程序中,函數fun()的功能是根據整型形參m,計算如下公

式的值。

y=1-1/(2X2)+1/(3X3)-1/(4x4)+...+(-l)(m+l)/(mxm)

例如:m中的值為5,則應輸出0.838611o

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=1.0;

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

intj=l;

inti;

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

y+=l/(i*i);

return(y);

}

main()

(

intn=5;

clrscr();

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

}

35.下列給定程序中,函數fun()的功能是:將m(lSmS10)個字符串連接

起來,組成一個新串,放入pt所指字符串中,例如:把3個串abc,CD,

EF串聯起來,結果是abcCDEF。

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

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

intfun(charstr[][10],intm,char*pt)

{intk,q,i,j=O;

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

{q=strlen(str[k]);

j+=q;

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

pt[i]=str[k,i];

pt+=q;

pt[O]=0;

)

Pt-=j;

)

main()

{intm,h;

chars[10][10],p[120];

clrscr();

printf("\nPleaseenterm:");

scanf("%d",&m);gets(s[0]);

printf("\nPleaseenter%dstring:In",m);

for(h=0;h<m;h++)gets(s[h]);

fun(s,m,p);

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

)

36.給定程序MOD11.C中函數fun的功能是:先從鍵盤上輸入一個3

行3列矩陣的各個元素的值,然后輸出主對角線元素之和。

請改正函數fun中的錯誤或在橫線處填上適當的內容并把橫線刪除,使

它能得出正確的結果。

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

1?include<stdio.h>

2finclude<string.h>

3voidfun()

4(

5inta[3][3],sum;

6intirj;

7

8

9printf("Inputdata:");

10for(i-0;i<3;if>)

11{for(j-0;j<3;j++)

12/**w******found**********/

RR

13scanf(%d,a[i](j]);

14

15for(i-0;i<3;i++)

16sum=sum+a(i)[i];

ww

17printf(Sum?%d\nrsum);

18}

19main()

20

21fun();

22

37.給定程序M0D11.C中函數fun的功能是:應用遞歸算法求形參a

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

xl=-(x0+—)

2x0

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

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

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

1#include<stdio.h>

2#include<math.h>

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

4doublefun(doublea,dounlexO)

5{doublexlry;

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

16printf("Thesquarerootof%lf

w

is%lf\nrxrfun(xr1.0));

17

38.給定程序MOD11C中函數fun的功能是:對N名學生的學習成績,

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

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

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

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

1tinclude<stdio.h>

2finclude<stdlib.h>

3#include<string.h>

4*defineN10

5typedefstructss

6{charnum[10];

7ints;

8}STU;

9STU?fun(STUa[],intm)

10(STUb[N],*t;

11int

12/**********found*?******?*/

13t-(STU*)calloc(sizeof(STU)rm)

14for(i-0;i<N;;

15for(k?0;k<m;

16{fori<N;i++)

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

18/**********found**********/

19t(k)-b(j);

20b(j].s-0;

21}

22returnt;

23)

24outresult(STUa[),FILE*pf)

25(inti;

26for(i?0;i<N;i++)

w

27fprintf(pfrNo-%sMark-%d\n"r

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

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

29)

30main()

31(STUa[N]-{LA01-,81},「A02”,89),

(”A03〃,66},「A04”,87},{“A05-,77),

(“A06”,90),「A07”,79},{“A08-,61},

ww

{A09r80L(*A10"r71));

32STU*pOrder;

33int1,m;

34printf(*?**?*TheOriginaldata

…**\n-);

35outresult(a,stdout);

36printf("\nGivethenumberofthe

studentswhohavebetterscore:");

n

37scant(%d"r&m);

38while(m>10)

39{printf("\nGivethenumberofthe

studentswhohavebetterscore:w);

40scanf("%d"r&m);

41

42pOrder?fun(a,m);

43printf(*????*?THERESULT?*?**

\nw);

44printf("Thetop:\n");

45for(i?0;i<m;i++)

46printf("%s%d\nw,pOrder[i].

num,pOrder[i].s);

47free(pOrder);

48

39.給定程序M0D11.C中函數fun的功能是:首先將大寫字母轉換為

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

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

例如,若形參是字母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(O-^1&&c<?*uf)

8/???,???■?★???found***

9c-c-5;

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

c?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.下列給定程序中函數fun()的功能是:將長整型數中每一位上為奇數

的數依次取出,構成一個新數放在沖。高位仍在高位,低位仍在低位。

例如當s中的數為87653142時,t中的數為753lo

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

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

試題程序:

#include<stdio.h>

#include<conlo.h>

voidfun(longs,long*t)

{intd;

longsl=l;

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

t=0;

while(s>0)

{d=s%10;

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

if(d%2==0)

{*t=d*sl+*t;

sl*=10;

)

s/=10;

)

)

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");scanf("%ld",&s);

fun(s,&t);

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

五、程序改錯題(2題)

41.

下列給定的程序中,函數proc()的功能是:將str所指字符串中出現

的tl所指字符串全部替換成t2所指字符串,所形成的新的字符串放在

w所指的數組中。在此處,要求tl和t2所指字符串的長度相同。例如,

當str所指字符串中所指的內容為abcdabcdef9,tl所指字符串中的內容

為be,t2所指字符串中的內容為H時,結果在w所指的數組中的內容

應為alldalldefg。請修改程序中的錯誤,使它能得出正確的結果。注意:

不要改動main()函數,不得增行或刪行,也不得更改程序的結構。試

題程序:

*vfirliMivh

|lifirtwirVroaiackli

|lmcludth?

■tfirhidrVb>

//????lound????

?iipvoHrhar?wtiaclw?tl?HMT?Q?cfcar?9?

chut?????????

Mrrpy(w??tr)t

wliiW(?w>

??(0Md??

wlule(r

?p>(f

rl?ebreak:

wluIe(?r>I??

MCIHKt2>i

lviatA()

*y?Keni(eCLS*J?

.\9iPW*w■????999f

ACanf(?Ks*??tr>s

pnnd?*'nPleaxesirrMabBinogtl

pnml<.\OPIMMcm?r

|Mor(

pnittfC*\aThervwrft??

ebeRM”-Error.aafjM(2>\ae>t

42.下列給定程序中,函數proc()的功能是:給定n個實數,輸出平均

值,并統(tǒng)計平均值以上(含平均值)的實數個數。

例如,n=8時,輸入90.009,179.623,167.575,100.051,

6.092,154.986,12.432,45.765,所得平均值為94.566635,

在平均值以上的實數個數應為4。

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

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

構。

試題程序:

*includeVconao.

林mdudeVsldio.h>

ifitptori(kwit?]?intml

(//????found????

IRt€m0|ft<M9u-0.0B

(of

MM?■v£i]/ni

printfC'w'(\n-tsa)i

forjV.ij>?)

戶.?

rvturaci

voidmain(>

HottMif1003?(90.009?179.623?

】67?575.100.05U

6?092.154.”6.

12132.AS.7?5r

?yutEK'Clf》i

prioih

六、操作題(2題)

43.使用VC++打開考生文件夾下modil中的解決方案。此解決方案的項

目中包含一個源程序文件modil.c。在此程序中,函數fun()的功能是求

出S所指字符串中最后一次出現的t所指字符串的地址,并將此地址通

過函數值返回,在主函數中輸出從此地址開始的字符串;若未找到,則

函數值為NULLO

例如,當字符串中的內容為“abcdabfabcdx”,t中內容為“ab”時,輸出

結果應是“abcdx”。

當字符串中的內容為“abcdabfabcdx”,t中內容為“abd”時,則程序輸出

未找到信息“Notfound!”。請改正程序中的錯誤,使它能得出正確的

結果。

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

構!

試題程序:

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

#include<string.h>

char*fun(char*s,char*t)

(

char*p,*r,*a;

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

a=Null;

while(*s)

(

p=s;r=t;

while(*r)

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

if(r==p)

{r++;p++;}

elsebreak;

if(*r=='\0')a=s;

S++;}

returna;

voidmain()

chars[100],t[100],*p;

system(“CLS”);

printf("\nPleaseenterstrings:");

scanf("%s”,s);

printf("\nPleaseentersubstringt:");

scanf("%s”,t);

p=fun(s,t);

if(P)

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

else

printf("WNotfoundin'');

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

main()

{chara[]="Language",b[]="Pragrame";

char*pl,*p2;intk;

pl=a;p2=b;

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

if(*(pl+k)==*(p2+k))

printf("%c",*(pl+k));

參考答案

1.

程序設計的任務是診斷和改正程序中的錯誤。程序調試活動由兩部分

組成,其一是根據錯誤的跡象確定程序中錯誤的確切性、原因和位

置;其二是對程序進行修改,排除這個錯誤。

\r\n

\r\n

2.k-lk,-l解析:顛倒一個字符串中的字符,就是首尾對應的元素兩兩交

換。簡單地可用兩個游標變量i和j,i是前端元素的下標,j是后端元素的

下標,交換以這兩個變量值為下標的元素str國和str[j]o開始時,i的值為

0,j的值為字符串末元素的下標(字符串長度減l)o每次交換后,i增l,j減

lo繼續(xù)交換的條件是str[i]位于str[j]的前面,即i<j。字符串末元素的下

標是它的長度減1,所以在第二個空框處應填入-1。程序為了交換str[i]和

strU],使用了變量k,該變量應在程序的變量定義部分中一起定義,所以在

第一個空框處應填入ko

3.QTHRGQTHRG解析:strcmp(t,s)函數用來比較t和s所指字符串的大

小,若t>s,則函數值大于0;若1=5,則函數值等于0:若t<s,則函

數值小于0。Strcpy(t,s)函數的功能是把字符數組s所指字符串的內容復

制到字符數組t所指的存儲空間中。本題中,t[10]=CDEF。第一次循環(huán),

s[10]='BADEF',if語句的控制條件strcmp(t,s)<0不成立,接著執(zhí)行第

二次循環(huán).s='QTHRG',if語句的控制條件strcmp(t,s)<0成立,執(zhí)行

下列的語句,將字符數組s所指字符串的內容復制到字符數組t所指的

存儲空間中,然后輸出字符數組t。

4.'\0"\\01解析本題涉及字符數組和指針的兩個知識點:①在c語言中,

字符型數組在存放字符串時會自動在末尾加上字符串結束標識符")',

所以題中數組str有6個元素。②ptr指向數組s仕的首地址,ptr+5是指

向str[5],*(ptr+5)是引用str[5]的值,即'\\0'。

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

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

6.1

7.1000001010000010解析:運算的規(guī)則是只有當兩個相應的二進制

位都為1時,該位的結果才為lo要保留第2、8位,只要將其與二進制

數10000010相與。

8.1343113431解析:初始化時,指針p指向m⑼的地址,指針q指向

m[4]的地址,p!=q滿足循環(huán)條件,執(zhí)行循環(huán)語句,得到m[0].k=l,

m[4].k=l,此時i=2,指針p指向m[l]的地址,指針q指向m[3]的地

址,p!=q滿足循環(huán)條件,執(zhí)行循環(huán)語句,得到m[l].k=3,k=3,此時

i=4,指針q指向m[2]的地址,p==q不滿足循環(huán)條件,則退出循環(huán),

m[2].k=4o所以最后輸出為13431O

9.2468

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

stll和str2,并且給str2賦初值“abcdefgh”,接著調用函數sstrcpy(strl,str2),

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

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

空間,然后指針s和指針t都下移到下一個元素。所以空格處應該填*t++

或*(t++)。

11.A

軟件危機主要表現在:軟件需求的增長得不到滿足;軟件開發(fā)成本和進

度無法控制;軟件質量難以保證;軟件不可維護或維護程度非常低;軟件

的成本不斷提高;軟件開發(fā)生產率的提高趕不上硬件的發(fā)展和應用需求

的增長。所以選擇A。

12.C

解析:算法的特性中包括“有零個或多個輸入”及“有一個或多個輸出”

這兩個特性。一個算法得到的結果就是算法的輸出,沒有輸出的算法

是沒有意義的,所以一千算法必須至少有一個輸出。

13.C

14.A解析:由于字符“5”和“3”的ASCII碼相差為2,所以chi經過運算

后的值應為65+2=67;同理,ch2經過運算后的值應為65+3=68,即是

字符“D”。

15.A

【答案】:A

【知識點】:黑盒測試

【解析】:黑盒測試也稱功能測試或數據驅動測試,它完全不考慮程

序內部的邏輯結構和內部特征,只著眼于程序的外部結構,主要用來

檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用。故選Ao

16.D

17.B

棧是先進后出的原則組織數據,所以人棧最早的最后出棧,所以選擇

Bo

18.C解析:#define宏名的有效范圍為定義命令之后到本源文件結束,

可以在程序中使用#undef命令終止宏定義的作用域。本題由于#undef的

作用,使a的作用范圍在#definea100至【J#undefa之間,故答案為Co

19.C解析:選項A)char*a;*a="china”應改為a=china;,選項B)應

該是charstr[6];D)項表述方法有錯誤。

20.A

解析:題中將函數fun的入口地址賦給了指針變量fl,這時fl和fun

都指向函數的開頭,調用*fl就是調用函數fun。

21.voidfun(char*a)

(

inti,j=0;

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

if(a[i]!=*)

a[j++]=a[i];//若不是要刪除的字符*則保留

a[j]=\O;//最后加上字符串結束符\0

)

【解析】此題是刪除字符串中的星號。思路是通過for循環(huán)完成對字

符串的遍歷,通過if判斷,找到不是“*”的字符,將其賦值到數組a中

星號前的位置,“if(a[i]!=*)”“a[i++]=a[i『,最后返回主函數將刪除*后

的字符串輸出即可。

22.

【解析】根據題目中要求刪除字符串中所有的空格,需要檢查字符串中

的每一個字符。將不是空格的字符放入原來的字符串中,形成新的字符

串。在新的字符串的末尾加上結束符。

23.

【考點分析】

本題考查:迭代法求給定多項式的值。迭代算法:讓計算機對一組指

令(或一定步驟)進行重復執(zhí)行,在每次執(zhí)行這組指令(或這些步驟)時,

都從變量的原值推出它的一個新值。需要注意變量的數據類型以及賦

初值操作。

【解題思路】

首先應該定義double類型變量,并且賦初值,用來存放多項式的某一

項和最后的總和。從第2項開始以后的每一項都是其前面一項乘以n/

(2*n+l),程序中用si來表示每一項,s表示求和后的結果。需注意si

和S的初值都為1.0,因為循環(huán)變量從第二項開始累加。

24.1doublefun(intw[][n])

2{

3inti,j,k=O;

4doublesum=0.0;

5for(i=0;i

<n;i++)

6for(j=0;j</n;i++)

<n;i++)

<n;j++)

7if(i==O||i==N-l|J==O||j==N-l)/*只要下標中有一個為0或N-1,則它一

定是周邊元素*/</n;j++)

</n;i++)

<n;i++)

<n;j++)

8{sum=sum+w[i]「];/*將周邊元素求和*/</n;j++)

</n;i++)

<n;i++)

<n;j++)

9k++;</n;j++)

</n;i++)

<n;i++)

<n;j++)

10)</n;j++)

</n;i++)

<n;i++)

<n;j++)

11returnsum/k;/*求周邊元素的平均值*/</n;j++)

</n;i++)

<n;i++)

<n;j++)

12)</n;j++)

</n;i++)

<n;i++)

<n;j++)

本題要求計算二維數組周邊元素的平均值,for循環(huán)語句控制循環(huán)過

程,if條件語句根據數組元素的下標判斷該元素是否為二維數組的周

邊元素。本題采用逐一判斷的方式,周邊元素的規(guī)律為下標中有一個

是?;騈-1,所以只要下標中有一個是0或N-1,那么它一定是周邊元

素。計算周邊元素個數的方式是當給sum累加一個值時,k也加1。

</n;j++)

</n;i++)

25.

皿proc(intscoreCj?intm?mt

(

mt

flcMtivaO.Oi

fortimOii<tnii++)

■v^av-^acorrtij/mi〃求平均值

,or《i-OiiVrnii++)

iU?corc[i]>av)//他?分平均分.■梅妣

分數找人叩ftill中

l?p[j+?JnBTOfwCL,

rriurt>M,?網均分的人數

【解析】要找出低于平均分數的學生記錄,首先應該算出所有學生的

平均成績,然后將每一個學生的成績與平均成績相比較,將低于平均

成績的學生記錄放入數組below中,最后將低于平均分的人數返回給

主函數。

26.

I答案】

voidfun(ehar*s,chart[J)

I.

inti.j=0,n;

n=stricn(s);

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

呻%2!以>&&#[%2]刈

(/*將下標為奇數同時ASCII碼值為奇數的字符放人數組t中*/

j++;

)

產最后加上結束標識符*/

)

【解析】

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

存到數組中,在字符串末尾加上結束標識符。

27.

intf(chars(1)

{inti=0,j=0;

while(s[j])(j-H-;);

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

return(i-j)

)

28.voidfun(char*s,chart[])

(

inti,j=0,n;

n=strlen(s);

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

if((i%2)&&(s[i]%2))

(

t[j++]=s[i];/*將下標為奇數同時ASCII值為奇數的字符放入數組

t中*/

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

)

本題要求保留下標為奇數同時ASCII值也為奇數的字符,其余的所有字

符都刪除。將s字符串中,滿足條件的字符存放到字符串t中。if的條

件表達式為:if(i%2!=0&&s[i]%2!=0)o

29.

【解析】首先定義一個變量來存放表達式的和,根據題目中提供的多項

式,通過n次循環(huán)來求出n項的和。最后把所求得的和返回到主函數當

中。

30.

【解析】題目要求寫出程序

溫馨提示

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

評論

0/150

提交評論