2023年甘肅省嘉峪關市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2023年甘肅省嘉峪關市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2023年甘肅省嘉峪關市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2023年甘肅省嘉峪關市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2023年甘肅省嘉峪關市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023年甘肅省嘉峪關市全國計算機等級考

試C語言程序設計模擬考試(含答案)

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

一、2.填空題(10題)

1.以下程序輸出的最后一個值是【】。

intff(intn)

{staticintf=l;

f=f*n;

returnf;

i

main()

{inti;

fbr(i=l;i<=5;i++)printf("%d\n",ff(i))i

)

2.設有下列宏定義:

#defineA2

#defineB(A+3)

則執(zhí)行賦值語句“k=B*20;"(k為int型變量)后,k的值是。

3.根據(jù)以下if語句寫出與其功能相同的switch語句(x的值在0~100之

間)。

if語句:

if(x<60)m=1;

elseif(x<70)m=2;

elseif(x<80)m=3;

elseififx<90)m=4;

elseif(x<100)m=5;

switch語句:

switch([])

i

[]m=1;break;

case6:m=2;break;

case7:m=3;break;

case8:m=4;break;

[]m=5;

}

4.以下程序的功能是:將輸入的正整數(shù)按逆序輸出。例如:若輸入135,

則輸出531,請?zhí)羁铡?/p>

#include<stdio.h>

main()

{intn,s;

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

printf("Output:");

do

{s=n%10;printf("%d",s);();}

while(n!=0);

printf("\n");

5.數(shù)據(jù)字典是各類數(shù)據(jù)描述的集合,它通常包括5個部分,即數(shù)據(jù)項、

數(shù)據(jù)結構、數(shù)據(jù)流、和處理過程。

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

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

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

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

)

main()

{inti=3,j=5,*p=&i,*q=&j;

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

}

8.以下程序中給指針p分配三個double型動態(tài)內(nèi)存單元,請?zhí)羁铡?/p>

#include<stdio.h>

main()

{dOuble*p;

p=(double*)malloc();

p[0]=1.5;p[l]=2.5;p[2]=3.5

printf("%f%f%f^i",p[0],p[l],p[2]);

)

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

main()

{inta=l,b=2;

a=a+b;b=a-b,a=a-b;

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

)

10.若x和a均是int型變量,則計算完x=(a=4,6*2)后的x值為

二、單選題(10題)

11.算法的時間復雜度取決于()

A.問題的規(guī)模B彳寺處理數(shù)據(jù)的初態(tài)C.A和B

12.若二維數(shù)組a有m歹!],則在剛前的元素個數(shù)為()。

A.i*m+j-lB.i*m+jC.j*m+iD.i*m+j+l

13.定義int*swap()指的是。

A.一個返回整型值的函數(shù)swap()

B.一個返回指向整型值指針的函sw叩()

C.一個指向函數(shù)swap。的指針,函數(shù)返回一個整型值

D.以上說法均錯

14.以下選項中,當x為大于1的奇數(shù)時,值為0的表達式是

A.x%2==lB.x/2C.x%2!=0D.x%2=0

15.

(32)卜,述程序的輸出結果是()。

#include<stdio.h>

voidmain()

(inta[5]={1,23,4,5);

int*p=a,**q=&p;

printR"%d",*(p++));

printfC'%dM,**q);

}

A)22B)11.C)34D)12

16.若變量已正確定義并賦初值,以下合法的賦值語句是()。

A.k=(m=n);B.k—m-nC.k=int(m+n);D.k=m*n=l;

17.具有n個頂點的完全有向圖的弧數(shù)為()。

A.n(n-l)/2B.n(n-l)C.n2D.n2-1

18.有以下程序(函數(shù)fun只對下標為偶數(shù)的元素進行操作):

#include<stdio.h>

voidfun(int*a。intn)

