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

下載本文檔

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

文檔簡介

2023年河南省濮陽市全國計算機等級考試

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

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

一、2.填空題(10題)

1.診斷和改正程序中錯誤的工作通常稱為【】。

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

main()

(

intx=0210;

printf("%X\n",x);

)

3.當數(shù)據(jù)的物理結(jié)構(gòu)(存儲結(jié)構(gòu))改變時,不影響數(shù)據(jù)庫的邏輯結(jié)構(gòu),從

而不致引起應(yīng)用程序的變化,這是指數(shù)據(jù)的【】。

4.下面程序的輸出走【】。

main()

{enumem{em1=3,em2=l,em3};

char*aa[]={"AA","BB","CC","DD");

printf("%s%s%s\n",aa[eml],aa[em2],aa[em3]);

)

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

main()

{inta=10;

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

)

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

#defineMCRA(m)2*m

#defineMCRB(n,m)2*MCRA(n)+m

main()

(

inti=2,j=3;

printf("%d\n",MCRB(j,MCRA(i)));

)

7.層次模型的典型代表是IBM公司的【】數(shù)據(jù)庫管理系統(tǒng)。

8.下列程序的輸出結(jié)果是一

#include<stdio.h>

main()

{intx=l,y=l,a=l,b=l;

switch(x)

{case1:

switch(y)

{case0:a++;break;

case1:b++;break;

)

case2:

a++;b++;break;

)

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

)

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

#inelude<stdio.h>

intf(inta[],intn)

{if(n>1)returna[O]+f(&a[l],n-l);

elsereturna[0];

)

main()

{intaa[3]={1,2,3},s;

s=f(&aa[0],3);printf("%d\n",s);

)

10.若想通過以下輸入語句使a=5.0,b=4,c=3,則輸入數(shù)據(jù)的形式應(yīng)該

是【】。

intb,c;floata;

scanf("%f,%d,c=%d",&a,&b,&c)

二、單選題(10題)

11.有以下結(jié)構(gòu)體說明、變量定義和賦值語句:

structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];

則下列scanf函數(shù)調(diào)用語句有錯誤的是()o

A.scanf("%s”,s[0].name);

B.scanf("%d”,&s[0].age);

C.scanf("%c”,&(ps->sex));

D.scanf("%d”,ps->age);

12.已知字符A的ASCII值是65,字符變量cl的值是,A\c2的值是

D,則執(zhí)行語句力行頓“%(1,%(1”/珍2-2);”的輸出結(jié)果是()。

A.65,68B.A,68C.A,BD.65,66

13.以下選項中合法的實型常數(shù)是

A.5E2.0B.E-3C.2.00E+00D.1.3E

14.以下各選項中的代碼段執(zhí)行后,變量y的值不為1的是()。

A.intx=5,y=0;if(5)y=l;

B.intx=5,y=0;if(x)y=l;

C.intx=10,y=0;if(x=y)y=l;

D.intx=5,y=10;if(x=y)y=l;

15.在C語言中,int、char和short種類型數(shù)據(jù)在內(nèi)存中所占用的字節(jié)數(shù)

Oo

A.由用戶自己定義B.均為2個字節(jié)C.是任意的D.由所用機器的機器

字長決定

16.若有定義“inta=l,b=2,c=3,d=4,m=2,n=2;",則執(zhí)行"(m=a>b)

&&(n=c>d)”后n的值是0。

A.4B.3C.2D.l

17.面向?qū)ο蟮脑O(shè)計方法與傳統(tǒng)的面向過程的方法有本質(zhì)不同,它的基本

原理是()。

A.模擬現(xiàn)實世界中不同事物之間的聯(lián)系

B.強調(diào)模擬現(xiàn)實世界中的算法而不強調(diào)概念

C.使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題

D.不強調(diào)模擬現(xiàn)實世界中的算法而強調(diào)概念

18.設(shè)有定義intn=0,*p=&n,**q=&p;,則下列選項中正確的賦值語句是

A.p=l;B.*q=2;C.q=p;D.*p=5;

19.有以下程序:

#include<stdio.h>

intfun

{staticintx=l;

x+=l;returnX;

}

main

{inti,S=l;

for(i=1;i<=S;i++)s+=fun;

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

)

程序運行后的輸出結(jié)果是()。A.llB.21C.6D.120

(25)以卜程序的輸出結(jié)果是(、

#includc<stdio.h>

intm=13;

intfun(intx,inty)

{intm=2;

retum(x*y-m);

}

main()

{inta=7,b=6;

printR"%d",fun(a,b)/m);?

}

20.A)1B)3C)7D)10

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

