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

下載本文檔

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

文檔簡介

2022年山西省晉城市全國計算機等級考試

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

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

一、2.填空題(10題)

1.以下程序的輸出結(jié)果是____O

main()

{chars[]="abcdef";

s[3]='\0';

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

)

2.設(shè)有以下定義變量的語句,并且已賦確定的值,則表達式“W*X+Z-y”

所求得的數(shù)據(jù)類型為【】。

charw;intx;floaty;double2;

3.以卜函數(shù)sstrcat。的功能是實現(xiàn)寧符串的連接,即將t所指字符串復

制到s所指字符串的尾部。例如:s所指字符串為abed,t所指字符申為

efgh,函數(shù)調(diào)用后s所指字符串為abcdefgh。請?zhí)羁铡?/p>

#include<string.h>

voidsstrcat(char*s,char*t)

{intn;

n=strlen(s);

while(*(s+n)=){s++;t++;}

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

#include<stdio.h>

main()

inta[3][3]={{l,2,9},{3,4,8},{5,6,7}},i,s=0;

for(i=0;i<3;i++)s+=a[i][i]+a[i][3-i-l];

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

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

main()

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

d=(a>b>C);

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

)

6.若x為int類型,請寫出與!x等價的C語言表達式o

7.下列程序的輸出結(jié)果是____o

main()

{inta[]={31,27,20,12,6,l),*P=a;

P++;

printf("%d\n",*(p+2));

}

8.設(shè)有定義:FILE*fw;,請將以下打開文件的語句補充完整,以便

可以向文本文件readme.txt的最后續(xù)寫內(nèi)容。

fw=fopen("readme.txt",[]);

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

#include<stdio.h>

#defineSIZE12

main()

