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

下載本文檔

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

文檔簡介

2022年遼寧省營口市全國計(jì)算機(jī)等級考試

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

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

一、2.填空題(10題)

1.數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲結(jié)構(gòu),線性鏈表屬于[】。

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

數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、和處理過程。

3.函數(shù)check用來判斷字符串s是否是“回文”(順讀和倒讀都一樣的字

符串為“回文”,如abeba)。是則函數(shù)返回值1,否則返回值0,請?zhí)羁铡?/p>

intcheck(char*s)

(

char*pl,*p2;intn;

n=strlen(s);

pl=s;

p2=[];

while(pl<p2)

(

if(*pl!=*p2)break;

else{pl++;p2—;}

if([])return0;

elsereturn1;

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

main()

{chars[]="ABCD",*p;

for(p=s+l;p<s+4;p++)printf("%s\n",p);)

5.若輸入5、9,以下程序的運(yùn)行結(jié)果為【】。

main()

{inta,b,*ptl,*pt2;

printf("inputa,b:");

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

ptl=&a;

pt2=&b;

if(a<b)swap(ptl,pt2);

printf("\n%d,%d\n",*ptl,*pt2);

)

swap(pl,p2)

int*p1,*p2;

{int*p;

P=P1;

pl=p2;

P2=P;

6.以下程序的輸出是【】。

main()

(

charstrl[]="Howdoyoudo",*pl=strl;

strcpy(strl+strlen(strl)/2,"esshe");

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

7.數(shù)據(jù)庫系統(tǒng)中實(shí)現(xiàn)各種數(shù)據(jù)管理功能的核心軟件稱為【】。

8.閱讀下面程序,則執(zhí)行后的輸出結(jié)果是【】。

#include"stdio.h"

main()

{intx,y,z;

x=];y=2;z=3;

if(x>y)if(x>z)printf("%d",x);

elseprintf("%d",y);

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

9.設(shè)一棵二叉樹的中序遍歷結(jié)果為DBEAFC,前序遍歷結(jié)果為

ABDECF,則后序遍歷結(jié)果為【】。

10.mystrlen函數(shù)的功能是計(jì)算str所指字符串的長度,并作為函數(shù)值返

回。請?zhí)羁铡?/p>

intmystrlen(char*str)

{intI;

for(I=0;[]!='\n';I++);

return(I);}

二、單選題(10題)

ll.設(shè)有定義'Charp口={T,2,3},*q=p;",以下不能計(jì)算出一個char

型數(shù)據(jù)所占字節(jié)數(shù)的表達(dá)式是()。

A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

12.下面程序的輸出結(jié)果是()。chars()="ABCD",*p;main(){for(p=s;p

<s+4;p++)printf("%s\n",p);)

A.ABCDBCDCDDB.ABCDC.DCBAD.ABCDABCABA

13.字符串"alibaba”的二進(jìn)制哈夫曼編碼有多少位()

A.llB.12C.13D.14

14.下列程序的輸出結(jié)果是()。#include<stdio.h>main(){structst{int

y,x,z;};union{longi;intj;chark;Jun;

printf("%d,%d\n",sizeof(structst),sizeof(un));}

A.6,2B.6,4C.8,4D,8,6

15.結(jié)構(gòu)化程序設(shè)計(jì)主要強(qiáng)調(diào)的是()。

A.程序的規(guī)模B.程序的效率C.程序設(shè)計(jì)語言的先進(jìn)性D.程序的易讀

16.

(1)算法的空間復(fù)雜度是指()。

A)算法程序的長度B)算法程序中的指令條數(shù)

C)算法程序所占的存儲空間D)律法執(zhí)行過程中所需要的存儲空間

17.C語言中char類型數(shù)據(jù)占字節(jié)數(shù)為()。

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

18.要聲明一個有10個int型元素的數(shù)組,正確的語句是()。

A.inta[10];B.inta[2,5];C.inta[];D.int*a[10];

19.有以下程序:main(){inta[][3]={{1,2,3),{4,5,0)),(*pa)[3],i;pa=a;

for(i=0;i<3;i++)if(i<2)pa[l][i]=pa[l][i]-l;elsepa[l][i]=l;

printf("%d\n",a[O][l]+a[l][l]+a[l][2]);}執(zhí)行后輸出結(jié)果是()。

A.7B.6c.8D.無確定值

20.以下描述中正確的是

