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

下載本文檔

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

文檔簡介

2022年安徽省合肥市全國計算機等級考試

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

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

一、2.填空題(10題)

1.下列程序的輸出結(jié)果是_____O

main()

{inta=l,b=2,c=3,t-0;

if(a<B){t=a;a=b;b=t;}

if(a<C){t=a;a=c;c=t;}

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

)

2.數(shù)據(jù)結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),帶鏈的隊列屬于口。

3.常用的黑箱測試有等價分類法、【】、因果圖法和錯誤推測法4種。

4.下列程序的運行結(jié)果是____o

#include<stdio.h>

main()

{intfun();

fun();

)

fun()

{staticinta[4]={1,2,3,4};

inti;

for(i=0;i<4;i++)afi]+=a[i];

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

printf'\n");

)

5.有以下程序:

voidswapl(intc[])

{intt;

t=c[0];c[0]=c[l];c[l]=t;

)

voidswap2(intcO,intcl)

{intt;

t=cO;cO=cl;cl=t;

)

main()

{inta[2]={3,5},M2]={3,5};

swaplA);swap2(b[0],b[1]);

printf("%d,%d,%d,%d\n",a[0],a[l],b[0],b[l]);

)

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

6.以下程序運行后的輸出結(jié)果是()。

main()

{inta=3,b=4,c=5,t=99;

if(b<a&&a<C)t=a;a=c;c=t;

if(a<c&&b<C)t=b;b=a;a=t;

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

7.在scanf()函數(shù)調(diào)用語句中,可以在格式字符和%號之間加上一個星號,

它的作用是跳過對應(yīng)的輸入數(shù)據(jù);當(dāng)輸入以下數(shù)據(jù)時,100200300400

500〈回車〉,下面語句的執(zhí)行結(jié)果為【】。

main()

{inta,b,C;

scanf("%d%*d%d%d",&a,&b,&c);

printf("%d%d%d",a,b,c);}

8.已知字符A的ASCH碼為65,以下程序運行后的輸出結(jié)果是【】。

#include<stdio.h>

main()

{chara,b;

a='A'+'5'-,3,;b=a+6-2;

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

)

9.下面程序的功能是輸出數(shù)組s中最大元素的下標,請?zhí)羁铡?/p>

#include<stdio.h>

main()

{intk,p,s[]={l,-9,7,2,-10,3);

for(p=0,k=p;p<6;p++)

if(s[p]>s[k])[]

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

)

10.已定義charch="$";inti=l,j;執(zhí)行j=!ch&&i++以后,i的值為()。

二、單選題(10題)

11.以下敘述中錯誤的是()

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

B.C程序中的變量,代表內(nèi)存中的一個存儲單元,它的值可以根據(jù)需要

隨時修改

C.在C程序中,無論是整數(shù)還是實數(shù),都能準確無誤地表示

D.在C程序中,一個正整數(shù)可以用十進制、八進制和十六進制的形式來

表示

12.若有定義floata[15],*p=a;,且數(shù)組a的首地址為300H,則p+13所

指向的數(shù)組元素的地址為()。

A.334HB.30DHC.352HD.31AH

13.若有定義"int*p⑶;",則以下敘述中正確的是()。

A.定義了一個基類型為int的指針變量p,該變量具有3個指針

B.定義了一個指針數(shù)組p,該數(shù)組含有3個元素,每個元素都是基類型

為int的指針

C.定義了一個名為*p的整型數(shù)組,該數(shù)組含有3個int類型元素

D.定義了一個可指向一維數(shù)組的指針變量p,所指一維數(shù)組應(yīng)具有3個

int類型元素

14.對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)

/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

15.軟件測試的目的是()。

A.評估軟件可靠性B.發(fā)現(xiàn)并改正程序中的錯誤C.改正程序中的錯誤

D.發(fā)現(xiàn)程序中的錯誤

(40)函數(shù)rewind(fp)的作用是(

A)使用指定的文件的位置指針重新定位到文件的開始位置

B)將fp指定的文件的位置指針指向文件中所要求的特定位置

o使m指定的文件的位置指針向文件的末尾

D)使fp指定的文件的位置指針自動移至下一個字符位置

17.定義結(jié)構(gòu)體數(shù)組:

structstu

