2021-2022學(xué)年安徽省馬鞍山市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第1頁(yè)
2021-2022學(xué)年安徽省馬鞍山市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第2頁(yè)
2021-2022學(xué)年安徽省馬鞍山市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第3頁(yè)
2021-2022學(xué)年安徽省馬鞍山市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第4頁(yè)
2021-2022學(xué)年安徽省馬鞍山市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

2021-2022學(xué)年安徽省馬鞍山市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)學(xué)校:________班級(jí):________姓名:________考號(hào):________

一、單選題(12題)1.以下有關(guān)宏替換的敘述不正確的是()。

A.雙引號(hào)中出現(xiàn)的宏名不替換B.使用宏定義可以嵌套C.宏定義儀儀是符號(hào)替換D.宏名必須用大寫(xiě)字母表示

2.

有以下程序

#include<stdio.h>

#include<string.h>

typedefstrlIct{charname[9];charsex;floatscore[2];}STU;

STUf(STUa)

{STUb={"Zhao",m,85.0,90.0);inti;

strcpy(aname,b.name);

sex:b.sex;

for(i=0;i<2;i++)a.score[i]=b.score[i];

returna;

}

main

{STUc="Qian",f,95.0,92.0},d;

d=f(c).printf("%s,%c,%2.0f,%2.0f",d.Name,d.sex,d.score[0],d.score[1]);

}

程序的運(yùn)行結(jié)果是()。

A.Qian,f,95,92

B.Qian,m,85,90

C.Zhao,m,85,90

D.Zhao,f,95,92

3.若有定義inta=12,n=5,則表達(dá)式a%=(n%2)運(yùn)算后,a的值()。

A.0B.1C.12D.6

4.

5.數(shù)據(jù)表A中有10000個(gè)元素,如果僅要求求出其中最大的10個(gè)元素,則采用()最節(jié)省時(shí)間。

A.堆排序B.希爾排序C.快速排序D.希爾排序

6.有以下程序:#include<stdio.h>main(){inta=7;while(a--);print[("%d\n",a);}程序運(yùn)行后的輸出結(jié)果是()。A.-1B.0C.1D.7

7.使用二分查找算法在一個(gè)有序序列中查找一個(gè)元素的時(shí)間復(fù)雜度為()

A.O(N)B.O(logN)C.O(N*N)D.O(N*logN)

8.有以下程序:main{intnum[4][4]={1,2,3,4},{5,6,7,8},{9,10,11,12,},{13,14,15,16}},i,j;for(i=0;i<4;i++){for(j=0;j<i;j++)printf("%4c",);for(j=________;J<4;j++)printf("%4d",num[i][j]);printf("\n");}}若要按以下形式輸出數(shù)組右上半三角1234678111216則在程序下劃線處應(yīng)填入的是()。A.i-1B.iC.i+1D.4一i

9.下列關(guān)于棧敘述正確的是A.棧頂元素最先能被刪除B.棧頂元素最后才能被刪除C.棧底元素永遠(yuǎn)不能被刪除D.上述三種說(shuō)法都不對(duì)

10.向堆中插入一個(gè)元素的時(shí)間復(fù)雜度為_(kāi)_______。

A.O(log2n)B.O(n)C.O(1)D.O(nlog2n)

11.有以下程序:int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main(){inta=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf("%d,%d,%d\n",*p,*q,*r);}程序運(yùn)行后輸出結(jié)果是______。

A.7,8,8B.7,8,7C.8,7,7D.8,7,8

12.下面不能正確表示a*b/(c*d)的表達(dá)式是()。

A.(a*b)/c*dB.a*b/(c*d)C.a/c/d*bD.a*b/c/d

二、2.填空題(12題)13.下列程序的輸出結(jié)果是【】。

voidfun(int*n)

{

while((*n)--);

printf("%d",++(*n));

}

main()

{inta=100;

fun(&a);

}

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

main()

{

charstr1[]="Howdoyoudo",*pl=str1;

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

intf("%s\n",p1);

15.在關(guān)系模型中,把數(shù)據(jù)看成一個(gè)二維表,每一個(gè)二維表稱為一個(gè)______。

16.已知字符'A'的ASCII碼值為65,以下語(yǔ)句的輸出結(jié)果是【】。

charch='B';

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

17.數(shù)據(jù)的物理結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式稱為數(shù)據(jù)的【】。

18.函數(shù)voidfun(float*sn,intn)的功能是:根據(jù)以下公式計(jì)算s,計(jì)算結(jié)果通過(guò)形參指針sn傳回;n通過(guò)形參傳入,n的值大于或等于0。請(qǐng)?zhí)羁铡?/p>

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;

}

【】=s;

}

19.執(zhí)行以下程序段后,s的值為【】。

staticcharch[]="600";

inta,s=0;

for(a=0;ch[a]>='0'&&ch[a]<='9';a++)

s=10*s+ch[a]-'0';

20.若有語(yǔ)句

inti=-19,j=i%4;

printf("%d\n",j),

則輸出的結(jié)果是______。

21.深度為5的滿二叉樹(shù)中,葉子結(jié)點(diǎn)的個(gè)數(shù)為_(kāi)_____。

22.軟件開(kāi)發(fā)環(huán)境是全面支持軟件開(kāi)發(fā)全過(guò)程的【】集合。

23.一棵二叉樹(shù)第六層(根結(jié)點(diǎn)為第一層)的結(jié)點(diǎn)數(shù)最多為_(kāi)_____個(gè)。

24.設(shè)有定義:FILE*fw;,請(qǐng)將以下打開(kāi)文件的語(yǔ)句補(bǔ)充完整,以便可以向文本文件readme.txt的最后續(xù)寫(xiě)內(nèi)容。

fw=fopen("readme.txt",【】);

三、3.程序設(shè)計(jì)題(10題)25.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫(xiě)函數(shù)fun(),它的功能是:把指定分?jǐn)?shù)范圍之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍之外的學(xué)生人數(shù)由函數(shù)值返回。

例如,輸入的分?jǐn)?shù)是80和89,則應(yīng)當(dāng)把分?jǐn)?shù)低于80和高于89的學(xué)生數(shù)據(jù)進(jìn)行輸出,不包含80分和89分的學(xué)生數(shù)據(jù)。主函數(shù)中把80放在low中,把89放在heigh中。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

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

{

}

main()

