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

下載本文檔

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

文檔簡介

2022-2023學(xué)年湖北省襄樊市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)學(xué)校:________班級:________姓名:________考號:________

一、單選題(12題)1.有以下程序main(){intm=3,n=4,x;x=-m++;x=x+8/++n;printf(“%d\n”,x);}程序運行后的輸出結(jié)果是______。A.3B.5C.-1D.-2

2.以下定義語句中正確的是()。

A.inta=b=0;

B.charA=65+1,b=‘b’;

C.floata=1,*b=&a,*c=&b;

D.doublea=0.0;b=1.1;

3.若有下列說明和語句,則對結(jié)構(gòu)體變量st中成員i的引用方式不正確的是()。Structstu{inti;intname;}st,*p;p=&st;

A.st.iB.*p.iC.(*p).iD.p->i

4.有以下程序:#include<stdio.h>main(){chars[]=“abcde”;s+=2;printf(“%d\n”,s[0]);}程序的運行結(jié)果是()。

A.輸出字符c的ASCII值B.程序出錯C.輸出字符cD.輸出字符a的ASCII值

5.有以下程序:

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

A.4321098765B.5678901234C.0987654321D.0987651234

6.鏈表不具備的特點是()。

A.可隨機訪問任一結(jié)點B.插入刪除不需要移動元素C.不必事先估計存儲空間D.所需空間與其長度成正比

7.下列標(biāo)識符不是關(guān)鍵字的是()。

A.breakB.charC.SwithchD.return

8.樹是結(jié)點的集合,它的根結(jié)點數(shù)目是()。

A.有且只有1B.1或多于1C.0或1D.至少2

9.若有定義“intx=10;”,則表達式“x-=x+x”的值為()。

A.0B.-20C.-10D.10

10.有以下程序(strcat函數(shù)用于連接兩個字符串):#include<stdio.h>#include<string.h>main(){chara[20]=“ABCD\0EFG\0”,b[]=“UK”;strcat(a,b);printf(“%s\n”,a);}程序的運行結(jié)果是()。

A.UKB.ABCDE\0FG\0UKC.ABCDUKD.EFGUK

11.有以下程序#definef(x)x*xmain(){inti;i=f(4+4)/f(2+2);printf(“%d\n”,i);}執(zhí)行后輸出結(jié)果是()A.28B.22C.16D.4

12.若有定義“doublex,y,*px,*py;”,執(zhí)行了“px=&x;py=&y;”之后,正確的輸入語句是()。

A.scanf(“%lf%le”,px,py);

B.scanf(“%f%f”,&x,&y);

C.scanf(“%f%f”,x,y);

D.scanf(“%lf%lf”,x,y);

二、2.填空題(12題)13.以下定義的結(jié)構(gòu)體類型擬包含兩個成員,其中成員變量info用來存入整形數(shù)據(jù);成員變量link是指向自身結(jié)構(gòu)體的指針,請將定義補充完整。

structnode

{intinfo;

【】link;};

14.一棵二叉樹中共有80個葉子結(jié)點與10個度為1的結(jié)點,則該二叉樹中的總結(jié)點數(shù)為【】。

15.數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類型,它們是______數(shù)據(jù)模型、邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。

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

charch='B';

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

17.順序存儲方法是把邏輯上相鄰的結(jié)點存儲在物理位置______的存儲單元中。

18.問題處理方案的正確而完整的描述稱為______。

19.在面向?qū)ο蠓椒ㄖ?,類的實例稱為______。

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

#include<stdio.h>

main()

{char*p={"BOOL""OPK","H","SP"};

inti;

for(i=3,i>=0;i--,i--)printf("%",*p[i]);

printf("\n");

}

21.若有下列定義和語句:

char*s1="12345",*s2="1234";

printf("%d\n",strlen(strcpy(s1,s2)));

則輸出結(jié)果為______。

22.以下程序運行后的輸出結(jié)果是()。#definePower2(x)x*xmain(){inti=6,j=8;printf("%d\n",Power2(i+j));}

23.Jackson結(jié)構(gòu)化程序設(shè)計方法是英國的M.Jackson提出的,它是一種面向______的設(shè)計方法。

24.通常,將軟件產(chǎn)品從提出、實現(xiàn)、使用維護到停止使用退役的過程稱為【】。

三、3.程序設(shè)計題(10題)25.編寫一個函數(shù),從傳入的num個字符中找出最長的一個字符串,并通過形參指針max傳回該串地址(用****作為結(jié)束輸入的標(biāo)志)。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("輸入若干個字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作為結(jié)束輸入的標(biāo)志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

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

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

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

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubles;

}STREC;

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

{

}

main()

STRECsIN]={{"GA05",85},{"GA03",76},

{"GA02",69},{"GA04",85},{"GA01",91},

{"GA07",72},{"GA08",64},{"GA06",87},

{"GA09",60},{"GAll",79},{"GA12",73},

{"GA10",90}};

STRECh[N],t;

FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichis

higherthan%7.3f:In",n,ave);

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

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

printf("\n");

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

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

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

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

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

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

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

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

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

fclose(out);

}

27.請編寫一個函數(shù)fun(),它的功能是:找出一維數(shù)組元素中最大的值和它所在的下標(biāo),最大值和它所在的下標(biāo)通過形參傳回。數(shù)組元素中的值已在主函數(shù)中賦予。

