2021-2022學(xué)年廣東省珠海市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第1頁
2021-2022學(xué)年廣東省珠海市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第2頁
2021-2022學(xué)年廣東省珠海市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第3頁
2021-2022學(xué)年廣東省珠海市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第4頁
2021-2022學(xué)年廣東省珠海市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2021-2022學(xué)年廣東省珠海市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)學(xué)校:________班級:________姓名:________考號:________

一、單選題(12題)1.假設(shè)以行序為主序存儲二維數(shù)組array[100][100],設(shè)每個數(shù)據(jù)元素占2個存儲單元,基地址為10,下標(biāo)從0開始,則元素array[5][5]的地址為()。

A.808B.818C.1010D.1020

2.若變量已正確定義為int型,要通過語句“scanf(“%d,%d,%d”,&a,&b,&c);”將a賦值為1、將b賦值為2、將c賦值為3,以下輸入形式中錯誤的是(注:□代表一個空格符)()。

A.1,2,3<Enter>

B.□□□1,2,3<Enter>

C.1,□□□2,□□□3<Enter>

D.1□2□3<Enter>

3.有以下程序:#include<stdio.h>main(){inta=-2,b=2;for(;++a&&--b;)printf(“%d,%d\n”,a,b);}程序運行后的輸出結(jié)果是()。

A.0,1B.0,0C.1,-1D.0,2

4.一個有7個頂點的完全三部圖,至少有存在幾條邊()

A.10B.11C.15D.16

5.有以下函數(shù)intfun(char*X,char*y){intn=0;while((*x===*y)*x!=\O){x++;y++;n++;}returnn;}函數(shù)的功能是()。A.查找X和y所指字符串中是否有\(zhòng)o

B.統(tǒng)計x和Y所指字符串中最前面連續(xù)相同的字符個數(shù)

C.將Y所指字符串賦給X所指定存儲空間

D.統(tǒng)計X和Y所指字符串中相同的字符個數(shù)

6.有以下程序:#include<stdiO.h>main(){FILE*fp;intk,n,i,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);fclose(fp);fp(i=0;i<3;i++)fscanf(fp,"%d%d",&k,&n);fclose(fp);printf("%d\n,%d\n,k,n);}程序運行后的輸出結(jié)果是()。A.1,2B.3,4C.5,6D.123,456

7.下列敘述中正確的是()。

A.算法的執(zhí)行效率與數(shù)據(jù)存儲結(jié)構(gòu)無關(guān)

B.算法的空間復(fù)雜度是指算法程序中指令(或語句)的條數(shù)

C.算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止

D.以上3種描述都不對

8.以下能正確定義一維數(shù)組的選項是()。

A.inta[5]=(0,1,2,3,4,5);

B.chara[]={0,1,2,3,4,5);

C.chara={'A','B','C'};

D.inta[5]="0123";

9.對包含N個元素的散列表進行檢索,平均檢索長度________

A.為o(log2N)B.為o(N)C.不直接依賴于ND.上述三者都不是

10.下面程序的運行結(jié)果是______。#include<stdio.h>#include<string.h>fun(char*w,intn){chart,*s1,*s2;s1=w;s2=w+n-1;while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}}main(){char*p;p="1234567";fun(p,strlen(p));puts(p);}

A.7654321B.1714171C.1711717D.7177171

11.設(shè)棧S的初始狀態(tài)為空,6個元素入棧的順序為e1,e2,e3,e4,e5和e6。若出棧的順序是e2,e4,e3,e6,e5,el,則棧s的容量至少應(yīng)該是()。

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

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

A.C語言比其他語言高級

B.C語言可以不用編譯就被計算機識別并執(zhí)行

C.C語言以接近英語國家的自然語言和數(shù)學(xué)語言作為語言的表達形式

D.C語言出現(xiàn)最晚,具有其他語言的一切優(yōu)點

二、2.填空題(12題)13.若有如下定義:

int[]={11,24,56,19,29,39),*t=s;

則不移動指針t,且通過指針t引用數(shù)組中值為29的元素的表達式是【】。

14.以下程序通過函數(shù)SunFun求。這里f(x)=x2+l,由F函數(shù)實現(xiàn)。請?zhí)羁铡?/p>

main()

{

printf("Thesum=%d\n",SunFun(10));

}

SunFun(intn)

{

intx,s=0;

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

S+=F(______);

returns;

}

F(intx)

{

return(______);

}

15.按“先進后出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是[]。

16.設(shè)函數(shù)findbig已定義為求3個數(shù)中的最大值。以下程序?qū)⒗煤瘮?shù)指針調(diào)用findbig函數(shù)。請?zhí)羁铡?/p>

main()

{

intfindbig(int,int,int);

int(*f)(),x,yz,z,big;

f=【】;

scanf("%d%d%d",&X,&y,&z);

big=(*f)(x,y,z);

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

}

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

#include<stdio.h>

#defineM5

#defineNM+M

main()