{

STRECs[N]={{“GA005”,55},{“GA003”,96},

{“GA002”,80},{“GA004”,68},{“GA001”,88},

{“GA007”,74},{“GA008”,85},{“GA006”,99},

{“GA015”,90},{“GA013”,53},{“GA012”,66},

{“GA014”,82},{“GA0ll”,73},{“GA017”,69},

{“GA018”,64},{“GA016”,86}};

STECh[N],tt;

FILE*out;

inti,j,n,low,heigh,t;

printf(“Enter2integernumberlow&heigh:”);

scanf(“%d%d”,&low,&heigh);

if(heigh<low)

{

t=heigh;

heigh=low;

low=t;

}

n=fun(S,h,low,heigh);

printf(“Thestudent'Sdataout%d--%d:\n”,low,heigh);

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

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

/*輸出指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄*/

printf(“\n”);

ut=fopen(“out23.dat”,“w”);

fprintf(out,“%d\n”,n);

n=fun(s,h,70,79);

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

/*分?jǐn)?shù)在70~79之外的學(xué)生記錄按分?jǐn)?shù)從低到高排列*/

for(j=i+l;i<n;j十+)

if(h[i].s>h[j].s)

{

tt=h[i];

h[i]=h[j];

h[j]=tt;

}

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

fprintf(out,“%4d\n”,h[i].s);

fprintf(out,“\n”);

fclose(out);

}

26.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫(xiě)函數(shù)fun(),該函數(shù)的功能是:把高于等于平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,低于平均分的學(xué)生數(shù)據(jù)放在c所指的數(shù)組中,高于等于平均分的學(xué)生人數(shù)通過(guò)形參n傳回,低于平均分的學(xué)生人數(shù)通過(guò)形參m傳回,平均分通過(guò)函數(shù)值返回。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubleS;

}STREC;

doublefun(STREC*a,STREC*b,STREC*C,int*n,int*m)

{

}

main()

{

STRECs[N]={{“GA05”,65},{“GA03”,86},

{“GA02”,76},{“GA04”,95},{“GA01”,93},

{“GA07”,78},{“GA08”,68},{“GA06”,88},

{“GA09”,60},{“GAll”,54},{“GAl2”,56},

{“GAl0”,98}};

STRECh[N],l[N],t;

FILE*out;

inti,j,m,n;

doubleave;

ave=fun(S,h,l,&n,&m);

printf("The%dstudentdatawhichishigherthan%7.3f:\n",n,ave);

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

printf("%s%4.lf\n",h[i].num,

h[i].s);

printf("\n");

printf("The%dStudentdatawhichiSlowerthan%7.3f:\n",m,ave);

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

printf("%s%4.1f\n",l[i].num,l[i].s);

printf("\n");

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

fprintf(out,"%d\n%7.3f\n",n,ave);

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

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

if(h[i].s<h[j].s)

{t=h[i];h[i]=h[i];h[j]=t;}

/*分?jǐn)?shù)從現(xiàn)到低排列*/

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

fprintf(out,“%4.1f\n",h[i].s);

fprintf(out,"%d\n%7.3f\n",m,ave);

for(i=0;i<m-1;i++)

for(j=i+1;i<m;j++)

if(l[i].s<l[j].s)

{t=l[i];l[i]=l[j];l[j]=t;}

/*分?jǐn)?shù)從高到低排列*/

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

fprintf(out,"%4.1f\n",l[i].s);

fclose(out);

}

27.請(qǐng)編寫(xiě)一個(gè)函數(shù)voidfun(chara[],charb[],intn),其功能是:刪除一個(gè)字符串中指定下標(biāo)的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數(shù)組中,n中存放指定的下標(biāo)。

例如,輸入一個(gè)字符串:World,然后輸入3。則調(diào)用該函數(shù)后的結(jié)果為:Word。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

28.請(qǐng)編寫(xiě)函數(shù)fun(),該函數(shù)的功能是:移動(dòng)字符串中的內(nèi)容,移動(dòng)的規(guī)則是把第1到第m個(gè)字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

例如,字符串中原有的內(nèi)容為ABCDEFGHIJK,m的值為3,移動(dòng)后,字符串中的內(nèi)容應(yīng)該是DEFGHIJKABC。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<stdio.h>

#include<string.h>

#defineN80

voidfun(char*w,intm)

{

}

main()

{

chara[N]="ABCDEFGHIJK";

intm;

printf("Theoriginastring:\n");

puts(a);

printf("\n\nEnterm:");

scanf("%d",&m);

fun(a,m);

printf("\nThestringaftermoving:\n");

puts(a);

printf("\n\n");

}

29.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前。

[注意]部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

[試題源程序]

#include<stdio.h>

#defineN16

typedefstruct

{

charnum[i0];

ints;

}STREC;

intfun(STRECa[])

{

}

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",66},{"GA017",64},{"GA018",64},{"GA016",72}

};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:\n");

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

{

if((i)%4==0)

printf("\n");

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

}

printf("\n");

}

30.請(qǐng)編寫(xiě)函數(shù)fun(),其功能是:計(jì)算并輸出下列多項(xiàng)式值。

S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+l/2n)

例如,若主函數(shù)從鍵盤(pán)給n輸入12后,則輸出為S=3.775958。

n的值要求大于1但不大于100。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\nlnputn:");

scanf("%d",&n);

s=fun(n);

printf("\ns=%f\n",s);

}

31.請(qǐng)編寫(xiě)一個(gè)函數(shù)fun(),它的功能是:求出一個(gè)2×M整型二維數(shù)組中最大元素的值,并將此值返回調(diào)用函數(shù)。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fan的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#defineM4

#include<stdio.h>

fun(inta[][M])

{

}

main()

{

intarr[2][M]={5,8,3,45,76,-4,12,82};

printf("max=%d\n",fun(arr));

}

32.請(qǐng)編寫(xiě)函數(shù)fun,其功能是:計(jì)算并輸出

例如,在主函數(shù)中從鍵盤(pán)給n輸入20后,輸出為:s=534.188884。

注意:要求n的值大于1但不大于100。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

33.編寫(xiě)函數(shù)fun(),它的功能是求n以內(nèi)(不包括n)同時(shí)能被5與11整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回。

例如:n為1000時(shí),函數(shù)值應(yīng)為s=96.979379。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

printf("s=%f\n",fun(1000));

}