主函數(shù)中x是數(shù)組名,n是x中的數(shù)據(jù)個數(shù),max存放最大值,index存放最大值所在元素的下標(biāo)。

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

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

{

}

main()

{

inti,x[20],max,index,n=10;

randomize();

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

{

x[i]=rand()%50;

printf("%4d",x[i]);

/*輸出一個隨機數(shù)組*/

}

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

28.請編寫函數(shù)fun(),該函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。

例如,若一維數(shù)組中的數(shù)據(jù)是:

2223445666677899101010

刪除后,數(shù)組中的內(nèi)容應(yīng)該是:

2345678910。

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

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

試題程序:

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{

}

main()

{

inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,

8,9,9,10,10,10,10},i,n=20;

printf("Theoriginaldata:\n");

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

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

n=fun(a,n);

printf("\n\nThedataafterdeleted

:\n");

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

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

printf("\n\n");

}

29.請編寫函數(shù)fun(),它的功能是:移動一維數(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,4。部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。

#include<stdiO.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

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

inti,p,n=15;

printf("Theodginaldata:\n");

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

printf("\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

for(i=0;i<n;i++)printf("%3d”,a[i]);

}

30.請編寫函數(shù)fun(),該函數(shù)的功能是:將s所指字符串中ASCII值為偶數(shù)的字符刪除,串中剩余字符形成一個新串放在t所指的數(shù)組中。

例如,若s所指字符串中的內(nèi)容為ABCDEFGl2345,其中字符B的ASCⅡ碼值為偶數(shù)、…、字符2的ASCⅡ碼值為偶數(shù)、…,都應(yīng)當(dāng)刪除,其他依次類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是ACEGl35。

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

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

試題程序;

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf(,\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

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

}

31.請編寫函數(shù)fun(),該函數(shù)的功能是:統(tǒng)計一行字符串中單詞的個數(shù),作為函數(shù)值返回。一行字符串在主函數(shù)中輸入,規(guī)定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。

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

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

試題程序:

#include<string.h>

#include<stdio,h>

#defineN80

intfun(char*s)

{

}

main()

{

charline[N];

intnum=0;

printf("Enterastring:\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",

num);

}

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

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

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

33.編寫函數(shù)fun,它的功能是計算下列級數(shù)和,和值由函數(shù)值返回。

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

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

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

34.下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(inta[][N],intn),該函數(shù)的功能是:使數(shù)字右上半三角元素中的值乘以m。

例如,若m的值為2,a數(shù)組中的值為

a=19

27

則返回主程序后a數(shù)組的值應(yīng)為

218

214

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N],intm)

{

}

main()

{

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

clrscr();

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

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

/*輸出一個隨機的5×5矩陣*/

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

{a[i][j]=rand()%20;

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

}

printf("\n");

}

do

m=rand()%10;

while(m>=3);/*產(chǎn)生一個上于3的隨機數(shù)*/

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

fun(a,m);

printf("THERESULT\n");

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

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

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

printf("\n");

}

}

四、單選題(0題)35.有以下程序:#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];printf(“%d\n”,t);}程序的運行結(jié)果是()。

A.3B.4C.1D.9

五、單選題(0題)36.線性結(jié)構(gòu)是數(shù)據(jù)元素之間存在一種()。

A.一對多關(guān)系B.多對多關(guān)系C.多對一關(guān)系D.一對一關(guān)系

六、單選題(0題)37.允許對隊列進行的操作有()。

A.對隊列中的元素排序B.取出最近進隊的元素C.在隊頭元素之前插入元素D.刪除隊頭元素

參考答案

1.D本題考核的知識點是運算符的優(yōu)先級。主函數(shù)中首先定義了整型變量m、n和x,并給m和n賦初值為3和4,接著執(zhí)行兩條賦值語句,第一條x=-m++等價于x=-(m++),其值即為-3,第二條x=x+8/++n等價于X=X+8/(++n),即為x=-3+8/5=-2,因此最后輸出x的值為-2。所以,4個選項中選項D符合題意。

2.BA選項中的變量b沒有定義,不能直接給變量a賦值。C選項中,*b、*c表示的是一個實型變量的地址,不能將指針型變量b的地址賦值給指針型變量c。D選項中,“a=0.0”后面應(yīng)該為逗號,不能是分號。故本題答案為B選項。

3.B解析:本題主要考查結(jié)構(gòu)指針:p=&st,訪問結(jié)構(gòu)體的成員,可以通過結(jié)構(gòu)變量訪問,即st.i,也可以用等價的指針形式,即(*p).i和p->i。

4.B在C語言中,數(shù)組名類似于一個指向數(shù)組首地址的指針常量,一旦定義就不能修改其內(nèi)容。所以本題中的“s+=2;”語句讓數(shù)組名S的內(nèi)容加2是錯誤的,編譯無法通過。故本題答案為B選項。

5.B該程序首先給一維數(shù)組賦值,然后三次調(diào)用fun函數(shù),其中fun(a,0,3);功能是將一維數(shù)組中第1個元素和第4個元素互換,第2個元素和第3個元素互換;其中fun(a,4,9);功能是將一維數(shù)組中第5個元素和第10個元素互換,第6個和第9個元素互換,第7個元素和第8個元素互換;其中fun(a.O,9);功能是將將一維數(shù)組中第l個元素和第10個元素互換,第2個元素和第9個元素互換……依此類推。因此B選項正確。