{intk;

k=N*N*5;printf(”%d\n",k);

}

18.若有定義:inta=6,b=8,c=14;接著順序執(zhí)行下列語句后,變量c中的值是()。c=(b-=(a-5));a=(c%3)+(a=8);

19.在一個容量為32的循環(huán)隊列中,若頭指針front=3,尾指針rear=2,則該循環(huán)隊列中共有______個元素。

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

#include<stdio.h>

main()

{inta=1,b=7;

do{

b=b/2;a+=b;

}while(b>1);

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

}

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

intx=5;

do{printf("%d",x-=4);

}while(!(--x));

22.若x和y都是double型變量,且x的初值為3.0,y的初值為2.0,則表達式pow(y,fabs(x))的值為【】。

23.關(guān)系模型的完整性規(guī)則是對關(guān)系的某種約束條件,包括實體完整性、______和自定義完整性。

24.表達式pow(2.8,sqrt(float(x)))值的數(shù)據(jù)類型為______型。

三、3.程序設(shè)計題(10題)25.編寫函數(shù)fun,它的功能是計算下列級數(shù)和,和值由函數(shù)值返回。

例如,當(dāng)n=10,x=0.3時,函數(shù)值為1.349859。

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

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

26.請編寫函數(shù)fun(),它的功能是:判斷字符串是否是回文?若是,函數(shù)返回1,主函數(shù)中輸出:YES,否則返回0,主函數(shù)輸出NO?;匚氖侵疙樧x和倒讀都一樣的字符串。

例如,字符串LEVEL是回文,而字符串12312就不是回文。

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

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

[試題源程序]

#include<stdio.h>

#defineN80

intfun(char*str)

{

}

main()

{

chars[N];

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

printf("\n\n");puts(s);

if(fun(s))

printf("YES\n");

else

printf("NO\n");

NONO();

}

NONO()

{

/*請在此函數(shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/

FILE*rf,*wf;

inti;chars[N];

rf=fopen("K:\\k06\\24010001\\in.dat","r");

wf=fopen("K:\\k06\\24010001\\out.dat","w");

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

fscanf(rf,"%s",s);

if(fun(S))

fprintf(wf,"%sYES\n",s);

else

fprintf(wf,"%sNO\n",s);

}

fclose(rf);

fclose(wf);

}

27.學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun(),它的功能是:函數(shù)返回指定學(xué)號的學(xué)生數(shù)據(jù),指定的序號在主函數(shù)中輸入。若沒找到指定的學(xué)號,在結(jié)構(gòu)體變量中給學(xué)號置空串,給成績置-1,作為函數(shù)值返回(用于字符串比較的函數(shù)是strcmp)。

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

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

試題程序:

#include<stdio.h>

#inctude<stdlib.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

STRECfun(STREC*a,char*b)

{

}

main()

{

STRECs[N]={{"GA005",85},{"GA003",76},

{"GA002",69},{"GA004",85},{"GA001",91},

{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA014",91},{"GA011",77},{"GA017",64},

{"GA018",64},{"GA016",72}};

STRECh;

charre[10];

inti,n;

FILE*out;

printf("Theoriginaldata:\n");

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

{if(i%4==0)

printf("In");

/*每行輸出4個學(xué)生記錄*/

printf("%s%3d",s[i]num,s[i]s);

}

printf("\n\nEnterthenumber:");

gets(m);

h=fun(s,m);

printf("Thedata:");

printf("\n%s%4d\n",h.num,h.s);

printf("\n");

out=fopen("out80.dat","w");

h=fun(s,"GA013");

fprintf(out,"%s%4d\n",h.num,h.s);

fclose(out);

}

28.請編寫函數(shù)fun(),該函數(shù)的功能是:計算n門課程的平均分,計算結(jié)果作為函數(shù)值返回。

例如x有5門課程的成績是90.5,72,80,61.5,55,則函數(shù)的值為71.80。

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

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

試題程序:

#include<stdio.h>

floatfun(float*a,intn)

{

}

main()

{

floatscore[30]=(90.5,72,80,61.5,55},

aver;

aver=fun(score,5);

printf("\nAveragescoreis:%5.2f

\n",aver);

}

29.請編寫函數(shù)fun(),該函數(shù)的功能是:移動一維數(shù)組中的內(nèi)容,若數(shù)組中有n個整數(shù),要求把下標(biāo)從p~n-1(p<n-1)的數(shù)組元素平移到數(shù)組的前面。

例如,一維數(shù)組中的原始內(nèi)容為1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,P的值為6。移動后,一維數(shù)組的內(nèi)容應(yīng)為7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。

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

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

[試題源程序]

#inciude<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]=(i,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

inti,P,n=15;

printf("Theoriginaldata:\n");

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

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

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,P,n);

printf("\nThedataaftermoving:\n");

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

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

printf("\n\n");

}

30.假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun(),它的功能是:只刪除字符串前導(dǎo)和尾部的*號,串中字母之間的*號都不刪除。形參n給出了字符串的K度,形參h給出了字符串中前導(dǎo)*號的個數(shù),形參e給出了字符山中最后*號的個數(shù)。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。

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

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*a;intn,inth,inte)

{

}

main()

{

chars[81],*t,*f;

intm=0,tn=0,fn=0;

printf("Enterastring:\n");

gets(s);

t=f=s;

while(*t)

{t++;m++;}/*m為字符串的長度*/

t--;/*指針t指身字符串尾部*/

while(*t=='*')

{t--;tn++;}

/*指針t指向最后一個字母,tn統(tǒng)計尾部'*'的個數(shù)*/

while(*f=='*')

{f++;fn++;}

/*指針f指向第一個字母,tn統(tǒng)計導(dǎo)'*'的個數(shù)*/

fun(s,m,fn,tn);

printf("Thestringafterdeleted:\n");

puts(s);

}

31.請編寫一個函數(shù)fun(),它的功能是:將ss所指字符串中所有下標(biāo)為偶數(shù)位置的字母轉(zhuǎn)換為小寫(若該位置上不是字母,則不轉(zhuǎn)換)。

例如,若輸入ABC4efG,則應(yīng)輸出aBc4efg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*SS)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80

characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

\%s",tt);

fun(tt);

printf("\nbecomes\n\%S\n",tt);

}

32.N名學(xué)生的成績己在主函數(shù)中放入一個帶頭節(jié)點的鏈表結(jié)構(gòu)中,h指向鏈表的頭節(jié)點。請編寫函數(shù)fun(),它的功能是:求出平均分,由函數(shù)值返回。

例如,若學(xué)生的成績是85,76,69,91,72,64,87,則平均分應(yīng)當(dāng)是78.625。

注童:部分源程序給出如下.

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

{

}

STREC*creat(double*s)/*創(chuàng)建鏈表*/

{

STREC*h,*p,*q;

inti=0;

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

p->s=0;

while(i<N)

{q=(STREC*)malloc(sizeof(STREC));

q->s=sIi];i++;p->next=q;p=q;

}

p->next=0;

returnh;

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

{printf("->%4.if",p->s);

p=p->next;/*輸出各成績*/

}

while(p!=0)

}

main()

{

doubles[N]={85,76,69,85,91,72,64,

87},ave;

STREC*h;

h=creat(s);

outlist(h);

ave=fun(h);

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

}

33.請編寫一個函數(shù)fun(),它的功能是計算并輸出給定整數(shù)n的所有因子(不包括1與自身)的平方和(規(guī)定n的值不大于100)。

例如:主函數(shù)從鍵盤給輸入n的值為56,則輸出為sum=1113。

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

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

試題程序:

#include<stdio.h>

longfun(intn)

{

}

main()

{

intn;

longsum;

printf("Inputn:");

scanf("%d",&n);

sum=fun(n);

printf("sum=%ld\n",sum);

}