34.請(qǐng)編寫(xiě)一個(gè)函數(shù)fun,它的功能是:根據(jù)以下公式求π的值(要求滿足精度0.0005,即某項(xiàng)小于0.0005時(shí)停止迭代):

程序運(yùn)行后,如果輸入精度0.0005,則程序輸出為3.140578。

注意:部分源程序存在文件PROGl.C文件中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

四、單選題(0題)35.

五、單選題(0題)36.

六、單選題(0題)37.已知二叉樹(shù)后序遍歷序列是CDABE,中序遍歷序列是CADEB,它的前序遍歷序列是()

A.ABCDEB.ECABDC.EACDBD.CDEAB

參考答案

1.D解析:本題考查宏替換的規(guī)則。宏替換分為簡(jiǎn)單的字符替換和帶參數(shù)的宏替換兩類。使用宏時(shí)應(yīng)注意以下幾點(diǎn):①定義僅僅是符號(hào)替換,不是賦值語(yǔ)句,因此不做語(yǔ)法檢查;②為了區(qū)別程序中其他的標(biāo)識(shí)符,宏名的定義通常用大寫(xiě)字母,但不是必須用大寫(xiě);③雙引號(hào)中出現(xiàn)的宏名不替換;④使用宏定義可以嵌套,即后定義的宏中可以使用先定義的宏。

2.Cf函數(shù)的功能是對(duì)形參a的各個(gè)成員用結(jié)構(gòu)體變量b的各個(gè)成員進(jìn)行賦值后,然后返回變量a。

3.A

4.D

5.B

6.A此題考查a--和--a之間的區(qū)別,當(dāng)while(a--)為真循環(huán)執(zhí)行,a--是執(zhí)行再減1,所以答案選擇A。

7.B

8.B本題中要求輸出右上半角的數(shù),對(duì)角線上的數(shù)的下標(biāo)相同,所以j=i。

9.A解析:在棧中,允許插人與刪除的一端稱為棧頂,而不允許插入與刪除的另一端稱為棧底。棧頂元素總是最后被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。故本題選A。

10.A

11.B解析:f函數(shù)的功能是返回地址為x,y的兩個(gè)數(shù)中值鉸的數(shù)的地址,本題輸出結(jié)果是7,8,7。

12.A

13.00解析:在函數(shù)fun()中,while((*n)-)是先引用*n的值,再做(*n)--運(yùn)算,所以循環(huán)結(jié)束時(shí)*n的值為0,再做(*n)--運(yùn)算后,*n的值為-1;執(zhí)行++(*n)后,*n的值是0。

14.HowdoessheHowdoesshe解析:strcpy(str1,s1):字符串拷貝函數(shù),作用是將字符串s1拷貝到字符數(shù)組str1中去。strlen(str):測(cè)試字符串str的長(zhǎng)度,函數(shù)的值為字符串中實(shí)際長(zhǎng)度,不包括‘\\0’在內(nèi)。本題中strlen(strl)的值為13,則strcpy(strl+strlen(strl)/2,'esshe');相當(dāng)于strqoy(strl+6,'esshe');因此可得答案為Howdoesshe。

15.關(guān)系關(guān)系解析:關(guān)系模型用;維表表示,則每個(gè);維表代表一種關(guān)系。

16.B66B66解析:字符B的ASCII碼值為66,因此,按%c形式輸出B,按%d形式輸出66,輸出結(jié)果為:B66。

17.內(nèi)模式或物理模式或存儲(chǔ)模式內(nèi)模式或物理模式或存儲(chǔ)模式解析:一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式,它是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)庫(kù)內(nèi)部的表示方法。例如,記錄的存儲(chǔ)方式是順序存儲(chǔ)、索引按照什么方式組織;數(shù)據(jù)是否壓縮存儲(chǔ),是否加密等。

18.-1*sn-1*sn解析:根據(jù)公式可知,第一處應(yīng)填-1;由于計(jì)算結(jié)果要通過(guò)形參指針sn傳回,所以第二處應(yīng)填*sn。

19.600600解析:程序中for循環(huán)的條件是當(dāng)前字符大于或等于字符\'0\'且小于或等于字符\'9\'的ASCII碼值,則s=10*s+ch[a]-\'0\'。計(jì)算結(jié)果是將字符串'600'轉(zhuǎn)換為整型數(shù)600。

20.-3-3解析:本題考核的知識(shí)點(diǎn)是運(yùn)算符“%’的應(yīng)用。該運(yùn)算符是求兩個(gè)數(shù)相除的余數(shù),其結(jié)果與被除數(shù)的符號(hào)一致,本題中“-19%4”的值為“-3”,所以說(shuō)空格處應(yīng)該填-3。

21.1616解析:滿二叉樹(shù)的葉子結(jié)點(diǎn)都在最后一層,即第4層,且第4層的結(jié)點(diǎn)達(dá)到最大數(shù),即25-1=16。

22.軟件工具軟件工具

23.3232解析:二叉樹(shù)的一個(gè)性質(zhì)是,在二叉樹(shù)的第k層上,最多有2k-1(k≥1)個(gè)結(jié)點(diǎn)。由此,26-1=32.所以答案為32。

24.aa解析:本題考查的是文件的打開(kāi)方式。要向文本文件的末尾續(xù)寫(xiě)內(nèi)容,需要使用方式“a”(追加)打開(kāi)文件。

25.intfun(STREC*aSTREC*bintlinth){intij=0;for(i=0;i<N;i++)if((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分?jǐn)?shù)低于1高于h的學(xué)生記錄存于結(jié)構(gòu)體數(shù)組b中*/b[j++]=a[i];returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/}intfun(STREC*a,STREC*b,intl,inth)\r\n{\r\ninti,j=0;\r\nfor(i=0;i<N;i++)\r\nif((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分?jǐn)?shù)低于1,高于h的學(xué)生記錄存于結(jié)構(gòu)體數(shù)組b中*/\r\nb[j++]=a[i];\r\nreturnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/\r\n}解析:處理此類分段統(tǒng)計(jì)問(wèn)題,可采用多分支選擇語(yǔ)句或條件選擇語(yǔ)句。此處采用條件選擇語(yǔ)句解答,具體見(jiàn)參考答案。使用條件選擇語(yǔ)句進(jìn)行分段統(tǒng)計(jì)時(shí)應(yīng)當(dāng)注意分段范圍。