6.A

7.C在C語言中,字母區(qū)分大小,所以break、char、return、switch都是C語言中的關(guān)鍵字,而Swithch不是。

8.A樹形結(jié)構(gòu)是一類重要的非線性數(shù)據(jù)結(jié)構(gòu)。樹是n(n≥0)個結(jié)點的集合,對應(yīng)任意一棵非空樹,它具有以下幾點重要的性質(zhì)。

①有且僅有一個特定的稱為根的結(jié)點。

②當(dāng)n>1時,其余結(jié)點可分為m(m>0)個互不相交的有限集T1,T2,…,TM,其中每一個集合本身又是一棵樹,稱為子樹。

因此,本題的正確答案有且只有一個。

9.C算術(shù)運算符“+”的優(yōu)先級高于,且“-=”的結(jié)合方向為自右向左。所以表達式“x-=x+x”可以表示成“x=x-(x+x)=10-(10+10)=-10”。故本題答案為C選項。

10.C字符數(shù)組a中包含兩個‘\\0’。遇到第1個‘\\0’時就表示字符串a(chǎn)結(jié)束。字符串處理函數(shù)strcat(字符數(shù)組a,字符數(shù)組b),功能是連接兩個字符串,把字符串b連接到字符串a(chǎn)的后面,結(jié)果放在字符數(shù)組a中。連接時將字符串a(chǎn)后的‘\\0’取消,只在新串最后保留一個‘\\0’。本題相當(dāng)于將“ABCD”和“IJK”連接。故本題答案為C選項。

11.A解析:f(4+4)/f(2+2)=4+4*4+4/2+2*2+2=28。

12.A因為x和y都是double型數(shù)據(jù),輸入時的格式字符應(yīng)為%lf,B、C選項錯誤。D選項中的“scanf(“%lf%lf”,x,y);”應(yīng)為“scanf(“%lf%lf”,&x,&y);”。故本題答案為A選項。

13.structnode*structnode*解析:本題中的結(jié)構(gòu)類型名為structnode,所以空白處應(yīng)填:structnode*。即定義一個指向自身的結(jié)構(gòu)體指針。

14.179179解析:在任意一棵二叉樹中,度為0的結(jié)點(即葉子結(jié)點)總是比度為2的結(jié)點多一個。本題中的二叉樹有80個葉子結(jié)點,因此,該二叉樹有80-1=79個度為2的結(jié)點;又知本題中的二叉樹有10個度為1的結(jié)點。因此,本題中的二叉樹總結(jié)點數(shù)為:葉子結(jié)點數(shù)+度為1的結(jié)點數(shù)+度為2的結(jié)點數(shù)=80+10+79=179

15.概念概念

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

17.相鄰相鄰

18.算法或程序或流程圖算法或程序或流程圖解析:算法是問題處理方案正確而完整的描述。

19.對象對象解析:類描述的是具有相似性質(zhì)的一組對象。例如,每本具體的書是一個對象,而這些具體的書都有共同的性質(zhì),它們都屬于更一般的概念“書”這一類對象。一個具體對象稱為類的實例。

20.SO

21.44解析:strcpy(s1,s2)函數(shù)的作用是將字符串s2中的內(nèi)容拷貝到字符串s1中的內(nèi)容覆蓋。strlen()函數(shù)是求字符串的長度。本題實際上是要求s2字符串的長度,即是4。

22.6262解析:本題考查的是宏定義。帶參數(shù)的宏定義是按#indefine命令行中指定的字符串從左到右進行轉(zhuǎn)換。本題中替換的式子為:6+8*6+8,代入i,j的值得到62。

23.數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)

24.軟件生命周期軟件生命周期解析:軟件產(chǎn)品從考慮其概念開始,到該軟件產(chǎn)品不能使用為止的整個時期都屬于軟件生命周期。一般包括可行性研究與需求分析、設(shè)計、實現(xiàn)、測試、交付使用以及維護等活動。

25.fun(char(*a)[81]intnumchar*max){inti=0;max=a[0];for(i=0;i<num;i++)/*找出最長的一個字符串*/if(strlen(max)<strlen(a[i]))max=a[i];returnmax;/*傳回最長字符串地址*/}fun(char(*a)[81],intnum,char*max)\r\n{\r\ninti=0;\r\nmax=a[0];\r\nfor(i=0;i<num;i++)/*找出最長的一個字符串*/\r\nif(strlen(max)<strlen(a[i]))\r\nmax=a[i];\r\nreturnmax;/*傳回最長字符串地址*/\r\n}解析:做本題之前,我們先應(yīng)該明白ss是一個指向一維數(shù)組的指針變量,max是指向指針變量的指針變量。所以引用時要注意加上*。我們不可能只用max,因為ss[0]是一個數(shù)組地址而不是一個指針的地址。