34.請編寫函數(shù)fun(),該函數(shù)的功能是:實現(xiàn)B=A+A',即把矩陣A加上A的轉(zhuǎn)置,存放在矩陣B中。計算結(jié)果在main()函數(shù)中輸出。

例如,輸入下面矩陣:

123

456

789

其轉(zhuǎn)置矩陣為:

147

258

369

則程序輸出:

2610

61014

101418

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

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

試題程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},

t[3][3];

inti,j;

clrscr();

fun(a,t);

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

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

printf("%7d",t[i][j]);

printf("\n");

}

}

四、單選題(0題)35.若有定義inta=5,b=7;,則表達式a%=(b%2)運算后,a的值為()。

A.0B.1C.11D.3

五、單選題(0題)36.如有inta=11;則表達式(a/1)的值是()。

A.0B.3C.4D.11

六、單選題(0題)37.以下不能定義為用戶標(biāo)識符的是()。

A.VoidB.scanfC.intD._3com_

參考答案

1.C

2.D在輸入整數(shù)或?qū)崝?shù)這類數(shù)值型數(shù)據(jù)時,輸入數(shù)據(jù)之間必須用空格、回車符、制表符等間隔符隔開,間隔符個數(shù)不限。scanf的格式控制字符串也可以使用其他非空白字符,如本題中的逗號,但在輸入時必須輸入這些字符,以保證匹配,所以逗號必須輸入。故本題答案為D選項。

3.A在語句“for(;++a&&--b;)”中,for循環(huán)的表達式1和表達式3為缺省項。首先判斷條件表達式“b”。當(dāng)“a=-2,b=2”時,第1次執(zhí)行“++a”和“--b”,條件表達式為真,循環(huán)條件成立。第2次執(zhí)行“++a”為0,由于運算符,當(dāng)?shù)?個條件為假時,不執(zhí)行第2個條件,因此“b=1”,發(fā)生短路,“--b”不再執(zhí)行。因此輸出的最終值為0,1。故本題答案為A選項。

4.B

5.B由題中while(*x==*y*x!=\\n)可知此函數(shù)是統(tǒng)計x和y所指向的字符串中最前面的聯(lián)系相同的字符的個數(shù)。

6.C此題是考查fprintf和fscanf,其中fprintf是向文件輸出,文件為da2.dat文件,fscanf是向文件輸入,所以根據(jù)程序循環(huán)寫入和寫出.可知答案為C。

7.C在程序設(shè)計中,算法執(zhí)行效率與數(shù)據(jù)的存儲結(jié)構(gòu)密切相關(guān)。算法的空間復(fù)雜度是指算法執(zhí)行過程中所需存儲空間。

8.B數(shù)組1標(biāo)從0開始,A選項中所賦值的個數(shù)超過了數(shù)組的長度;C選項中定義a為字符型變量,而不是數(shù)組,賦值錯誤;D選項中,整型數(shù)組不能賦字符串。

9.C

10.C

11.C

12.C解析:計算機語言分為低級語言和高級語言,C語言屬于高級語言,但并非比其他語言高級,選項A)錯誤;除了機器語言外,其他各種語言都必須編譯成能被計算機識別的機器代碼才能執(zhí)行,選項B)錯誤;C語言出現(xiàn)于1972年至1973年,并不是出現(xiàn)最晚的語言,選項D)錯誤。

13.*(t+4)*(t+4)解析:本題定義了指針變量t,并用數(shù)組s的首地址給它賦初值。t+4代表數(shù)組第6個元素的地址,*(t+4)是取得該地址中的值即29,而此時并沒有移動指針t。

14.xX*X+1或1+x*xx\r\nX*X+1或1+x*x解析:題目中要求從x=0開始將f(x)的值累加起來,直到x=10。在SunFun()函數(shù)中用了一個for循環(huán),每循環(huán)一次將f(x)累加到s中,所以在本題的第一個空格處我們應(yīng)該填x,,然后x+1,共循環(huán)10次。F()函數(shù)的功能應(yīng)該是求數(shù)學(xué)表達式f(x)得值,所以其返回值應(yīng)該為x*x+1。

15.棧棧解析:棧和隊列都是—種特殊的操作受限的線性表,只允許在端點處進行插入和刪除。二者的區(qū)別是:棧只允許在表的—端進行插入或刪除操作,是—種“先進后出”的線性表;而隊列只允許在表的—端進行插入操作,在另—端進行刪除操作,是—種“先進先出”的線性表。

16.findbigfindbig解析:本題首先定義了一個指向函數(shù)的指針變量f,如果希望讓它指向某個函數(shù),只需把函數(shù)名賦給該指針變量即可。所以本題的空白處應(yīng)該填入函數(shù)名findbig。

17.5555解析:本題考查的重點是對宏定義的理解。#define指令定義一個標(biāo)識符和一個串,編譯程序在對C源程序處理時.發(fā)現(xiàn)該標(biāo)識符都用該串替換,因此,在語句k=N*N*5將替換成k=M+M*M+M*5后,M被替換成5,從而k=5+5*5+5*5=55。

18.77解析:本題考查基本賦值運算符和賦值表達式。c=(b-=a-5))等價于c=b-(a-5)b=7。c%3=1,a=(c%3)+a=8)=9,但c的值在第二條語句只能夠并沒有被改變,因此c的值還是7。

19.3131解析:設(shè)隊列容量為m,如果:rear>front,則隊列中元素個數(shù)為rear-front;如果rear<front,則隊列中元素個數(shù)為m+(rear-front)。本題rear<front,則m=32+(2-3)=31。

20.55解析:該程序考查do-while循環(huán)。循環(huán)共進行兩次。第一次循環(huán)b=3,a=4;第二次循環(huán)b=1,a=5。輸出a的值為5。

21.1-41-4解析:題目中首先讓x=5,然后進入do-while循環(huán)體,輸出x-4的值1,此時x為1,表達式!(--x)的值為!(0)為真(此時x變?yōu)?),所以再次執(zhí)行循環(huán)體,輸出x-4的值-4,此時x為-4,表達式!(--x)的值為!(—5)為假,退出循環(huán)。故輸出結(jié)果是1-4。

22.88解析:fabs函數(shù)功能是求x的絕對值,計算結(jié)果為double型。pow功能是計算x的y次方的值,計算結(jié)果同樣為double型。所以本題表達式相當(dāng)于2.0的3.0次方,結(jié)果為8.000000。