26.doublefun(STREC*aSTREC*bSTREC*Cint*nint*m){inti;doubleav=0.0;*n=0;*m=0;for(i=0;i<N;i++)av=av+a[i].S;av=av/N;/*求平均值*/for(i=0;i<N;i++)if(av<=a[i].s){b[*n]=a[i];/*將高于等于平均分的學(xué)生存從所指存儲(chǔ)單元中并統(tǒng)計(jì)人數(shù)*/*n=*n+l;}else{c[*m]=a[i];/*將低于平均分的學(xué)生存入c所指存儲(chǔ)單元中并統(tǒng)計(jì)人數(shù)*/*m=*m+1;}returnav;/*返回平均分*/}doublefun(STREC\u3000*a,STREC*b,STREC*C,int*n,int*m)\r\n{\r\ninti;\r\ndoubleav=0.0;\r\n*n=0;\r\n*m=0;\r\nfor(i=0;i<N;i++)\r\nav=av+a[i].S;\r\nav=av/N;/*求平均值*/\r\nfor(i=0;i<N;i++)\r\nif(av<=a[i].s)\r\n{\r\nb[*n]=a[i];/*將高于等于平均分的學(xué)生存從所指存儲(chǔ)單元中,并統(tǒng)計(jì)人數(shù)*/\r\n*n=*n+l;\r\n}\r\nelse\r\n{\r\nc[*m]=a[i];/*將低于平均分的學(xué)生存入c所指存儲(chǔ)單元中,并統(tǒng)計(jì)人數(shù)*/\r\n*m=*m+1;\r\n}\r\nreturnav;/*返回平均分*/\r\n}解析:本題中第1個(gè)循環(huán)的作用求出所有分?jǐn)?shù)的總和,只有進(jìn)行了av=av/N后才得到平均值(我們?cè)谇懊娴某绦蛑信龅竭^(guò)類似問(wèn)題)。第2個(gè)循環(huán)的作用是將高于等于平均分的學(xué)生存/kb所指存儲(chǔ)單元中,將低于平均分的學(xué)生存入c所指存儲(chǔ)單元中。同一結(jié)構(gòu)體變量之間可以互相賦值。

本程序中直接用*n,*m來(lái)分別表示b,c的下標(biāo),注意開(kāi)始時(shí)要給*n,*m賦0,且使用時(shí)不能少*號(hào)。因?yàn)閱为?dú)的n,m是一個(gè)指針變量,而我們要用的是它所指向的那個(gè)存儲(chǔ)單元中的值。

27.

解析:(1)該程序功能是刪除一個(gè)字符串中指定下標(biāo)的字符。它的解題思路,可以分解為以下兩步:逐個(gè)判斷字符串中的下標(biāo)是否滿足條件,滿足條件的就放到題目要求的新串,否則就不放。

(2)從已給部分源程序的main主函數(shù)開(kāi)始入手,核心函數(shù)“fun(str1,str2,n);”中的參數(shù)由題目可知,str1存放著原始字符串,str2存放刪除了下標(biāo)為n的字符的結(jié)果字符串,注意下標(biāo)是從“0”開(kāi)始的。

28.voidfun(char*wintm){intij;chart;for(i=1;i<=m;i++)/*進(jìn)行m次的循環(huán)左移*/{t=w[0];for(j=1/w[j]!='\0';j++)/*從第2個(gè)字符開(kāi)始以后的每個(gè)字符都依次前移一個(gè)字符*/w[j-1]=w[j];w[j-1]=t;/*將第1個(gè)字符放到最后一個(gè)字符中*/}}voidfun(char*w,intm)\r\n{\r\ninti,j;\r\nchart;\r\nfor(i=1;i<=m;i++)/*進(jìn)行m次的循環(huán)左移*/\r\n{t=w[0];\r\nfor(j=1/w[j]!='\\0';j++)/*從第2個(gè)字符開(kāi)始以后的每個(gè)字符都依次前移一個(gè)字符*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;/*將第1個(gè)字符放到最后一個(gè)字符中*/\r\n}\r\n}解析:我們?cè)趯W(xué)習(xí)C語(yǔ)言的時(shí)候,應(yīng)該廣泛地應(yīng)用到循環(huán)的方法,本題應(yīng)采用“循環(huán)左移”的算法。即從第2個(gè)字符開(kāi)始以后的每個(gè)字符都依次前移一個(gè)字符,而原來(lái)的第1個(gè)字符放在串中的最后一個(gè)字符。當(dāng)要平移m個(gè)字符時(shí),則要進(jìn)行m次的循環(huán)左移。內(nèi)嵌的循環(huán)的作用是完成從第2個(gè)字符開(kāi)始以后的每個(gè)字符都依次前移一個(gè)字符,w[j-1]=t的作用是將第1個(gè)字符放到最后一個(gè)字符中。

29.#include<stdi0.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STRECa[]){STRECtmp;intij;for(i=0;i<N;i++)for(j=i+1;j<N;J++)if(a[i].s<a[j].S){tmp=a[i];a[i]=a[j];a[j]=tmp;}}#include<stdi0.h>\r\n#defineN16\r\ntypedefstruct\r\n{\r\ncharnum[10];\r\nints;\r\n}STREC;\r\nintfun(STRECa[])\r\n{\r\nSTRECtmp;\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i+1;j<N;J++)\r\nif(a[i].s<a[j].S)\r\n{\r\ntmp=a[i];\r\na[i]=a[j];\r\na[j]=tmp;\r\n}\r\n}

30.doublefun(intn){inti;doubles=0.0;for(i=1;i<=n;i++)/*計(jì)算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/s=s+(1.0/(2*i-1)+1.0/(2*i));returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=n;i++)/*計(jì)算S=(1+l/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n)*/\r\ns=s+(1.0/(2*i-1)+1.0/(2*i));\r\nreturns;\r\n}解析:本題中s=s+(1.0/(2*i-1)+1.0/(2*i));語(yǔ)句是用C程序去表達(dá)題目中的每一項(xiàng),這是關(guān)鍵,其他問(wèn)題不難理解。