26.doublefun(STREC*aSTREC*bint*n){inti;doubleay=0.0;*n=0;for(i=0;i<N;i++)av=av+a[i].s;ay=ay/N;/*求平均值*/for(i=0;i<N;i++)if(av<=a[i].s){b[*n]=a[i];*n-*n+l;}/*將高于等于平均分的學(xué)生存從所指存儲單元中并統(tǒng)計人數(shù)*/returnay;/*返回嚴(yán)均分*/}doublefun(STREC*a,STREC*b,int*n)\r\n{\r\ninti;\r\ndoubleay=0.0;\r\n*n=0;\r\nfor(i=0;i<N;i++)\r\nav=av+a[i].s;\r\nay=ay/N;/*求平均值*/\r\nfor(i=0;i<N;i++)\r\nif(av<=a[i].s)\r\n{b[*n]=a[i];*n-*n+l;}/*將高于等于平均分的學(xué)生存從所指存儲單元中,并統(tǒng)計人數(shù)*/\r\nreturnay;/*返回嚴(yán)均分*/\r\n}解析:本題中第1個循環(huán)的作用求出所有分?jǐn)?shù)的總和,只有進行了av=av/N后才得到平均值(我們在前面的程序中碰到過類似問題)。第2個循環(huán)的作用是將高于等于平均分的學(xué)生存入b所指存儲單元中。同一結(jié)構(gòu)體變量之間可以互相賦值。

本程序中直接用*n來表示b的下標(biāo),注意開始時要給,*n賦0,且使用時不能少*號。因為單獨的n是一個指針變量,而我們要用的是它所指向的那個存儲單元中的值。

27.voidfun(inta[]intnint*maxint*d){inti;*max=a[0];*d=0;for(i=0;i<n;i++)/*將最大的元素放入指針max所指的單元最大元素的下標(biāo)放入指針d所指的單元*/if(*max<a[i]){*max=a[i];*d=i;}}voidfun(inta[],intn,int*max,int*d)\r\n{\r\ninti;\r\n*max=a[0];\r\n*d=0;\r\nfor(i=0;i<n;i++)/*將最大的元素放入指針max所指的單元,最大元素的下標(biāo)放入指針d所指的單元*/\r\nif(*max<a[i])\r\n{*max=a[i];*d=i;}\r\n}解析:該程序直接使用形參max和d,由于它們都是指針變量,所以要引用它所指向的變量時要對它進行指針運算,也即*號運算。

28.intfun(inta[]intn){intij=l;for(i=1;i<n;i++)if(a[j-1]!=a[i])/*若該數(shù)與前一個數(shù)不相同則要保留*/a[j++]=a[i];returnj;/*返回不同數(shù)的個數(shù)*/}intfun(inta[],intn)\r\n{\r\ninti,j=l;\r\nfor(i=1;i<n;i++)\r\nif(a[j-1]!=a[i])/*若該數(shù)與前一個數(shù)不相同,則要保留*/\r\na[j++]=a[i];\r\nreturnj;/*返回不同數(shù)的個數(shù)*/\r\n}解析:本題程序的流程是:讓i,j都從1開始,其中j用于控制刪除后剩下的數(shù)中的下標(biāo),i用于搜索原數(shù)組中的元素。j始終是新數(shù)組已有元素中最后一個元素的下一個元素的下標(biāo),所以if()中的條件是a[j-1]!=a[i],其中a[j-1]就是新數(shù)組中的最后一個元素,若條件成立,則表示出現(xiàn)了不同的值,所以a[i]要留下到新數(shù)組中。注意本題中i,j的初值都要從1開始,該算法只能用于數(shù)組已排序的題目中。

29.voidfun(int*wintpintn){intiJ;inta[N];for(i=0;i<=p;i++)a[i]=w[i]for(i=p+1j=0;i<n;i++j++)w[j]=w[i];for(i=0;i<=p;i++)w[n-p-1+i]=a[i];}voidfun(int*w,intp,intn)\r\n{inti,J;\r\ninta[N];\r\nfor(i=0;i<=p;i++)a[i]=w[i]\r\nfor(i=p+1,j=0;i<n;i++,j++)w[j]=w[i];\r\nfor(i=0;i<=p;i++)w[n-p-1+i]=a[i];\r\n}解析:將數(shù)組后面的元素向前平移,肯定會將前面的元素覆蓋。因此,可以定義一個數(shù)組用來暫時存放前面的元素??梢韵葘[0]~w[p]依次賦給a[0]~a[p];然后將w[p]~w[n—1)

移到數(shù)組的前面:再將a[0]~a[p)依次賦給w[n-p-1+i]~w[n—1]。

30.voidfun(char*schart[]){inti=0;for(;*s!='\0';s++)/*找出ASCII值為奇數(shù)的字符依次存入數(shù)組t中*/if(*s%2==1)t[i++]=*s;t[i]='\0';/*在字符串的末尾口上串結(jié)束符*/}voidfun(char*s,chart[])\r\n{\r\ninti=0;\r\nfor(;*s!='\\0';s++)/*找出ASCII值為奇數(shù)的字符依次存入數(shù)組t中*/\r\nif(*s%2==1)\r\nt[i++]=*s;\r\nt[i]='\\0';/*在字符串的末尾口上串結(jié)束符*/\r\n}解析:要刪除ASCH值為偶數(shù)的字符,也就是要留下ASCH值為奇數(shù)的字符,由于最終是要求求出剩余字符(BPASCⅡ值為奇數(shù))形成的新串,所以本題程序的算法是從原字符串的頭到尾掃描并找出ASCⅡ值為奇數(shù)的字符依次存入數(shù)組沖。此外,還要注意數(shù)組t的下標(biāo)變化和下標(biāo)的初值(初值必須為0,即i=0),t[i++]州的作用是先使用t[i]然后再使自增1。任何字符串的末尾都要有串結(jié)束符。這種算法在很多題中都要用到,學(xué)習(xí)者可以舉一反三地找一些其他相關(guān)習(xí)題練習(xí)一下。