23.參照完整性參照完整性

24.floatfloat解析:在此表達式中x是float類型的變量,經(jīng)過開方所得到的結(jié)果仍是float類型,再和2.8進行運算時,應(yīng)該先將2.8轉(zhuǎn)換成float類型再運算,最后結(jié)果仍是float型。

25.

解析:該程序功能是計算并輸出多項式值。根據(jù)題干中給出的數(shù)列,首先推出每一項的表達式,然后再對多項式進行累加求和。

26.intfun(char*str){intin=0fg=1;char*p=str;while(*p){n++;P++;}for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else{fg=0;break;}returnfg;}intfun(char*str)\r\n{\r\ninti,n=0,fg=1;\r\nchar*p=str;\r\nwhile(*p)\r\n{\r\nn++;\r\nP++;\r\n}\r\nfor(i=0;i<n/2;i++)\r\nif(str[i]==str[n-1-i]);\r\nelse\r\n{\r\nfg=0;\r\nbreak;\r\n}\r\nreturnfg;\r\n}解析:本題的設(shè)計思路是:(1)定義一個int型變量flag用做返回值,定義一個字符指針代替原串遍歷,求字符串的長度;(2)利用循環(huán)及if條件語句判斷字符串首尾對應(yīng)字符是否相等;(3)如果為回文數(shù),修改flag的值;(4)返回flag

27.STRECfun(STREC*achar*b){inti;STRECstr={"\0"-1};/*若沒找到摜定的學(xué)號在結(jié)構(gòu)體變量中給學(xué)號置空串給成績置-1*/for(i=0;i<N;i++)if(strcmp(a[i].numb)==0)/*找到指定學(xué)號的學(xué)生數(shù)據(jù)*/str=a[i];returnstr;/*返回學(xué)生記錄*/}STRECfun(STREC*a,char*b)\r\n{\r\ninti;\r\nSTRECstr={'\\0',-1};/*若沒找到摜定的學(xué)號,在結(jié)構(gòu)體變量中給學(xué)號置空串,給成績置-1*/\r\nfor(i=0;i<N;i++)\r\nif(strcmp(a[i].num,b)==0)/*找到指定學(xué)號的學(xué)生數(shù)據(jù)*/\r\nstr=a[i];\r\nreturnstr;/*返回學(xué)生記錄*/\r\n}解析:本程序一開始先使結(jié)構(gòu)體變量str的學(xué)號為空串,成績?yōu)?1。題中循環(huán)體的功能是搜索所有學(xué)生的學(xué)號并判斷是否有學(xué)號與b所指字符串相同的(即找到),若找到則給str重新賦值(str=a[i]),若沒找到則str成員的值還是原有值(即未找到時學(xué)號返回空串,成績返回-1)。

題中已經(jīng)給出字符串的比較只能用strcmp()函數(shù),而不能直接進行比較,我們在改錯題分析中已經(jīng)詳細(xì)講述了字符串操作函數(shù),如strcmp(),strcat(),strcpy()和strlen()等,希望學(xué)習(xí)者能熟練掌握。