A.由于do-while循環(huán)中循環(huán)體語句只能是一條可執(zhí)行語句,所以循環(huán)體

內(nèi)不能使用復(fù)合語句

B.do-while循環(huán)由d。開始,用while結(jié)束,在while(表達(dá)式)后面不能寫

分號

C.在do-while循環(huán)體中,是先執(zhí)行一次循環(huán),再進(jìn)行判斷

D.do-while循環(huán)中,根據(jù)情況可以省略while

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

21.請編寫函數(shù)proc(),該函數(shù)的功能是:移動一維數(shù)組中的內(nèi)容,若

數(shù)組中有n個整數(shù),要求把下標(biāo)從p到n-l(p<n-l)的數(shù)組元素平移到

數(shù)組的前面。例如,一維數(shù)組中的原始內(nèi)容為1,2,3,4,5,6,7,

8,9,10,11,12,13,14,P的值為4。移動后,一維數(shù)組中的內(nèi)容應(yīng)

為5,6,7,8,9,10.11,12,13,14,1,2,3,4O注意:部分源

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

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

/includeh>

*defineM80

voidproc(int?w.intp.intn)

voidmain()

(

intarr[M]=<1.2.3?4.5.6?7?8?9?10.11?12?13,

14h

inti.p?n14s

printf("Theoriginaldaiat\nw)i

for(i'Oji-Cnsib4")

printf("%3d"?arrfi])?

printf(*\n\nEntcrpj**)>

wanfL%d"?&p)?

proc(arr?p?n)t

printfC**\nThedataaftermoving;\n*):

for(im0|i<Cnii4-+>

printf("%3d".arrfi])?

printf(*\n\n*)i

22.請編一個函數(shù)intfun(inta),它的功能是:判斷a是否是素?cái)?shù),若a是

素?cái)?shù),返回1;若不是素?cái)?shù),返回0。A的值由主函數(shù)從鍵盤讀入。

23.下列程序定義了MM的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫

函數(shù)proc(inta口[M]),該函數(shù)的功能是:使數(shù)組左下半三角元素中的值

全部置成0。例如,a數(shù)組中的值為:

a=i7409

48824

55171

15276

14232

用返網(wǎng)主程序后a數(shù)組中的值應(yīng)為:

07409

00824

00071

00006

nnnnn

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

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

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

試題程序:

Uinclude<conio.h>

iincludeVstdio.h>

3$includeh2>

s?includeVstdlibuh>

二defineM5