21.

函數(shù)fun的功能是:將S所指字符串中除下標為偶數(shù)同時ASCII碼值也

為偶數(shù)的字符外,其余的全部刪除;字符串中剩余字符所形成的新串放

在t所指的數(shù)組中。

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

ASCII碼值為奇數(shù),因此應(yīng)當刪除;字符8的ASCII碼值為偶數(shù),但在

數(shù)組中的下標為奇數(shù),因此也應(yīng)當刪除;字符2的ASCII碼值為偶數(shù),

在數(shù)組中的下標也為偶數(shù),因此不應(yīng)當刪除,其他依此類推。最后t所

指的數(shù)組中的內(nèi)容應(yīng)是“246”。

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

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

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

試題程序:

#include<stdic.h>

#in<)ude<string.h>

voidfun(char*s,chart(])

I

I

voidmain()

(chars[100J4100];

printff^ViPleaseenterstringSiM);

pnntf(M\nTheresult

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

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

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

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

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

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

gmclutfe<adg.hr>

mtnckudk<Ccomo.h>

voidproHctwir??ir>

voidmakfi<>

cluir?(8IJI

pnntfc"Efitct?MrifWiX11"),

■.“(?)1

proc(*)i

pnntf<*Tb*7,mgaftrrdelr<rdt\n*)

23.編寫函數(shù)fun(),其功能是:求出1~1000中能被7或11整除,但

不能同時被7和11整除的所有整數(shù),并將其放在a所指的數(shù)組中,通過

n返回這些數(shù)的個數(shù)。注意:部分源程序給出如下。請勿改動main()

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

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

UmcludeVadhhh)

?sificlucieVcoxxh>

9includeVctdio,ti>

eid?a?mi?n)

wdidmain()

?ntaa[lOOO]?B?lii

*y?tetn(*C*)i

fun<*a?&*a)i

(oce-Oib<iiih++)

if<(k>DM10,■<)>

IpnotfC*%i

pnn<f<*\n*>iI〃一行。9個It

el?e

prtfid(aKSd?.

pnnift*\n*>B

24.某學(xué)生的記錄由學(xué)號、8門課程成績和平均分組成,學(xué)號和8門課程

的成績已在主函數(shù)中給出,請編寫函數(shù)fun,其功能是:求出該學(xué)生的

平均分,并放入記錄的ave成員中。

例如,學(xué)生的成績是:85.5,76,69.5,85,91,72,64.5,87.5,

則他的平均分應(yīng)為78.875。注意:部分源程序在文件PR0G1.C中。

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

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

finclude<stdio.h>

fdefineN8

typedefstruct

IcharnumL10];

double*[N];

doubleave;

|STREC;

voidfiin(STREC?a)

)

|STREC.=|"CA005*,85.5,76.69.5,85,91,72,64.5,87.51;

inti:

voidNONO();

fun();