{chars[SIZE];intI;fbr(I=O;I<SIZE;I++)s[I尸A,+I+321;

sub(s,7,SIZE-1);

for(I=0;I<SIZE;I++)printf("%c",s[I]);

printf("\n");}

sub(char*a,inttl,intt2)

{charch;

while(tl<t2)

{ch=*(a+tl);

*(a+tl)=*(a+t2);

*(a+t2)=ch;

tl++;t2—;}}

10.以下說明語句中,【】是結(jié)構(gòu)體類型名。

typedefstruct

{intn;

charch[8];

}PER;

二、單選題(10題)

H.程序中已構(gòu)成如下不帶頭節(jié)點的單向鏈表結(jié)構(gòu),指針變量s、p、q均

已正確定義,并用于指向鏈表節(jié)點,指針變量s總是作為指針指向鏈表

的第1個節(jié)點。

datenext___________

s->a-------------?b---------?cNULL

若有以下程序段:

q=s;

s=s->next;

P=s;

while(p->next)p=p->next;

p->next=q;

q->next=NULL;

該程序段實現(xiàn)的功能是OO

A.刪除尾節(jié)點B.使尾節(jié)點成為首節(jié)點C.刪除首節(jié)點D.使首節(jié)點成為

尾節(jié)點

12.在一個無向圖中,所有頂點的度數(shù)之和等于所有邊數(shù)的。倍。

A.1/2B.1C,2D.4

13.有以下程序:

#include<stdio.h>

main()

{chara[5][10]={"China","beijing","very","welcome","you"};

char*p[5];inti;

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

{p[i]=*(a+i);

printf("%s”,p[i]);

printf("%c”,*p[i]);

)

)

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

A.wwyyB.ChinaCbeijingbC.veryvwelcomewD.welcomewyouy

14.有如下程序:

longfib(intn)

{if(n>2)return(fib(n-1)+fib(n-2));

elsereturn(2);

main()

{printf("%d\n",fib(3));}

該程序的輸出結(jié)果是

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

15.若有"doublea;",則正確的輸入語句是()。

A.scanf("%lf",a);

B.scanf("%f',&a);

C.scanf("%lf',&a)

D.scanf("%le",&a);

16.有如下程序main(){inty=3,x=3,z=l

printf("%d%d\n",(++x,y++),z+2);}運行該程序的輸出結(jié)果是一

A.34B.42C.43D.33

(1)算法的時間復雜度是指()。

A)算法的長度

B)執(zhí)行算法所需要的時間

C)算法中的指令條數(shù)

17.D)算法執(zhí)行過程中所需要的基本運算次數(shù)

18.有以下程序

#include<stdio.h>

intfun(intx,inty)

{if(x==y)return(x);

elsereturn((x+y)/2);

main()

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

printf("%d\n",fun(2*a,fun(b,c)));

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

A.3B.6C,8D.12

19.下列程序段的時間復雜度為()。

for(i=l,t=l,s=0;i<=n;i++){t=t*i;s=s+t;}

A.O(n)B.O(log2n)C.O(n3)D.O(n2)

20.設(shè)有定義“intk=0;”,以下選項的4個表達式中與其他3個表達式的

值不相同的是()。

A.++kB.k+—1C.k++D.k+1

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

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

人結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,它的功能是:把指定分數(shù)范圍

之外的學生數(shù)據(jù)放在b所指的數(shù)組中,分數(shù)范圍之外的學生人數(shù)由函

數(shù)值返回。

例如,輸入的分數(shù)是70和79,則應當把分數(shù)低于70和高于79的學生

數(shù)據(jù)輸出,不包含70分和79分的學生數(shù)據(jù)。主函數(shù)中把70放在low

中,把79放在heigh中。

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

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

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

試題程序:

#include<stdio.h>

#defineM16

typedefstruct

(

charnum[10];

ints:

)

STREC;

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

(

)

voidmain

(

STRECstu[M]={{"GA005",55),{"GA003",96},

{"GA002",80),{"GA004",68),

{"GA001",88},{"GA007",74},

{"GA008",85),{"GA006",89},

{"GA015",90),{"GA013”,53),

{"GAO12",66},{"GAO14”,82),

{"GAOH",73},{"GA017",69),

{"GA018",64),{"GA016",86}};

STRECh[M];

inti,n,low,heigh,t;

printf("Enter2integernumberlow&

heigh:");

scanf("%d%d",&low,&heigh);

if(heigh<low)9

(-

t=heigh:

heigh=low;

low=t;

)

n=proc(stu,h,low,heigh);

printf("ThestudenfSdataout

%d—%d:\n",low,heigh);

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

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

//輸出指定分數(shù)范圍內(nèi)的學生記錄

printf("\n");

)

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

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

fun(),它的功能是求出能整除x且不是偶數(shù)的整數(shù),并將這些整數(shù)按從

小到大的順序放在PP所指的數(shù)組中,總個數(shù)通過形參n返回。如x中

的值為30,則有4個數(shù)符合要求,它們是1、3、5、15。注意:部分源

程序在文件progl.c中。請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)

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

1#include<conio.h>

2#include<stdio.h>

3#include<stdlib<h>

4voidfun(intxrintpp[],int*n)

6

噩}

8voidmain()

9{

10FILE?wf;

11intxraa[1000],nri;

12system(WCLSM);

13printf(w\nPleaseenteran

integernumber:\nf,);

wn

14scanf(%dz&x);

15fun(x,aa,&n);

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

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

18printf(M\n");

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

20wf=fopen("out.datM,MwM);

21fun(301aa,&n);

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

w

23fprintf(wfr%daa[i]);

24fclose(wf);

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

26}

23.

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

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

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

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

ASCII碼值為奇數(shù),在數(shù)組中的下標為奇數(shù),因此不應當刪除,其他依

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

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

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

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

試題程序:

#include<stdio.h>

#include<string.h>

voidfun(char*s,chart[])

mmn()

charg[100],t[100];

printf(n\nPleaseenterstringS:");

s);

fun(s?t);

printf("\nThere?ultis:%s\n*\t);

24.

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

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

MlurbocandBorland’

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

,urhocadIxirladC++”

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

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

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

試題程序:

#inrlude<stdio.h>

voidfun(chars(]jnt葡

f

).

main()

{staticcharstrfJ="turbocandboHandC++”;

rharrh:

charch:

printf(M原始字符串:%s\n,,.str);

printfr輸入一個字符An”);

scanf「%c",&ch);

printf(Mstr[]=%s\n”str):

fitrepy(str,,rtuibocandIxirland(:++");

fun(str/a'):

25.請編寫一個函數(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");

1

else

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

printf("\n");

)

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

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

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

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

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

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

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

tinclude<stdio.h>

voidNONO();

intfun(char*s)

(

)

main()

{char*s=H2def35adh253kjsdf

7/kj8655x";

w

printf(?,%s\nrs);

printf(M%fun(s));

NONO();

)

voidNONO()

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

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

FILE*fp,?wf;

inti;

chars[256];

MHnn

fp=fopen(in.datrr);

19wf=fopen(Mout.daf\Hww);

20

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

22fgets(sf2559fp);

23

24fprintf(wf,fun(s));

25)

26

fclose(fp);

fclose(wf);

)

27.請編一個函數(shù)fun(ohlr*str),該函數(shù)的功能是把字符串中的內(nèi)容逆置。

例如,字符串中原有的字符串為asdf9,則調(diào)用該函數(shù)后,串中的內(nèi)容為

9fdsao

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

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

試題程序:

#include<string.h>

#include<conio.h>

#include<stdio.h>

#defineN100

voidfun(char*str)

(

)

voidmain

(

chara[N];

FILE*out:

printf("Enterastring:");

gets(a);

printf("Theorigiralstringis:");

puts(a);

fun(a):

printf("Thestringaftermodified:");

puts(a);

strcpy(a,"Welcome!");

fun(a);

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

fprintf(out,"%s".a);

fclose(out);

28.編程計算下列表達式:s=n!(n從鍵盤上輸入)

29.輸出1900?2000年中所有的閏年。每輸出3個年號換一行。(判斷閏

年的條件為下面二者之一:能被4整除,但不能被100整除?;蛘吣鼙?/p>

400整除。)

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

的項目中包含一個源程序文件progl.co此程序定義了NXN的二維數(shù)

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

元素中的值乘以no

例如,若n的值為3,a數(shù)組中的值為

197

238

456

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

397

698

121518

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

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

voidfun(inta[][N],intn)

(

)

main()

{

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

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

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

(

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

(

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

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

}

printfCt\n^^);

)

n=rand()%4;

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

fun(a,n);

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

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

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

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

printf

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

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

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

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

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

試題程序:

#include<stdio.h>

longfun(intx,inty,long*p)

{inti;

longt=l;

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

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

t=t*x;

*p=t;

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

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

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

值。

例如,若m中的值為5,則應輸出:1.463611。

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

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

[試題源程序]

#include<stdiO.h>

doublefun(intm)

doubley=1.0;

inti;

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

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

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

y+=l/(i*i);

return(y);

main()

intn=5;

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

33.給定程序中,函數(shù)fun()的功能是:使數(shù)組中的元素的值縮小5倍。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

floatm[10];

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

intfun(void)

(

intj;

printf("Insubfuncaftercalling\n");

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

print("%f",m[j]%5);

main()

(

inti;

printf("Inmainbeforecalling\n");

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

(

m[i]=i+20;

printf("%f",m[i]);

)

fun();

printf("\nlnmainaftercalling\n");

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

printf("%f",m[i]/5);

)

34.給定程序M0D11.C中函數(shù)。fun的功能是:從3個紅球,5個白

球,6個黑球中任意取出8個作為一組,進行輸出。在每組中,可以沒

有黑球,但必須要有紅球和白球。

組合數(shù)作為函數(shù)值返回。正確的組合數(shù)應該是15。程序中i的值代表紅

球數(shù),j的值代表白球數(shù),k的值代表黑球數(shù)。

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

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

1?include<stdio.h>

2intfun()

3(intifjrsum*0;

4printf(w\nTheresult:\n\n");

5???fOuncj********?***?/

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

7(for(j?l;j<=5;j++)

8{k?8-i-j;

9/…★………found…………?/

10if(K>?0&&K<-6)

11{sum*sum4-l;

12printf("red:%4dwhite:

N

%4dblack:l4d\n,irjrk);

13

14

15

16returnsum;

17)

18main()

19{intsum;

20sum=fun();

M

21printf("sum?%4d\n\nrsum);

22

35.下列給定的程序中,函數(shù)hn()的功能是為一個偶數(shù)尋找兩個素數(shù),

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

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

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

試題程序:

#include<stdio.h>

#include<math.h>

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

{inti,j,d,y;

for(i=3;i<=a/2;i=i+2)

{y=o;

for(j=2;j<=sqrt((double)i);j++)

if(i%j==0)y=0;

if(y==l)

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

{d=i-a;

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

j++)

if(d%j==O)y=0;

if(y=-i)

{*b=i;*c=d;}

main()

{inta,b,c;

do

{printf("\nlnputa:");

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

while(a%2);

fun(a,&b,&c);

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

36.給定程序M0D11.C中函數(shù)fun的功能是:求整數(shù)x的y次方的低

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

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

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

;linclude<stdio.h>

2!longfun(intxrinty,long*p)

3i{inti;

4longt?l;

5I/*****★★???*??found*************/

i

6for(i-1;i<y;i++)

7

8*p-t;

9;/……?……found…………?/

10t-t/1000;

11returnt;

12

13main()

14{longt,r;intx,y;

15printf(M\nlnputxandy:H);

scanf(w%ld%ldw,&x,&y);

16t-fun(xry,&r);

H

17printf(\n\nx-?%dry-%d,r-%ldr

w

last?%ld\n\nrxryrr,t);

18

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

寫字母F。

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

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

試題程序:

#include<stdio.h>

voidfun(char*s)

inti,j;

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

for(i=j=0;s[i]!='0';i++)

if(s[i]!='F')

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

s[j]=s[i];

s[j]='\O';

main()

(

chars[80];

printf("\nEnterastring:");

gets(s);

printf("Theoriginalstring:");

puts(s);

fun(s);

printf("Thestringafterdeleted:");

puts(s);

printf("\n\n");

)

38.下列給定程序中,函數(shù)fun()的功能是:通過某種方式實現(xiàn)兩個變量

值的交換,規(guī)定不允許增加語句和表達式。例如變量a中的值原為8,

b中的值原為3,程序運行后a中的值為3,b中的值為8。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

intfun(int*x,inty)

(

intt;

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

t=x;x=y;

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

return(y);

main()

{inta=3,b=8;

clrscr();

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

b=fun(&a,b);

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

39.給定程序MOD11.C中函數(shù)fun的功能是:計算n!。

例如,給n輸入5,則輸出120.000000。

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

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

1*include<stdio.h>

2doublefun(intn)

3{doubleresult-1.0;

4/************found****w******w/

5ifn-?0

6return1.0;

7while(n>14&n<170)

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

9result*■n--

10returnresult;

11)

12main()

13{intn;

14printf("InputN:w);

w

15scanf("%dr&n);

ww

16printf(\n\n%d!-%lf\n\nrnrfun(n));

17

40.下列給定程序中,函數(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("%Rn",fun(50));

五、程序改錯題(2題)

41.

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

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

例如:檢入123456789,則矩陣為123

456

789

的出為&jm=15.

請修改函數(shù)proc()中的錯誤,使它能得出正確的結(jié)果。注意:不要改

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

序:

#include<stdio.h>

voidproc()

<

intarr[3j[3].sumi

inti.ji

//????found????

sum=Is

printf("pleaseinput3*3array:\n")i

for(i=0siV3si++)

(

for(j=O?j<3ij++)

//????found??*?

M?anf(*%dH?arr[i][j])?

>

for(i=0ji<3<i-F+)

5um=xum+arr[i][i]i

printfC"Sum=%d\n"?sum>i

voidmain()

proc()i

42.

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

$-(22/(1?3)>?(42'(3?$))?(62(S?7>>

?????-1)?(2k?

例如,當k為20時,函數(shù)的值應為1.551759。請修改程序中的錯誤,

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

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

stfiduJeVstdio.h>

=mcludeVconeo.h>

9mclu4eVIL>

:includeVaih.h>

??found??

proHintk)

mtmfloat??w?p.Q,

l.Ot

wtiikrCn<

2,0?m

p■■-LOi

q-w

w?wpqi

??found??

rrtum%

fvMMni*CI

ptmtlC

六、操作題(2題)

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

案的項目中包含一個源程序文件progl.c。在此程序中,已知學生的記

錄由學號和學習成績構(gòu)成,N名學生的記錄已存入a結(jié)構(gòu)體數(shù)組中。

請編寫函數(shù)fun(),該函數(shù)的功能是找出成績最高的學生記錄,通過形

參將其返回主函數(shù)(規(guī)定只有一個最高分)。已給出函數(shù)的首部,請

完成該函數(shù)。

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

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

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定義結(jié)構(gòu)體*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

voidmain()

(

STUa[N]={{“A01”,81},{“A02”,89},{“A03”,66},

{“A04”,87},{“A05”,77},{“A06”,90},{“A07”,79},

{“A08”,61},卜A09”,80},{“A10,,,71}},m;

inti;

system(“CLS”);

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

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

printf("No=%sMark=%d\n”,a[i].num,a[i].s);

fun(a,&m);

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

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

44.請編寫一個函數(shù)fun(),它的功能是:比較兩個字符串的長度,(不

得調(diào)用C語言提供的求字符串長度的函數(shù)),函數(shù)返回較短的字符串。

若兩個字符串長度相等,則返回第1個字符串。

例如,輸入nanjing<CR>nanchang<CR>(<CR>為回車鍵),函數(shù)將

返回nanjingo

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

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

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

試題程序:

#include<stdio.h>

char*fun(char*S,char*t)

(

)

main()

(

chara[20],b[10],*p,*q;

inti;

printf("Input1thstring:");

gets(a);

printf("Input2thstring:");

gets(b);

printf("%s”,fun(a,b));

)

參考答案

l.abcabc解析:字符串的結(jié)束標記'\\01,當輸出一個存放在字符數(shù)組中

的字符串時,只需輸出到‘\\0’為止,而不管其后有什么數(shù)據(jù)。本題給字符

數(shù)組S的元素s[3]賦值為NO1故只能輸出3個字符“abc”。

2.double或雙精度型double或雙精度型

3.*t*t解析:函數(shù)中首先讓n=stxlen(s)所以while循環(huán)的循環(huán)條件表達

式中*(s+n)指向字符串s的結(jié)束標志U,處,而該處應該等于字符串t的

第1個字符,另外循環(huán)體中讓s和t指向下一個字符,即s+n和t同時

被移動到下一個位置,所以該處應該填*t,即t所指內(nèi)容.當t指向字符

串結(jié)束標志'\\0'的時候,整個循環(huán)條件表達式的值也為0(“假”)了,循環(huán)

結(jié)束.正好滿足將t所指字符串復制到s所指的字符串的尾部。

4.3030解析:當i=0時,s=0+a[0][0]+a[0][2]=10;i=l時,s=10+a[l][l]+

a[l][l]=18;i=2時,s=18+a[2][2]+a[2][0]=30o

5.00解析:關(guān)系運算符“>”的結(jié)合方式是從左向右的,所以在本題中的

表達式a>b=c;從左向右開始計算,a>b的結(jié)果為“1”,接著1和c比

較假,該空格處應該填0。

6.x==0x==0解析:!x的邏輯意思就是x為非,艮[]x==0o

7.1212解析:本題考查如何用指針引用數(shù)組元素。分析程序,首先定義

了一個指向數(shù)組a的指針p,p指向數(shù)組的首地址,通過P++,將p指

向a[l],p+2是將指針后移2位指向a[3],*(p+2)即是取a[3]的值12o

8.a

a解析:本題考查的是文件的打開方式。要向文本文件的末尾續(xù)寫內(nèi)

容,需要使用方式“a”(追加)打開文件。

9.abcdefglkjlhabcdefglkjlh解析:本題主要考查了字符變量

可參與的運算。因為字符在計算機中是以ASCII碼的形式存放的,所以

字符變量可看作整型變量來處理,如參與算術(shù)運算等,某字符的大寫字母

的ASCII碼值比它對應的小寫字母ASCII碼值小32O

10.PERPER解析:本題中,typedef聲明新的類型名PER來代替已有的

類型名,PER代表上面指定的一個結(jié)構(gòu)體類型,此時,也可以用PER來

定義變量。

H.D程序中,指針s指向了它的下一個節(jié)點。題目中說明了s總是指向

鏈表的第1個節(jié)點。然后while循環(huán)找到鏈表的最后一個元素,最后一

個元素指向了之前鏈表的頭節(jié)點,之前頭節(jié)點指向了空節(jié)點。所以本題

實現(xiàn)的是使首節(jié)點成為尾節(jié)點。故本題答案為D選項。

12.C

13.Dmain函數(shù)定義一個二維字符數(shù)組a,它包含5個字符串,每個字符

串存放在一個長度為10的一維數(shù)組中。指針數(shù)組P包含5個字符指針

元素。for循環(huán)中,每次將*(a+i)賦給P[i],再輸出P國和*P[i]。由于*(a+i)

等價于a田,因此每次都是將下標為i的字符串首地址賦給p[i],再輸出

該字符串和該字符串的首字符。i=3時,輸出字符串“welcome”和首字符

“W";i=4時,輸出字符串“you”和首字符“歹。綜上,輸出結(jié)果為

welcomewyouyo故本題答案為D選項。

14.B

15.D解析:函數(shù)scanf()的調(diào)用形式是:scanf(格式字符串,輸入項地址

表)。其中,“格式字符串”是要輸入的變量的格式符;“輸入項地址表”是

要輸入的變量的地址。本題中定義變量a為雙精度型變量,雙精度變量

的格式符為“l(fā)e”;變量的地址用取地址符加變量名表示,如變量a的

地址為“&a”。

16.D解析:逗號表達式(++x,y++)的值應該是y++的值,由于y++是先

引用后自增,所以y++的值是3。

17.D

18.B

19.A

20.C表達式“++k”是先使得k的值自增1后再使用。表達式“k++”是先

取得k的值再將k的值自增1。所以C選項中表達式的值為0,而其他

3個選項中表達式的值均為lo故本題答案為C選項。

21.\n\tintproc(STREC*a,STREC*b,inti,inth)\n

\n

\n\t{\n

\n

\n\tinti,j=0;\n

\n

\n\tfor(i=0;i<M;i++)\n

\n

\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n

\n

\n\t[i].s<=100))//通過if語句,來判斷指定范圍⑦

\n

\n\t之外的數(shù)\n

\n

\n\tb[j++]=a[i];//放到b數(shù)組中\(zhòng)n

\n

\n\treturnj;//最后把其個數(shù)返回到主函數(shù)中\(zhòng)n

\n

\n\t}\n

\n

\n\t【解析】題目要求把指定范圍之外的數(shù)放到b中,將每一個學生的

成績與指定的成績相比較,將符合條件的學生成績放在數(shù)組b中,并

將符合要求的學生個數(shù)返回給主函數(shù)。\n

22.lvoidfun(intx,intpp[],int*n)

21

3inti,j=0;

4for(i=l;i<=x;i=i+2)/*i的初值為1,步長為2,確保i為奇數(shù)

*/5if(x%i==0)/*將能整除x的數(shù)存入數(shù)組pp中*/6pp[j++]=i;7*n=j;/*傳

回滿足條件的數(shù)的個數(shù)*/8}本題考查:偶數(shù)的判定方法;整除的實現(xiàn)。本

題題干信息:能整除X且不是偶數(shù)的所有整數(shù)。循環(huán)語句中變量i從1

開始且每次遞增2,所以i始終是奇數(shù)。將能整除x的i值存放到數(shù)組

PP中,整除采用求余運算符“%”,即“x%i==O"。最后將數(shù)據(jù)元素個數(shù)j

保存到n中。

23.

【答案】

voidfun(char*s,chart(])

1“

inti,j=0;

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

優(yōu)(。%2)=0&&(中]%2)))

幣++廣而];

肛=0;

I

【解析】

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

24.

【答案】

vnidfun(cha-s[),intc)

1.

inti=0;

char*p;

P=s;

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

{,

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

(

<s(i>*P;/*如不同,將重新組合字符串*/

i++;

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

p++;}

s[i]=(M)';

)

【解析】

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

25.\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

26.intfun(char*s)

2;{intn=0;

3char*p;

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

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

6n++;

7retumn;

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

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

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

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

27.\n\tcharch;

\ninti,m,n;

\ni=0:

\nm=n=strlen(str)-1;//求字符串str長度

\nwhile(i<(n+l)/2)//循環(huán)逆置交換

\n(

\nch=str[i];

\nstr[i]=str[m];

\nstr[m]=ch:

\ni++;

\nm—;

\n}

\n【解析】在fun函數(shù)中,首先求行字符串的長度,然后通過循環(huán)進行

字符交換。要注意的是,如果字符串長度是奇數(shù),則最中間的元素在

逆置前后的位置是沒有改變的。\n

28.\n\t#include'stdio.h'

\nmain

\n{longt=l;

\ninti;

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

\nt=t*i;

\nprintfC%ld',t);}

\n

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

\nmain

\n{intl,n;

\nfor(n=0,I=1900;I<=2000;I++)

\n{if(I%4==0I0!=0||I@0==0)

\n{printf("%d”,I);n++;}

\nif(n%3==0)

\nprintf("\\n");}}}

\n

30.voidfun(inta[][n],intn)

(

inti,j;

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

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

/*矩形的下三角時,積相乘*/

a[i][j]=a[i]0]*n;

}

首先從數(shù)組中找出要乘以n的元素。這其實就是找出將被挑出的元素在

原數(shù)組中的分布規(guī)律的過程。通過觀察得出,要被處理的元素下標的范

圍是從每行中第1個元素開始,直到列數(shù)等于該行行數(shù)為止。即數(shù)組下

三角元素的列下標①小于等于(<=)行下標0)。找到這個規(guī)律后,依次從

數(shù)組中取得符合要求的元素,然后乘以n。

31.(1)錯誤:for:(i=l;i<y;i++)正確:for(i=l;i<=y;i++)(2)錯誤:

t=t/1000;正確:t=t%1000;⑴錯誤:for:(i=l;i<y;i++)正確:for(i=l;i

<=y;i++)\r\n⑵錯誤:t=t/1000;正確:t=t%1000;解析:我們先用

簡單的思想理解一下該程序,如果當x=y=l時,程序的問題出在哪兒?

很簡單吧,所以for(i=l;i<y;i++)的循環(huán)條件應該是for(i=l;i++),

另外,t=t/1000;中的錯誤是混淆了“/”和“%”的定義對這樣的細節(jié)問題

務必注意。

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

y+=l/(i*i)正確:y+=l./(i*i)錯誤2:在除法運算中如果除數(shù)和被除數(shù)都

是整數(shù)所以所除結(jié)果也是整數(shù)因此應改為y+=l./(i*i)o⑴錯誤:for(i=2;

i<m;i++)\r\n正確:for(i=2;i<=m;i++)\r\n⑵錯誤:y+=l/(i*i)\r\n正確:

y+=L/(i*i)\r\n錯誤2:在除法運算中,如果除數(shù)和被除數(shù)都是整數(shù),所

以所除結(jié)果也是整數(shù),因此應改為y+=L/(i*i)。

33.(1)錯誤:intfun(void)正確:voidfun(void)(2)錯誤:

printf("%f'm[j]%5);正確:printf("%f"m[j]/5);⑴錯誤:intfun(void)正

確:voidfun(void)\r\n(2)錯誤:printf('%f,m[j]%5);正確:

printf('%f,m[j]/5);解析:錯誤1:函數(shù)fun()沒有返回值,所以定義函

數(shù)類型為void。錯誤2:此處考查的是除法運算符和取余運算符的區(qū)別。

34.(l)for(i=1;i<=3;i++)(2)if(k>=0&&k<=6)(l)for(i=1;i<=

3;i++)(2)if(k>=0&&k<=6)解析:本題中函數(shù)的功能是從3個紅

球、4個白球、5個黑球中任意取出8個作為一組,進行輸出。在每組

中,可以沒有黑球,但必須要有紅球和白球。其實就是實現(xiàn)這三種球的

組合取值。

35.⑴錯誤:y=0;正確:y=l:(2)錯誤:d=i-a;正確:d=a-i;(1)錯誤:

y=0;正確:y=l:\r\n(2)錯誤:d=i-a;正確:d=a-i;解析:這道題是

歷年的考題經(jīng)典。也就是驗證哥德巴赫猜想之變體,原來的思路是(任意

一個大于等于6的偶數(shù)都可以分解為兩個素數(shù)之和)n為大于等于6的

任一偶數(shù),可分解為nl和n2兩個數(shù),分別檢查nl和n2是否為素數(shù),

如都是,則為一組解。如nl不是素數(shù),就不必再檢查n2是否素數(shù)。先

從nl=3開始,檢驗nl和n2(n2=N-nl)是否素數(shù)。然后使nl+2再檢驗

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論