28.floatfun(float*aintn){floatav=0.0;inti;for(i=0;iav=av+a[i];/*求分?jǐn)?shù)的總和*/return(av/n);/*返回平均值*/}floatfun(float*a,intn)\r\n{\r\nfloatav=0.0;\r\ninti;\r\nfor(i=0;iav=av+a[i];/*求分?jǐn)?shù)的總和*/\r\nreturn(av/n);/*返回平均值*/\r\n}解析:我們先按數(shù)學(xué)的思路來計算平均分:總分除以人數(shù)即可得到平均分,其實用C語言的指針來實現(xiàn)該問題,也不難。當(dāng)指針變量指向一個數(shù)組時,用該指針變量引用數(shù)組元素時,引用方式與數(shù)組的引用方式相同。如本題中a指向了score,所以通過a引用score中的元素時可以用下標(biāo)法,也可以用指針運算法,a[i]和*(a+i)具有相同的作用。下標(biāo)運算實際上是從當(dāng)前地址開始往后取出地址中的第幾個元素,當(dāng)前地址下標(biāo)為0。例如:若有intcc[10],*P=cc+5;,即p指向了cc的第5號元素,則p[0]的作用是取出從當(dāng)前地址(即p所指地址)開始的第0號元素,它與cc[5]相同:p[3]的作用是取出從當(dāng)前地址(即p所指地址)開始往后的第3號元素,它與cc[8]相同:p[-2]的作用是取出從當(dāng)前地址開始往前的第2號元素,它與cc[3]相同,但不提倡使用“負(fù)”的F標(biāo)。

29.voidfun(int*wintpintn){intiJt;for(i=p;i<=n-i;i++){t=w[n-1];for(j=n-2;j>=0;j--)w[j+1]=w[j];w[0]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,J,t;\r\nfor(i=p;i<=n-i;i++)\r\n{\r\nt=w[n-1];\r\nfor(j=n-2;j>=0;j--)\r\nw[j+1]=w[j];\r\nw[0]=t;\r\n}\r\n}

30.voidfun(char*aintninthinte){intij=0for(i=h;i<n-e;i++)/*第一個字母和最后一個字母之間的字符全不刪除*/a[j++]=a[i];a[j]='\0;/*在字符串最后加上結(jié)束標(biāo)記*/}voidfun(char*a,intn,inth,inte)\r\n{\r\ninti,j=0\r\nfor(i=h;i<n-e;i++)/*第一個字母和最后一個字母之間的字符全不刪除*/\r\na[j++]=a[i];\r\na[j]='\\0;/*在字符串最后加上結(jié)束標(biāo)記*/\r\n}解析:注意循環(huán)變量i的初值(h)和終止值(n-e),由于h和e分別是a中的前導(dǎo)*和尾部*的個數(shù),n是字符串的長度,所以從a[h])到a[n-e-1]之間的所有字符都要留下,而其他字符均刪除。刪除操作(即留下相應(yīng)字符)現(xiàn)己由循環(huán)完成。

本題技巧部分:

voidfun(char*a,intn,inth,inte)

{a[n-e]='\\0;

strcpy(a,a+h);}

另外,請注意,a(n-e]的作用是使最后一個字母后出現(xiàn)字符串結(jié)束符。木程序采用了strcpy()庫函數(shù)。

31.voidfun(char*ss){inti;for(i=0;ss[i]!='\0'i++)/*將ss所指字符串中所有下標(biāo)為偶數(shù)位置的字母轉(zhuǎn)換為小寫*/if(i%2==0&&ss[i]>='A'&&ss[i]<='z')ss[i]=ss[i]+32;}voidfun(char*ss)\r\n{\r\ninti;\r\nfor(i=0;ss[i]!='\\0'i++)/*將ss所指字符串中所有下標(biāo)為偶數(shù)位置的字母轉(zhuǎn)換為小寫*/\r\nif(i%2==0&&ss[i]>='A'&&ss[i]<='z')\r\nss[i]=ss[i]+32;\r\n}解析:從C語言的學(xué)習(xí)中我們知道,只要將小寫字母減去32則轉(zhuǎn)成大寫字母,將大寫字母加上32則轉(zhuǎn)成小寫字母。該程序是用if語句實現(xiàn)該功能轉(zhuǎn)化的。

32.doublefun(STREC*h){doubleav=0.0;STREC*p-h->next;/*p直接指向“頭結(jié)點”的下一個結(jié)點即第—個成績*/while(p!=NULL){aY=ay+p->s;/*求總分?jǐn)?shù)*/p=p->next;}returnay/N;/*返回平均值*/}doublefun(STREC*h)\r\n{\r\ndoubleav=0.0;\r\nSTREC*p-h->next;/*p直接指向“頭結(jié)點”的下一個結(jié)點,即第—個成績*/\r\nwhile(p!=NULL)\r\n{aY=ay+p->s;/*求總分?jǐn)?shù)*/\r\np=p->next;\r\n}\r\nreturnay/N;/*返回平均值*/\r\n}解析:本題是關(guān)于鏈表問題,所以,一定要弄清表示出使指針變量p指向下一個“結(jié)點”的方法及表示結(jié)束的判斷,本題中,因為“頭結(jié)點”中沒有數(shù)值,所以程序中讓p直接指向“頭結(jié)點”的下一個結(jié)點,使用語句STREC*p=h->next,當(dāng)然也可將p一開始就指向“頭結(jié)點”。

33.longfun(intn){inti;longs=0;for(i=2;i<=n-1;i++)/*從2~n-1中找n的所有因子*/if(n%i==0)s+=i*i;/*將所有因子求平方加*/returns;/將平方和返回*/}longfun(intn)\r\n{\r\ninti;\r\nlongs=0;\r\nfor(i=2;i<=n-1;i++)/*從2~n-1中找n的所有因子*/\r\nif(n%i==0)\r\ns+=i*i;/*將所有因子求平方加*/\r\nreturns;/將平方和返回*/\r\n}解析:本題的解題思路是用n逐個去除以2到n-1之間的所有數(shù),如果n能被除盡,則把所得到的一個因子的平方累加到s中去。

34.voidfun(inta[3][3]intb[3][3]){intij;for(i=0;i<3;i++)for(j=0;j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的轉(zhuǎn)置存放在矩陣b中*/}voidfun(inta[3][3],intb[3][3])\r\n{\r\ninti,j;\r\nfor(i=0;i<3;i++)\r\nfor(j=0;j<3;j++)\r\nb[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的轉(zhuǎn)置,存放在矩陣b中*/\r\n}解析:在《線性代數(shù)》里面有矩陣轉(zhuǎn)置的概念,行列數(shù)相等的二維數(shù)組的轉(zhuǎn)置就是行列互換。即轉(zhuǎn)置后的第i行第j列正好對應(yīng)原矩陣的第j行第i列。

若要將矩陣a轉(zhuǎn)置后還存入a中可用程序:

inti,j,t;

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

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

{t=a[i][j];a[i][j]=a[j][i];a[j][ii=t;}

注意第2個循環(huán)的初值。

若要將矩陣a轉(zhuǎn)置后存入c中:

inti,j;

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

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

c[i][j]=a[j][i];

注意數(shù)組c和a的下標(biāo)。

35.A解析:本題考查'%'運算符的使用。運算符'%'要求兩個運算對象都為整型,其結(jié)果是整數(shù)除法的余數(shù)。本題中表達式ao%=(b%2)等價于a=a%o(b%2)=5%(7%2)=5%1=0。

36.D

37.C標(biāo)識符的命名可以由字母、數(shù)字或下劃線組成,并且第1個字符必須為字母或下劃線,另外用戶標(biāo)識符不能使用關(guān)鍵字。選項A中的Void可以定義為用戶標(biāo)識符,因為C語言對大小寫敏感,Void與關(guān)鍵字void屬于不同的標(biāo)識符;選項B中的scanf是庫函數(shù)名,屬于預(yù)定義標(biāo)識符,它也可以作為用戶標(biāo)識符使用,不過通常不建議這么使用;選項C中的int屬于關(guān)鍵字,錯誤;選項D符合標(biāo)識符的命名規(guī)則,也不屬于關(guān)鍵字,可以作為標(biāo)識符使用。本題答案為C選項。2021-2022學(xué)年廣東省珠海市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)學(xué)校:________班級:________姓名:________考號:________

一、單選題(12題)1.假設(shè)以行序為主序存儲二維數(shù)組array[100][100],設(shè)每個數(shù)據(jù)元素占2個存儲單元,基地址為10,下標(biāo)從0開始,則元素array[5][5]的地址為()。

A.808B.818C.1010D.1020

2.若變量已正確定義為int型,要通過語句“scanf(“%d,%d,%d”,&a,&b,&c);”將a賦值為1、將b賦值為2、將c賦值為3,以下輸入形式中錯誤的是(注:□代表一個空格符)()。

A.1,2,3<Enter>

B.□□□1,2,3<Enter>

C.1,□□□2,□□□3<Enter>

D.1□2□3<Enter>

3.有以下程序:#include<stdio.h>main(){inta=-2,b=2;for(;++a&&--b;)printf(“%d,%d\n”,a,b);}程序運行后的輸出結(jié)果是()。

A.0,1B.0,0C.1,-1D.0,2

4.一個有7個頂點的完全三部圖,至少有存在幾條邊()

A.10B.11C.15D.16

5.有以下函數(shù)intfun(char*X,char*y){intn=0;while((*x===*y)*x!=\O){x++;y++;n++;}returnn;}函數(shù)的功能是()。A.查找X和y所指字符串中是否有\(zhòng)o

B.統(tǒng)計x和Y所指字符串中最前面連續(xù)相同的字符個數(shù)

C.將Y所指字符串賦給X所指定存儲空間

D.統(tǒng)計X和Y所指字符串中相同的字符個數(shù)

6.有以下程序:#include<stdiO.h>main(){FILE*fp;intk,n,i,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);fclose(fp);fp(i=0;i<3;i++)fscanf(fp,"%d%d",&k,&n);fclose(fp);printf("%d\n,%d\n,k,n);}程序運行后的輸出結(jié)果是()。A.1,2B.3,4C.5,6D.123,456

7.下列敘述中正確的是()。

A.算法的執(zhí)行效率與數(shù)據(jù)存儲結(jié)構(gòu)無關(guān)

B.算法的空間復(fù)雜度是指算法程序中指令(或語句)的條數(shù)

C.算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止

D.以上3種描述都不對

8.以下能正確定義一維數(shù)組的選項是()。

A.inta[5]=(0,1,2,3,4,5);

B.chara[]={0,1,2,3,4,5);

C.chara={'A','B','C'};

D.inta[5]="0123";

9.對包含N個元素的散列表進行檢索,平均檢索長度________

A.為o(log2N)B.為o(N)C.不直接依賴于ND.上述三者都不是

10.下面程序的運行結(jié)果是______。#include<stdio.h>#include<string.h>fun(char*w,intn){chart,*s1,*s2;s1=w;s2=w+n-1;while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}}main(){char*p;p="1234567";fun(p,strlen(p));puts(p);}

A.7654321B.1714171C.1711717D.7177171

11.設(shè)棧S的初始狀態(tài)為空,6個元素入棧的順序為e1,e2,e3,e4,e5和e6。若出棧的順序是e2,e4,e3,e6,e5,el,則棧s的容量至少應(yīng)該是()。

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

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

A.C語言比其他語言高級

B.C語言可以不用編譯就被計算機識別并執(zhí)行

C.C語言以接近英語國家的自然語言和數(shù)學(xué)語言作為語言的表達形式

D.C語言出現(xiàn)最晚,具有其他語言的一切優(yōu)點

二、2.填空題(12題)13.若有如下定義:

int[]={11,24,56,19,29,39),*t=s;

則不移動指針t,且通過指針t引用數(shù)組中值為29的元素的表達式是【】。

14.以下程序通過函數(shù)SunFun求。這里f(x)=x2+l,由F函數(shù)實現(xiàn)。請?zhí)羁铡?/p>

main()

{

printf("Thesum=%d\n",SunFun(10));

}

SunFun(intn)

{

intx,s=0;

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

S+=F(______);

returns;

}

F(intx)

{

return(______);

}

15.按“先進后出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是[]。

16.設(shè)函數(shù)findbig已定義為求3個數(shù)中的最大值。以下程序?qū)⒗煤瘮?shù)指針調(diào)用findbig函數(shù)。請?zhí)羁铡?/p>

