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

下載本文檔

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

文檔簡介

2022年山東省東營市全國計算機等級考試

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

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

一、2.填空題(10題)

1.排序是計算機程序設(shè)計中的一種重要操作,常見的排序方法有插入排

序、【】和選擇排序等。

2.為了便于對照檢查,測試用例應(yīng)由輸入數(shù)據(jù)和預(yù)期的【】兩部分組

成。

3.表示條件;10<x<100或x<0的C語言表達式是[】。

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

#include<stdio.h>

main()

{staticintb[2][3]={{l,2,3},{4,5,6));

staticint*pb[]={b[0],b[l]};

inti,j;

i=0;

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

printf("b[%d][%d]=%d",i,j,*(pb[i]+j));

printf("\n");

5.模式/內(nèi)模式映射為數(shù)據(jù)庫提供了【】數(shù)據(jù)獨立性。

6.軟件工程的出現(xiàn)是由于【】。

7.Windows3.X中,所有的系統(tǒng)程序和應(yīng)用程序都處于[】的集中管理

之下。

8.設(shè)順序輸入數(shù)列為:24,30,8,5,1,27,24,26,10,21,9,28,

7,13,15。假定每個結(jié)點的查找概率相同,若用順序存儲方式組織該數(shù)

列,則查找一個數(shù)成功的平均比較次數(shù)為【】;若按二叉排序樹結(jié)構(gòu)組

織該數(shù)列,則查找一個數(shù)成功的平均比較次數(shù)為【】。

9.數(shù)據(jù)流圖的類型有[]和事務(wù)型。

10.以下sum函數(shù)的功能是計算下列級數(shù)之和:

23n

八.XXX

s=i+*+元+乳+”?+商

請給函數(shù)中的各變量正確賦初值。

doublesum(douLlex,intn)

{inti;

doublea,b,s;

[1

for(i=l;i<=n;i++){a=a*x;b=b*i;s=s+a/b;}

returns;

二、單選題(10題)

11.有以下程序:

#include<stdio.h>

main()

{FILE*fp;

inti,a[6]={1,2,3,4,5,6);

々=fopen("d.dat”,“w+b”);

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

fwrite(&a[i],sizeof(int),1,fp);

rewind(fp);

fread(&a[3],sizeof(int),3,fp);

fclose(fp);

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

printf(“%d,”,a[i]);

)

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

A.4,5,6,4,5,6,B.1,2,3,4,5,6,C.4,5,6,1,2,3,D.1,2,3,1,2,3,

12.以下是正確的C語言實型常量的是()。

A..8e+8.B.e+8C.+8e.8D.+8.8e+8

13.有以下程序

#include<stdio.h>

structst{

intx,y;

}data[2]={1,10,2,20);

main()

structst*p=data;

printf("%d,",p->y);

printf("%d\n",(++p)->x);

}

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

A.10,1B.20,1C,10,2D,20,2

14.軟件詳細設(shè)計生產(chǎn)的圖如右圖:該圖是()。

1MJ

A.N—S圖B.PAD圖C.程序流程圖D.E—R圖

15.考慮一個特殊的hash函數(shù)h,能將任一字符串hash成一個整數(shù)k,其

概率P(k)=2N-k),k=l,2,…8。對一個未知大小的字符串集合S中的每一

個元素取hash值所組成的集合為h(S)。若h(S)中最大的元素Maxh(S)=10,

那么S的大小的期望是()

A.1024B,512C,5D.10

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

A.C語言編寫的函數(shù)源程序,其文件名后綴可以是C

B.C語言編寫的函數(shù)都可以作為一個獨立的源程序文件

C.C語言編寫的每個函數(shù)都可以進行獨立的編譯并執(zhí)行

D.一個C語言程序只能有一個主函數(shù)

17.

(24)有以下程序:

/include<stdio.h>

main()

{intc;

while((c=gctchar())!=,\n,)

{switch(c-3')

{case0:

case1:putchar(c+4);

case2:putchar(c+4);break;

case3:putchar(c+3);

case4:putchar(c+3);break;

}}

printR%");}

從第一列開始輸入數(shù)據(jù)(<CR>代表一個何車符):3845<CR>,則程序輸出結(jié)果為

().

A)77889B)77868C)776810D)77886610

(25)C語言規(guī)定,函數(shù)返回值的類型是().

A)由調(diào)用該函數(shù)時的主調(diào)函數(shù)類型所決定

B)由return語句中的表達式類型所決定