printf("TSestudentdaU:\n',B.num);

lbr(i=0;i<N;i??)

printf(w%4.1An",?.?[>]):

printfC\nave=%7.3An",t.ave);

NONO();

I?

voidNONO()

I/.本函數(shù)用于打開文件,輸人數(shù)據(jù),利用函數(shù),粕出數(shù)據(jù).關(guān)閉文件*

FILE?out;

irni.j;STREC?[10]=|

|?GA005",85.5,76.69.5,85⑼,72,64.5.87.51.

I?GA001,.82.5,66,76.S,76,89,76.46.5,78.51,

|“CA002",71.5.56,66.5,66,79,68,46.5,585|,

I-GA003".6.5,86,99,86,56.5,88.51,

|-CA004",82,66.5,46.5,56,76,75,76.5.63.51,

|-GA006-,7S.5,74,71.5,85,81,79,64.5.71.51,

|?CA007-,92.5,61,72.5,84.79,75,66.5,72.51,

I"GA008*,72.5,86.73.5,80,69,63,76.5.53.51,

|-GAD09",66.5,71.74.5,70,61.82.86.5,58.51,

|-CAOJO,,76,66.5,6,71.96.5,93.51,

11

out=fopen(Wcwt.(hi**w*);

fbr(i?0;i<10;i??)|

^pnntf(outr"%7.3An*,s[i].ave);

I

fdoee(out);

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

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

fun(),其功能是根據(jù)以下公式求P的值,結(jié)果由函數(shù)值返回。m與n

____m!

為兩個正整數(shù)且要求m>n。'"!(m-n”例如:m=12,n=8時、

運行結(jié)果為495.000000。注意:部分源程序在文件progl.c中。請勿改

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

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

1tinclude<stdio.h>

2floatfun(intm,intn)

3{

4

5}

6main()/*主函數(shù)*/

7{voidNONO();

8printf(HP-%f\n”,fun(12,8));

9NONO();

10)

11voidNONO()

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

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

13FILE?fpr*wf;

14inti,m,n;

15floats;

16fp=fopen("in?dat","r");

nMMM

17wf=fopen(out.datrw);

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

r,

19fscanf(fpr%d,%d”,&n);

20s=fun(m,n);

H

21fprintf(wf,"%f\nrs);

域}

23fclose(fp);

24fclose(wf);

25)

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

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

在叩所指的數(shù)組中。例如,當score數(shù)組中的數(shù)據(jù)為100,80,76,

60,59,48,43,35,59時,函數(shù)返回的人數(shù)應(yīng)該是4,up中的數(shù)據(jù)

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

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

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

3indudeVromocb>

Minrliwle<?tdeo?h>

includeVznng.h>

mtproc<m<>corc{m?iat

〃■內(nèi)高于平均分的人it

vendWUIMI<)

iniu!1?

tai-corrie]-<100.BO.76.60.59?

<SU3.3S?9$h

wynlrraC1?

n-proc《Bcore?9?up)?

prmd<a\nuplothe?vtra<cKorvarc:

(or十)

prait(<*e*uptij>4

27.

編寫函數(shù)proc,它的功能是:計算和輸出下列級數(shù)的和。S=1/(12)

+1/(23)+...+1/(n(n+1))例如,當n=20時,函數(shù)值為0.952381。

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

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

題程序:

sincludeVh>

indudeVcuoio,h>

,inciud*<nid,(xb>

doubleproc(tain)

rotdmaai<)

?ir?lrtn("Cl-S*)x

pr?nif<.proc(10>)

28.

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

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

candbnrlandri'

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

“turbocadlx/rladC++”

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

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

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

試題程序:

#inrlude<sldio.h>

voidfun(chars[]5intc)

f

I

main()

(staticcharstrfJ="turbocandbod8mlC++”;

eharch:

chareh:

printfT原始字符串:%s\nu.str);

prim(、輸入一個字符An");

seanf「%c":&ch);

printf(Mstr[]=%s\n"strk

strepy(str,,ftuibocandIxirlandc++,,J;

fun(str/a'):

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

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

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

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

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

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

號tadudeVaxgb>

5inclMdcVzdia.h>

*iftcludeV,idlih.h>

voidpruc<ch?r?Mr>

?pidm?in()

cliaf

"Cl^5">i

printf<*Ptr*xretvrancharactervtnnc

wYthn$0ciuiraci*r?t\nM)i

gClB(tl)|

pnntfC*\?\||Afterchan<mg?chc*n)i

pra:<tt)s

(xrmtfC*\nbcwmo\nXt"??)i

30.

編寫一個函數(shù),輸入n個字符串,串與串之間以Enter鍵分隔,找出最

短字符串中第一個字符串,傳回該串地址(用一個新串“*”作為結(jié)束輸入

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

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

語句。試題程序:

Sinclude<?<dio.h>

/include<string.hZ>

/include<conio.h>

clwr?fun(char(?s>[1003untnum>

voidmain()

(

charstrC10][100j.?mini

in(n.i=O$

FILE?outiprint!("input^tringnwith

end:?

gets(str[i])?

puts(stifi])i

while(!strcmp(sir[i].*-H)=a=0)

(

i++1

get5(i

min=fun(str?n),

prin<f(*\nmin1=s%s\n".min)i

out=fopen("outfilc.dat"Jw">:

sircpy(str[O]."jusu">i

strcpy(:

5trcpy(str[2].*tcM">i

strcpyCsir[3]**someM)t

Mrcpy(str[4]?.tool?!?*>?

IprintfCouu"%*"?fun(str?5)>?

fclosc(out)s

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

31.給定程序MODH.C中函數(shù)fun的功能是:用下面的公式求兀的近

似值,直到最后一項的絕對值小于指定的數(shù)(參數(shù)num)為止:

x.I11

m1—?+十???

4357

例如,程序運行后,輸入0.0001,則程序輸出3.1414。

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

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

,include<math.h>

2tinclude<stdio.h>

3floatfun(floatnum)

4{ints;

5floatn,trpi;

6

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

8while(t>=num)

9(?

10pi=pi?t;

11n-n+2;

123?-S;

13/…?…?…??found?…………/

14t*s%n;

15}

16pi?pi?4;

17returnpi;

18)

19main(J

20{floatnl,n2;

21printf("Enterafloatnumber:");

22scanf&nl);

23n2-fun(nl);

24printf(w%6.4f\nw,n2);

25

32.給定程序MODH.C中函數(shù)fun的功能是:為一個偶數(shù)尋找兩個素

數(shù),這兩個素數(shù)之和等于該偶數(shù),并將這兩個素數(shù)通過形參指針傳回主

函數(shù)。

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

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

?include<stdio.h>

2*include<math.h>

3voidfun(inta,int*b,int*c)

4(int

5for(i?3;i<-a/2;i-i+2)(

6/…………Vound…?………/

7Y-l;

8for(j-2;j<-sqrt((double)i);

j++)

if(i%j??0)y-0;

if(y-1)(

/?*?**********found*****<*******/

d?a-i;

for(j-2;j<-sqrt((double)d);

f(d%j??0)y?0;

if(y—1)

(eb-i;*c*d;}

18

19

20main()

21{inta,b,c;

22do

23(printf(w\nlnputa:*);scanf

(-W,4a);1

24while(a%2);

25fun(a,6b,4c);

N

26printf(*\n\n%d?%d?%d\n*?rbrc);

27

33.給定程序MOD1I.C中函數(shù)fun的功能是:從低位開始取出長整型

變量s中奇數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在1中。高位仍在高位,

低位仍在低位。

例如,當s中的數(shù)為:7654321時,t中的數(shù)為:7531。

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

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

1linclude<stdio.h>

2/…………"und…………/

3voidfun(longs,longt)

4{longsl-10;

5*t-s%10;

6while(s>0)

7(s■s/100;

8*t■s%10*si?*t;

9/****w*******found*********??*/

10si?sl*100;

11

12

13main()

14{longs,t;

15printf("\nPleaseenters:w);

scanf(N%ldN,&s);

16fun(s,&t);

17printf(wTheresultis:%ld\nn^t);

IS

34.下列給定程序中,函數(shù)fun()的功能是:將字符串p中所有字符復(fù)制

到字符串b中,要求每復(fù)制3個字符之后插入一個空格。例如,在調(diào)用

fun()函數(shù)之前給字符串a(chǎn)輸入ABCDEFGHIJK,調(diào)用函數(shù)之后,字符串

b中的內(nèi)容則為ABCDEFGHIJKO

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

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

試題程序:

#include<stdio.h>

voidfun(char*p,char*b)

{inti,k=0;

while(*p)

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

{i=l;

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

while(i<3||*P)

{

b[k]=*p;

k++;p++;i++;

)

if(*p)

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

{b[k]=";}

}

b[k]='\0';

)

main()

{chara[80],b[80];

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

printf("Theoriginalstring:");

puts(a);

fun(a,b);

printf("\nThestringafterinsert

space:");puts(b);printf("\n\n");

)

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

改為對應(yīng)的小寫字母,其他字符不變。例如,若輸入"Ab,cD",則輸出

"ab,cd"o

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

char*fun(chartt[])

inti;

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

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

{if(('A,<=tt[i]||(tt[i]<='z'))

tt[i]+=32;}

retum(tt);

}

main()

{inti;

chartt[81];

clrscr();

printf("\nPleaseenterastring:");

gets(tt);

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

)

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/I0;

while(s>0)

{

d=s/i

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

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()的功能是:計算并輸出下列級數(shù)的的

N項之和SN,直到SN+1大于q為止,q的值通過形參傳入。

SN=2/1+3/2+4/3+(N+1)/N

例如,若q的值為50.0,則函數(shù)值為49.394948。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

doublefun(doubleq)

{intn;doubles,t;

n=2;

s=2.0;

while(s<=q)

t-s

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

s=s+(n+l)/n;

n++;

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

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

returns;

)

main()

{clrscr();

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

38.下列給定程序中,函數(shù)fun()的功能是:傳入一個整數(shù)m,計算如下

公式的值。

t=l/2-l/3-...-l/m

例如,若輸入5,則應(yīng)輸出-0.283333。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

(

doublet=LO;

inti;

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

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

t=1.0-l/i;

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

)

main()

{intm;

clrscr();

printf("\nPleaseenter1integernumbers

:In");

scanf("%d",&m);

printf("\n\nTheresultis%lfln",

fun(m));

}

39.下列給定函數(shù)中,函數(shù)fun()的功能是:統(tǒng)計字符串中各元音字母(即

A,E,I,O,U)的個數(shù)。注意:字母不分大小寫。例如,輸入THISis

aboot,則應(yīng)輸出是10220。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

fun(char*s,intnum[5])

{intk,i=5;

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

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

num[i]=0;

for{;*s;s++)

{i=-l;

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

switch(s)

{case'a':case'A':{i=0;break;}

case'e':case'E':{i=l;break;}

case'i':caseT:{i=2;break;}

case'o':case'O':{i=3;break;}

case'u':case'U':{i=4;break;}

}

if(i>=0)

numfi]++;

)

)

main()

{charsl[81];intnuml[5],i;

clrscr();

printf("\nPleaseenterastring:");

gets(si);

fun{sl,numl);

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

printf("\n");

}

40.給定程序M0D11.C中函數(shù)fun的功能是:計算n的5次方的值(規(guī)

定n的值大于2、小于8),通過形參指針傳回主函數(shù);并計算該值的個

位、十位、百位上數(shù)字之和作為函數(shù)值返回。

例如,7的5次方是16807,其低3位數(shù)的和值是15o

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

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

linclude<stdio.h>

2*include<math.h>

3intfun(intn,int*value)

4{intd,s,i;

5

6d-0;s-0;

7for(iwl;i<w5;i++).d?d/n;

8*value-d;

9for(i?l;i<*3;i++)

10{s-s+d%10;

11found*?肯?,??肯??***/

12d=d\10;

13

returns;

15

16main()

17{intn,sum,v;

18do

19{printf(w\nEntern(2<n<8):;

Rw

scanf(%dr;)

20while(n<-21In>?8);

21sum-fun(n,6v);

22printf(n\n\nTheresult:\nvalue?

%dsum-%d\n\n",vrsum);

23

五、程序改錯題(2題)

41.下列給定程序中,函數(shù)proc的功能是計算正整數(shù)m各位上數(shù)字的

平方和。

例如,輸入498,則輸出應(yīng)該是161。

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

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

構(gòu)。

試題程序:

#include<stdlib.h>

#include<stdio.h>

#include<conio.h>

longproc(10ngm)

{'

I!****found****

longsum=1;

do

(

sum+=(m%10)*(m%10);

m/=10;

II****found****

)

while(m)

return(sum);

)

voidmain

(

longn;

system("CLS");

printf("Pleaseenteranumber:");

scanf("%ld",&n);

printf("\n%Id\n",proc(n));

42.下列給定程序中,函數(shù)proc()的功能是逐個比較strl,str2兩個字符

串對應(yīng)位置中的字符,把比ASCII值大或相等的字符依次存放到str數(shù)

組中,形成一個新的字符串。

例如,strl中的字符串為fshADfg,str2中的字符串為sdAEdi,則str

中的字符串應(yīng)為sshEdig。

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

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

構(gòu)。

試題程序:

&mcludtV

ftmcludt<

voidproc<ciuir?p.cha/?q.char?cl

tmtlt*O*

wbik<-plI-

//????found????

(if<??qJ

dk]?<

elx<(']■?pi

I"?p)??

if<?q>q++i

*

//????IOUMI????

midtnainC>

(elwr*irl[10j?*(*hAD(ge.w"tdAEdi*#

proc<?tri?Mr2?fltr)?

ptmtfC'TheMrtttgMri:*)iwtrl)i

prifitfC*Tbcstring?ir2iN)ipuu(>trt)a

pnn(f("Therrwultt>>ipui?<Mr>i

六、操作題(2題)

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

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

)

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

S=(l-1/2)+(1/3-1/4)+...+(1/(2n-l)-l/2n)

例如,若主函數(shù)從鍵盤給n輸入20后,則輸出為S=0.680803c

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

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

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

試題程序:

#includet:stdio.h>

doubleproc(intn)

(

)

voidmain

{

intn;

doublesum;

printf("\nlnputn:");

scanf("%d",&n);

sum=proc(n)o

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

參考答案

1.程序調(diào)試程序調(diào)試解析程序調(diào)試的任務(wù)是診斷和改正程序中的錯誤。

程序調(diào)試與軟件測試不同,軟件測試是盡可能多地發(fā)現(xiàn)軟件中的錯誤。

先要發(fā)現(xiàn)軟件的錯誤,然后借助于調(diào)試工具找出軟件錯誤的具體位置。

軟件測試貫穿整個軟件生命期,而調(diào)試主要在開發(fā)階段。

2.8888解析:C語言規(guī)定,以0開頭的整型常量為八進制。另外,在

primf()函數(shù)中,%X表示以十六進制無符號形式輸出一個整數(shù),且十六

進制中的ABCDEF為大寫字母。本題的輸出應(yīng)該是八進制210的十六

進制形式。將八進制轉(zhuǎn)換為十六進制,可以先將其轉(zhuǎn)換為二進制。因為

1位八進制表示3位二進制,4位二進制表示1位十六進制。(210)8=(1000

1000)2=(88)16,故本題輸出為880

3.物理獨立性數(shù)據(jù)獨立性是數(shù)據(jù)與程序間的互不依賴性,即數(shù)據(jù)庫中數(shù)

據(jù)獨立于應(yīng)用程序而不依賴于應(yīng)用程序。也就是說,數(shù)據(jù)的邏輯結(jié)構(gòu)、

存儲結(jié)構(gòu)與存取方式的改變不會影響應(yīng)用程序。數(shù)據(jù)獨立性一般分為物

理獨立性與邏輯獨立性兩級。

4.DDBBCCDDBBCC解析:C語言對枚舉的定義規(guī)定:在枚舉中聲明的

各個枚舉元素,如果沒有明確指出某個枚舉元素的值,它的上一個元素

存在并有明確值的情況下,這個枚舉元素的值為其上一個元素的值+1。

在本題中,沒有明確說明枚舉元素em3的值,則em3=em2+l=l+l=2,

進而可知,在printf()打印函數(shù)中,要打印的數(shù)組元素是aa[3]、aa[l]、

aa[2],因此最后的打印結(jié)果應(yīng)當為“DDBBCC”。

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

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

是a=14o

6.1616解析:首先用j和MCRA⑴替換MCRB(n,m)中的參數(shù)n和m,

變成2*MCRA(j)+MCRA⑴,再用j和i替換MCRA(m)中的參數(shù)m,變

成2*2*j+2*i=2*2*3+2*2=16。

7.IMS(informationManagementSystem)

8.a=2b=3a=2,b=3解析:分析程序,程序從x=l語句開始執(zhí)彳了,之后執(zhí)

行第—個switch語句,switch(x)=switch(1),所以執(zhí)行easel,easel語句

中包含一個復(fù)合switch語句:這時執(zhí)行第二個switch語句,此時y=l,

所以switch(y)=switch⑴,因此執(zhí)行easel,將b加1,得到b=2,遇到

break語句,退出第二個switch語句,則整個case1的復(fù)合語句執(zhí)行完

畢,由于在這個case1的后面沒有break語句使其退出第一個switch語

句,所以接著執(zhí)行下列的case2后面的語句,即將a,b各加1,得到

a=2,b=3。

9.66解析:已知aa[3]={l,2,3},n=3,調(diào)用函數(shù)f,n>1成立,執(zhí)行

a[0]+f(&a[l],n-1);即l+f(&a[l],2),遞歸調(diào)用函數(shù)f,將a[l]的地址作

為參數(shù)傳給數(shù)組a,使數(shù)組a的首地址變?yōu)閿?shù)組中的元素只有2,

3;2傳給n,這時n=2,n>1仍然成立,繼續(xù)調(diào)用a[0]+f(&a[l],n-l);

即執(zhí)行l(wèi)+2+f(&a[l],l),因為上次遞歸調(diào)用函數(shù)f后數(shù)組中的元素為2,

3,所以此次的a[l]為3,調(diào)用后的a[0]為3。所以最后結(jié)果為1+2+3=6。

10.5.04c=35.0,4,c=3解析:scanf(掐式控制,地址列表),如果在“格式控

制,,字符串中除了格式說明以外還有其他字符,則在輸入數(shù)據(jù)時應(yīng)輸入

與這些字符相同的字符。所以此題中輸入數(shù)據(jù)的形式是5.04,c=3。

11.D題目中需要輸入一個變量,scanf要求輸入?yún)?shù)為指針,而D選項

中“ps,age”為變量,不是指針。故本題答案為D選項。

12.D輸出時以%4整型格式輸出,所以輸出字符變量cl的值為65,c2-

2的值為68-2,即66。故本題答案為D選項。

13.C解析:在C語言中,實數(shù)有兩種表示形式:十進制數(shù)形式與指數(shù)形

式。

1)一般形式的實數(shù):小數(shù)形式的實數(shù)由整數(shù)部分、小數(shù)點和小數(shù)部分組

成(必須要有小數(shù)點)。

2)指數(shù)形式的小數(shù):指數(shù)形式的實數(shù)由尾數(shù)部分、e(E)和指數(shù)部分組成

(字母e或E的前后必須要有數(shù)字,且其后面的指數(shù)必須為整數(shù))。選項

A中,5E2.0中E后面的2.0不是整數(shù);選項B中,E前面沒有數(shù)字;

選項D中,E后面沒有數(shù)字。

14.C

選項A的if條件表達式的值是5,結(jié)果為真,執(zhí)行“y=l”,y的值為

1;選項B的if條件表達式x的值為5,結(jié)果也是真,執(zhí)行“y=l”,y的

值為1;選項C的if條件表達式“x=y”是賦值語句,將y的值0賦給x,

表達式的值為0,if語句不執(zhí)行,y的值為0;選項D的if條件表達式

“x=y”是賦值語句,將y的值10賦給x,表達式的值為10,執(zhí)行

“y=l”,y的值為1。故本題答案為C選項。

15.D

16.C對于表達式“(m=a>b)&&(n=c>d)”,首先執(zhí)行m=a>b,由于a、b的

值分別為1、2,因此a>b的值為0,m的值為0,又由于邏輯與運算符

&&的短路原則,第1個表達式的值為假,因此整個表達式的值已經(jīng)確

定為假,第2個表達式不會被執(zhí)行,n的值依然是2。本題答案為C選

項。

17.C\n面向?qū)ο蟮脑O(shè)計方法的基本原理是:使用現(xiàn)實世界的概念抽象地

思考問題從而自然地解決問題。它雖強調(diào)模擬現(xiàn)實世界中的概念而不強

調(diào)算法,但是它鼓勵開發(fā)者在軟件開發(fā)的過程中從應(yīng)用領(lǐng)域的概念角度

去思考。

\n

18.D解析:選項A),B),C)的指針賦值表達方式都不正確,*p=5表達

整數(shù)5放到指針p所指向的存儲單元中。注意:通過指針引用一個存儲

單。

19.B

本題考查靜態(tài)變量,C語言中靜態(tài)變量的生存期是從程序的開始到結(jié)

束。本題中靜態(tài)變量x,隨著每次進入循環(huán)不斷增長5次,返回的值分

別為2、3、4、5、6o所以S=1+2+3+4+5+6=21,選B。

20.B

21.

【答案】.?「

voidfun(rhar*3.chartfJ)_?';;+:

(F「t'\ii.

inti,jVh\'■<\

foi(?=O?l?l!=,w),;?*+).;'!,:-7'1,

if(i%:.=fl&44il%2=0)f*將s所指字符串中下標和ASCH碼值都為偶數(shù)的字符放人數(shù)組t中?/

1[)++]=4>];-:?1I■■■.,?

t(jM\0V?在字符串最后加上結(jié)束標識符*/1;?.

I.

【解析】,:“,二

循環(huán)語句遍歷字符串,條件語句找出下標和ASCU碼值同時為偶數(shù)的字符,并存入敷組中。

22.

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

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

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

作為結(jié)束符。

23.

【解析】根據(jù)題意,所寫函數(shù)要用for循環(huán)實現(xiàn)對整數(shù)1?1000的遍歷;

通過if語句找出能被7或11整除,但不能同時被7和11整除的所有整

數(shù),因為同時被7和11整除的整數(shù)一定能被77整除,且不能被77整

除的數(shù)不一定就是能被7或11整除,可得出表達式“(i%7==0||i%ll==O)

&&i%77!=0";再按題目要求,將找出來的整數(shù)放在a所指的數(shù)組中,

通過n返回這些數(shù)的個數(shù)即可。

24.

voidfun(STREC*a)

inti:

a一>ave=0.0:

fbr(i=O;i<N;i++)a->ave=a—>ave+?一>s[i];/*求各門成績的總和}

/

a->ave/=N;/}求平均分*/}

【考點分析】

本題考查:結(jié)構(gòu)體類型成員運算,指向結(jié)構(gòu)體類型的指針變量作函數(shù)

參數(shù)。

【解題思路】

本題考查自定義形參的相關(guān)知識點,程序流程是這樣的:在如n()函數(shù)

中求出平均分后,返回到主函數(shù)時平均分也要帶回,所以只能定義一

個指針類型的形參STRECa,此時,引用成員的方式可以使用指向運

算符,即a—>ave和a—>s[i],當然也可用(*a),2丫6和(*2).S[i]o

25.1floatfun(intm,fintn){Floatp1=1,p2=l,p3=l;inti;for(i=1;i<=m;i++)pi*=i;f

or(i=l;i<=n;i++)p2*=i;for(i=l;i<=(m-n);i++)p3*=i;returnpi/(p2*p3);

本題考查循環(huán)的使用。通過3個for循環(huán)分別計算階乘。其中pl=m!,

p2=n!,p3=(m-n)!o

26.

mtproc<intacorefJ?mtm?int

(

int

float-0.01

■v-"+scorc£i]/mi〃求平均(ft

(or(i-0siVmii++)

i((icorrfn>?v>果分數(shù)島Ff均分?!《禽jft

分他*人”重組中

np(j*I/

rriumn

【解析】要找出低于平均分數(shù)的學(xué)生記錄,首先應(yīng)該算出所有學(xué)生的

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

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

主函數(shù)。

27.

【解析】首先定義一個變量來表示其和s,通過n次循環(huán)求出n項的和,

最后將所得到各項的和值返回給主函數(shù)。

28.

【答案

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論