main()

{

intfindbig(int,int,int);

int(*f)(),x,yz,z,big;

f=【】;

scanf("%d%d%d",&X,&y,&z);

big=(*f)(x,y,z);

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

}

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

#include<stdio.h>

#defineM5

#defineNM+M

main()

{intk;

k=N*N*5;printf(”%d\n",k);

}

18.若有定義:inta=6,b=8,c=14;接著順序執(zhí)行下列語句后,變量c中的值是()。c=(b-=(a-5));a=(c%3)+(a=8);

19.在一個容量為32的循環(huán)隊列中,若頭指針front=3,尾指針rear=2,則該循環(huán)隊列中共有______個元素。

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

#include<stdio.h>

main()

{inta=1,b=7;

do{

b=b/2;a+=b;

}while(b>1);

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

}

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

intx=5;

do{printf("%d",x-=4);

}while(!(--x));

22.若x和y都是double型變量,且x的初值為3.0,y的初值為2.0,則表達式pow(y,fabs(x))的值為【】。

23.關(guān)系模型的完整性規(guī)則是對關(guān)系的某種約束條件,包括實體完整性、______和自定義完整性。

24.表達式pow(2.8,sqrt(float(x)))值的數(shù)據(jù)類型為______型。

三、3.程序設(shè)計題(10題)25.編寫函數(shù)fun,它的功能是計算下列級數(shù)和,和值由函數(shù)值返回。

例如,當(dāng)n=10,x=0.3時,函數(shù)值為1.349859。

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

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

26.請編寫函數(shù)fun(),它的功能是:判斷字符串是否是回文?若是,函數(shù)返回1,主函數(shù)中輸出:YES,否則返回0,主函數(shù)輸出NO?;匚氖侵疙樧x和倒讀都一樣的字符串。

例如,字符串LEVEL是回文,而字符串12312就不是回文。

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

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

[試題源程序]

#include<stdio.h>

#defineN80

intfun(char*str)

{

}

main()

{

chars[N];

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

printf("\n\n");puts(s);

if(fun(s))

printf("YES\n");

else

printf("NO\n");

NONO();

}

NONO()

{

/*請在此函數(shù)內(nèi)打開文件,輸入測試數(shù)據(jù),調(diào)用fun函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/

FILE*rf,*wf;

inti;chars[N];

rf=fopen("K:\\k06\\24010001\\in.dat","r");

wf=fopen("K:\\k06\\24010001\\out.dat","w");

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

fscanf(rf,"%s",s);

if(fun(S))

fprintf(wf,"%sYES\n",s);

else

fprintf(wf,"%sNO\n",s);

}

fclose(rf);

fclose(wf);

}

27.學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun(),它的功能是:函數(shù)返回指定學(xué)號的學(xué)生數(shù)據(jù),指定的序號在主函數(shù)中輸入。若沒找到指定的學(xué)號,在結(jié)構(gòu)體變量中給學(xué)號置空串,給成績置-1,作為函數(shù)值返回(用于字符串比較的函數(shù)是strcmp)。

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

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

試題程序:

#include<stdio.h>

#inctude<stdlib.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

STRECfun(STREC*a,char*b)

{

}

main()

{

STRECs[N]={{"GA005",85},{"GA003",76},

{"GA002",69},{"GA004",85},{"GA001",91},

{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA014",91},{"GA011",77},{"GA017",64},

{"GA018",64},{"GA016",72}};

STRECh;

charre[10];

inti,n;

FILE*out;

printf("Theoriginaldata:\n");

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

{if(i%4==0)

printf("In");

/*每行輸出4個學(xué)生記錄*/

printf("%s%3d",s[i]num,s[i]s);

}

printf("\n\nEnterthenumber:");

gets(m);

h=fun(s,m);

printf("Thedata:");

printf("\n%s%4d\n",h.num,h.s);

printf("\n");

out=fopen("out80.dat","w");

h=fun(s,"GA013");

fprintf(out,"%s%4d\n",h.num,h.s);

fclose(out);

}

