2023年河南省平頂山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2023年河南省平頂山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2023年河南省平頂山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2023年河南省平頂山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2023年河南省平頂山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023年河南省平頂山市全國計算機等級考

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

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

一、2.填空題(10題)

1.執(zhí)行以下程序后的輸出結(jié)果是【】。

main()

{inta=10;

a=(3*5,a+4);printf("a=%d\n",a);

)

2.若有如下定義,則該數(shù)組的第一維大小為【】。

intb口[4]={12,3,4,5,6,7,8,9);

3.下列程序的輸出結(jié)果是【】°

main()

{inta=l,b=2;

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

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

)

4.當調(diào)用函數(shù)時,實參是一個數(shù)組名,則向函數(shù)傳遞的是【】。

5.算法復雜度主要包括時間復雜度和【】復雜度。

6.以下程序的輸出結(jié)果是【】。

#defineMAX(x,y)(x)>(y)?(x):(y)

main()

{inta=5,b=2,c=3,d=3,t;

t=MAX(a+b,e+d)*10;

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

)

7.下面定義的結(jié)構(gòu)體類型包含3個成員,其中成員變量x用來存入整

型數(shù)據(jù),成員變量y用來存入實型數(shù)據(jù),成員變量next是指向自身結(jié)構(gòu)

體的指針。請將定義補充完整。

structstu

{intx;

[]

[]next;}

8.下列程序的輸出結(jié)果是16.00,請?zhí)羁眨?/p>

main()

(

inta=9,b=2;

floatx=[],y=l.1,z;

z=a/2+b*x/y+l/2;

printf("%5.2f\n",z);

)

9.數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)和存儲結(jié)構(gòu),循環(huán)隊列屬于結(jié)構(gòu)。

10.有以下程序

intf(intn)

{if(n==1)return1;

elsereturnf(n-l)+l;}

main()

{inti,j=0;

for(i=l;i<3;i++)j+=f(i);

printf("%d\n"j);}

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

二、單選題(10題)

11.假設所有變量均為整型,則表達式(a=2,b=5,b++,a+b)的值是()。

A.7B.8C.6D.2

12.對含有16個元素的有序表進行二分查找,關鍵字比較次數(shù)最多是0

A.3B.4C.5D.6

31)下列一維數(shù)組說明中,不正確的是().<-

A)intN;B)floata[]={l,6,6,0,2};

scanR"%d",&N);

intb[N];、-

13.c)defines10D)inta[S+5];

14.在排序方法中,元素比較次數(shù)與元素的初始排列無關的是()

A.Shell排序B.歸并排序C.直接插入排序D.選擇排序

15.有以下程序:

#include<stdio.h>

main()

