2021年江蘇省常州市全國計算機等級考試C語言程序設計真題(含答案)_第1頁
2021年江蘇省常州市全國計算機等級考試C語言程序設計真題(含答案)_第2頁
2021年江蘇省常州市全國計算機等級考試C語言程序設計真題(含答案)_第3頁
2021年江蘇省常州市全國計算機等級考試C語言程序設計真題(含答案)_第4頁
2021年江蘇省常州市全國計算機等級考試C語言程序設計真題(含答案)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2021年江蘇省常州市全國計算機等級考試

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

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

一、2.填空題(10題)

1.下列的for語句的循環(huán)次數(shù)為o

for(x=1,y=0;(y!=19)&&(x<7);x++);

2.若已定義inta[10],i;以下fun函數(shù)的功能是,在第一個循環(huán)中給前

10個數(shù)組元素依次賦1,2,3,4,5,6,7,8,9,10;在第二個循環(huán)

中使a數(shù)組前10個元素中的值對稱拆疊,變成1,2,3,4,5,5,4,

3,2,1。請?zhí)羁铡?/p>

fun(inta[])

{inti;

for(i=1;i<=10;i++)【】=i;

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

)

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

intt(intx,inty,intcp,intdp)

{cp=x*x+y*y;

dp=x*x-y*y;

}

main()

{inta=4,b=3,c=5,d=6;

t(a,b,c,d);

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

)

4.下列程序的輸出結果是____o

#include<stdio.h>

intt(intx,inty,intcp,intdp)

{cp=x*x+y*y;

如:dp=x*-y*y;

)

main()

{inta=l,b=8,c=7,d=9;

t(a,b,c,D);

printf("%d%d\n",c,D);

}

5.Jackson結構化程序設計方法是英國的M.Jackson提出的,它是一種

面向的設計方法。

6.在結構化分析使用的數(shù)據流圖(DFD)中,利用【】對其中的圖形元素

進行確切解釋。

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

#include"stdio.h"

main()

{intx,y,z;

x=l;y=2;z=3;

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

elseprintf("%d",y);

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

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

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

9.數(shù)據庫系統(tǒng)階段的數(shù)據具有較高獨立性,數(shù)據獨立性包括物理獨立性

和【】兩個含義。

10.閱讀下列程序,則程序的輸出結果為【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,'x'};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c=V;}

二、單選題(10題)

11.下列敘述中錯誤的是()。

A.線性表是由n個元素組成的一個有限序列

B.線性表是一種線性結構

C.線性表的所有結點有且僅有一個前件和后件

D.線性表可以是空表

12.設有定義語句:

doublex=123.456;

則語句

printf(“%6.2f,%3.0f\n”,x,x);

的輸出結果是OO

A.123.46,123.0B.123.45,123C.123.46,123D.123.45,123.

13.以下選項中的表達式調用庫函數(shù)依次求-4.5的絕對值、-4.0的平方

根值、30。角的正弦值和2的3次方值。正確的調用是()

A.abs(-4.5)B.sqrt(-4.0)C.sin(3.1416/6.0)D.paw(2.0,3.0)

14.在下述論述中,正確的是0。①只有一個結點的二叉樹的度為0;②

二叉樹的度為2;③二叉樹的左右子樹可任意交換;④深度為K的順

序二叉樹的結點個數(shù)小于或等于深度相同的滿二叉樹。

A.①②③B.②③④C.②④D.①④

15.設a和b均為double型變量,且a=5.5,b=2.5,則表達式(int)a+b/b

的值是

A.6.5B.6C.5.5D.6

16.當輸入為"hello?"時,下面程序的執(zhí)行結果是()。

#include<stdio.h>

main

{charc;

c=getchar;

while(c!=?)

{putehar(e);break;

)

}

A.RvfsuB.hC.?D.hello

17.C語言中,要求參加運算的數(shù)必須是整數(shù)的運算符是()。

A./B.!C.%D.==

18.以下選項中,非法的字符常量是____o

A.'tVB.'\17'C.\nD.'\xaa'

19.計算機算法指的是()。

A.計算方法B.排序方法C.解決問題的有限運算序列D.調度方法

20.以下敘述正確的是()。

A.C語言程序是由過程和函數(shù)組成的

B.C語言函數(shù)可以嵌套調用,例如:fun(fun(x))

C.C語言函數(shù)不可以單獨編譯

D.C語言中除了main函數(shù),其他函數(shù)不可作為單獨文件形式存在