{intnum;

charnameE20];

}X[5]={1,"LI",2,"ZHAO",3,"WANG",4,"ZHANG",5,

"LIU");

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

printf("%d%c",x[i].num,x[i].name[2]);

以上程序段的輸出結(jié)果為()。

A.2A3N4A5UB.112A3H4IC.1A2N3A4UD.2H3A4H5I

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

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

19.有下列程序:

fun(intx,inty)

{staticintm=0,i=2;

i+=m+l;m=i+x+y;returnm;

)

main()

{intj=l,m=l,k;

k=fun(j,m);printS("%d,”,k);

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

)

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

A.5,5B.5,11C.ll,11D.ll,5

20.下面敘述正確的是o

A.算法的執(zhí)行效率與數(shù)據(jù)的存儲結(jié)構(gòu)無關(guān)

B.算法的空間復(fù)雜度是指算法程序中指令(或語句)的條數(shù)

C.算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止

D.以上三種描述都不對

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

21.

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

/2)+(1/3+1/4)+...+(1/(2nl)+1/2n)例如,若主函數(shù)從鍵

盤給n輸入100后,則輸出為s=5.87803lon的值要求大于1但不大

于100。注意:部分源程序給出如下。請勿改動主函數(shù)main()和其

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

語句。試題程序:

HincludeVstdio.h>

doubleproc(intn)

voidmain()

(

intm

doublesum?

prinlf("\nlnputn:*>i

MrAnf("?&-n)t

mumproc(n)i

printf(*\ns=%f\n".sum)i

22.

請編寫一個函數(shù)intproc(int*s,intt,int*k),用來求出數(shù)組的最小元素

在數(shù)組中的下標并存放在k所指的存儲單元中。例如,輸入如下整數(shù):

27393445362489342111831527246貝IJ輸出結(jié)果為4,89o注意:部

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

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

£mclvJrk>

=includeVCDVMOUIC>

9include<Mdio.h>

voidproc<i*i?W?M>Iuint?k)

roidmam()

miarrClO]*【Z73.934M53?H4?2?342dll

M.W.146)Ji

?ywtem(*CLS-)i

ptoc<<rr?IO?&-k)i

pnnt(<*!?d<Kd\a"?k?arr{k]>i

23.從鍵盤上輸出10個整數(shù)存入一維數(shù)組中,按由大到小的順序輸出。

24.實現(xiàn)字符串拷貝的函數(shù)strcpy為()。

25.

請編寫一個函數(shù)proc(),它的功能是:比較2個字符串的長度(不得

調(diào)用C語言中求字符串長度的函數(shù)),函數(shù)返回較長的字符串。若2個

字符串長度相等,則返回第1個字符串。例如,若輸入jiangxi<;Enter>;

beijing<;Enter>;則函數(shù)返回jiangxio注意:部分源程序給出如下。

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

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

0mcludeV,ulio.b>

rhar?proHchar???char?t)

voidmaiaC)

char>{20j?b[i0j<?p.?q*

prmtf(*InputIthMnngj-)>

?■”《■)I

prtnt((*Input2thtirtngi?

gtt?(b)i

pruitf<?%iT?proc?*.b),j

26.請編寫函數(shù)proc,該函數(shù)的功能是:將放在字符串?dāng)?shù)組中的M個字

符串(每串的長度

不超過N),按順序合并組成一個新的字符串。

例如,若字符串?dāng)?shù)組中的M個字符串為:

ABCD

BCDEFG

CDEFGHI

則合并后的字符串內(nèi)容應(yīng)該是ABCDBCDEFGCDEFGH1o

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

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#defineM3

#defineN20

voidproc(chararr[M][N],char*b)

)

voidmain

charstr[M][N]={"ABCD","BCDEFG","CDEFGH1"),i;

chararr[100]={"##################"};

printff'Thestrin9:kn");

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

puts(str[i]);

printf("\n");

proc(str,arr);

printf("TheAstring:\n");

printf("%S",arr);

printf("\n\n");

)

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

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

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

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

十位和個位數(shù)依次放在變量c的個位和百位上。例如,a=45,b=12,

調(diào)用該函數(shù)后,c=5241。

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

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

試題程序:

1linclude<stdio.h>

2voidfun(inta,intb,long*c)