31.intfun(char*s){intij=0;for(i=0;s[i]!='\0';i++)if(s[i]!=''&&(s[i+l]==''||s[i+1]=='\O'))/*如果一個字母的下一個字符為空格或者結(jié)束標(biāo)記則表示一個單詞結(jié)束*/j++;returnj;/*返回單詞個數(shù)*/}intfun(char*s)\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!=\'\\0\';i++)\r\nif(s[i]!=\'\'&&(s[i+l]==\'\'||s[i+1]==\'\\O\'))/*如果一個字母的下一個字符為空格或者結(jié)束標(biāo)記,則表示一個單詞結(jié)束*/\r\nj++;\r\nreturnj;/*返回單詞個數(shù)*/\r\n}解析:判斷單詞的個數(shù),我們首先想到的是程序怎樣識別是一個單詞,也即循環(huán)語句中的fir(i=0;s[i]!='\\0';i++),本題重點是if句中的條件表達方式。

32.

解析:該程序功能是按分?jǐn)?shù)的高低排列學(xué)生的記錄。首先從數(shù)組中挑選一個最大的元素,把它和第一元素交換,接著從剩下的n-1個元素中再挑出一個最大的元素,把它和第二個元素交換,不斷重復(fù)以上過程,直到比較完最后兩個元素。

33.

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

34.intfun(inta[][N]intm){intij;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=a[i][j]*m;/*右上半三角元素中的值乘以m*/}intfun(inta[][N],intm)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i;j<N;j++)\r\na[i][j]=a[i][j]*m;/*右上半三角元素中的值乘以m*/\r\n}解析:本題考查表示右上關(guān)三角元素的算法。行下標(biāo)肯定是從0到N-1,而列下標(biāo)要根據(jù)行下標(biāo)來定,當(dāng)?shù)降趇行時列下標(biāo)要從第i列開始,所以我們在編寫程序時,第2個for()中有j=i(不是1);若要表示左下半三角元素時,行下標(biāo)也是從0到N-1,列下標(biāo)也是從0開始,但當(dāng)?shù)降趇行時列只到i。所以要把上述的第2個for()改成for(j=0;j<=i;++)。

35.B內(nèi)循環(huán)只循環(huán)一次就結(jié)束,第1次外循環(huán)時,t=t+b[0][b[0][0]]=1+b[0][0]=1+0=1;第2次外循環(huán)時,t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第3次外循環(huán)時,1=1+b[2][b[2][2]]=2+b[2][2]=2+2=4。故本題答案為B選項。

36.D

37.D2022-2023學(xué)年湖北省襄樊市全國計算機等級考試C語言程序設(shè)計模擬考試(含答案)學(xué)校:________班級:________姓名:________考號:________

一、單選題(12題)1.有以下程序main(){intm=3,n=4,x;x=-m++;x=x+8/++n;printf(“%d\n”,x);}程序運行后的輸出結(jié)果是______。A.3B.5C.-1D.-2

2.以下定義語句中正確的是()。

A.inta=b=0;

B.charA=65+1,b=‘b’;

C.floata=1,*b=&a,*c=&b;

D.doublea=0.0;b=1.1;

3.若有下列說明和語句,則對結(jié)構(gòu)體變量st中成員i的引用方式不正確的是()。Structstu{inti;intname;}st,*p;p=&st;

A.st.iB.*p.iC.(*p).iD.p->i

4.有以下程序:#include<stdio.h>main(){chars[]=“abcde”;s+=2;printf(“%d\n”,s[0]);}程序的運行結(jié)果是()。

A.輸出字符c的ASCII值B.程序出錯C.輸出字符cD.輸出字符a的ASCII值

5.有以下程序:

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

A.4321098765B.5678901234C.0987654321D.0987651234

6.鏈表不具備的特點是()。

A.可隨機訪問任一結(jié)點B.插入刪除不需要移動元素C.不必事先估計存儲空間D.所需空間與其長度成正比

7.下列標(biāo)識符不是關(guān)鍵字的是()。

A.breakB.charC.SwithchD.return

8.樹是結(jié)點的集合,它的根結(jié)點數(shù)目是()。

A.有且只有1B.1或多于1C.0或1D.至少2

9.若有定義“intx=10;”,則表達式“x-=x+x”的值為()。

A.0B.-20C.-10D.10

10.有以下程序(strcat函數(shù)用于連接兩個字符串):#include<stdio.h>#include<string.h>main(){chara[20]=“ABCD\0EFG\0”,b[]=“UK”;strcat(a,b);printf(“%s\n”,a);}程序的運行結(jié)果是()。

A.UKB.ABCDE\0FG\0UKC.ABCDUKD.EFGUK