31.fun(inta[][M]){intijmax=a[0][0];for(i=0;i<2;i++)for(j=0;j<M;j++)if(max<a[i][j])max=a[i][j];/*求出二維數(shù)組的最大值*/returnmax;}fun(inta[][M])\r\n{\r\ninti,j,max=a[0][0];\r\nfor(i=0;i<2;i++)\r\nfor(j=0;j<M;j++)\r\nif(max<a[i][j])\r\nmax=a[i][j];/*求出二維數(shù)組的最大值*/\r\nreturnmax;\r\n}解析:此類求最大值或最小值的C語(yǔ)言問(wèn)題,我們可以采用逐個(gè)比較的方式。要求數(shù)組中的所有元素走動(dòng)一遍,并從中找出最大、最小值,要注意一開(kāi)始應(yīng)使max存放數(shù)組中的第一個(gè)元素的值。可按逐行查找也可按逐列查找的方式,本題采用的是逐行查找的方式。即行下標(biāo)在外層循環(huán)列下標(biāo)在內(nèi)層循環(huán),因?yàn)樵谘h(huán)的嵌套中越在內(nèi)層循環(huán),循環(huán)變化就越快。

32.

解析:該程序功能是對(duì)題干中給出的多項(xiàng)式的求解。根據(jù)題干中給出的數(shù)列,首先推出每一項(xiàng)的表達(dá)式,然后再對(duì)多項(xiàng)式進(jìn)行累加求和。

33.doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++)/*從0~n中找到既能被5整除同時(shí)又能被11整除的數(shù)并將這些數(shù)求和*/if(i%5==0&&i%11==0)s=s+i;s=sqrt(s);/*對(duì)s求平方根*/returns;doublefun(intn)\r\n{doubles=0.0;\r\ninti;\r\nfor(i=0;i<n;i++)/*從0~n中找到既能被5整除同時(shí)又能被11整除的數(shù),并將這些數(shù)求和*/\r\nif(i%5==0&&i%11==0)\r\ns=s+i;\r\ns=sqrt(s);/*對(duì)s求平方根*/\r\nreturns;解析:本題的解題思路是逐個(gè)取得從。0-n之間的所有數(shù),對(duì)每次取得的數(shù)進(jìn)行條件判斷,條件是既能被5整除同時(shí)又能被11整除,注意:這兩個(gè)條件要求同時(shí)成立,因此用到了“&&”運(yùn)算符。滿足條件,該數(shù)就被累加到s中去,求出所有符合條件的數(shù)后,用sqrt()函數(shù)(包含于頭文件<math.h>中)對(duì)s求平方根。

34.

解析:進(jìn)入fun函數(shù),根據(jù)前面的分析:(1)根據(jù)題意,需要把每一項(xiàng)累加起來(lái);若每一累加項(xiàng)的值放在t中,后一項(xiàng)等于前一項(xiàng)累加項(xiàng)的值乘以n/(2*n+1)來(lái)求得。

(2)根據(jù)公式將求到的π/2的值放到變量pi中,每累加一次,n的值就增加1,以便求下一個(gè)累加項(xiàng),不斷重復(fù),直到滿足題目中的精度要求。

35.D

36.A

37.C由于后序遍歷的最后一個(gè)兒素為E,所以E為根結(jié)點(diǎn),所以它的前序遍歷的首個(gè)元素為E,敞排除A)和D)選項(xiàng)。由于中序遍歷中,元素B在元素根結(jié)點(diǎn)E自:J后面,所以B為二叉樹(shù)的右子樹(shù),并且該二叉樹(shù)右子樹(shù)只有一個(gè)兒素,所以前序遍歷的最后一個(gè)元素應(yīng)為B,故選項(xiàng)C)為正確選項(xiàng),即該二叉塒的前序遍歷序列是EACDB。2021-2022學(xué)年安徽省馬鞍山市全國(guó)計(jì)算機(jī)等級(jí)考試C語(yǔ)言程序設(shè)計(jì)模擬考試(含答案)學(xué)校:________班級(jí):________姓名:________考號(hào):________

一、單選題(12題)1.以下有關(guān)宏替換的敘述不正確的是()。

A.雙引號(hào)中出現(xiàn)的宏名不替換B.使用宏定義可以嵌套C.宏定義儀儀是符號(hào)替換D.宏名必須用大寫(xiě)字母表示

2.

有以下程序

#include<stdio.h>

#include<string.h>

typedefstrlIct{charname[9];charsex;floatscore[2];}STU;

STUf(STUa)

{STUb={"Zhao",m,85.0,90.0);inti;

strcpy(aname,b.name);

sex:b.sex;

for(i=0;i<2;i++)a.score[i]=b.score[i];

returna;

}

main

{STUc="Qian",f,95.0,92.0},d;

d=f(c).printf("%s,%c,%2.0f,%2.0f",d.Name,d.sex,d.score[0],d.score[1]);

}

程序的運(yùn)行結(jié)果是()。

A.Qian,f,95,92

B.Qian,m,85,90

C.Zhao,m,85,90

D.Zhao,f,95,92

3.若有定義inta=12,n=5,則表達(dá)式a%=(n%2)運(yùn)算后,a的值()。

A.0B.1C.12D.6

4.

5.數(shù)據(jù)表A中有10000個(gè)元素,如果僅要求求出其中最大的10個(gè)元素,則采用()最節(jié)省時(shí)間。

A.堆排序B.希爾排序C.快速排序D.希爾排序

6.有以下程序:#include<stdio.h>main(){inta=7;while(a--);print[("%d\n",a);}程序運(yùn)行后的輸出結(jié)果是()。A.-1B.0C.1D.7

7.使用二分查找算法在一個(gè)有序序列中查找一個(gè)元素的時(shí)間復(fù)雜度為()

A.O(N)B.O(logN)C.O(N*N)D.O(N*logN)

8.有以下程序:main{intnum[4][4]={1,2,3,4},{5,6,7,8},{9,10,11,12,},{13,14,15,16}},i,j;for(i=0;i<4;i++){for(j=0;j<i;j++)printf("%4c",);for(j=________;J<4;j++)printf("%4d",num[i][j]);printf("\n");}}若要按以下形式輸出數(shù)組右上半三角1234678111216則在程序下劃線處應(yīng)填入的是()。A.i-1B.iC.i+1D.4一i

9.下列關(guān)于棧敘述正確的是A.棧頂元素最先能被刪除B.棧頂元素最后才能被刪除C.棧底元素永遠(yuǎn)不能被刪除D.上述三種說(shuō)法都不對(duì)

10.向堆中插入一個(gè)元素的時(shí)間復(fù)雜度為_(kāi)_______。

A.O(log2n)B.O(n)C.O(1)D.O(nlog2n)

11.有以下程序:int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main(){inta=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf("%d,%d,%d\n",*p,*q,*r);}程序運(yùn)行后輸出結(jié)果是______。