{intx=0x9;

printf("%c\n''JA'+x);

)

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

A.IB.JC.KD.H

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

A.使用三種基本結(jié)構(gòu)構(gòu)成的程序只能解決簡單問題

B.結(jié)構(gòu)化程序由順序、分支、循環(huán)三種基本結(jié)構(gòu)組成

C.C語言是-種結(jié)構(gòu)化程序設計語言

D.結(jié)構(gòu)化程序設計提倡模塊化的設計方法

17.有以下程序:

#include<stdio.h>

intfun(int*a,int*b,intn)

{inti=0,j=0,sum=0;

for(;i<n;i++)

{sum+=a[i];

if((i+l)%2==0)

{b[j++]=sum;sum=0;}

)

returnj;

)

main()

{inta[8]={1,0,23,5,4,2,1},b[8],k,i;

k=fun(a,b,8);

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

printf("%d”,b[i]);

程序的運行結(jié)果是()o

A.0242B.1593C.1351D.286

18.已知二叉樹后序遍歷序列是CDABE,中序遍歷序列是CADEB,它

的前序遍歷序列是0

A.ABCDEB.ECABDC.EACDBD.CDEAB

19.串的長度是指()。

A.串中所含不同字母的個數(shù)B.串中所含字符的個數(shù)C.串中所含不同

字符的個數(shù)D.串中所含非空格字符的個數(shù)

20.定義學生選修課程的關系模式如下:SC(S#,Sn,C#,Cn,G,Cr)(其

屬性分別為學號、姓名、課程號、課程名、成績、學分)則對主屬性部分

依賴的是0。

A.C#一CnB.(S#,C#)一GC.(S#,C#)一S#D.(S#,C#)一C#

三、程序設計題(10題)

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

方案的項目中包含一個源程序文件progl.c。在此程序中,編寫程序,

實現(xiàn)矩陣(3行、3歹U)的轉(zhuǎn)置(即行列互換)。

例如,若輸入下面的矩陣:

100200300

400500600

700800900

則程序輸出:

100400700

200500800

300600900

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

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

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

試題程序:

1

1#include<stdio.h>

2#include<conio.h>

3#include<stdlib.h>

4voidfun(intarray[3][3])

5{

6

7}

8voidmain()

9{

10FILE*wf;

11inti,j;

12intarray[3][3]={{100,200,300},{400,500,600},{700,800,900}};

13system("CLS");

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

15{for(j=0;j<3;j++)

16printf("%7d",array[i][j]);

17printf("\n");

18)

19fun(array);

20printf("Convertedarray:\n");

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

22{for(j=0;j<3;j++)

23printf("%7d",array[i][j]);

24printf("\n");

25)

26/*********found*********/

27wf=fopen("out.datn,"w");

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

29{for(j=0;j<3;j++)

30fprintf(wf,"%7dn,array[i][j]);

31fprintf(wf,"\n");

32)

33fclose(wf);

35)

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

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

符串函數(shù)。

例如,字符串中的內(nèi)容為“****A*BC*DEF*G****“,刪除后,字符串

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

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(chara)

(

voidmain

(

chars[81];

print{("Enterastring:\n");

gets(s):

fun(S);

printf("Thestringafterdeleted:\n");

puts(s);

)

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

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

TT.I.1x2\x2x3Ix2x3x4Ix2x???xn

233x53x5x73x5x7x9*3x5x???x(2n+!)

程序運行后,若輸入精度

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

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

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

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

#itM,ludr<uldio.h>

Mindudr<math,h>

doublefiin(double)

main()

<k)uhlcx;voidNONO();

print""Inputep?:");

wMM

scanf(%IP(&x);printf(\nrps=%if.PI=%If\n,xvfun(x));

N()NO();

voidNONO()

l/?本函數(shù)用T打開文件,愉人數(shù)據(jù).調(diào)用函數(shù).整出數(shù)據(jù),關閉文件,?/

FILE?fp,?wf;

inii(

doublex;

fp=fopcn(*in.<ia!".Hr**).

wfsfbpen("out.dal°,"w*);

!br(ix0;i<10;i++)|

fRcanf(fpt"%IT*.&、);

M

fprint/(wf.%lAn*.fun(x))5

fr1r?e(fp);

frlosc(

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

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

其功能是根據(jù)以下公式計算S,并將計算結(jié)果作為函數(shù)值返回,通過形

參傳入。

5=1+—+?—!+…+----------1______

1+21+2+31+2+3+…+”

例如,若n的值為11時,函數(shù)的值為1.833333。

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

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

floatfun(intn)

(

)

voidmain()

{

intn;

floats;

system(“CLS”);

printf("WPleaseenterN:");

scanf("%d”,&n);

s=fun(n);

printff'Theresultis:%f\n^^,s);

)

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

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

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

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

符串存放在t所指的數(shù)組中。

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

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

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

其他依此類推。最后t所指數(shù)組中的內(nèi)容應為“135”。

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

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

}

26.

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

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

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

應當是a*bc*def*g****。注意:部分源程序給出如下。請勿改動main

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

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

8icotludcVadicuJ

Smcludr<como.h>

voidproc《char??tr>

vutdRMinC)

rtuir?tr{SI;i

prmdCvEnirr■?thngt\n*H

get?<str>t

proc?Mf)i

praitR*TheMnt<afterdeletrdt\B*)9

t>ut.《Mf)lI

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

的項目中包含一個源程序文件progl.c。在此程序中,學生的記錄由學號

和成績組成,N名學生的記錄已放入主函數(shù)的結(jié)構(gòu)體數(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()的花

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

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

charnum[10];

ints;

}STREC;

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

voidmain()

(

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

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

85},{“GAOO1”,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GAO1

5”,85},{“GAO13”,

94},{“GAO12”,64},{“GAO14”,91},{“GAO11”,90},{“GAO17”,64},{“GAO

18”,64},{“GAO16",72}};

STRECh[N];

inti,n,low,high,t;

printf("Enter2integernumberlow&high:,,);

scanf(u%d%d,,,&low,&high);

if(high<low)

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

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

printf(4tThestudent'sdatabetween%d--%d:\n,\low,high);

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

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

printf("\n”);

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

能是:除了尾部的*號之外,將字符串中其他*號全部刪除。形參P已指

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

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

中的內(nèi)容應當是abcdefg****。注意:部分源程序給出如下。請勿改動

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

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

3meludcVcomah>

smcludr<Mdio.b>

voidproHrhar?Bfr?char?p>

>

voidIBAIM>

char?ii

pntM/("EnterantnngAne)i

grt?(fbtrli

l*niri

wh*le4*l)

?4+B

t-i

wtid?<?)

t--?/陸的?指向量后一個字母

l>roc<Mr?t)t

prtnrfC*Thr7nMafterMetedAn*

put?(str)t

29.學生的記錄由學號和成績組成,M名學生的數(shù)據(jù)已在主函數(shù)中放

人結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,它的功能是:把指定分數(shù)范圍

之外的學生數(shù)據(jù)放在b所指的數(shù)組中,分數(shù)范圍之外的學生人數(shù)由函

數(shù)值返回。

例如,輸入的分數(shù)是70和79,則應當把分數(shù)低于70和高于79的學生

數(shù)據(jù)輸出,不包含70分和79分的學生數(shù)據(jù)。主函數(shù)中把70放在low

中,把79放在heigh中。

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

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

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

試題程序:

#include<stdio.h>

#defineM16

typedefstruct

{

charnum[10];

ints:

)

STREC;

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

(

)

voidmain

(

STRECstu[M]={{"GA005",55),{"GA003",96},

{"GA002",80),{"GA004",68),

{"GA001",88},{"GA007",74},

{"GA008",85),{"GA006",89},

{"GA015",90),{"GA013”,53),

{"GA012",66},{"GAO14”,82),

{"GAOH",73},{"GAO17",69),

{"GAO18",64),{"GA016",86}};

STRECh[M];

inti,n,low,heigh,t;

printf("Enter2integernumberlow&

heigh:");

scanf("%d%d",&low,&heigh);

if(heigh<low)5

t=heigh:

heigh=low;

low=t;

)

n=proc(stu,h,low,heigh);

printff'TheStudent'Sdataout

%d—%d:\n",low,heigh);

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

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

//輸出指定分數(shù)范圍內(nèi)的學生記錄

printf("\n");

)

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

案的項目中包含一個源程序文件progl.c。在此程序中,學生的記錄由學

號和成績組成,N名學生的記錄已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請

編寫函數(shù)fun(),其功能是把低于平均分的學生記錄放入b所指的數(shù)組

中,低于平均分的學生人數(shù)通過形參n返回,平均分通過函數(shù)值返回。

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

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

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

試題程序:

#include<stdio.h>

#defineN8

typedefstruct

(

charnum[10];

doubles;

}STREC;

doublefun(STREC*a,STREC*b,int*n)

voidmain()

(

STRECs[N]={{"GA05'',85},{“GA03'',76},{“GA02”,69},{“GA04”,

85},{“GAOr,91},{“GA07”,72},{“GA08”,64},{“GA06”,87}};

STRECh[N];

inti,n;

doubleave;

ave=fun(s,h,&n);

printff'The%dstudentdatawhichislowerthan%7.3f:\n”,n,ave);

for(i=0;i<n;i++)<p=""x/n;i++)<>

/*輸出成績低于平均分的學生記錄*/

printf("%sh[i].num,h[i].s);

printf("\n");

)

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

31.下列給定程序中,函數(shù)fun()的功能是找出100~n(n不大于1000)之

間百位數(shù)字加十位數(shù)字等于個位數(shù)字的所有整數(shù),把這些整數(shù)放在s所

指的數(shù)組中,個數(shù)作為函數(shù)值返回。

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

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

試題程序:

#include<stdio.h>

#defineN100

intfun(int*s,intn)

inti,j,k,a,b,c;

>0;

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

(

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

k=n;

a=k%10;

k/=10;

b=k%10;

c=k/10;

if(a==b+c)

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

s[j]=i;

)

returnj;

)

main()

(

intafN],n,num=0,i;

do

(

printf("\nEntern(<=1000):”);

scanf("%d",&n);

)

while(n>1000);

num=fun(a,n);

printf("\n\nTheresult:\n,5);

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

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

printf("\n\n");

)

32.給定程序M0D11.C中函數(shù)fun的功能是:計算小于形參k的最大

的10個能被13或17整除的自然數(shù)之和。k的值由主函數(shù)傳入,若k的

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

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

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

1?include<stdio.h>

2intfun(intk)

3{intm-0rmc-0;

4while((k>?2)&&(me<10))

5(

6/************found**???***?***/

7if((k%13-0)||(k%17-0))

8{m-tn*k;mc++;}

9k--;

10}

11returnm;

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

13

14main()

15(

HH

16printf(%d\nrfun(500));

17)

33.下列給定程序中,函數(shù)fun()的功能是:根據(jù)以下公式求n的值,并

作為函數(shù)值返回。例如,給指定精度的變量eps輸入0.0005時,應當輸

出Pi=3.140578。

n/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*479.......

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doubleeps)

{doubles,t;intn=t;

s=0.0;

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

t=l;

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

while(t>eps)

{s+=t;

t=t*n/(2*n+l);

n++;

).............................................................

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

return(s);

)

main()

{doublex;

printf("\nPleaseenteraprecision:");

scanf("%lf',&x);

printf("\nPi=%lf\n",fun(x));

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

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

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

/******+****jf^Qund*************/

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^"1n,fun(n));

}

35.下列給定程序中,函數(shù)fun()的功能是讀入一個字符串(長度<20),

將該字符串中的所有字符按ASCII碼降序排序后輸出。

例如:輸入dafhc,則應輸出hfdcao

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

intfun(chart[])

charc;

inti,j;

for(i=0;i<strlen(t)-1;i++)

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

if(t[i]<t[j])

c=t[j];

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

t[i]=t[i++];

t[i]=c;

)

main()

chars[81];

clrscr();

printf("\nPleaseenteracharacter

string:");

gets(s);

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

fun(s);

printf("\nAftersortingdecendingly:\n

%s",s);

)

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

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

例如當s中的數(shù)為25846513時,t中的數(shù)為6482。請改正函數(shù)fun()

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(longS,long*t)

(

intd;

longsl=l,i=l;

*t=0;

while(s/i>0)

i=i*10;

i=i/10;

while(s>0)

d=s/i

if(d%2!=0)

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

t=d*sl+t;

sl*=10;

)

S=S%i;

i=i/10;

)

)

main()

(

longS,t;

clrscr();

printf("\nPleaseenterS:");

scanf("%ld",&s);

fun(S,&t);

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

)

37.下列給定程序中,函數(shù)fun()的功能是計算并輸出high以內(nèi)的素數(shù)

之和。high由主函數(shù)傳給fun()函數(shù)。若high的值為100,則函數(shù)的值

為1060o

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

intfun(inthigh)

(

intsum=0,n=0,j,yes;

while(high>=2)

(

yes=l;

for(j=2;j<=high/2;j++)

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

ifhigh%j==O

(

yes=0;

break;

)

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

if(yes==0)

(-

sum+=high;

n++;

)

high-;

)

returnsum;

)

main()

(

clrscr();

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

38.下列給定程序中,函數(shù)fun()的功能是::求k!(k<13),所有階乘的

值作為函數(shù)值返回。例如:若k=10,則應輸出3628800。

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

注意:不要改動main函數(shù),不得增行或刪行,也不得更

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

試題程序:

#include<conio.h>

#include<stdio.h>

longfun(intk)

{,...........................................................

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

ifk>0

return(k*fun(k-1));

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

elseif(k=0)

return1;

}

main()

{intk=10;

clrscr();

print,("%d!=%ld\n",k,fun(k));

}

39.在主函數(shù)中從鍵盤輸入若干個數(shù)放入數(shù)組中,用。結(jié)束輸入并放在

最后一個元素中。下列給定程序中,函數(shù)fun()的功能是計算數(shù)組元素中

值為負數(shù)的平均值(不包括0)。

例如:數(shù)組中元素的值依次為43,47,-21,53,-8,12,0,則程序的

運行結(jié)果為-25.333333。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intx[])

(

doublesum=0.0;

intc=0,i=0;

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

while(x[i]==0)

(

if(x[i]<0)

{

sum=suin+x[i];

C++;

)

i++;

)

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

sum=sum\c;

returnsum;

)

main()

{

intx[1000];

inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith

0):”);

do

{

scanf("%d",&x[i]);

}while(x[i++]!=0);

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

)

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

n項之和。

23581321

T*2,3*5*T'

和值通過函數(shù)值返回main函數(shù)。

例如,若n=5,則應輸出:8.391667o

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

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

1linclude<stdio.h>

2"。口廿

3fun(intn)

4(inta-2rb-lrcfk;

5doubles?0?0;

6for(k*1;k<?n;k++)

7(s=s+1.0*a/b;

8

9c?a;a?=b;b+-c;

10}

11return(s);

12)

13main()

14{intnk5;

15printf("\nThevalueoffunction

is:%lf\n"rfun(n));

16

五、程序改錯題(2題)

41.

下列給定程序中,函數(shù)proc()的功能是:根據(jù)整型參數(shù)m,計算如下

公式的值:y=l/(100100)+1/(200200)+1/(300300)+...+1/

(mm)例如,若m=4000,則應輸出。.000162°請修改程序中的錯

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

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

#iwlttdrVcoaio.h>

3indude<ntcfoo.h>

//????found????

pcocCiMm)

doubley-0.d<

inih

//????(o?ind????

Ford-"--100)

(double>i?(<iovUk>ii

,+7.0/dB

r*?urn<y>i

Eidmikin()

(mtn-40008

*CLSe)i

pnntf(*\nTbcmultisKlf\n*?proc<n))i

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

個元素按從大到小的順序進行排序。請修改程序中的錯誤,使它能得

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

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

>defineM20

moidpror<mta(J?IQIn)

int

k>r(j-O“Vi?-1“++>

//????(otind<???

<p-j

(or《,,hYmH+>

〃????(ound????

F*l?

—??D]i

L

voidmain<>

mtarrf?9?6?B?1?一1)?i?fnm5i

小■的

for4e0iiV?n8i十?)pntM((AHd

proc(arr?m)i

所或£小||巾£的?庫

for(i-OiYmii++>prmtf《?%d

prifttfC

六、操作題(2題)

43.

請補充函數(shù)proc(),其功能是:計算并輸出給定10個數(shù)的方差。例

如,給定的10個數(shù)為12.0,9.0,26.0,5.0,6.0,31.0,9.0,

3.0,8.0,18.0,輸出為s=8.877500o注意:部分源程序給出如

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

()的橫線上填入所編寫的若干表達式或語句。試題程序:

0includeVfrtdio.

01rwlu4rVRMth.b>

dtMiblrpror<duubk?[10;)

beiit

doubleavg-Q.0.

double*wO.。,

double?t???0,0?

doublrMII

(0€(1*0|?<|0||>>)

IiJI

W=MMH/IOI

lor(i-lOii-f-?)

Pl?

T**?3ji

E&Exdl

widmam()

double**?4Kif£lOj-(12.0,9.0424.03.0?B.0?3L0.

9v0?3.0.t.0wit.01?

inih

(>rintf(a\nTheorigmaldau?i\na>i

(or(i?0.iV10gi++)

prmifc*Si,IC?

pcintfC*\?\n>>?

■*pfoctutr)i

prmt??,?i

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

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

fun(),其功能是求斐波那契數(shù)列中大于t的最小的數(shù),結(jié)果由函數(shù)返

回。斐波那契數(shù)列F(n)的定義為

F(0)=0,F⑴=1

F(n)=F(n-l)+F(n-2)

例如,當如1000時,函數(shù)值為1597。

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

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

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

試題程序:

#include<conio.h>

#include<math.h>

#include<stdio.h>

intfun(intt)

(

)

main()

(

intn;

n=lOOO;

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

參考答案

l.a=14a=14解析:逗號表達式的值是以逗號分隔的最后一個表達式的

值。所以題目中的語句a=(3*5,a+4);就等價于a=a+4;。故本題輸出結(jié)果

是a=14o

2.33解析:在初始化一個含有未指定維度的數(shù)組時,C語言總是在能完

全容納初始化列表的基礎上盡可能小地設定該維度,來作為指定維度的

標準。本題有9個初始值,若指定第一維度為2,則數(shù)組含有2*4=8個

元素,容納不下,所以指定維度為3,3*4=12,足夠容納了。故應該填

3O

3.21

4.數(shù)組的首地址數(shù)組的首地址解析:在函數(shù)中,可以通過指針變量來引

用調(diào)用函數(shù)中對應的數(shù)組元素,此操作是通過傳遞數(shù)組的首地址來實現(xiàn)

的。

5.空間空間解析程序在計算機上運行時所耗費的時間由程序運行時所

需輸入的數(shù)據(jù)總量、對源程序進行編譯所需時間、計算機執(zhí)行每條指令

所需時間、程序中的指令重復執(zhí)行的次數(shù)等決定。習慣上常常把語句重

復執(zhí)行的次數(shù)作為算法運行時間的相對量度,稱作算法的時間復雜度。

算法在運行過程中需輔助存儲空間的大小稱為算法的空間復雜度。

6.77解析:在C語言中,宏定義是直接替換的,所以在對表達式

MAX(a+b,c+d)*10進行替換后,表達式變?yōu)?a+b)>(c+d)?(a+b):(c+d)*10。

在這個條件表達式中,(a+b)>(c+d)為真,所以用(a+b)的值作為整個表

達式的值(否則用(c+9d)*10)的值作為整個表達式的值),而(a+b)的值為7O

所以整個表達式的值為7。

7.floaty;structstu*floaty;\r\nstructstu*解析:float定義變量y為實

型變量。要求變量next是指向自身結(jié)構(gòu)體的指針,因此變量next應該

是結(jié)構(gòu)體stu的指針型變量。

解析:本題,已知結(jié)果z=16.00,即16.0=a/2+b*x/y+l/2,分別

把a、b,代入,得到16.0=9/2+2*x/l.1+1/2。因為a=9,a是整型,所以

9/2的值在沒有進行類型轉(zhuǎn)換時,等于4,1/2同理,等于0o代入求一

元一次方程,很容易就可以得出x=6.6。

9.存儲或物理或存儲結(jié)構(gòu)或物理結(jié)構(gòu)存儲或物理或存儲結(jié)構(gòu)或物理結(jié)構(gòu)

解析:數(shù)據(jù)的邏輯結(jié)構(gòu)在計算機存儲空間中的存放形式稱為數(shù)據(jù)的存儲

結(jié)構(gòu)(也稱數(shù)據(jù)的物理結(jié)構(gòu))。所謂循環(huán)隊列,就是將隊列存儲空間的最

后一個位置繞到第一個位置,形成邏輯上的環(huán)狀空間o供隊列循環(huán)使用O

可知,循環(huán)隊列應當是物理結(jié)構(gòu)。

10.3

11.B

12.C

13.A

14.D

15.B“printfT%C\\n",'A'+X),x=0X9;"中0x9是十六進制數(shù),轉(zhuǎn)為十進制

數(shù)x=9°“printf("%C\\n"JA,+9);",輸出格式要求是“%c”,因此將字符公

按字母順序向后偏移9個位置,可得結(jié)果為“J”。故本題答案為B選項。

16.A

使用順序,選擇(分支),循環(huán)三種基本結(jié)構(gòu)構(gòu)成的程序可以解決所有問

題,而不只是解決簡單問題,所以A錯誤。

17.B程序中,fun函數(shù)的功能是接收兩個數(shù)組a、b,以及數(shù)組a的元素

個數(shù)n,然后通過for循環(huán)將數(shù)組a中下標為偶數(shù)的元素與后面相鄰的

下標為奇數(shù)的元素兩兩相加,賦給數(shù)組b中下標為j的元素,最后返回

數(shù)組b的個數(shù)。所以main函數(shù)中,通過調(diào)用fun函數(shù),將數(shù)組a的元素

兩兩相加,得到數(shù)組b的各個元素,再通過for循環(huán)輸出,結(jié)果為:15

930故本題答案為B選項。

18.C

由于后序遍歷的最后一個兒素為E,所以E為根結(jié)點,所以它的前序

遍歷的首個元素為E,敞排除A)和D)選項。由于中序遍歷中,元素B

在元素根結(jié)點E自:J后面,所以B為二叉樹的右子樹,并且該二叉

樹右子樹只有一個兒素,所以前序遍歷的最后一個元素應為B,故選

項C)為正確選項,即該二叉埔的前序遍歷序列是EACDBo

19.B解析::串的長度定義為串中字符的數(shù)目。所以B)為正確答案。C)

答案不正確,因為串中可以含有相同的字符;A)答案不正確,因為串中

可能含有相同的字母,而且也可能含有數(shù)字等其他非字母字符;D)答案

不正確,因為空格也是一種字符,在計算長度時理應將其計算在內(nèi)。

20.A關系SC中的主鍵是(S#,C#),但C#(課程號)單獨就可以決定Cn(課

程名),存在著對主鍵的部分依賴。本題答案為A選項。

21.1voidfun(intarray[3][3])

2(

3inti,j,t;

4for(i=0;i<3;i++)/*將上三角和下三角對換,實現(xiàn)行列互換*/

5for(j=i+l;j<3;j++)

6{t=array[i][j];

7array[i][j]=array[j][i];

8array[j][i]=t;

9)

10)

要實現(xiàn)矩陣轉(zhuǎn)置,即將上三角數(shù)組元素和下三角數(shù)組元素對換,本題

通過數(shù)組元素交換方法,完成矩陣轉(zhuǎn)置操作。因為對矩陣轉(zhuǎn)置后仍然

存回其本身,所以只能循環(huán)矩陣中的一本程序選擇的是上三角)。控制

上三角的方法是在內(nèi)層循環(huán)中從i+1或i開始循環(huán)變量j。

22.\n\tvoidfun(char*a)

\n{

\ninti,j=0;

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

\nif(a[i]!=*)

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

\na[j]=\O;//最后加上字符串結(jié)束符\0

\n}

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

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

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

的字符串輸出即可。\n

23.

【考點分析】

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

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

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

初值操作。

【解題思路】

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

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

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

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

24.floatfun(intn)

inti,sl=0;

floats=0.0;

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

(

sl=sl+i;/*求每一項的分母*/

s=s+1.0/sl;/*求多項式的值*/

)

returns;

)

首先需要根據(jù)題意分析表達式的規(guī)律,得出通項,然后再完成程序語句。

本題中公式的規(guī)律類似于求1+2+…+n的倒數(shù)之和??梢酝ㄟ^for循環(huán)

語句來實現(xiàn)第1項到第n項的變化。先根據(jù)題目要求定義變量,注意

該變量的數(shù)據(jù)類型。然后對其進行初始化操作,因為該變量相當于累

加器,所以初值應為0(或0.0,根據(jù)變量數(shù)據(jù)類型來確定),再通過for

循環(huán)語句來完成累加過程。

本題中si用來表示每一項的分母,每一項的分母都是由前一項分母加

項數(shù)得到的。注意,由于si定義成一個整型,因此在s=s+1.0/sl語句

中不能把1.0寫成1。

25.voidfun(char*s,chartf])

(

inti,j=0,n;

n=strlen(s);

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

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

(

tU++]=s[i];/*將下標為奇數(shù)同時ASCII值為奇數(shù)的字符放入數(shù)組

t中*/

)

切]='\0';/*最后加上字符串結(jié)束標志*/

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

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

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

26.

【解析】題目中要求將字符串中的前導*號全部刪除,首先將指針P移

動到第一個不是*的字符,將指針p之后的字符放入原來的字符串中,

并為新的字符串添加結(jié)束符。

27.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的學生記錄存入結(jié)構(gòu)體數(shù)組b中*/

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

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

)

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

條件語句用于判斷當前元素是否符合條件,若符合條件則將其存入結(jié)構(gòu)

體數(shù)組b中。變量j為數(shù)組b元素下標,最后變量j+1為學生人數(shù),作

為函數(shù)值返回。

28.

題目中要求除了尾部的*號之外,將字符串中其他*號全部刪除。首先將

所有不是*的字符放在字符串str中,然后將尾部的*接在字符的后面,

最后為字符串str加上結(jié)束符。

29.\n\tintproc(STREC*a,STREC*b,inti,inth)\n

\n

\n\t{\n

\n

\n\tinti,j=0;\n

\n

\n\tfor(i=0;i<M;i++)\n

\n

\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n

\n

\n\t[i].s<=100))//通過if語句,來判斷指定范圍如

\n

\n\t之外的數(shù)m

\n

\n\tbfj++]=a[i];//放到b數(shù)組中\(zhòng)n

\n

\n\treturnj;//最后把其個數(shù)返回到主函數(shù)中\(zhòng)n

\n

\n\t}\n

\n

\n\t【解析】題目要求把指定范圍之外的數(shù)放到b中,將每一個學生的

成績與指定的成績相比較,將符合條件的學生成績放在數(shù)組b中,并

將符合要求的學生個數(shù)返回給主函數(shù)。\n

30.doublefun(STREC*a,STREC*b,int*n)

(

inti,j=0;

doubleav=0.0;

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

av=av+a[i].s;

av=av/N;/*求平均分*/

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

if(a[i].s<av)<p=""x/av)<>

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

/*將低于平均分的學生記錄存入結(jié)構(gòu)體數(shù)組b中*/

*n=j;

/*傳回低于平均分的學生人數(shù)*/

returnav;

/*返回平均分*/

)

本題使用循環(huán)語句和條件判斷語句來實現(xiàn)題目要求。第1個循環(huán)語句的

作用是求出總分,然后求出平均分av。第2個循環(huán)語句的作用是將分數(shù)

低于平均分的學生記錄存入結(jié)構(gòu)體數(shù)組b中。

31.(1)錯誤:k=n;正確:k=i;(2)錯誤:s[j]=i;正確:s[j++]=i;(1)

錯誤:k=n;正確:k=i;\r\n(2)錯誤:s[j]=i;正確:s[j++]=i;解析:

錯誤1:k就是當前要被判斷的數(shù),是隨著i值的變化而變化的。錯誤

2:在循環(huán)中,j是數(shù)組的下標要遞增。

32.(l)if((k%13==0)11(k%17==0))(2)}

(1)if((k%13==0)11(k%17==0))(2)}解析:該題中函數(shù)功能是求能被

13或17整除的自然數(shù)之和。從已給定源程序的main主函數(shù)開始入

手,“printf("%d\\n",fun(500));”語句中的fun函數(shù)將500傳給n,

計算小于500的能被13或17整除的自然數(shù)之和。

33.(1)錯誤:t=0;正確:t=1.0;(2)錯誤:while(t>eps)正確:while(t>

=eps)(3)錯誤:retum(s);正確:retum(s*2);⑴錯誤:t=0;正確:

t=1.0;\r\n(2)錯誤:while(t>eps)正確:while(t>=eps)\r\n(3)錯誤:

return(s);正確:return(s*2);解析該題中,我們首先看函數(shù)fun()中while

語句的含義,當新的一項大于給定參數(shù)時,循環(huán)累加。根據(jù)題意我們可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論