三、程序設計題(10題)

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

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

fun(),其功能是統(tǒng)計s所指字符串中的數(shù)字字符個數(shù),并將其作為函

數(shù)值返回。例如,s所指字符串中的內容是

2def35adh253kjsdf7/kj8655x,函數(shù)fun()返回值為11注意:部分源程序在

文件progl.c中。請勿改動主函數(shù)main。和其他函數(shù)中的任何內容,僅在

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

linclude<stdio.h>

2voidNONO();

3intfun(char*s)

*(

5

6}

7main()

{char*s="2def35adh253kjsdf

7/kj8655x";

9printf("%s\nn,s);

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

HNONO();

12)

13voidNONO()

14{/*本函數(shù)用于打開文件、輸入數(shù)據、調

用函數(shù)、輸出數(shù)據及關閉文件。*/

15FILE*fp,*wf;

16inti;

17chars[256];

18fp=fopen("in.dat",nrn);

,wf=fopen("out?dat","w");

20for(i-0;i<10;i++){

21fgets(s,255,fp);

fprintf(wf,M%d\nMfun(s));

■r

24fclose(fp);

■25)fclose(wf);

22.

請編一個函數(shù)floatproe(doubleh),函數(shù)的功能是對變量h中的值保留

2位小數(shù),并對第3位進行四舍五人(規(guī)定h中的值為正數(shù))。例如,

若h值為7.32596,則函數(shù)返回7.33;若h值為7.32496,則函數(shù)返

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

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

語句。試題程序:

8mcludeOldish

?include<stdiex.h>

9mdudrVeonto.h)

(knitproHfloatb)

HMin()

(loatft

?CIJT)i

pniiih*Enierft>>i

?canf(*MP?&d

pntitR*!!!<ongtoaldau*)?

pnnd<*K(\n\n*?f)i

prai((<*Thertsoil:%f\n*.proc<f>)i

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

4-...+ln(m))0.5在C語言中可調用log(n)函數(shù)求In(n)。例如,

若nl的值為30,則proc()函數(shù)值為8.6405000注意:部分源程序

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

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

Uinclu^r<.s?dltbub)

9includeVeociio.h>

tfiftrludrh>

NincludeVmtth.K>

doubleproc(UMm)

)

voedOMunl>

?y?ietn<'CIS'>c