A.7,8,8B.7,8,7C.8,7,7D.8,7,8

12.下面不能正確表示a*b/(c*d)的表達(dá)式是()。

A.(a*b)/c*dB.a*b/(c*d)C.a/c/d*bD.a*b/c/d

二、2.填空題(12題)13.下列程序的輸出結(jié)果是【】。

voidfun(int*n)

{

while((*n)--);

printf("%d",++(*n));

}

main()

{inta=100;

fun(&a);

}

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

main()

{

charstr1[]="Howdoyoudo",*pl=str1;

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

intf("%s\n",p1);

15.在關(guān)系模型中,把數(shù)據(jù)看成一個(gè)二維表,每一個(gè)二維表稱為一個(gè)______。

16.已知字符'A'的ASCII碼值為65,以下語(yǔ)句的輸出結(jié)果是【】。

charch='B';

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

17.數(shù)據(jù)的物理結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式稱為數(shù)據(jù)的【】。

18.函數(shù)voidfun(float*sn,intn)的功能是:根據(jù)以下公式計(jì)算s,計(jì)算結(jié)果通過(guò)形參指針sn傳回;n通過(guò)形參傳入,n的值大于或等于0。請(qǐng)?zhí)羁铡?/p>

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;

}

【】=s;

}

19.執(zhí)行以下程序段后,s的值為【】。

staticcharch[]="600";

inta,s=0;

for(a=0;ch[a]>='0'&&ch[a]<='9';a++)

s=10*s+ch[a]-'0';

20.若有語(yǔ)句

inti=-19,j=i%4;

printf("%d\n",j),

則輸出的結(jié)果是______。

21.深度為5的滿二叉樹(shù)中,葉子結(jié)點(diǎn)的個(gè)數(shù)為_(kāi)_____。

22.軟件開(kāi)發(fā)環(huán)境是全面支持軟件開(kāi)發(fā)全過(guò)程的【】集合。

23.一棵二叉樹(shù)第六層(根結(jié)點(diǎn)為第一層)的結(jié)點(diǎn)數(shù)最多為_(kāi)_____個(gè)。

24.設(shè)有定義:FILE*fw;,請(qǐng)將以下打開(kāi)文件的語(yǔ)句補(bǔ)充完整,以便可以向文本文件readme.txt的最后續(xù)寫(xiě)內(nèi)容。

fw=fopen("readme.txt",【】);

三、3.程序設(shè)計(jì)題(10題)25.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫(xiě)函數(shù)fun(),它的功能是:把指定分?jǐn)?shù)范圍之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍之外的學(xué)生人數(shù)由函數(shù)值返回。

例如,輸入的分?jǐn)?shù)是80和89,則應(yīng)當(dāng)把分?jǐn)?shù)低于80和高于89的學(xué)生數(shù)據(jù)進(jìn)行輸出,不包含80分和89分的學(xué)生數(shù)據(jù)。主函數(shù)中把80放在low中,把89放在heigh中。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

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

{

}

main()

{

STRECs[N]={{“GA005”,55},{“GA003”,96},

{“GA002”,80},{“GA004”,68},{“GA001”,88},

{“GA007”,74},{“GA008”,85},{“GA006”,99},

{“GA015”,90},{“GA013”,53},{“GA012”,66},

{“GA014”,82},{“GA0ll”,73},{“GA017”,69},

{“GA018”,64},{“GA016”,86}};

STECh[N],tt;

FILE*out;

inti,j,n,low,heigh,t;

printf(“Enter2integernumberlow&heigh:”);

scanf(“%d%d”,&low,&heigh);

if(heigh<low)

{

t=heigh;

heigh=low;

low=t;

}

n=fun(S,h,low,heigh);

printf(“Thestudent'Sdataout%d--%d:\n”,low,heigh);

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

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

/*輸出指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄*/

printf(“\n”);

ut=fopen(“out23.dat”,“w”);

fprintf(out,“%d\n”,n);

n=fun(s,h,70,79);

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

/*分?jǐn)?shù)在70~79之外的學(xué)生記錄按分?jǐn)?shù)從低到高排列*/

for(j=i+l;i<n;j十+)

if(h[i].s>h[j].s)

{

tt=h[i];

h[i]=h[j];

h[j]=tt;

}

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

fprintf(out,“%4d\n”,h[i].s);

fprintf(out,“\n”);

fclose(out);

}

26.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫(xiě)函數(shù)fun(),該函數(shù)的功能是:把高于等于平均分的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,低于平均分的學(xué)生數(shù)據(jù)放在c所指的數(shù)組中,高于等于平均分的學(xué)生人數(shù)通過(guò)形參n傳回,低于平均分的學(xué)生人數(shù)通過(guò)形參m傳回,平均分通過(guò)函數(shù)值返回。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubleS;

}STREC;

doublefun(STREC*a,STREC*b,STREC*C,int*n,int*m)

{

}

main()