11.有以下程序#definef(x)x*xmain(){inti;i=f(4+4)/f(2+2);printf(“%d\n”,i);}執(zhí)行后輸出結(jié)果是()A.28B.22C.16D.4

12.若有定義“doublex,y,*px,*py;”,執(zhí)行了“px=&x;py=&y;”之后,正確的輸入語句是()。

A.scanf(“%lf%le”,px,py);

B.scanf(“%f%f”,&x,&y);

C.scanf(“%f%f”,x,y);

D.scanf(“%lf%lf”,x,y);

二、2.填空題(12題)13.以下定義的結(jié)構(gòu)體類型擬包含兩個成員,其中成員變量info用來存入整形數(shù)據(jù);成員變量link是指向自身結(jié)構(gòu)體的指針,請將定義補充完整。

structnode

{intinfo;

【】link;};

14.一棵二叉樹中共有80個葉子結(jié)點與10個度為1的結(jié)點,則該二叉樹中的總結(jié)點數(shù)為【】。

15.數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類型,它們是______數(shù)據(jù)模型、邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。

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

charch='B';

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

17.順序存儲方法是把邏輯上相鄰的結(jié)點存儲在物理位置______的存儲單元中。

18.問題處理方案的正確而完整的描述稱為______。

19.在面向?qū)ο蠓椒ㄖ?,類的實例稱為______。

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

#include<stdio.h>

main()

{char*p={"BOOL""OPK","H","SP"};

inti;

for(i=3,i>=0;i--,i--)printf("%",*p[i]);

printf("\n");

}

21.若有下列定義和語句:

char*s1="12345",*s2="1234";

printf("%d\n",strlen(strcpy(s1,s2)));

則輸出結(jié)果為______。

22.以下程序運行后的輸出結(jié)果是()。#definePower2(x)x*xmain(){inti=6,j=8;printf("%d\n",Power2(i+j));}

23.Jackson結(jié)構(gòu)化程序設(shè)計方法是英國的M.Jackson提出的,它是一種面向______的設(shè)計方法。

24.通常,將軟件產(chǎn)品從提出、實現(xiàn)、使用維護到停止使用退役的過程稱為【】。

三、3.程序設(shè)計題(10題)25.編寫一個函數(shù),從傳入的num個字符中找出最長的一個字符串,并通過形參指針max傳回該串地址(用****作為結(jié)束輸入的標(biāo)志)。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("輸入若干個字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作為結(jié)束輸入的標(biāo)志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

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

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

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

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubles;

}STREC;

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

{

}

main()

STRECsIN]={{"GA05",85},{"GA03",76},

{"GA02",69},{"GA04",85},{"GA01",91},

{"GA07",72},{"GA08",64},{"GA06",87},

{"GA09",60},{"GAll",79},{"GA12",73},

{"GA10",90}};

STRECh[N],t;

FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichis

higherthan%7.3f:In",n,ave);

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

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

printf("\n");

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

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

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

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

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

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

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

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

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

fclose(out);

}

27.請編寫一個函數(shù)fun(),它的功能是:找出一維數(shù)組元素中最大的值和它所在的下標(biāo),最大值和它所在的下標(biāo)通過形參傳回。數(shù)組元素中的值已在主函數(shù)中賦予。

主函數(shù)中x是數(shù)組名,n是x中的數(shù)據(jù)個數(shù),max存放最大值,index存放最大值所在元素的下標(biāo)。

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

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

{

}

main()

{

inti,x[20],max,index,n=10;

randomize();

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

{

x[i]=rand()%50;

printf("%4d",x[i]);

/*輸出一個隨機數(shù)組*/

}

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

28.請編寫函數(shù)fun(),該函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。

例如,若一維數(shù)組中的數(shù)據(jù)是:

2223445666677899101010

刪除后,數(shù)組中的內(nèi)容應(yīng)該是:

2345678910。

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

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

試題程序:

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{

}

main()

{

inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,

8,9,9,10,10,10,10},i,n=20;

printf("Theoriginaldata:\n");

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

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

n=fun(a,n);

printf("\n\nThedataafterdeleted

:\n");

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

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

printf("\n\n");

}

29.請編寫函數(shù)fun(),它的功能是:移動一維數(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,4。部分源程序在文件PROG1.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。

#include<stdiO.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

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

inti,p,n=15;

printf("Theodginaldata:\n");

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

printf("\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

for(i=0;i<n;i++)printf("%3d”,a[i]);

}

30.請編寫函數(shù)fun(),該函數(shù)的功能是:將s所指字符串中ASCII值為偶數(shù)的字符刪除,串中剩余字符形成一個新串放在t所指的數(shù)組中。

例如,若s所指字符串中的內(nèi)容為ABCDEFGl2345,其中字符B的ASCⅡ碼值為偶數(shù)、…、字符2的ASCⅡ碼值為偶數(shù)、…,都應(yīng)當(dāng)刪除,其他依次類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是ACEGl35。

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

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

試題程序;

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf(,\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

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

}

31.請編寫函數(shù)fun(),該函數(shù)的功能是:統(tǒng)計一行字符串中單詞的個數(shù),作為函數(shù)值返回。一行字符串在主函數(shù)中輸入,規(guī)定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。

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

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

試題程序:

#include<string.h>

#include<stdio,h>

#defineN80

intfun(char*s)

{

}

main()

{

charline[N];

intnum=0;

printf("Enterastring:\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",

num);

}

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

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

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

33.編寫函數(shù)fun,它的功能是計算下列級數(shù)和,和值由函數(shù)值返回。

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

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

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

34.下列程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(inta[][N],intn),該函數(shù)的功能是:使數(shù)字右上半三角元素中的值乘以m。

例如,若m的值為2,a數(shù)組中的值為

a=19

27

則返回主程序后a數(shù)組的值應(yīng)為

218

214

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N],intm)

{

}

main()

{

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

clrscr();

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

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

/*輸出一個隨機的5×5矩陣*/

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

{a[i][j]=rand()%20;

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

}

printf("\n");

}

do

m=rand()%10;

while(m>=3);/*產(chǎn)生一個上于3的隨機數(shù)*/

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

fun(a,m);

printf("THERESULT\n");

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

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

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

printf("\n");

}

}