28.請編寫函數(shù)fun(),該函數(shù)的功能是:計算n門課程的平均分,計算結(jié)果作為函數(shù)值返回。

例如x有5門課程的成績是90.5,72,80,61.5,55,則函數(shù)的值為71.80。

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

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

試題程序:

#include<stdio.h>

floatfun(float*a,intn)

{

}

main()

{

floatscore[30]=(90.5,72,80,61.5,55},

aver;

aver=fun(score,5);

printf("\nAveragescoreis:%5.2f

\n",aver);

}

29.請編寫函數(shù)fun(),該函數(shù)的功能是:移動一維數(shù)組中的內(nèi)容,若數(shù)組中有n個整數(shù),要求把下標(biāo)從p~n-1(p<n-1)的數(shù)組元素平移到數(shù)組的前面。

例如,一維數(shù)組中的原始內(nèi)容為1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,P的值為6。移動后,一維數(shù)組的內(nèi)容應(yīng)為7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。

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

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

[試題源程序]

#inciude<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

inta[N]=(i,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

inti,P,n=15;

printf("Theoriginaldata:\n");

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

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

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,P,n);

printf("\nThedataaftermoving:\n");

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

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

printf("\n\n");

}

30.假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun(),它的功能是:只刪除字符串前導(dǎo)和尾部的*號,串中字母之間的*號都不刪除。形參n給出了字符串的K度,形參h給出了字符串中前導(dǎo)*號的個數(shù),形參e給出了字符山中最后*號的個數(shù)。在編寫函數(shù)時,不得使用c語言提供的字符串函數(shù)。

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

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(char*a;intn,inth,inte)

{

}

main()

{

chars[81],*t,*f;

intm=0,tn=0,fn=0;

printf("Enterastring:\n");

gets(s);

t=f=s;

while(*t)

{t++;m++;}/*m為字符串的長度*/

t--;/*指針t指身字符串尾部*/

while(*t=='*')

{t--;tn++;}

/*指針t指向最后一個字母,tn統(tǒng)計尾部'*'的個數(shù)*/

while(*f=='*')

{f++;fn++;}

/*指針f指向第一個字母,tn統(tǒng)計導(dǎo)'*'的個數(shù)*/

fun(s,m,fn,tn);

printf("Thestringafterdeleted:\n");

puts(s);

}

31.請編寫一個函數(shù)fun(),它的功能是:將ss所指字符串中所有下標(biāo)為偶數(shù)位置的字母轉(zhuǎn)換為小寫(若該位置上不是字母,則不轉(zhuǎn)換)。

例如,若輸入ABC4efG,則應(yīng)輸出aBc4efg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*SS)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80

characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

\%s",tt);

fun(tt);

printf("\nbecomes\n\%S\n",tt);

}

32.N名學(xué)生的成績己在主函數(shù)中放入一個帶頭節(jié)點的鏈表結(jié)構(gòu)中,h指向鏈表的頭節(jié)點。請編寫函數(shù)fun(),它的功能是:求出平均分,由函數(shù)值返回。

例如,若學(xué)生的成績是85,76,69,91,72,64,87,則平均分應(yīng)當(dāng)是78.625。

注童:部分源程序給出如下.

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

{

}

STREC*creat(double*s)/*創(chuàng)建鏈表*/

{

STREC*h,*p,*q;

inti=0;

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

p->s=0;

while(i<N)

{q=(STREC*)malloc(sizeof(STREC));

q->s=sIi];i++;p->next=q;p=q;

}

p->next=0;

returnh;

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

{printf("->%4.if",p->s);

p=p->next;/*輸出各成績*/

}

while(p!=0)

}

main()

{

doubles[N]={85,76,69,85,91,72,64,

87},ave;

STREC*h;

h=creat(s);

outlist(h);

ave=fun(h);

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

}

33.請編寫一個函數(shù)fun(),它的功能是計算并輸出給定整數(shù)n的所有因子(不包括1與自身)的平方和(規(guī)定n的值不大于100)。

例如:主函數(shù)從鍵盤給輸入n的值為56,則輸出為sum=1113。

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

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

試題程序:

#include<stdio.h>

longfun(intn)

{

}

main()

{

intn;

longsum;

printf("Inputn:");

scanf("%d",&n);

sum=fun(n);

printf("sum=%ld\n",sum);

}

34.請編寫函數(shù)fun(),該函數(shù)的功能是:實現(xiàn)B=A+A',即把矩陣A加上A的轉(zhuǎn)置,存放在矩陣B中。計算結(jié)果在main()函數(shù)中輸出。

例如,輸入下面矩陣:

123

456

789

其轉(zhuǎn)置矩陣為:

147

258

369

則程序輸出:

2610

61014

101418

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

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

試題程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},

t[3][3];

inti,j;

clrscr();

fun(a,t);

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

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

printf("%7d",t[i][j]);

printf("\n");

}

}

四、單選題(0題)35.若有定義inta=5,b=7;,則表達式a%=(b%2)運算后,a的值為()。

A.0B.1C.11D.3

五、單選題(0題)36.如有inta=11;則表達式(a/1)的值是()。

A.0B.3C.4D.11

六、單選題(0題)37.以下不能定義為用戶標(biāo)識符的是()。

A.VoidB.scanfC.intD._3com_

參考答案

1.C

2.D在輸入整數(shù)或?qū)崝?shù)這類數(shù)值型數(shù)據(jù)時,輸入數(shù)據(jù)之間必須用空格、回車符、制表符等間隔符隔開,間隔符個數(shù)不限。scanf的格式控制字符串也可以使用其他非空白字符,如本題中的逗號,但在輸入時必須輸入這些字符,以保證匹配,所以逗號必須輸入。故本題答案為D選項。