{

STRECs[N]={{“GA05”,65},{“GA03”,86},

{“GA02”,76},{“GA04”,95},{“GA01”,93},

{“GA07”,78},{“GA08”,68},{“GA06”,88},

{“GA09”,60},{“GAll”,54},{“GAl2”,56},

{“GAl0”,98}};

STRECh[N],l[N],t;

FILE*out;

inti,j,m,n;

doubleave;

ave=fun(S,h,l,&n,&m);

printf("The%dstudentdatawhichishigherthan%7.3f:\n",n,ave);

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

printf("%s%4.lf\n",h[i].num,

h[i].s);

printf("\n");

printf("The%dStudentdatawhichiSlowerthan%7.3f:\n",m,ave);

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

printf("%s%4.1f\n",l[i].num,l[i].s);

printf("\n");

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

fprintf(out,"%d\n%7.3f\n",n,ave);

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

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

if(h[i].s<h[j].s)

{t=h[i];h[i]=h[i];h[j]=t;}

/*分?jǐn)?shù)從現(xiàn)到低排列*/

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

fprintf(out,“%4.1f\n",h[i].s);

fprintf(out,"%d\n%7.3f\n",m,ave);

for(i=0;i<m-1;i++)

for(j=i+1;i<m;j++)

if(l[i].s<l[j].s)

{t=l[i];l[i]=l[j];l[j]=t;}

/*分?jǐn)?shù)從高到低排列*/

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

fprintf(out,"%4.1f\n",l[i].s);

fclose(out);

}

27.請(qǐng)編寫(xiě)一個(gè)函數(shù)voidfun(chara[],charb[],intn),其功能是:刪除一個(gè)字符串中指定下標(biāo)的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數(shù)組中,n中存放指定的下標(biāo)。

例如,輸入一個(gè)字符串:World,然后輸入3。則調(diào)用該函數(shù)后的結(jié)果為:Word。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

28.請(qǐng)編寫(xiě)函數(shù)fun(),該函數(shù)的功能是:移動(dòng)字符串中的內(nèi)容,移動(dòng)的規(guī)則是把第1到第m個(gè)字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

例如,字符串中原有的內(nèi)容為ABCDEFGHIJK,m的值為3,移動(dòng)后,字符串中的內(nèi)容應(yīng)該是DEFGHIJKABC。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<stdio.h>

#include<string.h>

#defineN80

voidfun(char*w,intm)

{

}

main()

{

chara[N]="ABCDEFGHIJK";

intm;

printf("Theoriginastring:\n");

puts(a);

printf("\n\nEnterm:");

scanf("%d",&m);

fun(a,m);

printf("\nThestringaftermoving:\n");

puts(a);

printf("\n\n");

}

29.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前。

[注意]部分源程序給出如下。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

[試題源程序]

#include<stdio.h>

#defineN16

typedefstruct

{

charnum[i0];

ints;

}STREC;

intfun(STRECa[])

{

}

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",66},{"GA017",64},{"GA018",64},{"GA016",72}

};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:\n");

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

{

if((i)%4==0)

printf("\n");

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

}

printf("\n");

}

30.請(qǐng)編寫(xiě)函數(shù)fun(),其功能是:計(jì)算并輸出下列多項(xiàng)式值。

S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+l/2n)

例如,若主函數(shù)從鍵盤(pán)給n輸入12后,則輸出為S=3.775958。

n的值要求大于1但不大于100。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\nlnputn:");

scanf("%d",&n);

s=fun(n);

printf("\ns=%f\n",s);

}

31.請(qǐng)編寫(xiě)一個(gè)函數(shù)fun(),它的功能是:求出一個(gè)2×M整型二維數(shù)組中最大元素的值,并將此值返回調(diào)用函數(shù)。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fan的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#defineM4

#include<stdio.h>

fun(inta[][M])

{

}

main()

{

intarr[2][M]={5,8,3,45,76,-4,12,82};

printf("max=%d\n",fun(arr));

}

32.請(qǐng)編寫(xiě)函數(shù)fun,其功能是:計(jì)算并輸出

例如,在主函數(shù)中從鍵盤(pán)給n輸入20后,輸出為:s=534.188884。

注意:要求n的值大于1但不大于100。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

33.編寫(xiě)函數(shù)fun(),它的功能是求n以內(nèi)(不包括n)同時(shí)能被5與11整除的所有自然數(shù)之和的平方根s,并作為函數(shù)值返回。

例如:n為1000時(shí),函數(shù)值應(yīng)為s=96.979379。

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

請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫(xiě)的若干語(yǔ)句。

試題程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

printf("s=%f\n",fun(1000));

}

34.請(qǐng)編寫(xiě)一個(gè)函數(shù)fun,它的功能是:根據(jù)以下公式求π的值(要求滿足精度0.0005,即某項(xiàng)小于0.0005時(shí)停止迭代):

程序運(yùn)行后,如果輸入精度0.0005,則程序輸出為3.140578。

注意:部分源程序存在文件PROGl.C文件中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

四、單選題(0題)35.

五、單選題(0題)36.

六、單選題(0題)37.已知二叉樹(shù)后序遍歷序列是CDABE,中序遍歷序列是CADEB,它的前序遍歷序列是()

A.ABCDEB.ECABDC.EACDBD.CDEAB

參考答案

1.D解析:本題考查宏替換的規(guī)則。宏替換分為簡(jiǎn)單的字符替換和帶參數(shù)的宏替換兩類。使用宏時(shí)應(yīng)注意以下幾點(diǎn):①定義僅僅是符號(hào)替換,不是賦值語(yǔ)句,因此不做語(yǔ)法檢查;②為了區(qū)別程序中其他的標(biāo)識(shí)符,宏名的定義通常用大寫(xiě)字母,但不是必須用大寫(xiě);③雙引號(hào)中出現(xiàn)的宏名不替換;④使用宏定義可以嵌套,即后定義的宏中可以使用先定義的宏。

2.Cf函數(shù)的功能是對(duì)形參a的各個(gè)成員用結(jié)構(gòu)體變量b的各個(gè)成員進(jìn)行賦值后,然后返回變量a。

3.A

4.D

5.B

6.A此題考查a--和--a之間的區(qū)別,當(dāng)while(a--)為真循環(huán)執(zhí)行,a--是執(zhí)行再減1,所以答案選擇A。

7.B

8.B本題中要求輸出右上半角的數(shù),對(duì)角線上的數(shù)的下標(biāo)相同,所以j=i。

9.A解析:在棧中,允許插人與刪除的一端稱為棧頂,而不允許插入與刪除的另一端稱為棧底。棧頂元素總是最后被插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被插入的元素,從而也是最后才能被刪除的元素。故本題選A。

10.A

11.B解析:f函數(shù)的功能是返回地址為x,y的兩個(gè)數(shù)中值鉸的數(shù)的地址,本題輸出結(jié)果是7,8,7。

12.A

13.00解析:在函數(shù)fun()中,while((*n)-)是先引用*n的值,再做(*n)--運(yùn)算,所以循環(huán)結(jié)束時(shí)*n的值為0,再做(*n)--運(yùn)算后,*n的值為-1;執(zhí)行++(*n)后,*n的值是0。

14.HowdoessheHowdoesshe解析:strcpy(str1,s1):字符串拷貝函數(shù),作用是將字符串s1拷貝到字符數(shù)組str1中去。strlen(str):測(cè)試字符串str的長(zhǎng)度,函數(shù)的值為字符串中實(shí)際長(zhǎng)度,不包括‘\\0’在內(nèi)。本題中strlen(strl)的值為13,則strcpy(strl+strlen(strl)/2,'esshe');相當(dāng)于strqoy(strl+6,'esshe');因此可得答案為Howdoesshe。

15.關(guān)系關(guān)系解析:關(guān)系模型用;維表表示,則每個(gè);維表代表一種關(guān)系。