pnntf(aXAn.?proc《30》》s

1

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

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

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

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

則他的平均分應為78.875。

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

請勿改動main函數(shù)和其他函數(shù)中的任何內容,僅在函數(shù)fun部位中填

入你編寫的若干語句。

試題程序:

#include<stdio.h>

#defineN8

typedefstruct

(

charnum[10];

doubles[N];

doubleave;

JSTREC;

voidfun(STREC*a)

voidmain

STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5);

inti;

fun(&s);

printf("The%ssstudentdata:\n",s.num);

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

printf("%4.Ifkn",s.s[i]);

printf("\nknave=%7.3fkn",s.aVe);

printf("\n");

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

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

該函數(shù)的功能是將s所指字符串中ASCII值為偶數(shù)的字符刪除,字符串

中剩余字符形成一個新字符串并將其存放在t所指的數(shù)組中。

例如,若s所指字符串中的內容為“ABCDEFG123456",其中字符B

的ASCII值為偶數(shù),字符2的ASCII值為偶數(shù),都應當刪除,其他依

此類推。最后t所指的字符串中的內容應是“ACEG135”。

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

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

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

(

)

voidmain()

(

chars[100],t[100];

system(“CLS”);

printf("\nPleaseenterstrings:");

scanf("%s”,s);

fun(s,t);

printf('AnTheresultis:%s\n,,,t);

)

26.請編寫一個函數(shù)voidproc(char*tt,intpp[]),統(tǒng)計在tt字符串中"a"

到,”26個字母各自出現(xiàn)的次數(shù),并依次放在pp所指數(shù)組中。例如,

當輸入字符串abcdefghxyzabcdet4e后,程序的輸出結果應該是:

2222331100000000000000001110注意:部分源程序給出如下。請勿改

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

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

才iscludc<conio.h>

fimeludeVxdio.h2>

等ihdudcVwdhhb>

voidproc<char?tt.uiipp[])

VOMImatn<>

char

mibb{Xj?ln

print((e\nPlc?*<enter?chari

*%>??*tr)8

proc<>ir?bl>>i

loc(k-0<k<26<*??)

pnnlf(-Kd”?bb(k])?

27.

請編寫一個函數(shù)proc(),它的功能是:求出一個4xN整型二維數(shù)組中

最大元素的值,并將此值返回調用函數(shù)。注意:部分源程序給出如下。

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

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

edrGneN4

$includeVxdidh>

mipra*(tut二[N:?

voidm*in<)

ini?rv£4][N2-U?37JI.$.S34U2.-32?9.

81?-33?3?"?2LN?-9)i

pnntf<*ma?~%d\nN?proc<arr>>t

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

29.實現(xiàn)字符串拷貝的函數(shù)strcpy為()。

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

結構體數(shù)組S中,請編寫函數(shù)proc(),它的功能是:把分數(shù)最高的學生

數(shù)據放在h所指的數(shù)組中。注意:分數(shù)最高的學生可能不止一個,函

數(shù)返回分數(shù)最高學生的人數(shù)。

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

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

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

試題程序:

0ErliwirVvldao,

0drfineMH

rypedrfMfurt

(HUBTtitttnf10ji

mt,?

STRECt

miproc<STREX'???STREC?b)

voidnun*)()

仃REX'3<M)fGA005">?<?3035).

I*GAW工。>?(?(;AO04?工6)?<*GAOOIN?9II.

(wGA007*?GAOOf?64M?GAOOt*.Si.

CGAOISMSI?<MGAOI)a??ll?I?GAOIl*l?

(*GAOH*.ll)UMGAOir.?)?rGAOI?*?MI.

STRtX'h(MJI

Mil!?Bl

n^peocietUak)!

prmtf(aThr”/htgh<?ii

for(,-0iKmi4?》

prtnd(*KtK4d\nbum?h(U?til

〃?楙■舄分7壑■學?0我?

prmH(*\a*H

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

31.給定程序MOD11.C中函數(shù)fun的功能是:首先將大寫字母轉換為

對應小寫字母;若小寫字母為a?u,則將其轉換為其后的第5個字母;

若小寫字母為v~z,使其值減21。轉換后的小寫字母作為函數(shù)值返回。

例如,若形參是字母A,則轉換為小寫字母f若形參是字母W,則轉換

為小寫字母b。

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

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

tinclude<stdio.h>

2,include<ctype.h>

3charfun(charc)

4(if(O-^1&&c<-1Z*)

5/………?ffound…………★/

6OC+32;

7if(O-^1&&c<w,uf)

8/…■………found………?…/

9c-c-5;

10elseif(c>?,V,&&c<—z■)

11c?c-21;

12returnc;

13}

14main()

{charcl,c2;

printf(w\nEnteraletter(A-Z):

cl-getchar();

17if(isupper(cl))

18(c2-fun(cl);

19printf(w\n\nTheletter\1%c\1

changeto\'%c\'\n",cl,c2);

20

21elseprintf(R\nEnter(A-Z)!\nw);

22}

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

數(shù)位上的數(shù),依次構成一個新數(shù)放在t中。高位仍在高位,低位仍在低

位。

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

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

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

[試題源程序]

#include<stdio.h>

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

voidfun(longs,longt)

longsl=10;

s/=10;

*t=s%10;

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

while(s<0)

(

s=s/100;

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

sl=sl*10;

)

)

mein()

{

longs,t;

printf("\nPleaseenters:");

scanf("%ld",&s);

fun(s,&t);

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

}

33.假如整數(shù)數(shù)列中的數(shù)不重復,并存放在數(shù)組中。下列給定的程序中,

函數(shù)fun()的功能是:刪除數(shù)列中值為X的元素。N中存放的是數(shù)列中

元素的個數(shù)。

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

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

試題程序:

#include<stdio.h>

#defineN20

fun(int*a,intn,intx)

{intp=0,i;

a[n]=x;

while(x!=a[p])

p=p+l;

if(p==n)return-1;

else

{for(i=p;i<n;i++)

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

a[i+l]=a[i];

returnn-1;

)

)

main()

{intw[N]={-3,0,1,5,7,99,10,15,30,90},

x,n,i;

n=10;

printf("Theoriginaldata:\n");

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

printf("\nlnputx(todelete):");

scanf("%d",&x);

printf("Delete:%d\n",x);

n=fun(w,n,x);

if(n==-l)printf("***Nobefound!

***\n\n");

else

{printf("Thedataafterdeleted:\n");

for(i=0;i<n;i++)printf("%5d",

w[i]);printf("\n\n");

)

)

34.下列給定程序中,函數(shù)fun()的功能是:從n個學生的成績中統(tǒng)計出

低于平均分的學生人數(shù),此人數(shù)由函數(shù)值返回,平均分存放在形參aver

所指的存儲單元中。例如輸入8名學生的成績:

80.5607290.59851.58864

則低于平均分的學生人數(shù)為4(平均分為75.5625)。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#defineN20

intfun(float*s,ihtn,float*aver)

{floatave,t=0.0;

intcount=0,k,i;

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

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

t=s[k];

ave=t/n;

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

if(s[i]<ave)count++;

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

*aver=&ave;

returncount;

}

main()

{floats[30],aver;

intm,i;

clrscr();

printf("\nPleaseenterm:");scanf

("%d",&m);

printf("\nPleaseenter%dmark:\n",m);

for(i=0;iprintf("\nThenumberofstudents:

%d\n",fun(s,m,&aver));

printf("Ave=%f\n",aver);

)

35.下列給定程序中,函數(shù)fun()的功能是:刪除字符串s中所有空白字

符(包括Tab字符、回車符及換行符)。輸入字符串時用‘#'結束輸入。

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

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

試題程序:

#include<string.h>

#include<stdio.h>

#include<ctype.h>

fun(char*p)

{int!i,t;charc[80];

for(i=0,t=0;p[i];i++)

if(!isspace(*(p+i)))c[t++]=p[i];

c[t]='\0';

strcpy(p,c);

)

main()

{charc,s[80];

inti=0;

printf("Inputastring:");

c=getchar();

while(c!='#')

(s[i]=c;i++;c=getchar();}

s[i]="\0";'

fun(s);

puts(s);

36.下列給定程序中,函數(shù)fun()的功能是:求整數(shù)x的y次方的低3位

值。例如,整數(shù)5的6次方為15625,此值的低3位值為6250

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

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

試題程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

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

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

t=t*x;

*p=t;

/*********不不不*不f^)und?不不不*不不不*字不不****/

t=t/1000;

returnt;

)

main()

{longt,r;intx,y;

printf("\nlnputxandy:");scanf

("%ld%ld",&x,&y);

t=fun(x,y,&r);

printf("\n\nx=%d,y=%d,r=%ld,last=

%ld\n\n",x,y,r,t);

)

37.下列給定程序中,函數(shù)fun()的功能是逐個比較a,b兩個字符串對

應位置中的字符,把ASCH值小或相等的字符依次存放到c數(shù)組中,形

成一個新的字符串。

例如:a中的字符串為fshADfg,b中的字符串為sdAEdi,則c中的字

符串應為fdAADfo

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

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

試題程序:

#include<stdio.h>

#include<strinq.h>

voidfun(char*p,char*q,char*c)

{intk=0;

while(*p||*q)

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

{if(*p<=*q)

c[k]=*q;

elsec[k]:*p;

if(*p)p++;

if(*q)q++;

/**+**********fiound**************/

k++

)

main()

{chara[10]="fshADfg",b[10]="sdAEdi",

c[80]={'\0');

fun(a,b,c);

printf("Thestringa:");puts(a);

printf("Thestringb:");puts(b);

printf("Theresult:");puts(c);

38.下列給定程序是建立一個帶頭結點的單向鏈表,并用隨機函數(shù)為各

結點賦值。函數(shù)fun()的功能是:將單向鏈表結點(不包括頭結點)數(shù)據域

為偶數(shù)的值累加起來,并作為函數(shù)值返回。

其累加和通過函數(shù)值返回main()函數(shù)。例如,若n=5,則應輸出8.391667。

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

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

[試題源程序]

#include<stdio.h>

#include<stdiib.h>

typedefstructaa

(

intdata;

structaa*next;

}NODE;

intfun(NODE*h)

{

intsum=0;

NODE*P;

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

p=h;

while(P->next)

(

if(p->data%2==0)

sum+=p->data;

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

p=h->next;

)

returnsum;

)

NODE*creatlink(intn)

(

NODE*h,*p,*s,*q;

inti,x;

h=p=(NODE*)malloc(sizeof(NODE));

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

(

s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%16;

s->next=p->next;

p->next=s;

p=p->next;

)

p->next=NULL;

returnh;

}

outlink(NODE*h,FILE*Pf)

{

NODE*p;

p=h->next;

fprintf(Pf,"\n\nTHELIST:\n\nHEAD");

while(P)

(

fprintf(Pf,>%d",p->data);p=p->next;

)

fprintf(pf,"\n");

)

outresult(ints,FILE*pf)

(

fprintf(Pf,"\nThesumofevennumbers:%d\n",s);

)

main()

(

NODE*head;inteven;

head=creatlink(12);

head->data=9000;

outlink(head,stdout);

even=fun(head);

printf("\nTheresult:\n");outresult(even,stdout);

)

39.下列給定程序中,函數(shù)fun()的功能是:在字符串的最前端加入n個

*號,形成新串,并且覆蓋原串。

注意:字符串的長度最長允許79。

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

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

試題程序;

#include<stdio.h>

#include<strzng.h>

#include<conio.h>

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

voidfun(chars[],intn)

chara[80],*p;

inti;

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

s=p;

fbr(i=O;i<n;i++)a[i]=<*';

do

{a[i]=*p;

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

i++;

}while(*p);

a[i]=0;

strcpy(s,a);

)

main()

{intn;chars[80];

clrscr();

printf("\nEnterastring:");gets(s);

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

printf("\nEntern(numberof*):");scanf("%d",&n);

fun(s,n);

printf("\nThestringafterinster:\%s\n",s);

)

40.給定程序MODII.C中fun函數(shù)的功能是:根據整型形參m,計算

如下公式的值。

I=.1一一1一―i一…—1—

23m

例如,若主函數(shù)中輸入5,則應輸出-0.283333。

請改正函數(shù)fun中的錯誤或在橫線處填上適當?shù)膬热莶褭M線刪除,使

它能計算出正確的結果。

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

tinclude<stdio.h>

2doublefun(intm)

3

4doublet=1.0;

5inti;

6for(i-2;i<-m;1?+)

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

8t-1.0-1/i;

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

10

11

12main()

13(

14intm;

15printf(H\nPleaseenter1integer

numbers:\n");

Rw

16scanf(%dr&m);

Rw

17printf(\n\nTheresultis%lf\nr

fun(m));

18

五、程序改錯題(2題)

41.下列給定程序中,函數(shù)proc()的功能是:求S的值。

<1?3>>?(<J/<3?5))?7>)

?1?<2n)r/<I)?

例如,當n為100時,函數(shù)的值應為1.566893c

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

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

構。

試題程序:

3mclu<Wh>

&wtcludrVcocikhh>

9include<?tdio.h>

smcludrVtiuth.h>

〃????foufid????

proc(mtn)

infnsHaa!?u<n.w?p?qi

n?11

*utn*)?Oi

wh*h<nV-n>

(

,■工(>?fti

?,w-l.Oi

q?,+I.Oi

MIM-?um?w?w/./qi

n+?t

//????found????

returnMIBI

voidm*in()

*y*icm(*CLS")i

v.proc<lOO>)t

42.

下列給定程序中,函數(shù)fun的功能是:求出s所指字符串中最后一次出

現(xiàn)的t所指字符串的地址,并通過

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

數(shù)值為NULLO

例如,當字符串中的內容為"123dabfl23dx”,t中內容為“ab”時,輸出

結果應是“123dx”。

當字符串中的內容為“123dabfl2中x”,t中內容為“aim”時,則程序輸

出未找到信息"Notfound!”。

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

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

試題程序:

#include<stdio.h>

析nslude〈string.h)

ehar*fun(char*s,cbar舞)

char*p,*丫,*a;

,********年***,****G)und**京#*****/*率*****/

a=Null;

whik(*s)

Ip=s;r=t;

wh"e(*r)

/*****************foHnd*****************/

訊n=p}k";p++;)

elsebreak;

='V)>ar;

臺++;

)

returna;

v(n(lJ

(chars[100MlOOi*p;

printff'XnPleaseenterstringS;");

s?anf("%@"M;

printf(T,\nPleaseentersubstringt:");

scan昭'%sI);

p=fun(g,t);

if(p)

printfC^nTheresultis:%s\n'\p);

el&e

printf(°\nNotfound*\n

)

六、操作題(2題)

43.以下程序的輸出結果為【】。

main()

{intk=l;

white(k<=15)

if(++k%3!=2)continue;

elseprintf("%d",k);

printf("\n");

)

44.已知學生的記錄由學號和學習成績構成,N名學生的數(shù)據已存入a

結構體數(shù)組中。請編寫函數(shù)fun(),該函數(shù)的功能是;找出成績最高的

學生記錄,通過形參返回主函數(shù)(規(guī)定只有一個最高分)。已給出函數(shù)的

首部,請完成該函數(shù)。

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

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定義結構體*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

(

}

main()

(

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

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

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

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

inti;

clrscr();

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",a[i].hum,

a[i].s);

fun(a,&m);

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

printf("Thetop:%s,%d\n",m.num,m.s);

參考答案

1.66解析:分析程序可知,每循環(huán)一次,x的值加1,然后檢測循環(huán)控

制條件(y!=19)&&(x<7),因y的值不變,故滿足x<7時循環(huán)6次。

或a[-l+i]a[9-i]或a[-i+9]a[i-l]或a[-l+i]\r\na[9-i]或a[-i+9]

3.5656解析:本題中a,b,c,d足實參,x,y,cp,dp是形參。C語

言規(guī)定,實參變量對形參變量的數(shù)據傳遞是“值傳遞”,即單向傳遞,只

由實參傳給形參,而不能由形參傳回來給實參。在內存中,實參單元與

形參單元是不同的單元。在調用函數(shù)時,給形參分配存儲單元,并將實

參對應的值傳遞給形參,調用結束后,形參單元被釋放,實參單元仍保

留并維持原值。因此,程序的輸出結果是56。

4.7979解析:因為在調用子函數(shù)時進行的是數(shù)值傳遞,調用子函數(shù)并

不能改變實參的值,所以經過調用子函數(shù),c、d的值并沒有發(fā)生變化還

是原來的值。

5.數(shù)據結構數(shù)據結構

6.數(shù)據字典或DD數(shù)據字典或DD解析:數(shù)據流圖用來對系統(tǒng)的功能需

求進行建模,它可以用少數(shù)幾種符號綜合地反映出信息在系統(tǒng)中的流動、

處理和存儲情況。數(shù)據詞典(DataDictionary,DD)用于對數(shù)據流圖中出

現(xiàn)的所有成分給出定義,它使數(shù)據流圖上的數(shù)據流名字、加工名字和數(shù)

據存儲名字具有確切的解釋。

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

if相結合。因為x不大于y,所以執(zhí)行printf(%d\\n:z);語句。

8.數(shù)據存儲

數(shù)據存儲

9.邏輯獨立性邏輯獨立性解析數(shù)據獨立性是數(shù)據與程序間的互不依賴

性,即數(shù)據庫中數(shù)據獨立于應用程序而不依賴于應用程序。數(shù)據獨立性

一般分為物理獨立性與邏輯獨立性兩個含義。注意:在人工管理階段,

文件系統(tǒng)階段和數(shù)據庫管理階段中數(shù)據獨立性的特點。

10.30x30x解析:本題的參數(shù)傳遞屬于值傳遞,所以函數(shù)內不能改變調

用函數(shù)中的數(shù)據。

11.CC.【解析】線性表是一種線性結構,由n(nK))個元素組成,所以線

性表可以是空表。但是在線性表中,第一個結點沒有前件,最后一個結

點沒有后件,其他結點有且只有一個前件和后件,所以選項C.是錯誤

的。

12.C對于double類型的實數(shù),可以在printf函數(shù)的格式化字符串中使

用“m.m”的形式來指定輸出寬度(m和血分別代表一個整常數(shù))。其中

m指定輸出數(shù)據的寬度(包括小數(shù)點),m指定小數(shù)點后小數(shù)位的位數(shù),

m也稱為精度。當輸出數(shù)據的小數(shù)位多于m位時,截取右邊多余的小

數(shù),并對截取部分的第1位小數(shù)做四舍五入處理;當輸出數(shù)據的小數(shù)位

少于n2時,在小數(shù)的最右邊補0,使得輸出數(shù)據的小數(shù)部分寬度為n2;

如果指定“m.O”格式,則不輸出小數(shù)點和小數(shù)部分。題干中,%6.2f表示

輸出6位寬度,2位小數(shù),所以被截取的小數(shù)位為0.006,進行四舍五

入,結果為123.46;%3.0f表示輸出3位寬度,。位小數(shù),結果為123。

故本題答案為C選項。

13.C

14.D

15.D解析:本題考查的知識點是運算符的優(yōu)先級。在這個表達式中,優(yōu)

先級最高的是(int)a,也就是對5.5取整,結果是5,其次是b/b,即2.5/2.5,

結果是1.000000,最后相加結果為6.000000(表達式的最終結果為實型),

所以4個選項中D正確。

16.A

本題考查getchar函數(shù)與putchar函數(shù),通過9etchar函數(shù)讀入字符,并

通過putchar函數(shù)將字符逐個輸出,當用戶輸入“?”時停止輸出,且c

是一個字符變量只占一個字節(jié)。

17.C

18.C解析:C語言中字符常量是以單引號括起來的單個字符,或以“\\"

與三位八進制數(shù)值或兩位十六進制數(shù)值代替單個字符。

19.C

20.B

解析:C語言中只有函數(shù)沒有過程,故選項A錯誤;C語言可以嵌套

調用,故選項B正確;C語言函數(shù)可以單獨編譯成.dll文件,故選項C

錯誤;C語言中除main函數(shù)以外,其他函數(shù)可作為單獨文件形式存

在,故選項D也錯誤。

21.intfun(char*s)

2;{intn=0;

3char*p;

4:;for(p=s;*p!=,\\0';p_L+)

if((*p>,o,)&&(<,9,))

6n++;

7returnn;

8}要統(tǒng)計字符串中數(shù)字字符的個數(shù),首先應定義變量n,并將其初始化

為0,然后遍歷字符串,逐個判斷字符是否為數(shù)字字符,判斷條件為該

元素的ASCII值在字符o和9的ASCII值之間,若判斷條件成立,則

使n的值加1,否則,繼續(xù)判斷下一個字符,直到字符串結束。

22.

【解析】要實現(xiàn)對變量的值保留2位小數(shù)。并對第3位小數(shù)進行四舍五

入,可以通過先將其小數(shù)點后3位變?yōu)檎龜?shù)后加5,所得到的數(shù)除10,

最后再除100來實現(xiàn)。

23.

【解析】由題目中所給表達式可知,表達式的值為m項表達式的和然后

開平方??梢允紫韧ㄟ^m次循環(huán)求得m項表達式的和,然后將其和開

平方并返回到主函數(shù)當中。

24.voidfun(STREC*a)

\n{

\ninti;

\na-〉ave=0.0;

\nfor(i=0;i<N;i++)

\na->ave=a->ave+a->s[i];

\n/*求各門課程成績的總和*/

\na-〉ave=a->ave/N;/*求平均分*/

\n}

\n【解析】本題考查的是指向結構體類型的指針變量做參數(shù)和結構體類

型成員的運算。fun函數(shù)中求出平均成績,要帶回主函數(shù)則必須定義一

個指針類型的形參STREC*a,同時引用成員使用指向運算符,a->ave和

a->s[i]o

\n

25.voidfun(char*s,chart[])

(

inti=0;

for(;*s!=\(T;s++)/*找出ASCII值為奇數(shù)的字符依次存入數(shù)組t

中*/

if(*s%2==l)

t[i++]=*s;

t[i]=\(T;/*在字符串的末尾加上字符串結束標志*/

)

本題要求將s所指字符串中ASCH值為偶數(shù)的字符刪除,因此本題要求

采用一個for循環(huán)來找出ASCII值為奇數(shù)的字符,將其依次存入數(shù)組t

中,并使用if條件語句來判斷s所指字符串中ASCII值是否為奇數(shù)。將

NO'加在字符串的末尾來表示字符串的結束。要刪除ASCII值為偶數(shù)的

字符,也就是要留下ASCII值為奇數(shù)的字符。由于最終要求出剩余字符

(即ASCII值為奇數(shù))形成的新字符串,因此本題程序的算法是對原字符

串從頭到尾掃描,找出ASCII值為奇數(shù)的字符,并將其依次存入數(shù)組t

中。此外,還要注意數(shù)組t的下標變化和下標的初值(初值必須為0,即

i=0),t[i++]的作用是先使用t[i],然后再使i自增1。

26.

【解析】由函數(shù)proc()可知,數(shù)組PP中存放26個字母各自出現(xiàn)的次數(shù),

初始化為0。然后判斷字符串tt中每一個字符,每檢查一個字符,將數(shù)

組PP中相應的元素加1。

27.

【解析】要求出二維數(shù)組中最大元素的值,需要比較二維數(shù)組中每一個

元素的值。首先,定義變量max用來存放最大元素的值,將其初始化為

二維數(shù)組中第一個元素的值。然后將其與后面的每一個元素進行比較,

將二維數(shù)組中最大元素的值放到變量max當中,并將其返回給主函數(shù)。

28.\n#include'stdio.h'

\nmain

\n{inti,j,a[10];

\nfor(i=1;i<=10;i++)

\nscanf('%d',&a[i]);

\nfor(i=0;i<9=;i++)

\nfor(j=9;j>i;j-)

\nif(a[j-l]{t=a[j-l];

\na[j-l]=a[j];

\na[j]=t;}

\nfor(i=0;i<10;i++)

\nprintf('%d',a[i]);

\n}

\n

29.

voidstrcpv(char*s,char*t)/*copyttos*/

{while((*s~H~Kt++)!='\0'))|

30.

mtpeoc<STRBn????b>

tot“)???■????a[0]?,'■■存■■鼻

>>au[i]」iBft*M

,住■■?彌卜事■的■?中

fofiiO.YM“*?>

d<ma,?一?[1:..】b。*?]■?hJi分■■』

的學生彳■不止一個

mumU

【解析】要得到分數(shù)最高的學生數(shù)據,首先應檢查每一個學生的數(shù)

據,得到學生的最高成績。成績最高的學生不止一個,將每一個學生

的成績與最高成績相比較,得出最高成績學生的個數(shù),將成績最高的

學生記錄放在指定數(shù)組中通過形參返回。成績最高的學生個數(shù)由函數(shù)

值返回給主函數(shù)。

31.(l)c=c+32;(2)c=c+5;(l)c=c+32;(2)c=c+5;解析:本題中

函數(shù)的功能是將某些大寫字母轉換為對應小寫字母之后的第五個字母。

對于將字母轉換的題型,首先是查找符合條件的字符,然后根據規(guī)則對

字符進行轉換。本題需要大家了解大小寫字母是怎樣通過ASCII碼相互

轉換的。

32.(1)錯誤:voidfun(longslongt)正確:voidfun(longslong*t)(2)錯誤:

while(s<0)正確:while(s>0)

(1)錯誤:voidfun(longs,longt)\r\n正確:voidfun(longs,long*t)\r\n

(2)錯誤:while(s<0)\r\n正確:while(s>0)解析:錯誤1:在函數(shù)fun

體中,t是一個指針型變量,由C的基礎知識我們可以知道,定義形參

時也應定義指針。

錯誤2:由題目可以知道,此處條件應該s>0,所以這里應改為:

while(s>0)o

33.錯誤:a[i+l]=a[i];正確:a[i]=a[i+l];錯誤:a[i+l]=a[i];正確:

a[i]=a[i+ll;解析:上機改錯題有一個優(yōu)勢,就是我們可以執(zhí)行該程序,

根據錯誤的提示再一步一步實現(xiàn)改錯的目的,我們先不看程序是什么意

思,甚至不用看它在求什么。按CW+F9快捷鍵,然后看看屏幕提示。

另外,審題時我們必須要注意“不要改動main。函數(shù),不得增行或減行,

也不得更改程序結構”,這樣;對我們來說,只要讀懂題意,對程序執(zhí)行

部分:

{intp=O,i;

a[n]=x;

while(x!=a[p])

p=p+l;

if(p==n)return-1;

else

{for(i=p;i<n;i++)

a[i+l]=a[i];

returnn-1;

)

逐步分析,再應用平時的常識加以區(qū)分,琢磨,相信答案不攻自破,這

種考題,按Ctrl+F9快捷鍵后,屏幕一般都不會提示錯誤,否則就顯得

太兒科了一點,所以,我們并不需要著急去找錯誤,而是把程序讀懂。

34.⑴錯誤:t=s[k];正確:t+=s[k];(2)錯誤:*aver=&ave;正確:

*aver=ave;⑴錯誤:t=s[k];正確:t+=s[k];\r\n(2)錯誤:*aver=&ave;

正確:*aver=ave;解析:根據題目要求,可利用循環(huán)語句,累計計算

n個學生的總分;求得平均成績后,再利用循環(huán)語句和條件選擇語句。

若小于平均值,則將該值存放于aver存儲單元中。t=s[k];是循環(huán)疊加

錯誤,*aver=&ave;中為語法錯誤。

35.錯誤:c[t]="\O"正確:c田=2錯誤:c[t]='\\O',正確:c[t]=\'\\O\'解

析:注意,該程序的if條件中應用了isspace函數(shù),該函數(shù)的功能是檢

查ch是否空格、跳格符(制表符)或換行符。

36.⑴錯誤:for:(i=l;i<y;i++)正確:for(i=l;i<

溫馨提示

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

評論

0/150

提交評論