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

下載本文檔

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

文檔簡介

2022年吉林省松原市全國計算機等級考試

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

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

一、2.填空題(10題)

1.語句“int(*ptr)();”的含義是是指向函數(shù)的指針,該函數(shù)返回一

個int型數(shù)據(jù)。

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

#include<stdio.h>

main()

{staticchara[]="language",b[]="program";

char*ptrl=a,*ptr2=b;

intk;

fbr(k=0;k<7;k++)

if(*(ptrl+k)=*(ptr2+k))

printf("%c",*(ptrl+k));}

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

#include<string.h>

char*ss(char*s)

{char*p;t;

p=s+l;t=*s;

while(*p){*(p-1)=*p;p++;}

*(p-l尸t;

returns;

main()

{char*p,str[10]-'abcdergh";

p=ss(str);

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

}

4.軟件危機出現(xiàn)于60年代末,為了解決軟件危機,人們提出了【】的

原理來設(shè)計軟件,這就是軟件工程誕生的基礎(chǔ)。

5.設(shè)i,j,k均為int型變量,則執(zhí)行完下面的for語句后,k的值為【】°

for(i=0,j=10;i<弓;i++,j—)k=i+j;

6.若變量a,b已定義為int類型并賦值21和55,要求用printf函數(shù)以

a=21,b=55的形式輸出,請寫出完整的的輸出語句()。

7.設(shè)有下列的程序段;

charstr[]="Hello";

char*ptr;

ptr=str;

執(zhí)行上面的程序段后,*(ptr+5)的值為。

8.若x和y都是buble型變量,且x的初值為3.0,y的初值為2.0,則

表達式pow(y,fabs(x))的值為【】。

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

intm=13;

intfun(intx,inty)

{intm=3;

retum(x*y-m);

}

main()

{inta=7,b=5;

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

I

s

10.數(shù)據(jù)庫系統(tǒng)其內(nèi)部分為三級模式,即概念模式、內(nèi)模式和外模式。

其中,是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式。

二、單選題(10題)

11.以下是if語句的基本形式:

if(表達式.語句

其中“表達式”()o

A.必須是邏輯表達式B.必須是關(guān)系表達式C.必須是邏輯表達式或關(guān)

系表達式D.可以是任意合法的表達式

12.以下程序執(zhí)行后sum的值是()。

A.15

B.14

C.不確定

D.Omain(){inti,sum;fbr(i=l;i<6;i++)sum+=i;printf("%d\n",

sum);}

13.若用一個大小為6的數(shù)組來實現(xiàn)循環(huán)隊列,且當(dāng)前rear和front的值

分別為。和3,當(dāng)從隊列中刪除一個元素,再加入兩個元素后,rear和

front的值分別為()

A.2和4B.1和5C,4和2D.5和1

14.若有以下的說明和語句,則在執(zhí)行for語句后,,(*(pt+l)+2)表示的數(shù)

組元素是()。intt[3][3],*pt[3],k;for(k=0;k<3;k++)pt[k]=&t[k][O];

A.t[2][0]B.t[2][2]C.t[l][2]D.t[2][l]

15.若i、j已定義成mt型,則下列程序段中內(nèi)循環(huán)體的總執(zhí)行次數(shù)是

()。

for(i=6;i>0;i—)

for(j=O;j<4;j++){...}

A.20B.24C.25D.30

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

fun(intx.inty)

Htaticinim=0.i=2:

i+=tn4-l;m=i4-x+y;rrtumm:

nuiin()intjsI.m=I.k;

k=fun(jtm);pnntf("疆d.”,k);

k=fun(j,m);printf(M%d\n0,k);

A.5,5

B.5,11

C.ll,11

D.ll,5

17.fun函數(shù)的功能是:通過鍵盤輸入給x所指的整型數(shù)組所有元素賦

值。在下劃線處應(yīng)填寫的是()。

#include<stdio.h>

#defineN5

voidfun(intx[N])

{intm;

for(m=N-t;m>=0;m-)scanf("%d",);

}

A.%&X[++m]B.&x[m+1]C.x+(m++)D.x+m

18.以下選項中,不能作為合法常量的是

A.1.234e04B.1.234e0.4C.1.23E+4D.1.234e0

19以下選項中不合法的標(biāo)識符是()。

A.&aB.FORC.printD.00

20.以下語句中,正確制作電子郵件鏈接的是()0

A.Ghref?"xxx@yyy”>

B.<mailhre£="xxx@YYY”>

C.<ahref:”mailto:xxxQYYY”>

D.<jnai1>xxx@yyymail)

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

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

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

能是移動一維數(shù)組中的內(nèi)容,若數(shù)組中有n個整數(shù),要求把下標(biāo)為0?

P(含P,P小于等于n-1)的數(shù)組元素平移到數(shù)組的最后。

例如,一維數(shù)組中的原始內(nèi)容為1、2、3、4、5、6、7、8、9、10;P

的值為3。移動后,一維數(shù)組中的內(nèi)容應(yīng)為5、6、7、8、9、10、1、

2、3、4o

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

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

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

試題程序:

#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

(

)

main()

{inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theoriginaldata

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

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

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n^^);

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

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

printf(4t\n\n^^);

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

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

得使用C語言提供的字符串函數(shù).

例如.字符串中的內(nèi)容為:"*???A.BC.DEF?...........................*",*除后,字符串中的內(nèi)容應(yīng)當(dāng)

是:".???ABCD£FG".

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

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

tindude<rtdio.h>

voidftin(char?a)

main()

Ichars[81];voidNONO();

prinlf("Enterastring:\n");gete(s);

fun(?);

printf("Thestringafterdeleted:\n");puts(t);

NONO();

I

voidNONO()

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

FILE?in,?out;

inti;chars[81]:

in=(open("in.dat"f"r")?

out=<bpen("out.<kt"."w");

far(i=0;i<10;i??)

I

fecanf(in/%8w,e);

Ma

^pnntf(outt%s\n,?);

I

Hoae(iD);

fclMe(ou0$

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

除字符串中所有的*號。編寫函

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

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

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

是:ABCDEFGo

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

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

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

的nclutk<ntdio.h>

voidfun(char?.)

mdin()

Ichars[8lJ;

voidNONO();

print""Enterastring;\nH);geu(a)?

fun(*);

即nt£("Thestringafterdelrncd:\nw);pul?(M);

NONO():

2dNONO(>

本函數(shù)用于打開文件,除人數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)期,關(guān)閉文件“?/

F1I£?in.?out;

inti;rhar?[8|];

in=fopm("in.dal*,"rM):

out=(opcn(*out.dal'*wM);

for(i=();i<10;i*f)|

fccanf(in."%L.?);

fnn(s);

fpnntf(out?"%八n",A);

Glosc(in);

fcloAt^out)?

24.請編寫一個函數(shù)proc,它的功能是:求出1?m(含m)能被7或11

整除的所有整數(shù)放在數(shù)組a中,通過n返回這些數(shù)的個數(shù)。

例如,若傳給m的值為70,則程序輸出:

7111421222833354244495556636670

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

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

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

試題程序:

#include<stdlib.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidproc(intm,int*a,int*n)

{

)

voidmain

(

intarr[N],n,k;

system("CLS");

proc(70,arr,&n);

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

if((k+l)%20==0)//每行輸出20個數(shù)

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

printf("\n");

)

else

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

printf("\n");

)

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

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

其功能是將ss所指字符串中所有下標(biāo)為奇數(shù)的字母轉(zhuǎn)換為大寫(若該

位置上不是字母,則不轉(zhuǎn)換)。

例如,若輸入“abc4EFg",則應(yīng)輸出“aBc4EFg”。

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*ss)

(

)

voidmain(void)

(

chartt[51];

printf("\nPleaseenterancharacterstringwithin50characters:\n^^);

gets(tt);

printf(4t\n\nAfterchanging,thestring\n%s”,tt);

fun(tt);

printf(u\nbecomes\n%s”,tt);

)

26.編寫函數(shù)proc(),它的功能是求m以內(nèi)(不包括m)同時能被5與11

整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回。

例如,m為100時,函數(shù)值應(yīng)為s=7.416198c

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

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

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

試題程序:

4includeVstdlib.h>

與includeVconio.h>

爺include<Cmath.h>

#includeVstdiah>

doubleproc(intn)

(

)

voidmain(>

(

systcmC"CLS")i

printfC"s"%f\n*.proc(100))i

}

27.

函數(shù)fun的功能是:將s所指字符串中下標(biāo)為偶數(shù)同時ASCII值為奇數(shù)

的字符刪除,S所指串中剩余的字符形成的新串放在t所指的數(shù)組中。

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

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

ASCII碼值為奇數(shù),在數(shù)組中的下標(biāo)為奇數(shù),因此不應(yīng)當(dāng)刪除,其他依

此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是"BDF12345"o

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

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

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

試題程序:

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[D

(

}

main()

{.

chars[100],t[100];

printf(°\nPleaseenterstringS:0);

scanf(K%s\s);

fun(s.t);

printfresultis:%s\nM,t);

28.請編一個函數(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++)

(

for(j=O;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");}

29.

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

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

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

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

題程序:

smdudeVmdhb*

UinciiMicVcocuo.h2>

sinclude<widxxb>

doubleproHinin>

voidBuifn<>

"Cl-S*)i

pr?ni?*Kf\n*?proc(IO>),

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

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

intfun(),其功能是求出小于或等于lim的所有素數(shù),將其存放在aa數(shù)

組中,并返回所求出的素數(shù)的個數(shù)。

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

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

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

試題程序:

1#include<conio.h>

2#include<stdio.h>

3#include<stdlib.h>

4#defineMAX100

5intfun(intlim,intaa[MAX])

6{

7

8)

9voidmain()

10{

11FILE*wf;

12intlimit,i,sum;

13intaa[MAX];

14system("CLS");

15printf("輸入一個整數(shù):");

16scanf("%d",&limit);

17sum=fun(limit,aa);

18for(i=0;i<sum;i++)

19{

20if(i%10==0&&i!=0)/*每行輸出10個數(shù)*/

21printf("\n");

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

23)

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

25wf=fopen("out.dat","w");

26sum=fun(15,aa);

27for(i=0;i<sum;i++)

28{

29if(i%10==0&&i!=0)/*每行輸出10個數(shù)*/

30fprintf(wf,"\n");

31fprintf(wf,"%5d",aa[i]);

32)

33fclose(wf);

34/******************/

35)

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

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

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

低位仍在低位。例如:當(dāng)s中的數(shù)為2736598時,t中的數(shù)為:2358。

#include<conio.h>

#include<stdio.h>

/************************/

voidfiin(longs,longt)

{longsl=10;

*t=S%10;

while(s>0)

{s=s/100;

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

/************fOUlTtd************/

sl=sl*100;

}

}

main()

{longs,t;

clrscr();

printf("\nPleaseenters:");

scanf("%ld",&s);

fun(s,&t);

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

32.下列給定程序中,函數(shù)fun()的功能是求出數(shù)組中最小數(shù)和次最小數(shù)

并把最小數(shù)和a[0]中的數(shù)對調(diào),次最小數(shù)和a[l]中的數(shù)對調(diào)。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineN20

voidfun(int*a,intn)

inti,m,t,k;

/*************f^)und**************j

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

m==i;

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

if(a[k]<a[m])

/***************************!

k=m;

t=a[i];

a[i]=a[m];

a[m]=t;

}

}

main()

(

intx,b[N]={ll,5,12,0,3,6,9,7,10,8}

n=10,i;

clrscr();

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

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

printf("\n");

fun(b,n);

fbr(i=O;i<n;i++)

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

printf("\n");

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

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

例如:輸入dafhc,則應(yīng)輸出hfdca。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

/***************************/

intfiin(chart[])

(

charc;

inti,j;

fbr(i=O;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();

printff'\nPleaseenteracharacter

string:");

gets(s);

printfi("\n\nBefbresorting:\n%S",s);

fun(s);

printf("\nAftersortingdecendingly:\n

%s",s);

34.下列給定程序中,函數(shù)ftm()的功能是:計算

S=f(-n)+f(-n+l)+...+f(O)+f⑴+f(2)+...f(n)的值。

例如,當(dāng)n為5時,函數(shù)值應(yīng)為10.407143。f(x)函數(shù)定義如下:

r(x+iy(x-2)xX)

f(x)0或x=2

L(x-iy(x-2)x<0

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math,h>

/********不***不*f^)und***不***********I

f(doublex)

if(x==0.0||x==2.0)

return0.0;

elseif(x<0.0)

return(x-1)/(x-2);

else

return(x+1)/(x-2);

)

doublefun(intn)

(

inti;doubles=0.0,y;

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

{y=f(1.0*i);s+=y;}

/**************found**************!

returns

)

main()

{clrscr();

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

35.下列給定的程序中,函數(shù)fun()的功能是:判斷字符ch是否與str所

指字符串中的某個字符相同;若相同,則什么也不做,若相同,則將其

插在申的最后。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

/***************************/

voidfun(charstr,charch)

{while(*str&&*str!=ch)str++;

/*************nd**************/

if(*str=ch)

{str[0]=ch;

/*************f^)und**************I

str[l]-O';

}

}

main()

{chars[81],c;

clrscr();

printf("\nPleaseenterastrzng:");

gets(s);

printf("\nPleaseenterthecharacterto

search:");

c=getchar();

fun(s,c);

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

36.下列給定程序中,函數(shù)ftm()的功能是:給定n個實數(shù),輸出平均值,

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

195.673,195.757,196.051,196.092,196.596,196.579,196.763,所

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(floatx[],intn)

/*********************************/

ihtj,c=0;floatxa=0.0;

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

xa+=x[j]/n;

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

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

if(x[j]>=xa)

C++;

retumc;

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

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

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineM5

ihtfun(intn,intxx[][])

{inti,j,sum=0;

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

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

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

printf("%4f',xx[i][j]);

printf("\n");

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

sum+=xx[i][i]+xx[i][n-i-l];

return(sum);

main()

{intaa[M][M]={{l,2,3,4,5},{4,3,2,l,0),

{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

clrscr();

printf("\nThesumofallelementson2

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

38.下列給定程序中,函數(shù)fun()的功能是:計算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;

/****************************I

r=P;

while(*r)

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

elsebreak;

/**************d***************/

if(*r=O)

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.給定程序MOD11.C中函數(shù)fun的功能是:統(tǒng)計字符串中各元音字

母(即:A、E、I、0、U)的個數(shù)。注意:字母不分大、小寫。

例如:若輸入:THIsisaboot,則輸出應(yīng)該是:1、0、2、2、0o

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

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

*include<stdio.h>

2voidfun(char*srintnum[5])

3{intk,i-5;

4for(k-0;k<i;k++)

5/…?……found………?/

6num[i)?0;

7for(;*s;s++)

8{i?-1;

9/???????肯??found**********I

10switch(s)

11(case,a*:case1A1:{i?0;break;}

12case"e1:case,E,:(i-l;break;}

13case,i1:case,I1:(i-2;break;}

14case'o':case,01:(i-3;break;}

15case?u1:case?U1:(i=4/break;}

16)

17if(i>-0)

18++;

19

20

21main()

22{charsi[81];intnuml[5]ri;

23printf(w\nPleaseenterastring:

n);gets(si);

24fun(si,numl);

25for(i-0;i<5;i++)printf(R%d

numl(i]);printf("\n");

26

40.下列給定程序中,函數(shù)fim()的功能是:先從鍵盤上輸入一個3行3

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

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

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

試題程序:

#include<stdio.h>

intfun()

inta[3][3],sum;

inti,j;

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

sum=l;

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

{for(j=O;j<3;j++)

/***************************/

scanf("%d",a[i][j]);

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

sum=sum+a[i][i];

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

main()

}

五、程序改錯題(2題)

41.下列給定程序中,函數(shù)proc()的功能是:從低位開始取出長整型變

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

為123456789時,t中的數(shù)為13579。請修改程序中的錯誤,使它能得到

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

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

*include<s(dlib.h>

#include<stdio.h>

#includeVconio.h>

//????found????

intproc(longj)?long■t>

(

long■=10j

?I-s%IOi

whilc(s>0)

(

//????found???*

a。5%1001

?i=s%10?§1+?n

si-sl?10:

?

)

voidmnin<>

(

longli

5ystem("CI^Sw)?

printf("\nPleaseenter")i

scanf("%Id".&s01

proc(??&<)>

printfC"Theresultis:%ld\n

42.

下列給定程序中,函數(shù)proc0的功能是:將m(l<m<10)個字符串連

接起來,組成一個新串,放入pt所指字符串中,例如,把2個字符串

abc、CD串聯(lián)起來,結(jié)果是abcCD。請修改程序中的錯誤,使它能得

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

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

StncluckVM&ib.b>

的includeVeiledK>

include<struic.h>

0include<ntdio.h>

〃????found????

Mtproc(char?ir{]£IO].mtfn.chur?plJ

Iintk.q.i.L。!

Ior《k~?)

j+,qi

,?f<i,OiiVq-?+)

ff????Io?m4????

p<O]?Oi

1

vo?dmain(>

inim.hi

char>trC10][10j?pC120Ti

?ywieoiC*CLS*>i

printfC*\nPlca?centertB.?).

?canR?%d??&m>itct?(?tr£01)i

pru>d<*\nPk??ccmerMdstringAn*??)

for(h*0ih<niili4-4-)fetii(?<r{ki])i

proc<air?m?p)s

printfC^XnTbcrvwhK?\na?p>i

六、操作題(2題)

43.請補充main()函數(shù),該函數(shù)的功能是:從鍵盤輸入一個長整數(shù),如

果這個數(shù)是負數(shù),則取它的絕對值,并顯示出來。例如,輸入>123456,

結(jié)果為:123456。注意:部分源程序給出如下。請勿改動main()函

數(shù)和其他函數(shù)中的任何內(nèi)容,僅在橫線上填入所編寫的若干表達式或語

句。試題程序:

PoicludeV-tdLh

9inrludrVMdio.h>

HinciudrVccmio.h?>

voidm*in<)

loeginiBum

>yBtctn<*CLS*)i

printf(a£i>icrtbcd???.W)s

?canf((l]I?

P'fintfC*???theabeolutrnli?r???\B>>i

il(nym<CO)

m

pnnt((*\n\nM)i

pnmfl13】>?

44.以下函數(shù)的功能是刪除字符串s中的所有數(shù)字字符。請?zhí)羁铡?/p>

voiddele(char*s)

(

intn=0,i;

for(i=0,s[i];i++)

if([I)

s[n++]=s[i];

s[n]=[];

參考答案

l.ptrptr解析:本題考查函數(shù)指針的概念。函數(shù)指針的定義格式是:類型

標(biāo)識符(*指針變量名X)。注:“類型標(biāo)識符”為函數(shù)返回值的類型。

2.gaga解析:用字符指針處理字符串,首先要使指針指向這個字符串,

即題中的ptrl=a和ptr2=b。然后就是通過指針的移動可以弓I用到字符串

中的每一個字符。題中的*(ptrl+k)是使指針ptrl向后移動k個位置,然

后取出指向的字符。注意:用字符數(shù)組作為字符串和用指針指向的一個

字符串之間的區(qū)別。

3.bcdefghabcdefgha解析在本題定義的ss()函數(shù)中首先定義了一個指針

P和一個字符變量t,然后讓p指向參數(shù)指針s的下一個位置s+1,并讓

t保存S位置的字符。然后使用一個while循環(huán)將p指向的內(nèi)容賦給它前

面一個位置,即將參數(shù)s所指的字符串從第2個字符開始整體往前移動

一位。循環(huán)結(jié)束時,P指向原s串的結(jié)束標(biāo)志處,所以讓*(p-l)=t;即是將

原s串的第1個字符復(fù)制到s串的最后一個位置。整個函數(shù)實現(xiàn)的是讓

一個字符串循環(huán)左移一位。故主函數(shù)中最后輸出的字符串是‘bcdefgha,。

4.軟件工程學(xué)軟件工程學(xué)

5.1010解析:該for語句以i為0,j為10作為初始值,循環(huán)條件是i<

=j,每次循環(huán)后i增l、j減1,循環(huán)體是將i與j的和賦給k,這樣變量

k將保存的是最后一次賦給它的值。一次循環(huán)后i為1、j為9,二次循

環(huán)后i為2、j為8,........五次循環(huán)后i為5、j為5,第六次循環(huán),將

i與j的和10賦給k后,i為6、j為4,循環(huán)結(jié)束,k值為10。

6.printf("a=%db=%d"aB);printf("a=%d,b=%d”,a,B);解析:printf函數(shù)的一

般格式為:“printf(格式控制,輸出表列廣。

7.'\0"\\0'解析本題涉及字符數(shù)組和指針的兩個知識點①在C語言中,

字符型數(shù)組在存放字符串時會自動在末尾加上字符串結(jié)束標(biāo)識符'\\0'所

以題中數(shù)組str有6個元素。②ptr指向數(shù)組str的首地址,ptr+5是指向

str[5],*(pti+5)是引用str[5]的值,即NO;

8.88解析:fabs函數(shù)功能是求x的絕對值,計算結(jié)果為double型。pow

功能是計算X的y次方的值,計算結(jié)果同樣為double型。所以本題表達

式相當(dāng)于2.0的3.0次方,結(jié)果為8.000000。

9.22解析:本題變量m既是外部變量(值是13),又是fiin函數(shù)的局部

變量(值為3)0函數(shù)fun(x*y-m)的值為7*5-3=32,在main函數(shù)中,

fim(a,b)/m中的m應(yīng)取外部變量的值13,因此輸出2。

10.外模式外模式解析:數(shù)據(jù)庫系統(tǒng)的三級模式分別是內(nèi)模式、概念模

式和外模式。其中,物理模式給出了數(shù)據(jù)庫的物理存儲結(jié)構(gòu)和存取方法;

概念模式是數(shù)據(jù)庫系統(tǒng)中全局數(shù)據(jù)邏輯結(jié)構(gòu)的描述;外模式是用戶的數(shù)

據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式。

11.D

解析:本題主要考查關(guān)于if語句的說明,if后面圓括號中的表達式,可

是任意合法的C語言表達式(如:邏輯表達式、關(guān)系表達式、算術(shù)表

達式、賦值表達式等),也可以是任意類型的數(shù)據(jù)(如:整型、實

型、字符型、指針型等。)

12.C解析:C語言中,如果對定義的變量沒有賦初值,那么在后面使用

時,變量的值是不確定的。所以,本程序中,沒有對sum賦初值,它的

值不確定。在執(zhí)行了for循環(huán)語句后,sum的值也不確定的,所以,4個

選項中選項C符合題意。

13.A

14.C

從for循環(huán)可知pt是指向行的首地址的指針變量,因此由指針的表示

方法可知:*(*(pt+l)+2)=pt[l][2]=t[l][2]o

15.B

本題考查for循環(huán)的使用。對于第1個for循環(huán),任何一*個i,內(nèi)層j的

循環(huán)都要使j?0到3,j=4時不符合,所以退出j循環(huán);然后i減1,J

仍然要從0?3,j=4時退出J循環(huán)直到i變成0,退出i循環(huán)。第一條

for語句執(zhí)行6次,第二條for語句執(zhí)行4次,所以內(nèi)循環(huán)體執(zhí)行6*4

=24次。

16.B

main函數(shù)中的局部變量m與fun函數(shù)中的靜態(tài)局部變量m同名,因此

main訪問的是其局部變量m,所以main中的兩次函數(shù)調(diào)用,實際上

都是調(diào)用fun(l,1)。

第一次調(diào)用時,i=i+(m+l)=2+(0+l)=3,m=i+x+y=3+1+1=5o

第二次調(diào)用時,i=i+(m+l)=3+(5+l)=9,m=i+x+y=9+1+1=110

所以程序輸出5,11。

17.D

D【知識點】宏定義與數(shù)組地址的考察【解析】數(shù)組名本身就是地址,

所以不需要在用&符號。C選項不能對所有元素賦值而是反復(fù)再給一個

數(shù)值賦值且是死循環(huán)。

18.B解析:C語言的語法規(guī)定,字母e(E)之前必須有數(shù)字,且e(E)后面

的指數(shù)必須是整數(shù),而選項B)中,e(E)后面的指數(shù)是小數(shù),所以不合法。

19.AC語言的標(biāo)識符由字母、數(shù)字、下劃線組成,且第1個字符必須是

字母或下劃線。另外,關(guān)鍵字不能作為標(biāo)識符。因為C語言中區(qū)分大小

寫,所以B選項中的“FOR”可以作為標(biāo)識符來用。A選項中含有非法字

符“&”,所以其不合法。故本題答案為A選項。

20.C

21.voidfun(int*w,intp,intn)

{intX,j,ch;

for(x=0;x<=p;x++)

{ch=w[0];

for(j=l;j/*通過for循環(huán)語句,將p+1?n-1(含n-1)之間的數(shù)組

元素依次向前移動p+1個存儲單元*/

(

w[j-l]=w[j];

)

w[n-l]=ch;/*將下標(biāo)為0~p的數(shù)組元素逐一賦給數(shù)組w[n-l]*/

)

)

本題要求把下標(biāo)為0?p(含p,p小于等于n-l)的數(shù)組元素平移到數(shù)組的

最后。可以根據(jù)輸入的P值,通過for循環(huán)語句,將p+1?n-l(含n-l)之

間的數(shù)組元素依次向前移動P+1個存儲單元,即同時將下

標(biāo)為。?P的數(shù)組元素逐一賦給數(shù)組w[n-l],也就是通過語句w[n-l]=ch;

來實現(xiàn)此操作。

22.

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

【考點分析】

本題考查:指針型變最定義;wh丑e循環(huán)語句;語句條件

表達式;字符串結(jié)束標(biāo)識、0,

【解題思路】

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

除。

【解答本題】

(1)定義一個臨時指針P,初始指向原串首地址;(2)利用循環(huán)語句把字

符串前導(dǎo)*號拷貝到原串;(3)繼續(xù)移動指針,把串中和串尾的非*號字

符拷貝到原串;(4)為修改后的字符串賦結(jié)束字符,、0\

【解題寶典】

要刪除字符串中的指定字符,我們通常采用保留非指定字符的方法。

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

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

字符。

23.

【考點分析】

要刪除字符串中所有*號需要用循環(huán)語句遍歷字符串,用

判斷語句判斷字符是否為*號,由此可以決定該程序應(yīng)使用循

環(huán)判斷結(jié)構(gòu)。

【解題思路】

24.\n\tvoidproc(intm,int*a,int*n)

\n{

\ninti,j=0;

\nfor(i=l;i<=m;i++)//進行m次循環(huán)

\nif(i%7==0||i%ll==0)//能被7或11整除的所有整數(shù)

\na[j++]=i;//符合條件的數(shù)放在數(shù)組a中

\n*n=j;//返回這些數(shù)的個數(shù)

\n}

\n【解析】本題需要先判斷1?m每一個整數(shù)能否被7或11整除,然

后將符合條件的整數(shù)放在數(shù)組a中,最后將符合條件的數(shù)的個數(shù)通過

形參n返回主函數(shù)。\n

25.voidfun(char*ss)

(

inti;

fdr(i=O;ss[i]!=<\0,;i++)

/*將ss所指字符串中所有下標(biāo)為奇數(shù)的字母轉(zhuǎn)換為大寫字母*/

if(i%2=l&&ss[i]>='a'&&ss[i]<='z')

ss[i]=ss[i]-32;

)

將指定字符串中奇數(shù)位置的字母轉(zhuǎn)換為大寫字母,首先需要判斷奇數(shù)位

置,再判斷該位置字符是不是小寫字母,如果是小寫字母,則將小寫字

母轉(zhuǎn)換為大寫字母。字母大小寫轉(zhuǎn)換操作中,只要將小寫字母的ASCII

值減去32即可轉(zhuǎn)換為大寫字母。

26.

【解析1按照題目中要求求m以內(nèi)(不包括m)同時能被5與11整除的

所有自然數(shù)之和的平方根s,需要判斷m以內(nèi)的所有整數(shù)是否能同時

被5與11整除,首先求出同時能被5與

11整除的所有自然數(shù)之和,然后再求和的平方根,最后返回到主函數(shù)

當(dāng)中。

27.

【答案】

voidfun(char*s,chart[])

(“

inti,j=0;

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

t[)++>s[?l;

=0;

1

【解析】

使用循環(huán)遍歷字符串,將下標(biāo)和ASCII碼值滿足要求的元素賦給新的字符串°

28.voidproc(inttt[M][N],intpp[N])

inti,j,max;

for(i=0;i<M;i++)//i控制行的下標(biāo)

(

max=tt[i][c];//max存放每行中最大的數(shù)

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

if(tt[i][j]>max)

max=tt[i][j];

pp[i]=max;//把大的數(shù)放到PP數(shù)組中,經(jīng)過i來控制pp數(shù)組的下

標(biāo)

)

)

【解析】按照題目中要求,求出二維數(shù)組每行中最大元素,并依次放

入PP所指的一維數(shù)組中。首先比較二維數(shù)組中每一行的元素,找出每

一行中的最大元素,放入一維數(shù)組pp中,返回到主函數(shù)當(dāng)中。

29.

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

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

30.1intfun(intlim,intaa[MAX])

2{

3inti,j,k=0;

4for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素數(shù)*/

5{for(j=2;j<i;j++)

6if(i%j==0)break;

7if(j>=i)

8aa[k++]=i;/*將求出的素數(shù)放入數(shù)組aa中*/

9)

lOretumk;/*返回所求出的素數(shù)的個數(shù)*/

11)

<i;jp++)<>如果一個數(shù)是合數(shù),那么它的最小質(zhì)因數(shù)肯定小于等于它的

平方根。本程序使用for循環(huán)語句查找小于lim的所有數(shù),使用內(nèi)嵌的

循環(huán)判斷語句判斷該數(shù)是否為素數(shù)。在做這道題時,需要重點掌握素

數(shù)的判定方法:for(j=2;j<sqrt(i);j++)if(i%j=0)break;...</i;jp++)<>

31.voidfiin(longslongt)改為voidfun(longslong*t)sl=sl*100;改為

sl=sl*10;voidfun(longs,longt)改為voidfun(longs,long*t)\r\n

sl=sl*100;改為sl=sl*10;解析:從fun函數(shù)可以看出,變量t應(yīng)該

是指針變量。因此,在形參表列中,t之前應(yīng)該加“*“;從s中取出奇數(shù)

位構(gòu)建新數(shù)是逐位進行,而不是跳位的。因此,S1應(yīng)該乘以10。

32.(1)錯誤:fbr(i=O;i<n;i++)正確:for(i=O;i<2;i++)(2)錯誤:

k=m;正確:m=k;(1)錯誤:for(i=O;i<n;i++)正確:for(i=0;i<

2;i++)\r\n(2)錯誤:k=m;正確:m=k;解析:錯誤1:由于題目要

求將最小數(shù)和次最小數(shù)分別與a[0]和a[l]中的數(shù)對調(diào),因此這層循環(huán)只

需循環(huán)兩次。錯誤2:賦值語句的執(zhí)行方向是從右向左,即把右邊的值

賦給左邊的變量。

33.(1)錯誤:intfun(chart[])正確:voidfun(chart[])(2)錯誤:t[j]=t[i++];

正確:;(1)錯誤:intfun(chart[])正確:voidfim(chart[])VW(2)錯

誤:t[j]=t[i++];正確:tD>t[i];解析:錯誤1:該函數(shù)只是對一個字

符串中的元素進行比較大小的操作,并沒有具體的返回值,因此,函數(shù)

的返回值類型應(yīng)為void。錯誤2:本題的思路是利用選擇法對數(shù)組元素

進行比較。所謂選擇法,是依次用當(dāng)前取得的元素和它后面的元素進行

比較,在第一個元素和它后面的元素

溫馨提示

  • 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

提交評論