3.A在語句“for(;++a&&--b;)”中,for循環(huán)的表達式1和表達式3為缺省項。首先判斷條件表達式“b”。當(dāng)“a=-2,b=2”時,第1次執(zhí)行“++a”和“--b”,條件表達式為真,循環(huán)條件成立。第2次執(zhí)行“++a”為0,由于運算符,當(dāng)?shù)?個條件為假時,不執(zhí)行第2個條件,因此“b=1”,發(fā)生短路,“--b”不再執(zhí)行。因此輸出的最終值為0,1。故本題答案為A選項。

4.B

5.B由題中while(*x==*y*x!=\\n)可知此函數(shù)是統(tǒng)計x和y所指向的字符串中最前面的聯(lián)系相同的字符的個數(shù)。

6.C此題是考查fprintf和fscanf,其中fprintf是向文件輸出,文件為da2.dat文件,fscanf是向文件輸入,所以根據(jù)程序循環(huán)寫入和寫出.可知答案為C。

7.C在程序設(shè)計中,算法執(zhí)行效率與數(shù)據(jù)的存儲結(jié)構(gòu)密切相關(guān)。算法的空間復(fù)雜度是指算法執(zhí)行過程中所需存儲空間。

8.B數(shù)組1標(biāo)從0開始,A選項中所賦值的個數(shù)超過了數(shù)組的長度;C選項中定義a為字符型變量,而不是數(shù)組,賦值錯誤;D選項中,整型數(shù)組不能賦字符串。

9.C

10.C

11.C

12.C解析:計算機語言分為低級語言和高級語言,C語言屬于高級語言,但并非比其他語言高級,選項A)錯誤;除了機器語言外,其他各種語言都必須編譯成能被計算機識別的機器代碼才能執(zhí)行,選項B)錯誤;C語言出現(xiàn)于1972年至1973年,并不是出現(xiàn)最晚的語言,選項D)錯誤。

13.*(t+4)*(t+4)解析:本題定義了指針變量t,并用數(shù)組s的首地址給它賦初值。t+4代表數(shù)組第6個元素的地址,*(t+4)是取得該地址中的值即29,而此時并沒有移動指針t。

14.xX*X+1或1+x*xx\r\nX*X+1或1+x*x解析:題目中要求從x=0開始將f(x)的值累加起來,直到x=10。在SunFun()函數(shù)中用了一個for循環(huán),每循環(huán)一次將f(x)累加到s中,所以在本題的第一個空格處我們應(yīng)該填x,,然后x+1,共循環(huán)10次。F()函數(shù)的功能應(yīng)該是求數(shù)學(xué)表達式f(x)得值,所以其返回值應(yīng)該為x*x+1。

15.棧棧解析:棧和隊列都是—種特殊的操作受限的線性表,只允許在端點處進行插入和刪除。二者的區(qū)別是:棧只允許在表的—端進行插入或刪除操作,是—種“先進后出”的線性表;而隊列只允許在表的—端進行插入操作,在另—端進行刪除操作,是—種“先進先出”的線性表。

16.findbigfindbig解析:本題首先定義了一個指向函數(shù)的指針變量f,如果希望讓它指向某個函數(shù),只需把函數(shù)名賦給該指針變量即可。所以本題的空白處應(yīng)該填入函數(shù)名findbig。

17.5555解析:本題考查的重點是對宏定義的理解。#define指令定義一個標(biāo)識符和一個串,編譯程序在對C源程序處理時.發(fā)現(xiàn)該標(biāo)識符都用該串替換,因此,在語句k=N*N*5將替換成k=M+M*M+M*5后,M被替換成5,從而k=5+5*5+5*5=55。

18.77解析:本題考查基本賦值運算符和賦值表達式。c=(b-=a-5))等價于c=b-(a-5)b=7。c%3=1,a=(c%3)+a=8)=9,但c的值在第二條語句只能夠并沒有被改變,因此c的值還是7。

19.3131解析:設(shè)隊列容量為m,如果:rear>front,則隊列中元素個數(shù)為rear-front;如果rear<front,則隊列中元素個數(shù)為m+(rear-front)。本題rear<front,則m=32+(2-3)=31。

20.55解析:該程序考查do-while循環(huán)。循環(huán)共進行兩次。第一次循環(huán)b=3,a=4;第二次循環(huán)b=1,a=5。輸出a的值為5。

21.1-41-4解析:題目中首先讓x=5,然后進入do-while循環(huán)體,輸出x-4的值1,此時x為1,表達式!(--x)的值為!(0)為真(此時x變?yōu)?),所以再次執(zhí)行循環(huán)體,輸出x-4的值-4,此時x為-4,表達式!(--x)的值為!(—5)為假,退出循環(huán)。故輸出結(jié)果是1-4。

22.88解析:fabs函數(shù)功能是求x的絕對值,計算結(jié)果為double型。pow功能是計算x的y次方的值,計算結(jié)果同樣為double型。所以本題表達式相當(dāng)于2.0的3.0次方,結(jié)果為8.000000。

23.參照完整性參照完整性

24.floatfloat解析:在此表達式中x是float類型的變量,經(jīng)過開方所得到的結(jié)果仍是float類型,再和2.8進行運算時,應(yīng)該先將2.8轉(zhuǎn)換成float類型再運算,最后結(jié)果仍是float型。

25.

解析:該程序功能是計算并輸出多項式值。根據(jù)題干中給出的數(shù)列,首先推出每一項的表達式,然后再對多項式進行累加求和。

26.intfun(char*str){intin=0fg=1;char*p=str;while(*p){n++;P++;}for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else{fg=0;break;}returnfg;}intfun(char*str)\r\n{\r\ninti,n=0,fg=1;\r\nchar*p=str;\r\nwhile(*p)\r\n{\r\nn++;\r\nP++;\r\n}\r\nfor(i=0;i<n/2;i++)\r\nif(str[i]==str[n-1-i]);\r\nelse\r\n{\r\nfg=0;\r\nbreak;\r\n}\r\nreturnfg;\r\n}解析:本題的設(shè)計思路是:(1)定義一個int型變量flag用做返回值,定義一個字符指針代替原串遍歷,求字符串的長度;(2)利用循

溫馨提示

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

最新文檔

評論

0/150

提交評論