{inti,j,k,t;

for(i=0;i<n-l;i+=2)

{k=i;

for(j=i;j<n;j+=2)if(a[j]>a[k])k=j;

t[a[i];a[i]=a[k];a[k]=t;

}

main

{intaa[10]=[l,2,3,4,5,6,7],a;

fun(aa,7);

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

printf("n");

)

程序運行后的輸出結果是()。A.7,2,5,4,3,6,1,

B.l,6,3,4,5,2,7,

C.7,6,5,4,3,2,1,

D.l,7,3,5,6,2,1,

19.if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中

正確的是

A.必須是邏輯值B.必須是整數(shù)值C.必須是正數(shù)D.可以是任意合法的

數(shù)值

20.下列各排序法中,最壞情況下的時間復雜度最低的是()

A.希爾排序B.快速排序C.堆排序D.冒泡排序

三、程序設計題(10題)

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

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

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

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

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

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

是ACEG°

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

請勿改動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);

22.請編寫一個函數(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");

)

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

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

該函數(shù)的功能是判斷字符串是否為回文,若是,則函數(shù)返回1,在主函

數(shù)中輸出“YES”,否則返回0,在主函數(shù)中輸出“NO”?;匚淖址侵疙?/p>

讀和倒讀都一樣的字符串。例如,字符串LEVEL是回文,而字符串

123312就不是回文。注意:部分源程序在文件progl.c中。第3部分無紙

化考武題庠請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)

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

l#include2#defineN803intfun(char*str)4{56}7main()8{9chars[n];10FILE*out;llchar*test[]={"

','1',

1234321,"123421"J"123321,"abcdCBA");12inti;13printf(Enterastring:");14gets(s);15printf("\n

\n");16puts(s);17if(fun(s))18printf(',YES\n',);19else20printf("NO\n");21/******************/22out

=fopen("out.dat","w");23for(i=0;i<4/i++)24if(fun(test[i]))25fprintf(out,"YES\n");26else27fprintf

(out,"NO\n");28fclose(out);29/******************/30}

24.

請編寫一個函數(shù)proc(),它的功能是:比較2個字符串的長度(不得調(diào)用C語言中求字符

串長度的函數(shù)),函數(shù)返回較長的字符串。若2個字符串長度相等,則返回第1個字符串。

例如,若輸入jiangxi<;Enter>;beijing<;Enter>;則函數(shù)返回jiangxio注意:部分源

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

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

0mcludeVzdio.b>

char?proHclur???char?t)

voidmtin<)

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

prmtf(*InputIthstringj")?

getn(a)?

fKtatK2thHfingv")i

prmtf<*K*M?proc<a?b))i

25.

規(guī)定輸入的字符串中只包含字母和奉號。編寫函數(shù)fun,其功能是:刪除字符串中所有的。

號。編寫函

數(shù)時,不得使用c語言提供的字符串函數(shù)。

“****A*BC*DEF*C*******”

例如,字符串中的內(nèi)容為,刪除后,字符串中

的內(nèi)容應當是“ABCDEFG”。

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

請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)缸的花括號中填入你編寫的若干

語句。

試題程序:

#include<stdioJi>

voidiun(char*a)

(

}

voidriain()