富4)

6main()

7{inta,b;longc;voidNONO();

8printf(nInputa,b:n);

M

9scanf(,,%d%dr&a,&b);

10fun(a,b,&c);

11printf(°Theresultis:c);

HNONOO;

13)

14voidNONO()

15{/*本函數(shù)用于打開文件、輸入數(shù)據(jù)、調(diào)

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

16FILE?rf,?wf;

17intiza,b;longc;

18rf工fopen(Min.datw,Mrw);

19wf=fopen("out"w");

for(i=0;i<10;i*+){

wM

21fscanf(rff%df%dr&b);

22fun(a,b,&c);

M

23fprintf(wfra=%d/b=%drc=%ld

\n",a,b,c);

噩}

25fclose(rf);

26fclose(wf);

27)

28.

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

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

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

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

的若干語句。試題程序:

?iftchidr<Mdlikb>

<Min*N8

Mmct

<

dooWr??

structBUBK?MKII

h

typedeiMructslbtSTREl'i

double(wnCSTKIX*?b)

(

)

STRBl*?createdouble??>

(

STREC?b??p??q,

i?ti

h-p?<STREC。)iiuillor<MMo?STRIX))t

p—>■-Oi

wh?lr<YNI

〃產(chǎn)強8個靖立的?*.3分依存入?友中

j

qTSTRBC?)malk)c<tuM>{(STREIT)?

+,p->?TM1-q,

p-q?

}

p->?r?imNULLi

retiimhi/fiMM

)

voad0MlMii<STREC?b)

STREC”,

p-h?

printf<*heed>>i

<k>(

prwii(<*->>{2,Of>?)?

pwp^

)

〃■出3分數(shù)

wlitleCp->OTM1*-BNULL>?

voidmain()

doubk?[N]?(85?IOO?99.85?91.7??M.87

)?mesi

STREf…

hw€rtai<t)i

prwiilf*n?xmM6.If\ne?max)i

29.請編寫一個函數(shù)proc,它的功能是:求出1?m(含m)能被7或11

整除的所有整數(shù)放在數(shù)組a中,通過n返回這些數(shù)的個數(shù)。

例如,若傳給m的值為70,則程序輸出:

7111421222833354244495556636670

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

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidproc(intm,int*a,int*n)

{

)

voidmain

(

intarr[N],n,k;

system("CLS");

proc(70,arr,&n);

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

if((k+l)%20==0)//每行輸出20個數(shù)

{printf("%4d",arr[k]);

printf("\n");

)

else

printf("%4d",arr[k]);

printf("\n");

)

30.假定輸入的字符串中只包含字母和*號。請編寫函數(shù)proc(),它的功

能是:將字符串尾部的*號全部刪除,前面和中間的*號不刪除。例如,

若字符串中的內(nèi)容為****a*bc*def*g。***,刪除后,字符串中的內(nèi)容則

應(yīng)當(dāng)是****a*bc*def*g°注意:部分源程序給出如下。請勿改動主函

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

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

smcludc〈adg.hA

3include<como.

voidprocfchar*

void>

clwrJI

prmtfC-Enter?3ftM

proc<?)i

pnntf<*Thrafterddr?rdi\ne)t

pvtp<

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

31.下列給定程序中,函數(shù)fun()的功能是:在字符串的最前端加入n個

*號,形成新串,并且覆蓋原串。

注意:字符串的長度最長允許79。

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

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

試題程序;

#include<stdio.h>

#include<strzng.h>

#include<conio.h>

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

voidfun(chars[],intn)

chara[80],*p;

inti;

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

s=p;

for(i=0;i<n;i++)a[i]=<*';

do

{a[i]=*p;

/*********不***不***found*不***不*********/

i++;

}while(*p);

a[i]=0;

strcpy(s,a);

)

main()