四、單選題(0題)35.有以下程序:#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];printf(“%d\n”,t);}程序的運行結(jié)果是()。

A.3B.4C.1D.9

五、單選題(0題)36.線性結(jié)構(gòu)是數(shù)據(jù)元素之間存在一種()。

A.一對多關(guān)系B.多對多關(guān)系C.多對一關(guān)系D.一對一關(guān)系

六、單選題(0題)37.允許對隊列進行的操作有()。

A.對隊列中的元素排序B.取出最近進隊的元素C.在隊頭元素之前插入元素D.刪除隊頭元素

參考答案

1.D本題考核的知識點是運算符的優(yōu)先級。主函數(shù)中首先定義了整型變量m、n和x,并給m和n賦初值為3和4,接著執(zhí)行兩條賦值語句,第一條x=-m++等價于x=-(m++),其值即為-3,第二條x=x+8/++n等價于X=X+8/(++n),即為x=-3+8/5=-2,因此最后輸出x的值為-2。所以,4個選項中選項D符合題意。

2.BA選項中的變量b沒有定義,不能直接給變量a賦值。C選項中,*b、*c表示的是一個實型變量的地址,不能將指針型變量b的地址賦值給指針型變量c。D選項中,“a=0.0”后面應(yīng)該為逗號,不能是分號。故本題答案為B選項。

3.B解析:本題主要考查結(jié)構(gòu)指針:p=&st,訪問結(jié)構(gòu)體的成員,可以通過結(jié)構(gòu)變量訪問,即st.i,也可以用等價的指針形式,即(*p).i和p->i。

4.B在C語言中,數(shù)組名類似于一個指向數(shù)組首地址的指針常量,一旦定義就不能修改其內(nèi)容。所以本題中的“s+=2;”語句讓數(shù)組名S的內(nèi)容加2是錯誤的,編譯無法通過。故本題答案為B選項。

5.B該程序首先給一維數(shù)組賦值,然后三次調(diào)用fun函數(shù),其中fun(a,0,3);功能是將一維數(shù)組中第1個元素和第4個元素互換,第2個元素和第3個元素互換;其中fun(a,4,9);功能是將一維數(shù)組中第5個元素和第10個元素互換,第6個和第9個元素互換,第7個元素和第8個元素互換;其中fun(a.O,9);功能是將將一維數(shù)組中第l個元素和第10個元素互換,第2個元素和第9個元素互換……依此類推。因此B選項正確。

6.A

7.C在C語言中,字母區(qū)分大小,所以break、char、return、switch都是C語言中的關(guān)鍵字,而Swithch不是。

8.A樹形結(jié)構(gòu)是一類重要的非線性數(shù)據(jù)結(jié)構(gòu)。樹是n(n≥0)個結(jié)點的集合,對應(yīng)任意一棵非空樹,它具有以下幾點重要的性質(zhì)。

①有且僅有一個特定的稱為根的結(jié)點。

②當(dāng)n>1時,其余結(jié)點可分為m(m>0)個互不相交的有限集T1,T2,…,TM,其中每一個集合本身又是一棵樹,稱為子樹。

因此,本題的正確答案有且只有一個。

9.C算術(shù)運算符“+”的優(yōu)先級高于,且“-=”的結(jié)合方向為自右向左。所以表達式“x-=x+x”可以表示成“x=x-(x+x)=10-(10+10)=-10”。故本題答案為C選項。

10.C字符數(shù)組a中包含兩個‘\\0’。遇到第1個‘\\0’時就表示字符串a(chǎn)結(jié)束。字符串處理函數(shù)strcat(字符數(shù)組a,字符數(shù)組b),功能是連接兩個字符串,把字符串b連接到字符串a(chǎn)的后面,結(jié)果放在字符數(shù)組a中。連接時將字符串a(chǎn)后的‘\\0’取消,只在新串最后保留一個‘\\0’。本題相當(dāng)于將“ABCD”和“IJK”連接。故本題答案為C選項。

11.A解析:f(4+4)/f(2+2)=4+4*4+4/2+2*2+2=28。

12.A因為x和y都是double型數(shù)據(jù),輸入時的格式字符應(yīng)為%lf,B、C選項錯誤。D選項中的“scanf(“%lf%lf”,x,y);”應(yīng)為“scanf(“%lf%lf”,&x,&y);”。故本題答案為A選項。