[char4811;

printff*Enterastring:。");

gets(s);fun(a);

printf('1,niestringafterdeleted:\n°);

四見$)3?+

26.學生的記錄由學號和成績組成,M名學生的數(shù)據(jù)已在主函數(shù)中放人結構體數(shù)組stu中。

請編寫函數(shù)proc(),它的功能是:函數(shù)返回指定成績的學生數(shù)據(jù),指定的成績在主函數(shù)中

輸入。若沒找到指定的成績,在結構體變量中給學號置空串,給成績置-1,作為函數(shù)值返回。

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

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

stindude<stdio.h>

*include<stdlib.h>

"defineM16

lypedefstruct

(

chnrnum[10]i

intsi

STRECi

STRECproc(STREC?a.inib)

voidmain()

STRECstu[M]工H-GA005-.76>.(wGA003M.89

(HGAOO2",64}?("GA004".75}.{"GAOOK>8S).

("GA007",65}.{*GAOO8%96}.(HGA006*.69},

CGA015-.85h(-GA013".78>UBGA012",62h

(?GAO14-.6O}.(*GAOir,73HCGAO17"<721<

(?GA018"<98h("GA016%94(h

STRECh:

intmi

intit

printf("TheoriginaldataAn*)i

for(i=0,iVM:i++)

(if(i%4==0)

prin(f("\n*)i

〃每行幅出[個學生記錄

printff-%3d*num?stu[i].s)(

printf(a\n\nEnterthescore」)?

scanf("%d"?&m)i

h=proc(stu?m)t

printf("Thedata:*)?

printf("\n%s%1d\n".h.num.h.s>x

printf(*\n")i

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

源程序文件progl.c。在此程序中,規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun(),

其功能是使字符串中尾部的*號不多于n個,若多于n個,則刪除多余的*號;若少于或等

于n個,則不做任何操作,字符串中間和前面的*號不刪除。

例如,字符串中的內(nèi)容為“****A*BC*DEF*G*******”,若n的值為4,刪

除后,字符串中的內(nèi)容應為“****A*BC*DEF*G****”;若n的值為7,則字符

串中的內(nèi)容仍為"****A*BC*DEF*G*******"。n的值在主函數(shù)中輸入。編寫函

數(shù)時,不得使用C語言提供的字符串函數(shù)。

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

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

填入你編寫的若干語句。

試題程序:

ftinclude<stdio.h>

voidfun(char*a,intn)

{

)

main()

{chars[81];intn;

printf("Enterastring:\n");

gets(s);

printf("Entern:");

scanf("%d",&n);

fun(s,n);

printf("Thestringafterdeleted:\nv);

puts(s);

28.請編寫函數(shù)proc,該函數(shù)的功能是:將M行N列的二維數(shù)組中的數(shù)據(jù),按

行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個數(shù)存放在形參n所指的存

儲單元中O

例如,若二維數(shù)組中的數(shù)據(jù)為

13233343

14243444

15253545

則一維數(shù)組中的內(nèi)容應該是132333431424344415253545。

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

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

所編寫的若干語句。

試題程序:

#include<stdio.h>

voidproc(int(*s)[103,int*b,int*n,intrain,intnn)

voidmain

(

intarr[10][10]={{33,33,33,33),{44,44,44,44},

{55,55,55,55}),i,j;

inta[100]={o),n=o;

printf(Z/Thematrix:\n〃);

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

(

for(j=0;j<4;j++)

printf(〃%3d〃,arr[i][j]):

printf(〃\n〃);

)

proc(arr,a,&n,3,4):

printf(Z/TheAarray:\n〃);

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

printf(〃%3d〃,a[i]):

printf(〃\n\n〃);

29.

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

s作為函數(shù)值返回。在C語言中可調(diào)用log(n)函數(shù)求In(n)olog函數(shù)的引用說明是

doublelog(doublex)o例如,若m的值為10,則proc()函數(shù)值為198.934454。注

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

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

WinriudeV

sinciudcVcotiio.h>

3Vtiidia.h>

Hindude<wuith.

doubkpcoHmtm)

*CLS*)i

praitlf*M(\n*tprocC10))?

30.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案的項目中包含一個

源程序文件progl.c。在此程序中,學生的記錄由學號和成績組成,N名學生的記錄已放入

主函數(shù)的結構體數(shù)組s中。請編寫函數(shù)fun(),其功能是把指定分數(shù)范圍內(nèi)的學生記錄存放

在b所指的數(shù)組中,分數(shù)范圍內(nèi)的學生人數(shù)由函數(shù)值返回。

如輸入的分數(shù)是60、69,則應當把分數(shù)在60~69的學生記錄輸出,包含60分和

69分的學生記錄。主函數(shù)中把60放在low中,把69放在high中。

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

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

填入你編寫的若干語句。

試題程序:

Sinclude<stdio.h>

ttdefineN16

typedefstruct

(

charnum[10];

ints;

}STREC;

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

voidmain()

{

STRECs[N]={{“GA005”,85},{“GA003”,76},

{“GA002",69},{“GA004”,

85},{“GA001”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA

015”,85},{“GA013”,

94},{“GA012",64},{“GA014”,91},{“GA011”,90},{“GA017”,64},{“

GA018”,64},{“GA016”,72}};

STRECh[N];

inti,n,low,high,t;

printf("Enter2integernumberlow&high:");

scanf("%d%d”,&low,&high):

if(high<low)

{t=high;high=low;low=t;}

n=fun(s,h,low,high);

printf(“Thestudent*sdatabetween%d—%d:\n”,low,high);

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

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

printf(“\n”);

)

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

31.下列給定程序中,函數(shù)fun()的功能是:實現(xiàn)兩個整數(shù)的交換。例如給a和b分別輸入

60和65,輸出為:a=65b=60

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

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

試題程序;

#include<stdio.h>

#include<conio.h>

/*************fQUQ(j**************/

voidfun(inta,b)

{intt;

/*************foup(j**************/

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

}

32.給定程序中,函數(shù)fun()的功能是:使數(shù)組中的元素的值增加10倍。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

ihtm[10];

voidfun(void)

(

intj;

printf("lnsubfuncaftercalling\n");

for(j=0;j<IO;j++)

{

/************fQ(JQ(j**********************/

printf(”%3d”,m[j]*IO);

)

)

main()

{inti;

printf("lnmainbeforecalling\n");

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

{

m[i]=i;

printf("%3d",m[i]);

}

fun();

printf("\nlnmainaftercalling\n");

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

printf("%3d",m[i]);

getch();

}

33.下列給定程序中,函數(shù)fun()的功能是:給定n個實數(shù),輸出平均值,并統(tǒng)計平均值以上

(含平均值)的實數(shù)個數(shù)。例如,n=8時,輸入193,199,195,673,195,757,196,051,196,092,

196,596,196,579,196,763,所得平均值為195.838745,在平均值以上的實數(shù)個數(shù)應為5。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(floatx[],intn)

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

ihtj,c=0;floatxa=0.0;

for(j=0;j<n;.j++)

xa+=x[j]/n;

printf("ave=%f\n"1xa);

forQ=0;j<n;j++)

if(x[j]>=xa)

C++;

returnc;

)

main()

{floatx[IOO]={193.199,195.673,195,757,

196,051,196,092,196,596,

196.579,196.763};

clrscr();

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

)

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

例如,若m中的值為的則應輸出:1.463611。

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

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

[試題源程序]

#include<stdiO.h>

doublefun(intm)

doubley=1.0;

inti;

/*************fQUQ(j*************/

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

/*************fQUQ(j*************/

y+=l/(i*i);

return(y);

)

main()

{

intn=5;

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

}

35.給定程序M0DI1.C中函數(shù)fun的功能是:從低位開始取出長整型變量s中奇數(shù)位上的

數(shù),依次構成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如:當S中的數(shù)為2736598

時,t中的數(shù)為:2358。

#include<conio.h>

#include<stdio.h>

/************fQ(JQ(j************/

voidfun(longs,longt)

{longsl=10;

*t=S%10;

while(s>0)

{s=s/IOO;

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

/************fQ(JQ(j************/

sl=sl*100;

)

}

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");

scanfC^ld",&s);

fun(s,&t);

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

)

36.給定程序MODII.C中函數(shù)fun的功能是:求整數(shù)x的y次方的低3位值。例如,整數(shù)

5的6次方為15625,此值的低3位值為625。

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

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

*include<stdio.h>

2longfun(intinty,long*p)

3{inti;

4longt-1;

5/??found****#?*肯?/??*/

6for(i-l;i<y;—

7

8*p-t;

9/………?…found

10!t-t/1000;

11?returnt;

12?}

13main()

14{longt,r;intxry;

15printf(w\nlnputxandy:M);

ww

scanf(%ld%ld/&x,&y);

16t>fun(x,y,&r);

w

17printf(\n\nx?%dry-%drr-%ld#

w

last?%ld\n\nrxry,r,t);

18

37.給定程序MODII.C中函數(shù)fun的功能是:求三個數(shù)的最小公倍數(shù)。

例如,給主函數(shù)中的變量xl、x2、x3分別輸入15"2,則輸出結果應當是:330。

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

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

1linclude<stdio.h>

2

3fun(intx.y,z)

4{intjrt,n,m;

5j-1;

6

7m-j%y;

8n-j%z;

9while(t!m0||m!?0||n!*0)

10<j-j+1;

11

12

13n=j%z;

************found*****w******

16returni;

17

18main()

19{intxl,x2,x3,j;

20printf("Inputxlx2x3:");

Rw

scanf(%d%d%dr&xl,&x2,&x3);

21printf("xl=*d,x27d,x3?%d\n",

xl,x2rx3);

22j"fun(xlfx2,x3);

23printf("Theminimalcommon

multipleis:%d\n°rj);

24

38.下列給定程序中,函數(shù)fun()的功能是:在字符串str中找出ASCII碼值最大的字符,將

其放在第一個位置上,并將該字符前的原字符向后順序移動。例如,調(diào)用fun()函數(shù)之前給

字符串輸入ABCDeFGH,調(diào)用后字符串中的內(nèi)容為eABCDFGH。

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

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

試題程序:

#include<stdio.h>

/***************fQ(JQ(j************/

fun(char*p)

{charmax,*q;inti=0;

max=p[i];

while(p[i]!=0)

{if(max<p[i])

/*★*************f0(JQ(j************/

p=q+i;max=p[i];

}

i++;

}

/***************foupJ************/

while(q<p)

{*q=*(q-l);

q--;

}

p[O]=max;

)

main()

{charstr[80];

printf("Enterastring:");gets(str);

printf("\nTheoriginalstring:");

puts(str);

fun(str);

printf("\nThestringaftermoving:");

puts(str);printf("\n\n");

)

39.給定程序MOD".C中函數(shù)fun的功能是:根據(jù)輸入的三個邊長(整型值),判斷能否構

成三角形:構成的是等邊三角形,還是等腰三角形。若能構成等邊三角形函數(shù)返回3.若能

構成等腰三角形函數(shù)返回2,若能構成一般三角形函數(shù)返回1,若不能構成三角形函數(shù)返回

0。

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

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

1linclude<stdio.h>

2tinclude<math.h>

3/?found**

4voidfun(inta,intb,intc)

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

6if(a==b&&bMc)

7return3;

8elseif(a?=bI|b*-c||a?c)

9return2;

10/?foundf

11elsereturn1

12}

13elsereturn0;

14)

15main()

16(intarbrcrshape;

w

17printf(\nlnputarbrc:");scanf

wH

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

a,b,c);

19shape-fun(arbrc);

n

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

shape);

21

40.已知一個數(shù)列從。項開始的前3項:0,0,1,以后的各項都是其相鄰的前3項之和。

下列給定的程序中,函數(shù)fun()的功能是:計算并輸出該數(shù)列前。項的平方根之和sum。n的

值通過形參傳入。例如,當n=10時,程序的輸出結果應為23.197745。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

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

fun(intn)

{doublesum,sO,si,s2ts;intk;

sum=1.0;

if(n<=2)sum=0.0;

s0=0.0;si=0。s2=1.0;

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

{s=s0+sl+s2;

sum+=sqrt(s);

sO=sl;sl=s2;s2=s;

)

/****************fQ(JQ^j*****************/

returnsum

)

main()

{intn;

clrscr();

printf("lnputN=");

scantC^d",&n);

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

)

五、程序改錯題(2題)

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

值。從第一項起,斐波拉契級數(shù)序列為1,1,2,3,5,8,13,21,…例如,若給n輸入

8,該項的斐波拉契級數(shù)值為21。請修改程序中的錯誤,使它能得出正確的結果。注意:

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

nincludeVNdg.

proHmt<>

//????(ound????

swiidi(f)g

cawOtreturnO*

//????lound????

11CSM11mum11

rvium(pcoctg1)4proc(c2))i

midtwain()

lon<fibiMMm

phfit(<*Inputn)i

fib*proc<n)t

pftnthKd\n\n*.5b)i

42.

下列給定程序中函數(shù)fun()的功能是:用遞歸算法計算斐波拉契數(shù)列中第n項的值。從第

I項起,斐波拉契數(shù)列為:1,1,2,3,5,8,13.21,…例如,若給n輸入7,則該項的

斐波拉契數(shù)值為13。請改正程序中的錯誤,使它能得出正確結果。注意:不要改動main

()函數(shù),不得增行或刪行,也不得更改程序的結構!試題程序:

itinrludrVtldio.h>

km*fua(ie<g>

〃????????

?wiic*i(g>?

cawOtrcturti0i

//????found????

rax1ICAX2ireturnIt

|

reium(fun(g-I)+fwn《.-2》九

vendn?in<)

long(ibimim

(*lnp?ilni*)i

?£?!)(<"Kd"?&-!!)|

pnntf<*n-Sd\n*.n>s

fibAfun<n>i

prtatf("Tib=^id\n\ci*?fib)i

六、操作題(2題)

43.下列給定程序中函數(shù)fun的功能是:用遞歸算法計算斐波拉契數(shù)列中第n項的值。從第I

項起,斐波拉契數(shù)列為:1,1,2,3,5,8,13.21,-

例如,若給n輸入7,則該項的斐波拉契數(shù)值為13。

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

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

試題程序:

#include<stdio.h>

longfun(intg)

(

〃****found****

switch(g);

(

case0:return0;

//★★★★found****

caseI:case2:returnl;

)

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

)

voidmain

(

longfib;intn;

printf("lnputn:");

scanfC'Wd",&n);

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

fib=fun(n);

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

44.以下fun函數(shù)的功能是在N行M列的整型二維數(shù)組中,選出一個最大值作為函數(shù)值返

回,請?zhí)羁?。(設M,N已定義)

intfun(inta[N][M])

{inti,j,row=0,col=O;

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

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

if(a[i][j]>a[row][col])(row=i;col=j;)

return();

參考答案

1.120120解析:靜態(tài)變量的類型說明符是static,靜態(tài)局部變量屬于靜態(tài)存儲方式,它具有

以下特點:

①靜態(tài)局部變量屬于靜態(tài)存儲類別,在靜態(tài)存儲區(qū)內(nèi)分配存儲單元。在程序整個運行期間都

不釋放。

②對靜態(tài)局部變量是在編譯時賦初值的,即只賦初值一次,在程序運行時它已有初值。以后

每次調(diào)用函數(shù)時不再重新賦初值而只是保留上次函數(shù)調(diào)用結束時的值。

③如在定義局部變量時不賦初值的話,則對靜態(tài)局部變量來說,編譯對自動賦初值0(對數(shù)值

型變量)或空字符(對字符變量)。(注意:C語言中的非靜態(tài)變量在定義時,系統(tǒng)并不會自動給

它賦初值)

④雖然靜態(tài)局部變量在函數(shù)調(diào)用結束后仍然存在,但其他函數(shù)是不能引用它的。

本題中函數(shù)的功能是:與for語句一起求一個整數(shù)的階乘。

2.100100解析:本題考查帶參數(shù)的宏定義及相關運算。運算過程為:

k=B*20=(A+3)*20=(2+3)*20=100。

3.x/10case0:case1:case2:case3:case4:case5:case9:x/10\r\ncase0:case1:

case2:case3:case4:case5:\r\ncase9:

4.n/=10n/=10解析:正整數(shù)按逆序輸出,即從低位到高位順序取出該正整數(shù)個數(shù)位的值輸

出。"s=n%10”為除10取余,第一次循環(huán)取出該正整數(shù)小數(shù)位,為順序移位,該空應為

n/=10o

5.數(shù)據(jù)存儲數(shù)據(jù)存儲

6.k=p;k=p;解析:為要尋找數(shù)組中的最大元素的下標,需先預設1個臨時最大元素的下

標,并順序逐一考查數(shù)組的元素,當發(fā)現(xiàn)當前元素比臨時最大元素更大時,就用當前元素的

下標更新臨時最大元素下標。直至考查了數(shù)組的全部元素后,這臨時最大元素下標就是數(shù)組

的最大元素下標。通常預設的最大元素下標是數(shù)組的首元素下標,考查是從首元素開始順序

向后繼元素考查。程序中,存儲臨時最大元素下標的變量是k,變量p控制順序考查的循環(huán)

控制變量。當發(fā)現(xiàn)當前元素s[p]比臨時最大元素s[k)更大時,應該用p更新k。所以在空框

處應填入代碼“k=p;

7.3535解析:考查swap。函數(shù)。函數(shù)swap(int*a,int*b)的功能是實現(xiàn)*a和*b中兩個數(shù)據(jù)

的交換,在主函數(shù)中調(diào)用swap(p,q)后,參形指針變量a和b分別指向i和j,在swap(int*a,int

*b)執(zhí)行完后指針變量a和b分別指向j和i,而指針變量p,q所指向變量的值沒有發(fā)生變化,

所以輸出結果為35。

8.3*sizeof(double)或size(double)*3或24或3*8或8*33*sizeof(double)或size(double)*3或

24或3*8或8*3解析本題考核的知識點是malloc()函數(shù)該函數(shù)的調(diào)用格式是"malloc(n)"

作用是申請n個字符的存儲單元,并返回該存儲區(qū)的首地址,實際調(diào)用的時候可在前面加上

"(類型說明符*)”,以轉換成需要的類型的地址.所以在此空格處應該填寫

3*sizeof(double)或size(double)*3或其他等價的表達式。

9.21

10.1212解析:x=(表達式1,表達式2,…)的形式,結果為最后一個表達式的值:

x=(a=4,6*2)=2*6=12o

11.C

12.B解析:二維數(shù)組的元素可以看成是按矩陣形式存放的,總是先存放第一行的元素,再存

放第二行的元素。數(shù)組第一維的下標是i,說明它前面還有i行,有i*m個元素,數(shù)組第二

維的下標是j,說明它前面還有j歹!I,有j個元素,所以共有i*m+j個元素。

13.B解析:一個函數(shù)可以帶回一個整型值、字符值、實型值等,但也可以帶回指針型數(shù)據(jù),

即地址。本題的定義中,包括括號和*號,由于()優(yōu)先級高于*。故它是一個返回整型指針的

函數(shù)。

14.D解析:因為x的值為大于1的奇數(shù)所以x除以2的余數(shù)等于1,因此,選項A)、C)中表達

式的結果為真,不為0;對于選項B)來說,x除以2的商不會等于0;選項D)中表達式的結果為假,

即等于0。

15.D

16.A變量m、n的數(shù)據(jù)類型未知,但題目中已定義并賦初值。選項B的語句缺少分號結尾。

選項C,強制轉化使用錯誤。選項D的“m*n”只能用作表達式的右值,不能作為左值。故本

題答案為A選項。

17.B

18.A

對下標為偶數(shù)的元素進行降序排序,下標為奇數(shù)元素保持不變。

19.D

20.C

21.voidproc(char*str0chart[3])

\n(

\ninti,j=0;

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

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

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

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

\n}

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

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

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

添加結束符。

\n

22.\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%ll==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

23.1intfun(char*str)2{3inti,n=0,fg=l;4char*p=str;5while(*p)/*將指針p指向字符串末尾,并統(tǒng)

計字符數(shù)*/6{7n++8P++;10}10for(i=0;i24.

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

針來計算字符串的長度。定義2個變量分別存放2個字符串的長度,最后比較2個字符串

的長度,返回相對較長的那一個字符串。

25.

【答案1

voidfun(char*a)

inti?j=O;

—刃

afjiZik尸若不是要除的字符,則保留?/

硝卜W;"會后加上字符串結束符W*/

},

【解析】

用循環(huán)操作從第一個字符開始,往后逐個與要能除的字符比較,保留要翻除字符以外的字符。變量i表

示原字符串的下標,變《tj表示刷除?號后新字符申的下標.且j從0開始,循環(huán)結束后給字符串加上結束

標識吹

26.

【解析】要返回指定成績的學生數(shù)據(jù),首先應該將所有學生的成績與指定成績相比較。如果

有學生的成績與指定成績相等,則將該學生的記錄返回給主函數(shù),否則將學號置成空串,成

績置一I返回給主函數(shù)。

27.voidfun(char*a,intn)

(

inti=0,k=0;

char*p,*t;

p=t=a;

/*將指針移動到字符串末尾*/

while(*t)

t++;

t—;

/*從后往前如果是*則使k自增1,找到最后一個*所在的位置,并記錄*的個數(shù)

*/

while(*t=='*')

/*指針t指向前一個,同時標量k自增1*/

{k++;t-;}

/*如果最后*的個數(shù)大于允許的個數(shù)*/

if(k>n)

/*循環(huán)次數(shù)不大于前面的字符與最大允許*的個數(shù)之和*/

{while(*p&&p<t+n+l)<p=""X/t+n+l)<>

/*把字符保存到數(shù)組a中*/

{a[i]=*p;

i++;p++;

a[i]='\0';

字符串中尾部*號不能多于n個,多余的要刪除。首先需要通過while循環(huán)統(tǒng)計字符串尾部*

號,然后通過if條件語句完成尾部*號數(shù)和n的比較,若尾部*號數(shù)多于n個,則需要把n個

*號和其余字符重新保存。

28.\r\n\tvoidproc(int(*s)[10],int*b,int*n,intmm,intnn)

(

inti,j,k=0;

for(i=0;i<mm;i++)//i是表示其行的下標

for(j=0;j〈nn;j++)//j是表示其列的下標

b[k++]=s[i][j];//把其放到b的一維數(shù)組中

*n=k;//把b數(shù)組的長度通過形參n傳回到主函數(shù)中

)

【解析】要將M行N列的二維數(shù)組中的數(shù)據(jù),按行的順序依次放到一維數(shù)組

中,可以通過首先行循環(huán),然后列循環(huán)取出二維數(shù)組中的每一個元素,并將其

放入一維數(shù)組中。最后,將一維數(shù)組的長度通過形參返回到主函數(shù)當中。

29.

【解析】首先我們應定義一個變量來表示其和,另一個來表示其項數(shù),然后通過循環(huán),求得

其差值,最后把和的平方返回到主函數(shù)中。

30.intfun(STREC*a,STREC*b,int1,inth)

(

inti,j=0;

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

if(a[i].s>=l&&a[i].s<=h)

/*將分數(shù)高于1,低于h的學生記錄存入結構體數(shù)組b中*/

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

returnj;/*返回分數(shù)范圍內(nèi)的學生人數(shù)*/

)

本題使用循環(huán)判斷結構實現(xiàn)題目要求。循環(huán)語句用于遍歷結構體數(shù)組;條件語句用于判斷當

前元素是否符合條件,若符合條件則將其存入結構體數(shù)組b中。變量j為數(shù)組b元素下標,

最后變量j+1為學生人數(shù),作為函數(shù)值返回。

31.(1)錯誤:voidfun(intab)正確:voidfun(int*aint*b)(2)錯誤:t=b;b=a;a=t;正確;

t=*b;*b=*a;*a=t;⑴錯誤:voidfun(inta,b)正確:voidfun(int*a,int*b)\r\n(2)錯誤:

t=b;b=a;a=t;正確;t=*b;*b=*a;*a=t;解析:本題考查指針變量做函數(shù)參數(shù)。采用一般變量

做參數(shù),不能改變實參的值,采用指針變量作為參數(shù)則能夠改變實參的值。主函數(shù)中fun()

的調(diào)用方式說明fun()函數(shù)的參數(shù)應當為指針類型。另外,值得一提的是“交換法則”,這

題的錯誤比較明顯,如果程序段中有隱蔽的交換錯誤,一般不容易發(fā)現(xiàn),希望學習者引起注

意。

32.錯誤:printf("%3d"m[j]*10);正確:printf("%3d"m[j]=m[j]*10錯誤:pri

溫馨提示

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

評論

0/150

提交評論