{intn;chars[80];

clrscr();

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

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

printf("\nEntern(numberof*):");scanf("%d",&n);

fun(s,n);

printf("\nThestringafterinster:\%s\n",s);

32.下列給定程序中,函數(shù)fun()的功能是:用選擇法對數(shù)組中的n個元

素按從小到大的順序進行排序。

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

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

[試題源程序]

#include<stdio.h>

#defineN20

voidfun(inta[],intn)

inti,j,t,p;

for(j=0;j<n-1;j++){

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

p=j

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

if(a[i]<a[p])

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

p=j;

t=a[P];

a[p]=a[j];

a[j]=t;

msin()

inta[N]=(9,6,8,3,-1),i,m=5;

printf("排序前的數(shù)據(jù)

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

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

printf("\n");

fun(a,m);

printf("排序后的數(shù)據(jù)

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

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

printf("\n");

33.下列給定程序中,函數(shù)fun()的功能是:找出一個大于給定整數(shù)m且

緊隨m的素數(shù),并作為函數(shù)值返回。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(intm)

{inti,k;

for(i=m+l;;i++)

{for(k=2;k<i;k++)

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

if(i%k!=0)

break;

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

if(k<i)

retum(i);

)

main()

{intn;

clrscr();

printf("\nPleaseentern:");

scanf("%d",&n);

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

)

34.下列給定的程序中,函數(shù)fun()的功能是:計算并輸出k以內(nèi)最大

的6個能被7或11整除的自然數(shù)之和。K的值由主函數(shù)傳入,若k的

值為500,則函數(shù)的值為2925。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

intfun(intk)

{

intm=0,mc=0,j;

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

while(k>=2)&&(mc<6)

(

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

if((k%7=0)||(k%ll=0))

{.......................................................

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

m=k;

mc++;

k--;

)

returnm;

main()

(

clrscr();

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

)

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

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

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

6,lower=8。

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

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

1#include<stdio.h>

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

3voidfun(char*srinta,intb)

4

5while(*s)

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

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

8?a?a+l;

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

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

11

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)

36.下列給定程序中fun()函數(shù)的功能是將n個無序整數(shù)從小到大排序。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

fun(intn,int*a)

{inti,j,p,t;

for(j=O;j<n-l;j++)

{p=j;

/***********不***found*不***不***不********不/

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

if(a[p]>a[i])

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

t=i;

if(p!=j)

{t=a[j];a|j]=a[p];a[p]=t;}

)

)

putarr(ihtn,int*z)

{inti;

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

{printf("%4d",*z);

if(!(i%10))printf("\n");

}printf("\n");

)

main()

{intaa[20]={9,3,0,4,l,2,5,6,8,10,7},n=ll;

clrscr();

printf("\n\nBeforesorting%dnumbers:\n",n);putarr(n,aa);

fun(n,aa);

printf("\nAftersorting%dnumbers:\n",n);putarr(n,aa);

)

37.下列給定程序中,函數(shù)fun()的作用是:將字符串tt中的小寫字母都

改為對應(yīng)的大寫字母,其他字符不變。例如,若輸入“edS,dAd",則輸

出“EDS,DAD”。

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<conlo.h>

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

charfun(chartt[1)

inti;

for(i=0;tt[i];i++)

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

if((tt[i]>='A')&&(tt[i]<='2'))

tt[i]-=32;

retum(tt);

)

main()

inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

printf("\nTheresultstringiS:/n%s",fun(tt));

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

n項之和。和值通過函數(shù)值返回到main函數(shù)。

23581321

T2'3'5*T……

例如,若n=5,則應(yīng)輸出:8.39如67。

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

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

linclude<stdio.h>

2/*??*?*?***w*found***********?/

3voidfun(intn)

4(inta,brc,k;doubles;

5s?0.0;a?2;bw1;

6for(k-1;k<?n;k++){

7………?…found/

8s-s?(Double)a/b;

9c=a;a?ab;bwc;

10}

11returns;

12}

13main()

14(intn?5;

15printf(H\nThevalueoffunction

w

is:%lf\nrfun(n));

16

39.下列給定程序中,函數(shù)fun()的功能是:從N個字符串中找出最長的

那個中,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放

入一個字符串?dāng)?shù)組中。

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

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

試題程序:

#include<string.h>

#include<stdio.h>

#defineN5

#defineM81

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

fun(char(*sq)[N])

{inti;char*sp;

sp=sq[O];

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

if(strlen(sp)<strlen(sq[i]))

sp=sq[i];

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

returnsq;

)

main()

{charstr[N][M],*longest;inti;

printf("Enter%dlinesAn",N);

for(i=0;i<N;i++)gets(str[i]);

printf("\nThe%dstring:\n",N);

for(i=0;i<N;i++)puts(strfi]);

longest=fun(str);

printf("\nThelongeststring:\n");

puts(longest);

)

40.下列給定程序中函數(shù)fun()的功能是:將長整型數(shù)中每一位上為奇數(shù)

的數(shù)依次取出,構(gòu)成一個新數(shù)放在沖。高位仍在高位,低位仍在低位。

例如當(dāng)s中的數(shù)為87653142時,t中的數(shù)為753lo

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

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

試題程序:

#include<stdio.h>

#include<conlo.h>

voidfun(longs,long*t)

{intd;

longsl=l;

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.下列給定程序中函數(shù)fun的功能是:將注所指字符串中的小寫字母全

部改為對應(yīng)的大寫字母,其他字符不變。

例如,若輸入“Ab,cD”,則輸出“AB,CD”。

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

注意:部分源程序在文件MODH.C中,不得增行或刪行,也不得更改

程序的結(jié)構(gòu)!

tinclude<stdio.h>

tinclude<string,h>

char?fun(chartl[])

I

in!i;

for(i=0;tt[i]ji??)

/??????????found???????????/

if((,?><=tt[i])IKtt[i]<=V))

/found???????????/

ti[i]?=32;

retuni(tt);

I

tnain()

chartt[81];

printf(*\nP1easeenterastring;");

?);

printf("\nTheresultstringis:\n%a",fiin(tt));

42.下列給定程序中,函數(shù)proc()的功能是:將m(lWmglO)個字符串反

著連接起來,組成一個新串,放入pt所指字符串中,例如,把“ab、

cd、ef9"3個字符串反著串連起來,結(jié)果是efgcdab。

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

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

結(jié)構(gòu)!

試題程序:

£induceVzdlib.hA

SincitUcVconio.h>

9indirtk<?innc.

■indude<Mdto.h>

voidproc<c>Mirwtr[J[!0].mtm?clwif?pii

mi

lor《k■BHk>01h

q=strlesCstifk])i

j+-q5

,OT<l=0.yQii一?)

frt+—qi

pt[O]?O|

//????foynd????

void>

mtm?bi

charzr[lQ)[10].p[120].

w/ntvmC"CLS")i

*\nHe*K<tiicrma")<

9canl(*K<t*

plinth*\nPle*jbcenterSdMnnc(\t>s?m)i

(ordi-OtlKCmih^^)

cets<?lt(bj)i

proc<Mr?tn?p)i

ew

pirintfC\nThrremitu2%?\B.p)s

六、操作題(2題)

43.有以下程序,請在一處填寫正確語句。使程序可正常編譯運行。

#include

/

mairl();

{doublex,y,(*p)():

scanf("%If%IF',&x,&y);

P=avg;

printf("%f\rT,(*p)(x,y));

)

doubleavg(doublea,doubleb)

{retum((a十b/2):

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

#include<stdio.h>

longfib(intg)

{switch(g)

{case0:return0;

case1:

case2:return1;}

return(fib(g-l)+fib(g-2));}

main()

{longk;

k=fib(5);

printf("k=%51d\n",k);}

參考答案

1.3123,1,2解析:分析程序,第一個if語句,a=l,b=2,控制條件a<b

成立,則交換a、b的值,此時a=2,b=lo第二個if語句,a=2,c=3,

控制條件a<c成立,則交換a、c的值,此時a=3,c=2o

2.線性結(jié)構(gòu)線性結(jié)構(gòu)解析:與棧類似,隊列也是線性表,也町以采用鏈

式存儲結(jié)構(gòu)。

3.邊值分析法邊值分析法解析:本題考查了黑箱測試的方法。黑箱測試

方法完全不考慮程序的內(nèi)部結(jié)構(gòu)和內(nèi)部特征,而只是根據(jù)程序功能導(dǎo)出

測試用例。常用的黑箱測試有等價分類法、邊值分析法、因果圖法和錯

誤推測法。

4.24682,4,6,8解析:子函數(shù)fun()的功能是將數(shù)組a中的元素都自加一

遍,然后仍然將結(jié)果存在原數(shù)組中,其實就是將數(shù)組a的每個元素都變

為原來的2倍,然后輸出。在主程序中首先通過intfun。定義了子函數(shù)

fun(),然后再調(diào)用fun()o

5.53355335解析:函數(shù)swap1的形參是數(shù)組,故形參的改變能夠影

響實參,所以執(zhí)行完swapl(a)后,a[0]=5、a[l]=3;函數(shù)swap2的形參

是簡單變量,故形參的改變不能夠影響實參,所以執(zhí)行完swap2(b)后,

b[0]=3、b[l]=5;正確答案為5335。

6.45994599解析:a、b、c的初值為3、4、5,t的初值為99,if語句

的條件"b<a&&b<c”為假,不執(zhí)行廿a;",但緊隨其后的“a=c;c=t;"

與此if語句無關(guān),仍被執(zhí)行。此時a的值為5,b的值仍是4,c的值為

99。再執(zhí)行第二個if語句,由于此時“a<c&&b<c”為真,執(zhí)行“t=b;”,

緊隨其后的“b=a;a=t;”與此if語句無關(guān),也被執(zhí)行。此時a的值為4,

b的值是5,c的值為99°因此輸出結(jié)果是:4599。

7.100300400100300400解析:scanf的格式控制字符串中,“*”表示跳

過對應(yīng)的輸入數(shù)據(jù),所以第二個輸入數(shù)200被跳過去了,只有100,300,

400三個數(shù)被從鍵盤輸入了進來。

8.67G67G解析:由于\'5\'-\'3\'=2,所以a=\'A\'+\'5\'-\'3\'=\'C\',按%d格式

輸出\'CV的ASCII碼為67\'6\'-\'2\'=4,b=a+\'6\'-\,2\,=\'C\'+4=\'G\',

按‘%c格式輸出為VG\'。

9.k=p;k=p;解析:要找數(shù)組中最大元素的下標,首先預(yù)設(shè)數(shù)組首元素下

標為臨時最大元素的下標,從首元素開始順序向后繼元素逐一比較,當(dāng)

發(fā)現(xiàn)當(dāng)前元素比臨時最大元素更大時,就用當(dāng)前元素的下標更新臨時最

大元素下標,直至比較了數(shù)組的全部元素后,臨時最大元素下標就是數(shù)

組中最大元素的下標。程序中,變量k用于存儲臨時最大元素下標,變

量p控制順序比較的循環(huán)變量。當(dāng)發(fā)現(xiàn)當(dāng)前元素s[p]比臨時最大元素s[k]

更大時,用P更新匕所以在下劃線處應(yīng)填入代碼“k=p;”。

10.11解析:用“&&”連接兩個表達式時,若第1個表達式的值為"假”,

則運算結(jié)果與第2個表達式無關(guān),此時第2個表達式將不再進行計算。

本題中第1個表達式“j=!ch”值為0,所以第2個表達式i++將不再進行

計算,i的值為lo

11.C

12.C解析:解答本題,首先要明白在對指針進行加、減運算的時候,數(shù)

字“1”不是十進制的數(shù)“1”,而是指T個存儲單元長度,而1個存儲單元

長度占多少存儲空間,應(yīng)該視具體情況而定。如果基本類型是int型,

移動1個存儲單元的長度就是位移2個字節(jié),如果基本類型是float型,

移動1個存儲單元的長度就是位移4個字節(jié)。所以p+13所指向的數(shù)組

元素的地址:300H+(13*上標)4)H=352H。

13.B解析:指針數(shù)組也是一種數(shù)組,所有有關(guān)的概念都適用于它。但它

與普通的數(shù)組又有區(qū)別,它的數(shù)組元素是指針類型,只能用來存放地址。

其格式為:存儲類型數(shù)據(jù)類型*指針數(shù)組名[長度U,其含義為:定義了

一個長度1的數(shù)組,其中數(shù)組元素為相應(yīng)存儲類型的指針,對比定義可

知,選項A、C和D都不正確,所以,4個選項中選項B符合題意。

14.D

各種排序方法中最壞情況下需要比較的次數(shù)分別為眉泡排序n(n-

1)/2、快速排序n(n-1)/2、簡單插入排序n(n-l)/2>希爾排序0(nl.5)、

簡單選擇排序n(n-l)/2>堆排序O(nlog2n)

15.D軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,測試要以查找錯誤為

中心,而不是為了演示軟件的正確功能,也不是為了評估軟件或改正錯

誤,因此本題答案為D)。

16.A

17.A

本題主要考查結(jié)構(gòu)體數(shù)組的使用。x[i].num為結(jié)構(gòu)體x[i]中的hum成

員,x[i].num⑵是結(jié)構(gòu)體x[i]中name成員的第3個元素。程序執(zhí)行循

環(huán)過程時:第1次循環(huán),i=l?輸出x[i].num,x[l].name[2]的值;

第2次循環(huán),i=2,輸出x[2].num,x[2].name⑵的值,即3N;第3

次循環(huán),i=3,輸出X[3].hum,x[3].name⑵的值,即4A;第4次

循環(huán),i=4,輸出x[4].num,x[4].name[2]的值,即5U。

18.D

19.B

子函數(shù)fun(intx,inty),將變量m和i聲明為局部靜態(tài)變量,因此第1

次調(diào)用主函數(shù)后,局部靜態(tài)變量m和i的值為5和3,第1次函數(shù)調(diào)用

結(jié)束時,它們的值不釋放保持不變,所以第2次調(diào)用時,局部靜態(tài)變

量m和i的初始值分別為5和3,即在執(zhí)行“i+=m+l”時,i的值為9,

因此最終m的值為11。

20.C解析:算法的執(zhí)行效率與數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)都有很緊密的

關(guān)系。算法的空間復(fù)雜度是指執(zhí)行該算法需要的內(nèi)存空間,并非算法程

序中指令的條數(shù)。算法一般應(yīng)該具有以下4個特征:可行性、確定性、

有窮性和擁有足夠情報。其中,有窮性是指算法必須能在執(zhí)行有限個步

驟之后終止,否則可能失去實際意義。

21.

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

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

中。

22.

【解析】要求出數(shù)組中最小的數(shù),需要比較數(shù)組中的每一個元素。將最

小的元素的下標存放在變量k中,通過形參返回到主函數(shù)中。

23.\n#include'stdio.h'

\nmain

\n{inti,j,a[10];

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

\nscanf('%d',&a[i]);

\nfor(i=0;i<9=;i++)

\nfor(j=9;j>i;j—)

\nif(afj-l]{t=a[j-l];

\na[j-l]=a[j];

\na[j]=t;}

\nfor(i=0;i<10;i++)

\nprintf('%d',a[i]);

\n}

\n

24.

voidstrcpy(char*s,char*t)/*copyttos*/

{while((*s++=*t++)!='\0'))|

)

25.

【解析】題目中要求不能用C語言中提供的求字符串長度的函數(shù),可以

通過移動字符串指針來計算字符串的長度。定義2個變量分別存放2個

字符串的長度,最后比較2個字符串的長度,返回相對較長的那一個字

符串。

26.voidproc(chararr[M][N],char*b)

(

inti,j,k=0;

for(i=0;i++)//i表示其行下標

for(j=O;arr[i][j]!=\0;j++)//由于每行的個數(shù)不等,因此用a[i][j]!=

'。來作為循環(huán)結(jié)束

的條件

b[k++]=arr[i][j];//把二維數(shù)組中的元素放到b的一維數(shù)組中,

b[k]=\0;//最后把6賦\。作為字符串結(jié)束的標志

)

【解析】字符串?dāng)?shù)組中每一行都是一個一個完整的字符串,其結(jié)束標

志為\0。因此通過字符串的結(jié)束標志來判斷每一個字符串是否結(jié)

束,將字符串?dāng)?shù)組中的所有字符串均賦值新的一維數(shù)組b來完成字符

串的合并。

27.1voidfun(inta,intb,long*c)

2{,

3*c=(a%10)*1000+(b%I0)*100+(a/10)*10+(b/10);

4)

本題給出兩個兩位數(shù)的正整數(shù)。分別取出兩個數(shù)各位上的數(shù)字,再按

條件組成一個新數(shù)。取整數(shù)a十位數(shù)的方法為a/10,取整數(shù)a個位數(shù)

的方法為a%10o同理可取出整數(shù)b的個位數(shù)和十位數(shù)。

28.

【解析】本題考查的是結(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)體的成

員時,要用指向運算符"一>''。

29.\n\tvoidproc(intm,int*a,int*n)

\n{

\ninti,j=0;

\nfor(i=l;i<=m;i++)//進行m次循環(huán)

\nif(i%7==0||i%11==0)//能被7或11整除的所有整數(shù)

\na[j++]=i;//符合條件的數(shù)放在數(shù)組a中

\n*n=j;//返回這些數(shù)的個數(shù)

\n}

\n【解析】本題需要先判斷1?m每一個整數(shù)能否被7或11整除,然

后將符合條件的整數(shù)放在數(shù)組a中,最后將符合條件的數(shù)的個數(shù)通過

形參n返回主函數(shù)。\n

30.

【解析】要刪除字符串尾部的所有*,只要將尾部所有*中的第一個改為

字符串結(jié)束符即可。首先,將字符串指針移動到字符串最后一個位置,

檢查最后一個字符,是*則將指針前移,否則將指針后移一個位置賦值

作為結(jié)束符。

31.(1)錯誤:voidfun(chars[]intn)正確:voidfun(char*sintn)(2)錯誤:

s=p;正確:p=s;(3)錯誤:i++;正確:i++;p++;(4)錯誤:a[i]=0;

正確:a[i]='\0';⑴錯誤:voidfun(chars[],intn)正確:voidfun(char*s,

intn)\r\n⑵錯誤:s=p;正確:p=s;\r\n(3)錯誤:i++;正確:i++;p++;

\r\n(4)錯誤:a[i]=0;正確:a[i]='\\0';解析:在本題中,s是數(shù)組名,

代表數(shù)組首地址,在編譯時對s數(shù)組分配了一段內(nèi)存單元,因此在程序

運行期間s是一個常量,不能再被賦值。因此s=p是錯誤的,如果把“char

s[L”改成“char*s;”,則程序正確。此時s是指向字符數(shù)組的指針變量,

p=s是合法的,它將字符串的首地址賦給指針變量p,然后在printf函數(shù)

語句中輸出字符串s。因此,應(yīng)當(dāng)弄清楚字符數(shù)組與字符指針變量用法

的區(qū)別。

32.(1)錯誤:p=j正確:p=;⑵錯誤:p=j;正確:p=i;⑴錯誤:p=j\r\n正

確:p=;\r\n⑵錯誤:p=j;\r\n正確:p=i;解析:題中提到按“從小到大”

的順序排序,這類題目都可以用選擇排序法,即從后N個比較過程中,

選擇一個最小的與第一個元素交換,以此類推,即用第二個元素與后N-

1個進行比較,并進行交換。

錯誤1:此處錯誤比較明顯,p=j后面應(yīng)加分號。

錯誤2:根據(jù)選擇排序法的思路,此處應(yīng)將i賦給po

33.(1)錯誤:if(i%k!=O)正確:if(i%k=0)(2)錯誤:if(k<i)正確:if(k>=i)(l)

錯誤:if(i%k!=0)正確:if(i%k=0)\r\n⑵錯誤:if(k<i)正確:if(k>=i)解

析也許剛接觸C語言的學(xué)習(xí)者對素數(shù)的概念不清楚,在這里說明一下,

素數(shù)就是質(zhì)數(shù),本題的任務(wù)是隨便輸入一個整數(shù)m,然后在m的后面尋

找緊跟m的一個質(zhì)數(shù),作為函數(shù)值返回。

for(i=m+l;;i++){

是從m后面的一位開始循環(huán),將m后面一位的值賦予io然后;我們依

次判斷m后面的一位是否為素數(shù)。

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

if(i%k==0)

是一個簡單的數(shù)學(xué)判斷問題,判斷i被賦予的值與k的余數(shù)是否為零。

34.(1)錯誤?while(k>=2)&&(mc<6)正確:while((k>=2)&&(mc<6))(2)

錯誤:if((k%7=0)||(k%ll=0))正確:if((k%7==0)||(k%ll=0))(3)錯誤:

m=k正確:m=m+k;⑴錯誤:while(k>=2)&&(mc<6)正確:while((k

>=2)&&(mc<6))\r\n(2)錯誤:if((k%7=0)||(k%l1=0))正確:

if((k%7==0)||(k%l1=0))\r\n(3)錯誤:m=k

溫馨提示

  • 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

提交評論