C)由調(diào)用該函數(shù)時系統(tǒng)臨時決定

18D)由定義該函數(shù)時所指定的數(shù)值類型決定

19.若一組記錄的排序碼為(46,79,56,38,40,84),則利用快速排序的方法,

以第一個記錄為基準(zhǔn)得到的一次劃分結(jié)果為()

A.38,40,46,56,79,84

B.40,38,46,79,56,84

C.40,38,46,56,79,84

D.40,38,46,84,56,79

20.下述程序的輸出結(jié)果是()。

#include<stdio.h>

mam)

{inti;

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

{if(i*i>=20)(i*i<=100))

break;

)

printf("%d\n",i*i);

)

A.49B.36C.25D.64

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

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

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

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

函數(shù)fun(),其功能是把指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄存放在b所指的數(shù)

組中,分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)由函數(shù)值返回。

如輸入的分?jǐn)?shù)是60、69,則應(yīng)當(dāng)把分?jǐn)?shù)在60?69的學(xué)生記錄輸出,包

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

high中o

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

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

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

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

charnum[10];

ints;

JSTREC;

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

voidmain()

(

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

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

85},廣GAOOr,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("%d%d”,&low,&high);,一

if(high<low)

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

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

printf("Thestudenfsdatabetween%d-%d:\n”,low,high);

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

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

printf("\n”);

22.

編寫函數(shù)fun,其功能是:從字符串中刷除指定的字符“同字母的大、小寫按不同字符處理。

例如,若程序執(zhí)行時輸入字符串為:

“hirborandBorlandc++'

從鍵盤上輸入字符n,則輸出為:

“turbocadIwladC++”

如果輸入的字符在字符串中不存在,則字符串照原樣輸出a

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

請勿改動主函數(shù)mam和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)6m的花括號中填人你編寫的若干精句

試題程序:

#inrlu(ie<stdio.h>

voidfun(chars(]Jmc)

(

I.

main()

|staticcharstrfJ="turbocandhorlandC++”;

charrh:

charch:

printff11原始字符串:%s\n".str);

prints輸入一個字符An”);

soanf("%c":&ch);

fu?i(strj4i);

printf(hstr[]=%s\n"?strX

fitncpy(stf,"turbocandLxirlande+42);

fun(5;tr/a'):

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

數(shù)據(jù),按行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個數(shù)存放

在形參n所指的存儲單元中。

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

13233343

14243444

15253545

則一維數(shù)組中的內(nèi)容應(yīng)該是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("Thematrix:\n");

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

(

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

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

printf("\n");

)

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

printf("TheAarray:\n");

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

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

printf("\n\n");

24.

請編寫函數(shù)proc(),其功能是:將str所指字符串中除了下標(biāo)為奇數(shù)、

同時ASCII值為偶數(shù)的字符外,其余的全部刪除,串中剩余字符所形成

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

edB2A4Dsdg,其中字符A的ASCII碼值為奇數(shù),因此應(yīng)當(dāng)刪除;其中

字符B的ASCII碼值為偶數(shù),但在數(shù)組中的下標(biāo)為偶數(shù),因此也應(yīng)當(dāng)

刪除;而字符2的ASCII碼值為偶數(shù),所在數(shù)組中的下標(biāo)為奇數(shù),因此

不應(yīng)當(dāng)刪除。依此類推,最后t所指的數(shù)組中的內(nèi)容應(yīng)是d24。注意:

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

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

atndudeOulhh

然MKIMCVconto.K>

Wmciude

9mclude

voidprac<ei?ar?Mr.HiariQ)

raidtMftC)

charttrflOOj

?rwtrm(*C1-S*>i

print"B\nHe?9ectiterairtng$w>i

pcoc<eiruh

pciMi(<*\BT1IC

25.請編寫一個函數(shù)voidproc(char*str),其功能是:將字符串str中所有

下標(biāo)為偶數(shù)位置上的字母轉(zhuǎn)化為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。

例如,若輸入字符串:“thankyou6verymuch”,則應(yīng)輸出:

“TbAnKYoU6vErYMuCh”。注意部分源程序給出如下。請勿改動main

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

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

giadudeVcooicub>

丹includeVstdioch>

修includeVmdhKh>

voidpruc<char?xr>

woldmainC)

ciiartt£31Ji

"Cl-S->?

printfC?ptejeenterancluracierRtnng

wtihift$0ciuira^i*r*i\nw)i

getsCtt)?

(KtotfCw\a\nA(tcfchan<tng?thc*tt)i

pcoc<tt)i

printfC*\nbcconK*\nXt-?n>4

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

案的項目中包含一個源程序文件progl.co此程序定義了NxN的二維

數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(),該函數(shù)的功能是將數(shù)

組下三角元素中的值全部置成0。如a數(shù)組中的值為

197

238

456

則返回主程序后a數(shù)組中的值應(yīng)為

097

008

000

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

voidfun(inta[][N])

(

)

voidmain()

(

inta[N][N],i,j;

system(“CLS”);

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

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

/*產(chǎn)生一個隨機的5x5矩陣*/

(

for(j=O;j<=""p="">

(

a[i][j]=rand()%10;

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

}

printf("\n”);

)

fun(a);

printf("TheResult\n,5);

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

(

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

printf("%4d”,a[i]?;

printf("\n”);

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

案的項目中包含一個源程序文件progl.Co程序中將m個人的成績存放

在score數(shù)組中,請編寫函數(shù)fun(),它的功能是將低于平均分的人數(shù)

作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在below所指的數(shù)組中。

例如,當(dāng)score數(shù)組中的數(shù)據(jù)為10、20、30、40、50、60、70、80、

90時,函數(shù)返回的人數(shù)應(yīng)該是4,below中的數(shù)據(jù)應(yīng)為10、20、30、

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

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

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

試題程序:

1#include<conio.h>

2finclude<stdio.h>

3#include<string.h>

4#include<stdlib-h>

5intfun(intscore[],intm,int

below[])

6{

7

8}

9voidmain()

W(

11FILE*wf;

12int1,n,below[9];

13intscore[9]={10,20,30,40,

50,60,70,80,90};

14system(MCLSM);

15n-fun(score,9,below);

16printf(M\nBelowtheaverage

scoreare:w);

17for(i=0;i<n;i4-+)

18printf(M%dbelow[i]);

19/*************"**/

20wf=fopenCout.dat;

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

Wn

22fprintf(wfz%dzbelow[i]);

23fclose(wf);

24/*****************/

25)

28.請編寫一個函數(shù)proc(),它的功能是將一個數(shù)字字符串轉(zhuǎn)換為一個

整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)為整數(shù)的函數(shù))。

例如,若輸入字符串“1234”,則函數(shù)把它轉(zhuǎn)換為整數(shù)值1234。

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

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

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

試題程序:

S:ndudr<sidiOkh>

Sinclude<Mnng.b>

kxMCpror(rKa.r?p)

voidmain()

charMfTCli

lon<n?

prtntfc*Ln.i?faMrmgi\nM)i

gt<94MF)i

pvocCmr)i

pruit(<.Kld\na.a)i

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

30.請編寫函數(shù)proc,其功能是將兩個兩位數(shù)的正整數(shù)a、b合并形成一

個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)

個位和十位上,b數(shù)的十位和個位數(shù)依次放在c數(shù)的百位和千位上。例

如,當(dāng)a=25,b=43,實際輸入時個數(shù)之間以Enter鍵分隔,調(diào)用該函數(shù)

后,c=3452o注意:部分源程序給出如下。請勿改動main()函數(shù)和

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

干語句。試題程序:

UmdudkVadLk.

SincludeVudio.

voidproc<mi??Mitb.kMMt?c>

roid>

mta?bi

1004K€?

"CLS>>?

pnntf(*Input

?c?目”?%d%d"&b),

proc(a?b?&-c)g

pnntf("THeroultIB:Hld\n*?c)i

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

31.下列給定程序中,函數(shù)fun()的功能是:從s所指字符串中,找出t

所指字符串的個數(shù)作為函數(shù)值返回。例如,當(dāng)s所指字符串中的內(nèi)容為

abcdabfab,t所指字符串的內(nèi)容為ab,則函數(shù)返回整數(shù)3。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*s,char*t)

{intn;char*p,*r;

n=0;

while(*s)

{P=s;

r=t;

while(*r)

if(*r==*p){r++;p++)

elsebreak;

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

if(r=='\O')

n++;

s++;

)

returnn;

)

main()

{chars[100],t[100];intm;

clrscr();

printf("\nPleaseenterstrings:");

scanf("%s",s);

printf("\nPleaseentersubstringt:");

scanf("%s",t);

m=fun(s,t);

printf("\nTheresultis:m=%d\n",m);

)

32.給定程序M0D11.C中函數(shù)fun的功能是:將長整型數(shù)中每一位上

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

在低位。

例如,當(dāng)s中的數(shù)為:87653142時,t中的數(shù)為:7531。

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

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

1tinclude<stdio.h>

2voidfun(longs,long*t)

3{intd;

4longsl*l;

5

6t■0;

7while(s>0)

8(d=s%10;

9/……??…?found

10if(d%2-0)

11{*t-d*si4-*t;

12si*=10;

13}

14s/-10;

15)

16)

17main()

18(longs,t;

19printf("XnPleaseenters:R);scanf

&s);

20fun(sr&t);

w

21printf(Theresultis:%ld\n°ft);

22

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

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

請改正函數(shù)fun中的錯誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使

它能得出正確的結(jié)果。

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

1?include<stdio.h>

2tinclude<string.h>

3voidfun()

4

5inta[3][3],sum;

6intirj;

7/………found………?/

8!;

i-----------

9jprintf("Inputdata:R);

10jfor

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

12/………found………■/

RR

13scanf(%dra(i][j]);

14}

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

16sum-sum-^a(i)[i];

nw

17printf(Sum-%ci\nrsum);

18

19main()

20

21fun();

22

34.已知一個數(shù)列從第。項開始的前三項分別為0,0,1,以后的各項

都是其相鄰的前三項之和。給定程序M0D11.C中函數(shù)fun的功能是:

計算并輸出該數(shù)列前n項的平方根之和。n的值通過形參傳入。

例如,當(dāng)n=10時,程序的輸出結(jié)果應(yīng)為:23.197745。

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

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

1finclude<stdio.h>

2finclude<math.h>

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

4fun(intn)

5{doublesum,sOrslfs2,s;intk;

6sum-1.0;

7if(n<-2)sum-0.0;

8sO=0.0;si=0.0;s2=1.0;

9for(k?4;k<-n;k*+)

10(s=sO?si?s2;

11sum"sqrt(s);

12sO?si;si-s2;s2?s;

13}

14/************found**w***??***?/

15returnsum

16

17main()

intn;

19Jprintf("InputN-n);

20iscanf("%d",&n);

21\Rw

printf(%f\nrfun(n));

22!)

35.給定程序MOD11.C中函數(shù)fun的功能是:判斷一個整數(shù)是否是素

數(shù),若是返回1,否則返回0。

在mai()函數(shù)中,若fun返回1輸出YES,若fun返回。輸出NO!。

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

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

1j*include<stdio.h>

2jintfun(intm)

3!{intk-2;

4?while(k<?m&&(m%k))

5;/…………found…………/

6

7i/…………found…………/

8if(m-k)

9ireturn1;

10;elsereturn0;

11!

12(imain()

13;{intn;

14!printf(w\nPleaseentern:

wR

iscanf(%dr&n);

15if(fun(n))printf(MYES\n");

16!elseprintf(WNO!\nw);

17;)

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

公式的值。

y=l/(100xl00)+l/(200x200)+l/(300x300)+...+l/(mxm)

例如,若m=2000,則應(yīng)輸出0.000160。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

fun(intm)

{doubley=0,d;

inti;

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

for(i=100,i<=m,i+=100)

{d=(double)i*(double)i;

y+=l.0/d;

)

return(y);

1

main()

{intn=2000;

clrscr();

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

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

中奇數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在t中。例如,當(dāng)s中的數(shù)為

4576235時,t中的數(shù)為4725。

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

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

試題程序:

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

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

)

38.下列給定程序中,函數(shù)fun()的功能是將字符串s中位于偶數(shù)位置的

字符或ASCII碼為奇數(shù)的字符放入字符串t中(規(guī)定第一個字符放在第0

位中)。

例如:字符串中的數(shù)據(jù)為ADFESHDI,則輸出應(yīng)當(dāng)是AFESDIO

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

#defineN80

voidfun(chars,chart[])

inti,j=0;

for(i=0;i<strlen(s);i++)

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

if(i%2=0||s[i]%2!=0)

t[j++]=s[i];

t[j]='\O';

)

main()

(

chars[N],t[N];

clrscr();

printf("\nPleaseenterstrings:");

gets(s);

fun(s,t);

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

)

39.下列給定程序中,函數(shù)fun()的功能是:對N名學(xué)生的學(xué)習(xí)成績,按

從高到低的順序找出前叫mS10)名學(xué)生來,并將這些學(xué)生數(shù)據(jù)存放在一

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

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<alloc.h>

#defineN10

typedefstructss

{charnum[10];

ints;

}STU;

STU*fun{STUa[],intm)

{STUb[N],*t;

inti,j,k;

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

*t=calloc(m,slzeof(STU));

for(i=0;i<N;i++)b[i]=a[i];

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

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

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

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

t[k].num=b[j].num;

t[k].s=b[j]s;

b[j].s=O;

)

returnt;

)

outresult(STUa[],FILE*pf)

{inti;

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

fprintf(pf,"No=%sMark-%d\n",

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

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

)

main()

{STUa[N]={{"AOI",81},{"A02",89J,

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}J;

STU*pOrder;

inti,m;

clrscr();

printf(”*****THERESULT*****\n");

outresult(a,stdout);

printf("\nGivethenumberofthestudents

whohavebetterscore:");

scanf("%d",&m);

while(m>10)

{printf("lnGivethenumberofthe

studentswhohavebetterscore:");

scanf("%d",%m);

pOrder=fun(a,m);

printf,*****THERESULT*****kn");

printf("Thetop:\n");

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

printf("%s%d\n",pOrder[i].num,

pOrder[i].s);

free(pOrder);

)

40.下列給定程序中,函數(shù)fun()的功能是:對N名學(xué)生的學(xué)習(xí)成績,按

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

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

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<alloc.h>

#defineN10

typedefstructSS

charnum[10];

ints;

}STU;

STU*fun(STUa[],intm)

(

STUb[N],*t;

inti,j,k;

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

*t=calloc(m,sizeof(STU));

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

b[i]=a[i];

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

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

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

if(b[i].s<b[j],s)

JT,

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

t[k].s=b[j].s;

b[j].s=100;

)

returnt;

)

outresult(STUa[],FILE*pf)

inti;

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

fprintf(pf,"NO=%SMark=%d\n",

a[i].num,a[i].S);

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

)

main()

(

STUa[N]={{“A01”,77},{“A02”,85},

{“A03”,96},{“A04”,65},{“A05”,75},

{“A06”,96},{“A07”,76},{“A08”,63),

{“A09”,69},{“A10",78)};

STU*porder;

inti,m;

clrscr();

printf(“*****THERESULT*****\n");

outresult(a,stdout);

printf("\nGivethenumberofthestudentswhohavelowerscore:");

scanf("%d",&m);

while(m>10)

(

printf("\nGivethenumberofthestudentswhohavelowerscore:,5);

scanf("%d",&m);

)

porder=fun(a,m);

printR“*****THERESULT*****\n");

printf("Thelow:\n");

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

printf("%s%d\n”,porder[i].num,

porder[i].s);

free(porder);

)

五、程序改錯題(2題)

41.下列給定程序中,函數(shù)proc的功能是:先將字符串s中的字符按

順序存放到t中,然后把S中的字符按正序連接到t的后面。例如,當(dāng)

s中的字符串為WXYZ時,則t中的字符串應(yīng)為WXYZWXYZo

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

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

構(gòu)。

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidproc(char*s,char*t)

(

inti,si;

sl=strlen(s);

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

//****^)und****

t[i]=s[sl];

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

t[sl+i]—s[i];

t[2*sl]=\O0;

)

voidmain

(

chars[100],t[100];

system("CLS");

print{("\nPleaseenterstrings:");

scanf("%s'\s);

proc(s,t);

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

)

42.

下列給定程序中,函數(shù)proc()的功能是:利用插入排序法對字符串中

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

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

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

序的字符串已在主函數(shù)中賦予。請修改程序中的錯誤,使它能得出正

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

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

gmcludeVslfi”

&mcludcVzdiab>

9(MineM80

voidproc<char?arv)

(mt卜j?niduirdii

n*xrlwi(4ur>i

(orCtM+)

//????IQMMI????

Ic-?rr£i]i

產(chǎn)1一1s

whiWC?j〉-0)&&(d*<arr{j〕>J

?rrtj41

一.i

arrfj+l3-cht

voidm*in(>

(

char?(M]-?QWERTYUKJPASDFGHJKLMNB

VCXZ"i

printf(eTb*origiiuilMnngiX*\ne?a>i

proc<a)i

pnntf("TlwMringafterwortirqti

六、操作題(2題)

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

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

出s所指字符串中最后一次出現(xiàn)的t所指字符串的地址,并將此地址通

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

函數(shù)值為NULLO

例如,當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中內(nèi)容為“ab”時,輸出

結(jié)果應(yīng)是“abcdx”。

當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中內(nèi)容為“abd”時,則程序輸出

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

結(jié)果。

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

構(gòu)!

試題程序:

#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("WTheresultis:%s\n”,p);

else

printf("\nNotfound!\n^^);

)

44.請編寫fun函數(shù),其功能是:計算并輸出3?m所有素數(shù)的平方根

之和。

例如,若主函數(shù)從鍵盤給m輸入50后,則輸出為s=68.665791o

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

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

注意:m的值要大于2但不大于100。部分源程序給出如下。

試題程序:

#include<math.h>

#include<stdio.h>

doublefun(intm)

(

}

voidmain

(

intm;

doubles;

FILE*out:

printf("\n\nlnputm:");

scanf("%d",&m);

s=fun(m);

printf("\n\ns=%f\n\n",s);

ut=fopen("outfile.dat","w");

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

fprintf(out,fun(m+80));

felose(out);

)

參考答案

1.交換排序交換排序解析:常見的排序方法有插入排序(包括簡單插入

排序法和希爾排序法等)、交換排序(包括冒泡排序和快速排序法等)和選

擇排序(包括簡單選擇排序和堆排序等)。注意:常見的排序方法及其作

用機制和區(qū)別。

2.輸出結(jié)果輸出結(jié)果解析:注意:測試的基本方法和步驟。

3.(x>10&&x<100)||x<0

4.b[0][0]=lb[0][l]=2b[0][2]=3

5.物理物理

6.軟件危機的出現(xiàn)軟件危機的出現(xiàn)

7.程序管理器程序管理器

8.857/15

9.變換型典型的數(shù)據(jù)流類型有兩種:變換型和事務(wù)型。變換型是指信息

沿輸入通路進入系統(tǒng),同時由外部形式變換成內(nèi)部形式,進入系統(tǒng)的信

息通過變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟

件系統(tǒng);在很多軟件應(yīng)用中,存在某種作業(yè)數(shù)據(jù)流,它可以引發(fā)一個或

多個處理,這些處理能夠完成該作業(yè)要求的功能,這種數(shù)據(jù)流就叫做事

務(wù)。

10.a=1.0;b=1.0;s=1.0;a=1.0;b=1.0;s=1.0;解析:各種數(shù)值型數(shù)據(jù)

間進行混合運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,再進行運算。

本題的結(jié)果為double型。

H.D程序首先以讀和寫二進制文件的方式打開文件d.dat;然后通過for

循環(huán),調(diào)用fwrite函數(shù)將數(shù)組a中的各個元素寫入d.dat中,?接下來調(diào)

用rewind函數(shù),將文件指針fp重定位到文件的開始位置;再調(diào)用fread

函數(shù)將文件的前3個整數(shù)1,2,3讀入a[3]開始的位置,所以此時數(shù)組a

中的元素值分別為:123,1,2,3。故本題答案為D選項。

12.DC語言中,實型常量有兩種表示形式:小數(shù)形式和指數(shù)形式。其中

指數(shù)形式的一般形式為:尾數(shù)E(或e)整型指數(shù)。C語言規(guī)定,字母E

或e之前必須要有數(shù)字,且E或e后面的指數(shù)必須是整數(shù),所以選項

A、B、C錯誤,選項D正確。故本題答案為D選項。

13.C

解析:本題定義了一個包含兩個元素(data⑼、data[l])的結(jié)構(gòu)體數(shù)組

data,其中data[0],x=1;data[0].y=10;data[1].x=2;\u3000data[1].y=20□在

主函數(shù)中,定義了一個指向結(jié)構(gòu)體數(shù)組的結(jié)構(gòu)體指針變量p,使得p指

向結(jié)構(gòu)體數(shù)組的首地址,所以p-〉y訪問的是第一個蛤構(gòu)體數(shù)組元素

的第二個值,即data[0].y;(++p)->x訪問的是第二個結(jié)構(gòu)體數(shù)組元素

的第一個值,即\u3000data[l].x,所以程序輸出結(jié)果為10,2。

14.CN—s圖提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程圖,所以A不對。

PAD圖是問題分析圖,它是繼承程序流程圖和方框圖之后提出的又一種

主要用于描述軟件詳細設(shè)計的圖形表示工具,所以8不對。E—R圖是

數(shù)據(jù)庫中的用于表示E—R模型的圖示工具,所以D不對。根據(jù)圖中所

示表示方法是進行軟件詳細設(shè)計時使用的程序流程圖。

15.A

16.C

函數(shù)是指預(yù)先定義功能塊,其目的是提高程序的重用性。在C語言中

函數(shù)的源程序,后綴名可以為C。C語言所編寫的函數(shù)都可以是一個

獨立的源文件。一個C語言程序只能有一個主函數(shù)。C語言中編寫的

函數(shù)不是每個都可以獨立地編譯和執(zhí)行的,因為C語言中程序的開始

為主函數(shù),如果程序中沒有主函數(shù)則無法進行編譯和執(zhí)行。

17.A

18.D

19.C

20.C

當(dāng)if執(zhí)行到第一個滿足(i*i>=20)(i*i<=100)這個條件的i出現(xiàn)時,通過

break語句跳出循環(huán),執(zhí)行下面的prinlf語句。

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

(

inti,j=0;

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

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

/*將分?jǐn)?shù)高于1,低于h的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/

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

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

)

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

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

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

為函數(shù)值返回。

22.

【答案】

vni(ifun(cha-s[],intc)

IP

inti=0;.

char*p;

P=s;

while(*p)/*判斷是否為結(jié)束標(biāo)識符*/

{,

if(*p!=c)/*判斷字符串中字符是否與指定字符相同*/

(?

"如不同,將重新組合字符串*/

i++;

}/?如相同,則處理下一個字符*/

p++;)

小卜A0';

)

【解析】

通過循環(huán)將非指定字符重新保存,字符串末尾加上結(jié)束標(biāo)識符。

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

inti,j,k=0;

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

for(j=0;j<nn;j++)//j是表示其列的下標(biāo)

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ù)當(dāng)中。

24.

【解析】題目中要求將字符串str中下標(biāo)為奇數(shù),同時ASCII碼值為偶

數(shù)的字符放在數(shù)組t中,首先,需要檢查字符串str中下標(biāo)為奇數(shù)的字符

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

新的字符串?dāng)?shù)組添加結(jié)束符。

25.

【解析】要將字符串str中下標(biāo)為偶數(shù)位置上的字符轉(zhuǎn)化為大寫字母,

首先應(yīng)該判斷字符串str中下標(biāo)為偶數(shù)位置上的字符是否為小寫字母,

若是將其轉(zhuǎn)化為大寫字母.若不是不做任何變化。

26.voidfun(inta[][n])

(

inti,j;

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

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

a[i][j]=O;/*將數(shù)組下三角元素中的值全部置成0*/

)

對于NxN二維數(shù)組,表示其下三角元素,可以通過以下語句實現(xiàn)。

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

\tfor(j=0;j<=i;j++)

外層循環(huán)用來控制矩陣的行下標(biāo),內(nèi)層循環(huán)用來控制矩陣的列下標(biāo)。

注意列下標(biāo)的取值范圍,因為要表示下三角元素,所以j的范圍是

0-io

27.1intfun(intscore[],intm,intbe-low[])

2{

3inti,j=O;

4floatav=0.0;

5for(i=0;i

<m;i++)

6av=av+score[i]/m;/*求平均值*/</m;i++)

<m;i++)

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

gif(score[i]</m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分?jǐn)?shù)<>8低于平均分,則將此分?jǐn)?shù)放入below數(shù)::組中

*/</av)p*如果分?jǐn)?shù)<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分?jǐn)?shù)<>9below[j++]=score[i];</av)p*如果分?jǐn)?shù)<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分?jǐn)?shù)<>10returnj;/*</av)p*如果分?jǐn)?shù)<></m;i++)

</m;i++)

<m;i++)

<m;i++)

<av)p*如果分?jǐn)?shù)<>返回低于平均分的人數(shù)*/U}要計算低于平均分的人

數(shù),首先應(yīng)該求出數(shù)組score中各元素的平均值。然后通過for循環(huán)語

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論