16.B66B66解析:字符B的ASCII碼值為66,因此,按%c形式輸出B,按%d形式輸出66,輸出結(jié)果為:B66。

17.內(nèi)模式或物理模式或存儲(chǔ)模式內(nèi)模式或物理模式或存儲(chǔ)模式解析:一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式,它是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)庫(kù)內(nèi)部的表示方法。例如,記錄的存儲(chǔ)方式是順序存儲(chǔ)、索引按照什么方式組織;數(shù)據(jù)是否壓縮存儲(chǔ),是否加密等。

18.-1*sn-1*sn解析:根據(jù)公式可知,第一處應(yīng)填-1;由于計(jì)算結(jié)果要通過(guò)形參指針sn傳回,所以第二處應(yīng)填*sn。

19.600600解析:程序中for循環(huán)的條件是當(dāng)前字符大于或等于字符\'0\'且小于或等于字符\'9\'的ASCII碼值,則s=10*s+ch[a]-\'0\'。計(jì)算結(jié)果是將字符串'600'轉(zhuǎn)換為整型數(shù)600。

20.-3-3解析:本題考核的知識(shí)點(diǎn)是運(yùn)算符“%’的應(yīng)用。該運(yùn)算符是求兩個(gè)數(shù)相除的余數(shù),其結(jié)果與被除數(shù)的符號(hào)一致,本題中“-19%4”的值為“-3”,所以說(shuō)空格處應(yīng)該填-3。

21.1616解析:滿二叉樹(shù)的葉子結(jié)點(diǎn)都在最后一層,即第4層,且第4層的結(jié)點(diǎn)達(dá)到最大數(shù),即25-1=16。

22.軟件工具軟件工具

23.3232解析:二叉樹(shù)的一個(gè)性質(zhì)是,在二叉樹(shù)的第k層上,最多有2k-1(k≥1)個(gè)結(jié)點(diǎn)。由此,26-1=32.所以答案為32。

24.aa解析:本題考查的是文件的打開(kāi)方式。要向文本文件的末尾續(xù)寫(xiě)內(nèi)容,需要使用方式“a”(追加)打開(kāi)文件。

25.intfun(STREC*aSTREC*bintlinth){intij=0;for(i=0;i<N;i++)if((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分?jǐn)?shù)低于1高于h的學(xué)生記錄存于結(jié)構(gòu)體數(shù)組b中*/b[j++]=a[i];returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/}intfun(STREC*a,STREC*b,intl,inth)\r\n{\r\ninti,j=0;\r\nfor(i=0;i<N;i++)\r\nif((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分?jǐn)?shù)低于1,高于h的學(xué)生記錄存于結(jié)構(gòu)體數(shù)組b中*/\r\nb[j++]=a[i];\r\nreturnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/\r\n}解析:處理此類分段統(tǒng)計(jì)問(wèn)題,可采用多分支選擇語(yǔ)句或條件選擇語(yǔ)句。此處采用條件選擇語(yǔ)句解答,具體見(jiàn)參考答案。使用條件選擇語(yǔ)句進(jìn)行分段統(tǒng)計(jì)時(shí)應(yīng)當(dāng)注意分段范圍。

26.doublefun(STREC*aSTREC*bSTREC*Cint*nint*m){inti;doubleav=0.0;*n=0;*m=0;for(i=0;i<N;i++)av=av+a[i].S;av=av/N;/*求平均值*/for(i=0;i<N;i++)if(av<=a[i].s){b[*n]=a[i];/*將高于等于平均分的學(xué)生存從所指存儲(chǔ)單元中并統(tǒng)計(jì)人數(shù)*/*n=*n+l;}else{c[*m]=a[i];/*將低于平均分的學(xué)生存入c所指存儲(chǔ)單元中并統(tǒng)計(jì)人數(shù)*/*m=*m+1;}returnav;/*返回平均分*/}doublefun(STREC\u3000*a,STREC*b,STREC*C,int*n,int*m)\r\n{\r\ninti;\r\ndoubleav=0.0;\r\n*n=0;\r\n*m=0;\r\nfor(i=0;i<N;i++)\r\nav=av+a[i].S;\r\nav=av/N;/*求平均值*/\r\nfor(i=0;i<N;i++)\r\nif(av<=a[i].s)\r\n{\r\nb[*n]=a[i];/*將高于等于平均分的學(xué)生存從所指存儲(chǔ)單元中,并統(tǒng)計(jì)人數(shù)*/\r\n*n=*n+l;\r\n}\r\nelse\r\n{\r\nc[*m]=a[i];/*將低于平均分的學(xué)生存入c所指存儲(chǔ)單元中,并統(tǒng)計(jì)人數(shù)*/\r\n*m=*m+1;\r\n}\r\nreturnav;/*返回平均分*/\r\n}解析:本題中第1個(gè)循環(huán)的作用求出所有分?jǐn)?shù)的總和,只有進(jìn)行了av=av/N后才得到平均值(我們?cè)谇懊娴某绦蛑信龅竭^(guò)類似問(wèn)題)。第2個(gè)循環(huán)的作用是將高于等于平均分的學(xué)生存/kb所指存儲(chǔ)單元中,將低于平均分的學(xué)生存入c所指存儲(chǔ)單元中。同一結(jié)構(gòu)體變量之間可以互相賦值。

本程序中直接用*n,*m來(lái)分別表示b,c的下標(biāo),注意開(kāi)始時(shí)要給*n,*m賦0,且使用時(shí)不能少*號(hào)。因?yàn)閱为?dú)的n,m是一個(gè)指針變量,而我們要用的是它所指向的那個(gè)存儲(chǔ)單元中的值。

27.

解析:(1)該程序功能是刪除一個(gè)字符串中指定下標(biāo)的字符。它的解題思路,可以分解為以下兩步:逐個(gè)判斷字符串中的下標(biāo)是否滿足條件,滿足條件的就放到題目要求的新串,否則就不放。

(2)從已給部分源程序的main主函數(shù)開(kāi)始入手,核心函數(shù)“fun(str1,str2,n);”中的參數(shù)由題目可知,str1存放著原始字符串,str2存放刪除了下標(biāo)為n的字符的結(jié)果字符串,注意下標(biāo)是從“0”開(kāi)始的。

28.voidfun(char*wintm){intij;chart;for(i=1;

評(píng)論

0/150

提交評(píng)論