13.structnode*structnode*解析:本題中的結(jié)構(gòu)類型名為structnode,所以空白處應(yīng)填:structnode*。即定義一個指向自身的結(jié)構(gòu)體指針。

14.179179解析:在任意一棵二叉樹中,度為0的結(jié)點(即葉子結(jié)點)總是比度為2的結(jié)點多一個。本題中的二叉樹有80個葉子結(jié)點,因此,該二叉樹有80-1=79個度為2的結(jié)點;又知本題中的二叉樹有10個度為1的結(jié)點。因此,本題中的二叉樹總結(jié)點數(shù)為:葉子結(jié)點數(shù)+度為1的結(jié)點數(shù)+度為2的結(jié)點數(shù)=80+10+79=179

15.概念概念

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

17.相鄰相鄰

18.算法或程序或流程圖算法或程序或流程圖解析:算法是問題處理方案正確而完整的描述。

19.對象對象解析:類描述的是具有相似性質(zhì)的一組對象。例如,每本具體的書是一個對象,而這些具體的書都有共同的性質(zhì),它們都屬于更一般的概念“書”這一類對象。一個具體對象稱為類的實例。

20.SO

21.44解析:strcpy(s1,s2)函數(shù)的作用是將字符串s2中的內(nèi)容拷貝到字符串s1中的內(nèi)容覆蓋。strlen()函數(shù)是求字符串的長度。本題實際上是要求s2字符串的長度,即是4。

22.6262解析:本題考查的是宏定義。帶參數(shù)的宏定義是按#indefine命令行中指定的字符串從左到右進行轉(zhuǎn)換。本題中替換的式子為:6+8*6+8,代入i,j的值得到62。

23.數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)

24.軟件生命周期軟件生命周期解析:軟件產(chǎn)品從考慮其概念開始,到該軟件產(chǎn)品不能使用為止的整個時期都屬于軟件生命周期。一般包括可行性研究與需求分析、設(shè)計、實現(xiàn)、測試、交付使用以及維護等活動。

25.fun(char(*a)[81]intnumchar*max){inti=0;max=a[0];for(i=0;i<num;i++)/*找出最長的一個字符串*/if(strlen(max)<strlen(a[i]))max=a[i];returnmax;/*傳回最長字符串地址*/}fun(char(*a)[81],intnum,char*max)\r\n{\r\ninti=0;\r\nmax=a[0];\r\nfor(i=0;i<num;i++)/*找出最長的一個字符串*/\r\nif(strlen(max)<strlen(a[i]))\r\nmax=a[i];\r\nreturnmax;/*傳回最長字符串地址*/\r\n}解析:做本題之前,我們先應(yīng)該明白ss是一個指向一維數(shù)組的指針變量,max是指向指針變量的指針變量。所以引用時要注意加上*。我們不可能只用max,因為ss[0]是一個數(shù)組地址而不是一個指針的地址。

26.doublefun(STREC*aSTREC*bint*n){inti;doubleay=0.0;*n=0;for(i=0;i<N;i++)av=av+a[i].s;ay=ay/N;/*求平均值*/for(i=0;i<N;i++)if(av<=a[i].s){b[*n]=a[i];*n-*n+l;}/*將高于等于平均分的學(xué)生存從所指存儲單元中并統(tǒng)計人數(shù)*/returnay;/*返回嚴(yán)均分*/}doublefun(STREC*a,STREC*b,int*n)\r\n{\r\ninti;\r\ndoubleay=0.0;\r\n*n=0;\r\nfor(i=0;i<N;i++)\r\nav=av+a[i].s;\r\nay=ay/N;/*求平均值*/\r\nfor(i=0;i<N;i++)\r\nif(av<=a[i].s)\r\n{b[*n]=a[i];*n-*n+l;}/*將高于等于平均分的學(xué)生存從所指存儲單元中,并統(tǒng)計人數(shù)*/\r\nreturnay;/*返回嚴(yán)均分*/\r\n}解析:本題中第1個循環(huán)的作用求出所有分?jǐn)?shù)的總和,只有進行了av=av/N后才得到平均值(我們在前面的程序中碰到過類似問題)。第2個循環(huán)的作用是將高于等于平均分的學(xué)生存入b所指存儲單元中。同一結(jié)構(gòu)體變量之間可以互相賦值。

本程序中直接用*n來表示b的下標(biāo),注意開始時要給,*n賦0,且使用時不能少*號。因為單獨的n是一個指針變量,而我們要用的是它所指向的那個存儲單元中的值。

27.voidfun(inta[]intnint*maxint*d){inti;*max=a[0];*d=0;for(i=0;i<n;i++)/*將最大的元素放入指針max所指的單元最大元素的下標(biāo)放入指針d所指的單元*/if(*max<a[i]){*max=a[i];*d=i;}}voidfun(inta[],intn,int*max,int*d)\r\n{\r\ninti;\r\n*max=a[0];\r\n*d=0;\r\nfor(i=0;i<n;i++)/*將最大的元素放入指針max所指的單元,最大元素的下標(biāo)放入指針d所指的單元*/\r\nif(*max<a[i])\r\n{*max=a[i];*d=i;}\r\n}解析:該程序直接使用形參max和d,由于它們

溫馨提示

  • 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

提交評論