voidproc(inta[j[M])

voidmain<>

intarif

srand((unsigned)time(NULL))i

sy5tem("CI.S*)?

print”"????Thearray????\nM)i

for(iraO|j<Mji++)

〃產(chǎn)生一個隨機(jī)的5,5矩陣

<for(j=Oij<Msj++>

(arrfi]£j]=rand(>%10i

printf("%4d",arr[i](jJ)?

)

printf(**\nw)i

)

proc(arr):

printf(wTHERESULT'n"),

for(i=0$iVM[i++)

(for(j?0ij<Mij4-4->

printf("%4d*warr[i][j])s

printfC*\n**)i

24.請編寫函數(shù)proc(),該函數(shù)的功能是:將兩個兩位數(shù)的正整數(shù)

numl,num2合并形成一個整數(shù)放在num中。合并的方式是:將numl

數(shù)的十位和個位數(shù)依次放在num數(shù)的十位和千位上,num2數(shù)的十位

和個位數(shù)依次放在c數(shù)的百位和個位上。

例如,當(dāng)num1=64,num2=18時,調(diào)用到該函數(shù)后,num=4168o

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

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

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

試題程序:

sfincludeVstdlib.h>

sincludeVstdio.h>

Minclude<conio.h>

voidproc(ininuml?intnum2Jong?num)

voidmain()

intnuml.num2s

longnum:

siystem("CLS*)?

printfC"Inputnuml,num2(")i

sc?nf("%d%d",&numl.&-num2)?

proc(numl?num2?&*num)t

printfCThcresultisi%ld\nN?num)?

25.編寫函數(shù)fun,其功能是:求ss所指字符串中指定字符的個數(shù),并返

回此值。

例如,若輸入字符串123412132,輸入字符為1,則輸出3。

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

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

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

Windude<stdio.h>

tfincludr<siring,ii>

HdrfineM8!

intfun(rhoir?HS.charc)

miun()

|churMJ?ch;

voidNONO():

printf(**XnPlenseenWrastring:");grU?(A):

printf(**\nPleaseenterachar:"I;ch=gctchar();

printf(**\nTlirnumberofthechnris:%d\np.fun(■.ch));

NONO():

vnidNONO()

|/?本函數(shù)用于打開文件.輸入測試數(shù)據(jù).調(diào)用fun函數(shù).檢出數(shù)據(jù),關(guān)閉文件。*/

inii:

FILE*乩■M;

ehara[M]?b[M],ch;

rf=fbprn(nin.r**);

wf=fi?prn("out.dal*';

(or(i=0;i<10?i?-)|

fnc4mf(rf,M%R**.a);

ft?>anf(rf.**%?**.b);

ch=?b;

fprinrf(wf.,*%c=%d\n"'.ch?fun(a.ch));

(clone(if);

fclooefwf);

26.

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

-...-In(m))2s作為函數(shù)值返回。在C語言中可調(diào)用log(n)函數(shù)求

In(n)olog函數(shù)的引用說明是doublelog(doublex)o例如,若m的

值為10,則proc()函數(shù)值為198.934454O注意:部分源程序給出如

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

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

sindudeVCCMIIQ.

Sincludeb>

¥indudeh>

doublepVQr(mim)

mHMuUfH)

?y?tctn(*CLS*)i

prifitit*Kf\n**proc(10))i

27.

請編寫一個函數(shù)proc(),它的功能是:根據(jù)以下公式求7c的值(要求

滿足精度。.。。。5,即某項(xiàng)小于。.。05時停止迭代)o

K/2?1+1/3+1*2/(3?5)+1?2?3/(3?5?7)4-1

*2?3?4/(3?5?7?9)+,,,+1#2?3?????n/(3?S?

7w????(2n4-l)l

程序運(yùn)行后,如果輸入精度0.0005,則程序輸出3.140578o注意:

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

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

4include<conio.h>

UincludeVstdi。.h>

zinclude<math.h>

doubleproc(doubleeps>

voidmain()

(

doublesi

printfC"\nPkascenteraprecision:*)i

scanf(wKIP?&M)i

printfCXnPi^%lf\n*,proc(s))t

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

除了字符串前導(dǎo)的*號之外,將串中其他*號全部刪除。在編寫函數(shù)時,

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

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

串中的內(nèi)容應(yīng)當(dāng)是:

****ABCDEFG。

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

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

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

#include<stdin,h>

voidfun(rhar?■)

main()

chars[81];voidNONO();

printf(*Enterastring:\nN);geu(B);

fun(、):

|irintf("Thestringafterdeleted:\n");puts(?);

NONO():

voidNONO()

!/?本南數(shù)用于打開文件.輸入數(shù)據(jù),調(diào)用函數(shù),臨出數(shù)據(jù),關(guān)閉文件.?/

FILE?in,?oul;

mtt;chars[81J;

in=fopen("in.dat",**r**);

outwfopcn("out.dat**.ww*);

fw(i=

f?canf(in.**%?*,?);

fun(?)(

fprinlf(out.H%?\n**..);

(cloec(in);

IcloseCout);

29.

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

是:使字符串中前部的*號不得多余m個;若多余m個,則刪除多余的

*號;若少于或等于m個,則什么也不做,字符串中間和尾部的*號不刪

除。例如,字符串中的內(nèi)容為****A*BC*DEF*G****,若m的值為2,

刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是**A*BC*DEF*G****;若m的值為

4,則字符串中的內(nèi)容仍為****A*BC*DEF*G****°n的值在主函數(shù)中輸

入。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。注意:部分源

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

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

/includeh>

磐mclmie<COCMO.h>

midproc<char?a?intn)

voidt**in(>

(cii*rzrfjiifiiRI*

eEnter*Mnngi\nM>ifrt?(?tr)i

pnarK*Entertni?

procC

pnntfC"TbrAtnugafterdrlct?l*\i1*)t

tMi?(?tr)t

30….請編寫函數(shù)。fun能是:判斷形參n中的正整數(shù)是幾位數(shù)(輸入數(shù)

據(jù)的位數(shù)不超過4位),并將結(jié)果通過函數(shù)值返回。例如:若輸入的數(shù)

據(jù)為123,則輸出結(jié)果為:輸入的數(shù)字是3位。注意:部分源程序存在

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

數(shù)fun的花括號中填入所縮寫的若干語句。試題程

iinclude<stdio.h>

voidNONOO;

intfun(intn)

main()

{intn,place;

do{

printf請輸入一個4位以內(nèi)的正整數(shù):?);

scanf;

)while(n<0IIn>9999);

place-fun(n);

printf("IS人的數(shù)字是%d位\n**,place);

NONO();

)

voidNONO()

{/?本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用雨數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/

FILE?fp,?wf;

inti,n,place;

fp■fopen("c:\test\in.dat","r");

wf-fopen("c:\test\sut.dat**,Ww");

for(i-0;i<10;i1)

(

fscanf(fp,"%d",in);

place?fun(n);

R

fprintf(wfr%d\n",place);

>

fclose(fp);

fclose(wf);

序:,

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

31.給定程序MODII.C中函數(shù)fun的功能是:把主函數(shù)中輸入的3個

數(shù),最大的放在a中,最小的放在c中,中間的放在b中。

例如,輸入的數(shù)為:551234,輸出結(jié)果應(yīng)當(dāng)是:a=55.0,b=34.0,

c=12.0o

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

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

tinclude<stdio.h>

2voidfun(floatfloat*b,float*c)

(

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

5float*k;

6if(*a<*b)

7(k?*a;*a-*b;*b?k;}

8/????***???found*****???**/

9if(*a>*c)

10{k-*c;*c?*a;*a-k;}

11if(*b<*c)

12{k-*b;*b-*c;*c-k;}

13)

14main()

15{floata,b.c;

16printf("Inputabc:scanf

RH

(%f%f%fr&ar&br&c);

R

17printf(a=%4.Ifrb?44.Ifrc

w

■%4.1f\n\nrafbrc);

18fun(&a,&b,&c);

w

19printf(a=44.Iffb-%4.1frc

w

-%4.lf\n\n,a,brc);

20

32.下列給定程序中,函數(shù)fun()的功能是:輸出M行N列整數(shù)方陣,

然后求兩條對角線上的各元素的平方和,返回此和數(shù)。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineM5

intfun(intn,intXX[][M])

inti,j,sum=O;

printf("\nThe%dx%dmatrix:\n",M,M);

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

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

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

printf("%4d",XX[ij]);

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

printfC\n');

)

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

sum+=xx[i][i]*XX[i][i]+XX[i][n-i-1]

*XX[i][n-i-l];

return(sum);

)

main()

(

intaa[M][M)={{3,12,4,24,35},

{11,3,3,7,56},{61,27,58,49,24},

(17,28,7,36,85},{15,33,5,24,9});

clrscr();

printf("\nTheresultofallelementson2

diagnalsiS%d",fun(M,aa));

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

如下公式的值。

t=l-l/(2x2)-l/(3x3)-...-l/(mxm)

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

doublefun(intm)

{doubley=l.O;

inti;

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

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

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

y-=l/(i*i);

return(y);

main()

{intn=5;

clrscr();

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

34.下列給定程序中,函數(shù)fun()的功能是:求出以下分?jǐn)?shù)序列的前n項(xiàng)

之和。

2/1,3/2,5/3,8/5,13/8,21/13,.......

和值通過函數(shù)值返回main()函數(shù)。例如,若輸入n=5,則應(yīng)輸出8.391667O

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

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

fun(intn)

{inta=2,b=l,c,k;

doubles=0.0;

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

{s=s+1.0*a/b;

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

c=a;a+=b;b+=c;

)

return(s);

}

main()

{intn=5;

clrscr();

printf("\nThevalueoffunctionis:

%lAn",fun(n));

35.下列給定程序中,函數(shù)fun()的功能是:計(jì)算并輸出下列級數(shù)的的

N項(xiàng)之和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));

36.下列給定程序中,函數(shù)fun()的功能是:計(jì)算整數(shù)n的階乘。

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

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

試題程序:

#include<stdio.h>

doublefun(intn)

(

doubleresult=L0;

whil(n>l&&n<170)

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

result*=—n;

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

return;

main()

{int.n;

clrscr();

printf("Enteraninteger:");

scanf("%d",&n);一

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

37.給定程序M0D11.C中函數(shù)fun的功能是:將十進(jìn)制正整數(shù)m轉(zhuǎn)換

成k(2SkS9)進(jìn)制數(shù),并按高位到低位順序輸出。

例如,若輸入8和2,則應(yīng)輸出1。。0(即十進(jìn)制數(shù)8轉(zhuǎn)換成二進(jìn)制表示

是1000)o

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

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

1*include<conio.h>

2?include<stdio.h>

3voidfun(intm,intk)

4

5intaa[20]9i;

6for(i-0;m;i++)

7(

8/?肯????????found*?????????/

9aa[i]-m/k;

10m/■k;

11

12for(;i;i--)

13found**********/

Rw

14printf(%draa[i]);

15}

16main()

17(

18intb;n;

19printf(w\nPleaseenteranumber

andabase:\nw);

20scanf(R%d%d-,&b);

21fun(nrb);

22printf(w\nw);

23

38.下列給定程序中,函數(shù)fun()的功能是:計(jì)算s所指字符串中含有t

所指字符串的數(shù)目,并作為函數(shù)值返回。

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

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

試題程序:

#include<conio.h>

#include<string.h>

#include<stdio.h>

#defineN80

intfun(char*s,char*t)

{intn;

char*p,*r;

n=0;

while(*s)

p=s,

/*1**1*01*1**1**1**1-**4*/

/不不不不不不不不不不不不不不Iciin「不不不不不不不不不不不不干不干/

r=P;

while(*r)

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

elsebreak;

/*1**1**1**1**1*vl**1**1**1*。1*1**1**1**1**1**1*K!*/

/不不不不不不不不不不不不不不T/~1l不不不不不不不不不不不不干不不/

if(*r==0)

n++;

s++;

)

returnn;

)

main()

{chara[N],b[N];intm;

clrscr();

printf("\nPleaseenterstringa:");

gets(a);

printf("\nPleaseentersubstringb:");

gets(b);

m=fun{a,b);

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

)

39.下列給定的程序中,函數(shù)fun()的功能是;將s所指字符串中出現(xiàn)的

n所指字符串全部替換成t2所指字符串,所形成的新的字符串放在w所

指的數(shù)組中。在此處,要求口和t2所指字符串的長度相同。例如:當(dāng)

s所指字符串中所指的內(nèi)容為abcdabfab,tl所指字符串中的內(nèi)容為ab,

t2所指字符串中的內(nèi)容為99時,結(jié)果在w所指的數(shù)組中的內(nèi)容應(yīng)為

99cd99f99。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(char*s,char*tl,char*t2,char*w)

inti;char*p,*r,*a;

strcpy(w,s);

while(*w)

{p=w;r=tl;

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

while(r)

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

elsebreak;

if(*r=='\0')

{a=w;r=t2;

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

while(*r){*a=*r;a++;r++}

w+=strlen(t2);

elsew++;

main()

{chars[100],tl[100],t2[100],w[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

printf("\nPleaseentersubstringtl:");

scanf("%s",tl);'

printf("\nPleaseentersubstringt2:");

scanf("%s",t2);“

if(strlen(tl)==strlen(t2))

(

fun(s,tl,t2,w);

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

}

elseprintf("Error:strlen(t2)\n");

40.下列給定程序中,函數(shù)fun()的功能是紿定n個實(shí)數(shù),輸出平均值,

并統(tǒng)計(jì)平均值以上(含平均值)的實(shí)數(shù)個數(shù)。例如,n=8時,輸入193.199,

195,673,195,757,196,051,196.092,196,596,196,579,196.763,所

得平均值為195.838745,在平均值以上的實(shí)數(shù)個數(shù)應(yīng)為5。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(floatx[],intn)

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

ihtj,c=0;floatxa=0.0;

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

xa+=x[j]/n;

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

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

if(x[j]>=xa)

C++;

returnc;

)

main()

{floatx[100]={193.199,195,673,195,757,

196,051,196.092,196,596,

196,579,196.763);

clrscr();

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

)

五、程序改錯題(2題)

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

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

的值為800,則函數(shù)的值為7605。

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

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

構(gòu)。

試題程序:

gtficludrVgdkx

8includeVcocuo.

*includeVsidliKh>

intproHintIt)

mttn?O.mc-O?ji

whdi?(<W-2)&&?t0)1

//????found??■?

jf<(kXlS*O>/14k%l8-0>)

m-4*lt||Mr-4--i)

k-—?

//????(oufid????

returnmi

voidnwiinC)

wystetnC*CLS")i

prmtf<aKAna?procOOO>);

42.下列給定程序中,函數(shù)proc()的功能是:根據(jù)整型形參n的值,計(jì)

算如下公式的值。t=l-l/(2*2)-1/(3*3)-...-1/(n*n)例如,當(dāng)

n=7時,t=0.488203。請修改函數(shù)proc()中的錯誤,使它能得出正

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

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

#knclude<<idhkb>

sincludeVconio,h>

?include<sttd>o.h>

dooblcprocitutn)

(doubleI,Oi

iniii

//????IOUMI????

!(wqi-2iiV0ii*?)

//????ICWMI????

,一■■l/Ci?

mura<y)i

voidmain<)

(ini|>-7|

*CLS*)?

prmtf<*\nTheresulti?/lf\n'?pruc(n)>s

六、操作題(2題)

43.函數(shù)delete(s,i,n)是作用是從字符串s中刪除從第i個字符開始的n

個字符,請?zhí)羁铡?/p>

voiddelete(chars[],inti,intn)

{intj,k,length=O;

while(s[length])

[];

-i;

j=i

)

if([])

{k=i+n;

if(i+n<=length)

while(k<length)

s[j++]=s[k++];

s[j]='\O';

44.請編一個函數(shù)voidproc(intttEM][N],intpp[N]),tt指向一個M行

N列的二維數(shù)組,求出二維數(shù)組每行中最大元素,并依次放入pp所指

的一維數(shù)組中。二維數(shù)組中的數(shù)已在主函數(shù)中給出。

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

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineM3

#defineN4

voidproc(intttrM3rN]□intpp[N])

(

)

voidmain

(

intstr[M][N]={{34,56,84,78},

{23,84,93,12),

{28,38,39,93}};

intp[N],i,j,k;

system("CLS");

printf("Theriginaldatais:\n");

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

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

printf("%6d",str[i][j]);

printf("\n");

)

proc(str,p);

printf("\nTheresultis:\n");for(k=0:k<M;k++)

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

printf("n");}

參考答案

1.存儲結(jié)構(gòu)

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

3.s+n-lpl<p2s+n-l\r\npl<p2解析:判斷是否“回文”字符串,應(yīng)該使用

兩個字符型指針,一個從前往后遍歷字符串,另一個從后往前遍歷字符

串,直到它們中途相遇,如果每次兩個指針?biāo)傅淖址枷嗤瑒t為“回

文”字符串。程序中已經(jīng)使pl=s,即指向字符串的第一個字符了,所以

p2應(yīng)該指向s的最后一個字符,故第一空應(yīng)填s+n-1。比較兩個指針時,

如果有一次不相同,則跳出循環(huán),因?yàn)榇藭r已可肯定不是“回文”字符串。

如果是while循環(huán)的條件pl<p2不滿足時自然結(jié)束的循環(huán),則每次比

較都是相同的,兩個指針是中途相遇了才結(jié)束比較。兩種情況的區(qū)別就

是pl<p2是否成立。故第二空應(yīng)該填pl<p2。

4.BCDCDDBCD\r\nCD\r\nD解析:本題考查指向字符串的指針的運(yùn)算

方法。指針變量P首先指向字符串中的第一個字符A,執(zhí)行p=s+l后,p指

向字符串中的第二個字符B,然后輸出值記CD并換行,依次執(zhí)行循環(huán)語句。

5.59

6.HowdoessheHowdoesshe解析:strcpy(strl,si);字符串拷貝函數(shù),

作用是將字符串si拷貝到字符數(shù)組strl中去。strlen(str):測試字符串str

的長度,函數(shù)的值為字符串中實(shí)際長度,不包括\'\\ov在內(nèi)。本題中

strlen(strl)的值為13,貝strcpy(strl+strlen(strl)/2,'esshe');相當(dāng)于

strcpy(strl+6,'esshe');,因此可得答案為Howdoesshe

7.數(shù)據(jù)庫管理系統(tǒng)

數(shù)據(jù)庫管理系統(tǒng)(DBMS)

8.33解析:C語言的語法規(guī)定:else子句總是與前面最近的不帶else的

if相結(jié)合。因?yàn)閤不大于y,所以執(zhí)行printf(%d\\n;z);語句。

9.DEBFCA

10.*(str+I)或str[I]*(str+I)或str[I]解析:str是指針變量,它指向字符型數(shù)

據(jù),在循環(huán)過程中,可以用*(str+I)來訪問字符串中的第I個元素,判斷是

否為結(jié)束標(biāo)志,如果不是,1=1+1,繼續(xù)取下一個元素進(jìn)行判斷,直到*(str+I)

的值為'\\0'為止也可以用下標(biāo)的方式引用字符,如*(str+I)相當(dāng)于str[I]。

11.A

根據(jù)題目中的定義可知,“sizeof(p)”計(jì)算的是數(shù)組p中所有元素所占用

的字節(jié)數(shù),而不是char型數(shù)據(jù)所占的字節(jié)數(shù)。故本題答案為A選項(xiàng)。

12.A解析:p為指針型變量。第一次循環(huán),p=s,p的值為字符數(shù)組s的

首地址,輸出字符串ABCD:p++,第二次循環(huán),p的值為字符數(shù)組s的

首地址加1,輸出字符串‘BCD:p++,第三次循環(huán),p的值為字符數(shù)組s

的首地址加2,輸出字符串CD:p++,第4次循環(huán),p的值為字符數(shù)組

s的首地址加3,輸出字符串VD。

13.C

14.B解析:本題主要考查結(jié)構(gòu)體和聯(lián)合內(nèi)存使用的區(qū)別:結(jié)構(gòu)中不同

的成員分別使用不同的內(nèi)存空間,一個結(jié)構(gòu)所占內(nèi)存空間的大小是結(jié)構(gòu)

中每個成員所占內(nèi)存空間大小的總和,結(jié)構(gòu)中每個成員相互獨(dú)立;聯(lián)合

所占用的內(nèi)存空間為最長的成員所占用的空間。

15.D解析:程序不僅是編寫完就結(jié)束了,為了測試和維護(hù)程序,往往還

有其他人閱讀和跟蹤程序,因此程序設(shè)計(jì)的風(fēng)格應(yīng)該強(qiáng)調(diào)簡單和清晰,

即程序的易讀性,“清晰第一,效率第二”。

16.D

17.C

Char類型數(shù)據(jù)占1個字節(jié)。

18.A

19.A解析:本題定義了一個指向由3個元素組成的一維數(shù)組的指針變

量pa,通過賦值讓它指向具有2行3列的數(shù)組a,此時用指針變量pa,

表示數(shù)組元素的形式是pa[i][j]ofor循環(huán)執(zhí)行了3次;第一次i值

為0,執(zhí)行pa[l][0]=pa[l][0]-l,執(zhí)行后的值變?yōu)?;第二次i值

為1,執(zhí)行執(zhí)行后的值為4;第三次i值為

2,執(zhí)行pa[l][2]=l,執(zhí)行后a[l]⑵的值變?yōu)?。故printf語句輸入的值

為2+4+1=7。所以,A選項(xiàng)為所選。

20.C解析:do-while語句的一般形式為:do循環(huán)體語句while(表達(dá)式);,

其中循環(huán)體語句可以是復(fù)合型語句,但必須用花括號括起來。while后

必須要有分號作為語句的結(jié)束,在do-while循環(huán)中,不可以省略while。

21.

【解析】題目中要求把下標(biāo)從p到n-1的數(shù)組元素平移到數(shù)組的前面,

可以通過每一次循環(huán)將最后一個元素放在第一個位置上,使其成為第一

個元素,其余元素后移一個位置。通過n-1-p次循環(huán)實(shí)現(xiàn)將從p到n-1

的數(shù)組元素平移到數(shù)組的前面。

22.\n#include,,stdio.h"

\nintfun(inta)

\n{intI;

\nif(a==2)return1;1=2;

\nwhile((a%I)!=OI<=sqrt((float)a))

\nl++;

\nif(a%I==0)

\n{printf("%disnotaprime!”,a);

\nretum0;}

\nprintf("%disaprime!”,a);

\nretum1;}

\nmain

\n{intx;

\nprintf("\\npleaseenteranumber:^^);

\nscanf("%d",&x);

\nprintf(tc%d\\n,,,fun(x));}

\n

23.

【解析】要使數(shù)組左下半三角元素中的值全部置成0,先要找出數(shù)組的

下半三角元素,再將其值全部賦值為0。二維數(shù)組中下半三角元素的特

點(diǎn)為,其列下標(biāo)小于其行下標(biāo)。根據(jù)這個特點(diǎn),將二維數(shù)組的下半三

角元素都賦值為0。

24.

【解析】要算出變量num的值,首先需要得到變量numl和hum2個

位和十位上的數(shù)字。然后將在千位上的數(shù)字乘以1000,百位上的數(shù)字

乘以100,十位上的數(shù)字乘以10,各位上的數(shù)字乘以1,就能得到要求

的hum。

25.

【考點(diǎn)分析】

本題考查:for循環(huán)語句遍歷字符串,并通過if條件語句,判斷字符串

是否結(jié)束。

【解題思路】

從字符串中查找指定字符,需要使用循環(huán)判斷結(jié)構(gòu),循環(huán)語句用來遍

歷字符串,循環(huán)條件為字符串沒有結(jié)束,即當(dāng)前字符不是'\0',判斷

語句用來判斷當(dāng)前字符是否為指定字符。最后返回指定字符的個數(shù)。

26.

【解析】首先我們應(yīng)定義一個變量來表示其和,另一個來表示其項(xiàng)數(shù),

然后通過循環(huán),求得其差值,最后把和的平方返回到主函數(shù)中。

27.

【解析】我們應(yīng)定義一個變量表示其和,一個變量表示其分?jǐn)?shù),由題目

中可知循環(huán)結(jié)束的標(biāo)志為分?jǐn)?shù)小于eps,因此其為循環(huán)結(jié)束的條件,根

據(jù)公式的變化規(guī)律,可求得s,最后把2*s返回到主函數(shù)中。

28.

程序設(shè)計(jì)題解析:

【考點(diǎn)分析】

本題考查:指針型變量定義;while循環(huán)語句;if語句條件表達(dá)式;字

符串結(jié)束標(biāo)識、(T。

【解題思路】

函數(shù)fun的功能:除了字符串前導(dǎo)的*號之外,將串中其他。號全部刪

除。解答本題,(1)定義一個臨時指針P,初始指向原串首地址;(2)利

用循環(huán)語句把字符串前導(dǎo)*號拷貝到原串;(3)繼續(xù)移動指針,把串中和

串尾的非*號字符拷貝到原串;(4)為修改后的字符串賦結(jié)束字符

【解題寶典】

要刪除字符串中的指定字符,通常采用保留非指定字符的方法??梢?/p>

將非指定字符保留在原串,即將需要保留的字符從原串的起始位置重

新賦值;也可以保留到新串,即新建一個字符串,存放要保留的字

符。

29.

【解析】題目中要求字符串前部的*不得多于m,首先要計(jì)算出字符串

前部的*號的個數(shù),與變量m進(jìn)行比較。當(dāng)字符串前部的*多于m個時,

刪除多余的*。規(guī)定不能用字符串函數(shù)處理,可以通過移動字符串的首

指針來實(shí)現(xiàn)。

30.

intbits〃住*tit量隨計(jì)儀a

while(n/10)A0,若不為O.bits*1,4

*n*以10,域修判斷

I

bitsx;

n-n/10;

returnbits;【考點(diǎn)分析】主要考察考生對循環(huán)

跳出的條件的理解,以及理解取數(shù)字位數(shù)的方法?!窘忸}思路】通過

對指定的多位數(shù)每次除以10,去掉最后一位,直到為。結(jié)束,使用臨時

變量來統(tǒng)計(jì)一個多位數(shù)的位數(shù)。

31.(l)floatk;(2)if(*a<*c)(l)floatk;(2)if(*a<*c)解析:本題中函數(shù)

的功能是把主函數(shù)中輸入的3個數(shù),最大的放在a中,最小的放在c中。

對三個數(shù)進(jìn)行兩兩比較,實(shí)現(xiàn)函數(shù)功能。

32.(1)錯誤:printf("%4d"xx[ij]);正確:printf("%4d"xx[i][j]):(2)錯誤:

printf('\n');正確:printr("\n");⑴錯誤:printf('%4d',xx[ij]);正確:

printf('%4d',xx[i][j]):\r\n(2)錯誤:printf(\'\\n\');正確:printr('Wn');解

析:錯誤1:此處考查的是對二維數(shù)組的引用方法。錯誤2:此處考查

的是輸出語句的語法,括號中應(yīng)該用雙引號,而不是單引號。

33.(1)錯誤:for(i=2;i<m;i++)正確:for(i=2;i<=m;i++)(2)錯誤:y-

=l/(i*i);正確:y-=1.0/(i*i);⑴錯誤:for(i=2;i<m;i++)正確:for(i=2;i

<=m;i++)\r\n(2)錯誤:y-=l/(i*i);正確:y-=1.0/(i*i);解析:該題是

一道簡單的計(jì)算題,循環(huán)條件for(i=2;i<m;i++)中忽略了i=

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論