2021-2022學(xué)年甘肅省蘭州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)模擬考試(含答案)_第1頁
2021-2022學(xué)年甘肅省蘭州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)模擬考試(含答案)_第2頁
2021-2022學(xué)年甘肅省蘭州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)模擬考試(含答案)_第3頁
2021-2022學(xué)年甘肅省蘭州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)模擬考試(含答案)_第4頁
2021-2022學(xué)年甘肅省蘭州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)模擬考試(含答案)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

2021-2022學(xué)年甘肅省蘭州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)模擬考試(含答案)學(xué)校:________班級:________姓名:________考號(hào):________

一、單選題(12題)1.有以下程序:#include<stdio.h>voidfun(intn){if(n/2)fun(n/2);printf(“%d”,n%2);}main(){fun(10);printf(“\n”);}程序運(yùn)行后的輸出結(jié)果是()。

A.0101B.1000C.1100D.1010

2.在面向?qū)ο蠓椒ㄖ?,一個(gè)對象請求另一對象為其服務(wù)的方式是通過發(fā)送()。A.調(diào)用語句B.命令C.口令D.消息

3.若有說明“chars1[30]="abc",s2[]="defghi";",則在使用函數(shù)stoat(s1,s2)后,結(jié)果是()。

A.s1的內(nèi)容更新為abcdefghi

B.s1的內(nèi)容更新為defghi\0

C.s1的內(nèi)容更新勾defghiabc\0

D.s1的內(nèi)容更新為abcdefghi\0

4.下列敘述中正確的是()。A.一個(gè)邏輯數(shù)據(jù)結(jié)構(gòu)只能有一種存儲(chǔ)結(jié)構(gòu)

B.邏輯結(jié)構(gòu)屬于線性結(jié)構(gòu),存儲(chǔ)結(jié)構(gòu)屬于非線性結(jié)構(gòu)

C.一個(gè)邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu),且各種存儲(chǔ)結(jié)構(gòu)不影響數(shù)據(jù)處理的效率

D.一個(gè)邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu),且各種存儲(chǔ)結(jié)構(gòu)影響數(shù)據(jù)處理的效率

5.廣義表((a),a)的表頭是()。

A.aB.(a)C.((a))D.()

6.設(shè)char型變量x中的值為10100111,則表達(dá)式(2+x)(-3)的值為______。

A.10101001B.10101000C.11111101D.1010101

7.用二分法查找一個(gè)長度為10的,排好序的線性表,查找不成功時(shí),最多需要比較()次

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

8.數(shù)據(jù)庫DB、數(shù)據(jù)庫系統(tǒng)DBS、數(shù)據(jù)庫管理系統(tǒng)DBMS之間的關(guān)系是()。

A.DB包含DBS和DBMSB.DBMS包含DB和DBSC.DBS包含DB和DBMSD.沒有任何關(guān)系

9.在具有101個(gè)元素的順序表中查找值為x的元素結(jié)點(diǎn)時(shí),平均比較元素的次數(shù)為()。

A.50B.51C.100D.101

10.輸出語句“printf(“%d\n”,11+011);”的輸出結(jié)果是()。

A.20B.22C.022D.021

11.若有定義floata[15],*p=a;,且數(shù)組a的首地址為300H,則p+13所指向的數(shù)組元素的地址為()。

A.334HB.30DHC.352HD.31AH

12.若a是數(shù)值類型,則邏輯表達(dá)式“(a==1)||(a!=1)”的值是()。

A.1B.0C.2D.不知道a的值,不能確定

二、2.填空題(12題)13.下述函數(shù)用于統(tǒng)計(jì)一行字符中的單詞個(gè)數(shù),單詞之間用空格分隔。

word_num(str

charstr[];

{inti,num=0,word=0;

for(i=0;str[i]!=【】;i++)

if(【】=")word=0

elseif(word=0)

{

word=1;

【】;

}

return(num);

}

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

main()

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

d=(a>b>C);

printf(“%d\n”,D);

}

15.下面程序的功能是:將字符數(shù)組a中下標(biāo)值為偶數(shù)的元素從小到大排列,其他元素不變。請?zhí)羁铡?/p>

#include<stdio.h>

#include<string.h>

main()

{chara[]="clanguage",t;

inti,j,k;

k=strlen(a);

for(i=0;i<=k-2;i+=2)

for(j=i+2;j<=k;j+=2;)

if(【】)

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

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

}

16.以下程序輸出的最后一個(gè)值是【】。

intff(intn)

{staticintf=1;

f=f*n;

retumf;

}

main()

{inti;

for(i=1;i<=5;i++)printf("%d\n",ff(i))i

}

17.以下程序的功能是輸出如下形式的方陣:

13141516

9101112

5678

1234

請?zhí)羁铡?/p>

main()

{inti,i,x;

for(j=4;j______;j--)

{for(i=1;i<4;i++)

{x=(j-1)*4+______;

printf("%4d",x);

}

printf("\n");

}

18.下面程序有兩個(gè)printf語句,如果第一個(gè)printf語句輸出的是194,則第二個(gè)printf語句的輸出結(jié)果是【】。

main()

{inta[10]={1,2,3,4,5,6,7,8,9,0},*p;

p=a;

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

printf("%\n",p+9);

}

19.以下程序運(yùn)行后的輸出結(jié)果是______。

voidswap(intx,inty)

{intt;

t=x;x=y;y=t;printf("%d%d",x,y);

}

main()

{inta=3,b=4;

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

}

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

fun(inta)

{intb=0;staticintc=3;

b++;c++;

return(a+b+c);

}

main()

{inti,a=5;

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

printf("\n");

}

21.以下程序中函數(shù)fun的功能是:構(gòu)成一個(gè)如圖所示的帶頭結(jié)點(diǎn)的單詞鏈表,在結(jié)點(diǎn)的數(shù)據(jù)域中放入了具有兩個(gè)字符的字符串。函數(shù)disp的功能是顯示輸出該單鏈表中所有結(jié)點(diǎn)中的字符串。請?zhí)羁胀瓿珊瘮?shù)disp。[*]

#include<stdio.h>

typedefstructnode/*鏈表結(jié)點(diǎn)結(jié)構(gòu)*/

{charsub[3];

structnode*next;

}Node;

Nodefun(chars)/*建立鏈表*/

{…}

voiddisp(Node*h)

{Node*

22.結(jié)構(gòu)化程序設(shè)計(jì)的3種基本結(jié)構(gòu)分別是順序、選擇和______。

23.若由以下定義,則不移動(dòng)指針p,且通過指針p引用值為98的數(shù)組元素的表達(dá)式是【】。

intw[10]={23,54,10,33,47,98,72,80,61},*p=w;

24.以下程序運(yùn)行后的輸出結(jié)果是______。

structNODE

{

inthum;

structNODE*next;

};

main()

{structNODEs[3]={{1,'\0'},{2,'\0'},{3,'\0'}},*p,*q,*r;

intsum=0:

s[0].next=s+1;

s[1].next=s+2;

s[2].next=s:

p=s;

q=p->next;

r=q->next;

sum+=q->nexs->num;

sum+=r>next->next->num:

prlntf("%d\n",sum;

}

三、3.程序設(shè)計(jì)題(10題)25.請編寫函數(shù)fun,函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個(gè)數(shù)。

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

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

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

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

26.m個(gè)人的成績存放在score數(shù)組中,請編寫函數(shù)fun(),它的功能是:將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在below所指的數(shù)組中。

例如,當(dāng)score數(shù)組中的數(shù)據(jù)為10,20,30,40,50,60,70,80,90時(shí),函數(shù)返回的人數(shù)應(yīng)該是4,below中的數(shù)據(jù)應(yīng)為10,20,30,40。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intbelow[])

{

}

main()

{

ihti,n,below[9];

intscore[9]={10,20,30,40,50,60,70,

80,90};

clrscr();

n=fun(score,9,below);

printf("\nBelowtheaveragescoreare:");

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

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

}

27.請編寫函數(shù)fun(),它的功能是:求出ss所指字符串中指定字符的個(gè)數(shù),并返回此值。

例如,若輸入字符串123412132,輸入字符1,則輸出3。

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

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

試題程序:

#include<coio.h>

#include<stdio.h>

#defineM81

intfun(char*ss,charc)

{

}

main()

{chara[M],ch;

clrscr();

printf("\nPleaseenterastring:");

gets(a);

printf("\nPleaseenterachar:");

ch=getchar();

printf("\nThenumberofthecharis:%d\n",fun(a,ch));

}

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

S=1-x+x2(上標(biāo))/2!-x3(上標(biāo))/3!+…+(-1*x)n(上標(biāo))/n!

例如,當(dāng)n=15,x=0.5時(shí),函數(shù)值為0.606531。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0.5,15));

}

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

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

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

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

30.編寫函數(shù)fun(),它的功能是;根據(jù)以下公式求p的值,結(jié)果由函數(shù)值帶回。m與n為兩個(gè)正數(shù)且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8時(shí),運(yùn)行結(jié)果為495.000000。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

printf("p=%f\n",fun(12,8));

}

31.請編一個(gè)函數(shù)fun,函數(shù)的功能是使實(shí)型數(shù)保留2位小數(shù),并對第三位進(jìn)行四舍五入(規(guī)定實(shí)型數(shù)為正數(shù))。

例如:實(shí)型數(shù)為1234.567,則函數(shù)返回1234.572000;

實(shí)型數(shù)為1234.564,則函數(shù)返回1234.562000。

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

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

32.學(xué)生的記錄由學(xué)號(hào)和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun,它的功能是:把分?jǐn)?shù)最高的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中,注意:分?jǐn)?shù)最高的學(xué)生可能不止一個(gè),函數(shù)返回分?jǐn)?shù)最高的學(xué)生的人數(shù)。

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

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

33.請編寫函數(shù)fun(),其功能是:將s所指字符串中除了下標(biāo)為奇數(shù)、同時(shí)ASCII值為偶數(shù)的字符外,其余的全部刪除,串中剩余字符所形成的一個(gè)新串放在t所指的數(shù)組中。

例如,若s所指字符串中的內(nèi)容為edB2A4Dsdg,其中字符A的ASCII碼值為奇數(shù),因此應(yīng)當(dāng)刪除;其中字符B的ASCII碼值為偶數(shù),但在數(shù)組中的下標(biāo)為偶數(shù),因此也應(yīng)當(dāng)刪除:而字符2的ASCII碼值為偶數(shù),所在數(shù)組中的下標(biāo)為奇數(shù),因此不應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是d24。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string,h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

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

}

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

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

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

試題程序:

#defineM4

#include<stdio.h>

fun(inta[])[M])

{

}

main()

{

intarr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7);

printf(“min=%d\n”,fun(arr));

}

四、單選題(0題)35.程序中頭文件typel.h的內(nèi)容是:#defineN5#defineM1N*3程序如下:#include“typel.h”#defineM2N*2main(){inti;i=M1+M2;Printf(“%d\n”,0;}程序編譯后運(yùn)行的輸出結(jié)果是:

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

五、單選題(0題)36.設(shè)有一個(gè)10階的對稱矩陣A,采用壓縮存儲(chǔ)方式,以行序?yàn)橹鞔鎯?chǔ),a1,1為第一個(gè)元素,其存儲(chǔ)地址為1,每個(gè)元素占1個(gè)地址空間,則a8,5的地址為()。

A.13B.33C.18D.40

六、單選題(0題)37.下列表達(dá)式中,可以正確表示的關(guān)系是()。

A.(x>=1)10(x<=0)B.x>1‖x=0C.x>=1ORx<=0D.X>=1&&x<=0

參考答案

1.D函數(shù)fun的作用是求一個(gè)十進(jìn)制數(shù)的二進(jìn)制數(shù)。通過輾轉(zhuǎn)相除法獲取這個(gè)整數(shù)的二進(jìn)制數(shù)。因此(10)10=(1010)2。故本題答案為D選項(xiàng)。

2.D解析:面向?qū)ο蟮氖澜缡峭ㄟ^對象與對象間彼此的相互合作來推動(dòng)的,對象間的這種相互合作需要一個(gè)機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制稱為消息。消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞的信息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統(tǒng)一了數(shù)據(jù)流和控制流。

3.Dstrcat(s1,s2)函數(shù)的功能是把s2字符串連接到s1字符串的末尾,要保證s1有足夠的空間容納下連接后的字符串。

4.DD)【解析】數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式,一種數(shù)據(jù)結(jié)構(gòu)可以根據(jù)需要采用不同的存儲(chǔ)結(jié)構(gòu),常用的存儲(chǔ)結(jié)構(gòu)有順序和鏈?zhǔn)浇Y(jié)構(gòu)。采用不同的存儲(chǔ)結(jié)構(gòu),其處理的效率是不同的。

5.B

6.D解析:異或運(yùn)算符(^)的運(yùn)算規(guī)則是:參加運(yùn)算的兩個(gè)相應(yīng)位同號(hào),則結(jié)果為0(假);異號(hào)則為1(真)。取反運(yùn)算符(-)的運(yùn)算規(guī)則是:對一個(gè)二進(jìn)制數(shù)按位取反,即將0變?yōu)?,1變?yōu)?。本題(-3)是對3(二進(jìn)制形式為00000011)按位取反即11111100。表達(dá)式(2+x)(-3)的值就等價(jià)于(00000010+10100111)^11111100,結(jié)果為01010101。

7.C

8.C(10)C)解析:DB即數(shù)據(jù)庫(Database),是統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合;DBMS即數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem),是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應(yīng)用程序提供訪問DB的方法;DBS即數(shù)據(jù)庫系統(tǒng)(DatabaseSystem)由如下5部分組成,數(shù)據(jù)庫(數(shù)據(jù))、數(shù)據(jù)庫管理系統(tǒng)(軟件)、數(shù)據(jù)庫管理員(人員)、系統(tǒng)平臺(tái)之一——硬件平臺(tái)(硬件)、系統(tǒng)平臺(tái)之二——軟件平臺(tái)(軟件)。

9.B

10.A“printf(“%d\\n”,11+011);”中,“11”為十進(jìn)制數(shù),“011”為八進(jìn)制數(shù),%d表示以十進(jìn)制格式輸出。因此,先將八進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),即(011)8=81×1+1×80=(9)10,相當(dāng)于“printf(“%d\\n”,11+9)”,輸出結(jié)果為20。故本題答案為A選項(xiàng)。

11.C解析:解答本題,首先要明白在對指針進(jìn)行加、減運(yùn)算的時(shí)候,數(shù)字“1”不是十進(jìn)制的數(shù)“1”,而是指'1'個(gè)存儲(chǔ)單元長度,而1個(gè)存儲(chǔ)單元長度占多少存儲(chǔ)空間,應(yīng)該視具體情況而定。如果基本類型是int型,移動(dòng)1個(gè)存儲(chǔ)單元的長度就是位移2個(gè)字節(jié),如果基本類型是float型,移動(dòng)1個(gè)存儲(chǔ)單元的長度就是位移4個(gè)字節(jié)。所以p+13所指向的數(shù)組元素的地址:300H+(13*上標(biāo))4)H=352H。

12.A邏輯或“||”要求兩邊的運(yùn)算對象有一個(gè)非零值,結(jié)果就為真。變量a的值不確定,但是若a為1,則左邊運(yùn)算對象的值為1;若a不為1,則右邊運(yùn)算對象的值為1,所以總能保證一邊為非零值。故本題答案為A選項(xiàng)。

13.\0'或0或NULLstr[i]num++或num=num+1或num+=1\\0'或0或NULL\r\nstr[i]\r\nnum++或num=num+1或num+=1解析:觀察題目要求,可以知道以下幾點(diǎn):

①for循環(huán)的結(jié)束條件應(yīng)當(dāng)是:str[i]已是字符串的最后一個(gè)字符;

②str[i]代表字符串str中的第i+1個(gè)字符;

③整型變量num的值是要記錄的單詞的個(gè)數(shù)。

C語言中規(guī)定字符串的最后一個(gè)字符是一個(gè)隱含的字符串結(jié)束符“\\0”,所以在題中第一個(gè)空中應(yīng)填寫“\\0”;題中第二個(gè)空應(yīng)填寫“str[i]”,以判斷當(dāng)前位置的字符是否為空格;題中第三個(gè)空中應(yīng)當(dāng)填寫“num++”,通過變量num的加1累加得到字符串中的單詞個(gè)數(shù)。

14.00解析:關(guān)系運(yùn)算符“>”的結(jié)合方式是從左向右的,所以在本題中的表達(dá)式a>b=c;從左向右開始計(jì)算,a>b的結(jié)果為“1”,接著1和c比較假,該空格處應(yīng)該填0。

15.a[I]>a[j]a[I]>a[j]解析:本題中的嵌套的循環(huán)結(jié)構(gòu)用在了數(shù)組元素的排序上。本題需要注意的一點(diǎn)是:由于題目只要求出下標(biāo)值為偶數(shù)的元素從小到大排序,所以內(nèi)外層for循環(huán)的條件變量變更條件都是+=2,最后通過條件a[i]>a[j]對元素大小進(jìn)行判斷并交換。

16.120120解析:靜態(tài)變量的類型說明符是static,靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)方式,它具有以下特點(diǎn):

①靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。

②對靜態(tài)局部變量是在編譯時(shí)賦初值的,即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。

③如在定義局部變量時(shí)不賦初值的話,則對靜態(tài)局部變量來說,編譯對自動(dòng)賦初值0(對數(shù)值型變量)或空字符(對字符變量)。(注意:C語言中的非靜態(tài)變量在定義時(shí),系統(tǒng)并不會(huì)自動(dòng)給它賦初值)

④雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)是不能引用它的。

本題中函數(shù)的功能是:與for語句一起求一個(gè)整數(shù)的階乘。

17.ii解析:本題使用了一個(gè)兩重for循環(huán)輸出如題所示的方陣。從外層for循環(huán)的最后一條語句prinff('\\n');可以看出,外層for循環(huán)每次輸出方陣的一行,由于方陣是4行所以外層循環(huán)會(huì)循環(huán)4次,又從j=4和卜可以看出這4次循環(huán),循環(huán)變量i的值分別為4、3、2、1.故前一空應(yīng)該填j>=1或者j>0,以保證j等于0時(shí)循環(huán)結(jié)束。內(nèi)層循環(huán)控制每行輸出的4個(gè)數(shù),其循環(huán)變量i從1遞增到4,由于每行的4個(gè)結(jié)果也是差1遞增的,所以將每次結(jié)果減去循環(huán)變量i的值為一個(gè)常數(shù),每行分別是12、8、4、0,而這些值正好與4次外循環(huán)中表達(dá)式(j-1)*4的值相吻合,故后一空應(yīng)該填i。

18.1a61a6解析:對于指針變量的運(yùn)算,就是對地址的運(yùn)算。本題中由于指針指向的是整型變量,所以,使指針變量移動(dòng)9個(gè)位置也就是移動(dòng)18個(gè)字節(jié)。注意,本題是以十六進(jìn)制輸出的。

19.4334

20.010111212010111212解析:本題考查的是靜態(tài)局部變量的運(yùn)用。靜態(tài)局部變量的作用域與普通局部變量一樣,但它的生存期將延長到程序運(yùn)行結(jié)束。本題的主函數(shù)中使用一個(gè)for循環(huán)輸出循環(huán)變量i和fun(a)的值,由于a的值一直沒被修改過,所以三次調(diào)用的都是fun(5)。第1次調(diào)用,b=0,c=3,所以返回值為5+1+4=10;第2次調(diào)用,因?yàn)閏是靜態(tài)局部變量,它仍然保存著上次調(diào)用結(jié)束時(shí)的值4,而b重新被創(chuàng)建和初始化為0,所以返回值為5+1+5=11;同理,第3次調(diào)用返回的是12。所以,程序最終輸出為:010111212。

21.

22.重復(fù)(循環(huán))重復(fù)(循環(huán))解析:結(jié)構(gòu)化程序設(shè)計(jì)包括3種基本的結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)(循環(huán)結(jié)構(gòu)),利用這3種結(jié)構(gòu)就足以表達(dá)出各種其他形式結(jié)構(gòu)的程序設(shè)計(jì)方法。其中利用循環(huán)結(jié)構(gòu),可以簡化大量的程序執(zhí)行。

23.*(p+5)或p[5]*(p+5)或p[5]解析:本題的考查點(diǎn)是通過指針引用數(shù)組元素。98是數(shù)組w的第5個(gè)元素(最開始的為第0個(gè)),而通過*p=w已經(jīng)將p指向了數(shù)組w,要想不移動(dòng)指針p而引用98,可以有以下兩種方法:p[5]、*(p+5)。

24.55解析:主函數(shù)首先聲明了一個(gè)結(jié)點(diǎn)數(shù)組s[3],并分別初始化其成員num為1,2、3,而成員next全部被初始化為'\\0',也就是0。下面又用三條語句s[0].next=s+1;s[1].next=s+2;s[2].next=s;分別將三個(gè)結(jié)點(diǎn)指向其后面一個(gè)結(jié)點(diǎn),而最后一個(gè)結(jié)點(diǎn)指向笫1個(gè)結(jié)點(diǎn),構(gòu)造出一條單向循環(huán)鏈表。接下來用結(jié)點(diǎn)指針p=s即讓其指向s[0],然后讓q=p->next,即指向了s[1],r=-q->next即讓r指向s[2],然后讓一個(gè)累計(jì)變量sam累加q->next->hum和r->next->next->num,因?yàn)閝指向s[1)所以它的next指針指向的是s[2],故第1次累加的是s[2].num=3,而r指向的是s[2]所以它的next是s[0],s[0]的next指向s[1],故笫2次累加的是s[1].num=2。所以程序最終輸出結(jié)果為5。

25.

解析:該程序功能是刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。解題思路是,首先在函數(shù)中定義臨時(shí)變量指向每一個(gè)元素,然后在循環(huán)過程中將臨時(shí)值和其他元素進(jìn)行比較,如果相同,那么跳過相同字符。

26.intfun(intscore[]intmintbelow[]){intij=0;floatav=0.0;for(i=0;i<m;i++)av=av+score[i]/m;/*求平均值*/for(i=0;i<m;i++)if(score[i]<av)/*如果分?jǐn)?shù)低于平均分則將此分?jǐn)?shù)放入below數(shù)組中*/below[j++]=score[i];returnj;/*返回低于平均分的人數(shù)*/}intfun(intscore[],intm,intbelow[])\r\n{\r\ninti,j=0;\r\nfloatav=0.0;\r\nfor(i=0;i<m;i++)\r\nav=av+score[i]/m;/*求平均值*/\r\nfor(i=0;i<m;i++)\r\nif(score[i]<av)/*如果分?jǐn)?shù)低于平均分,則將此分?jǐn)?shù)放入below數(shù)組中*/\r\nbelow[j++]=score[i];\r\nreturnj;/*返回低于平均分的人數(shù)*/\r\n}解析:該題第1個(gè)循環(huán)的作用是求出平均分av,第2個(gè)循環(huán)的作用是找出低于平均分的成績并存入below數(shù)組中。

27.intfun(char*sscharc){inti=0;for(;*ss!='\0';ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的個(gè)數(shù)*/returni;}intfun(char*ss,charc)\r\n{\r\ninti=0;\r\nfor(;*ss!='\\0';ss++)\r\nif(*ss==c)\r\ni++;/*求出ss所指字符串中指定字符的個(gè)數(shù)*/\r\nreturni;\r\n}解析:從字符串ss中找出子字符串的方法是:從第1個(gè)字符開始,對字符串進(jìn)行遍歷:若ss串的當(dāng)前字符等于t串的第1個(gè)字符,兩字符串的指針自動(dòng)加1,繼續(xù)比較下一個(gè)字符;若比較至字符串的結(jié)尾,則跳出循環(huán);若“串的字符和c串的字符不對應(yīng)相同,則繼續(xù)對,s串的下一個(gè)字符進(jìn)行處理。本程序是采用逐一比較的方式找出出現(xiàn)的次數(shù)。循環(huán)的作用是在串中從左到右逐一走動(dòng),if()的作用是進(jìn)行判斷是否相同,若與c相同則表示又出現(xiàn)一次.

28.doublefun(doublexintn){intij=1;doubles=1.0s1=1.0;for(i=1;i<=n;i++){j=-1*j;s1=s1*i/*各項(xiàng)中的階乘*/s=s+j*pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti,j=1;\r\ndoubles=1.0,s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{\r\nj=-1*j;\r\ns1=s1*i/*各項(xiàng)中的階乘*/\r\ns=s+j*pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1來表示每項(xiàng)的分母(即各項(xiàng)中的階乘),要注意本程序中s和s1的初值都為1。注意到本題的公式中是加減相間的,這里要學(xué)會(huì)使用語句j=-1*j來實(shí)現(xiàn)。

29.

解析:該程序功能是刪除字符串前導(dǎo)和尾部的“*”號(hào)。解題過程是根據(jù)主函數(shù)中求出的前導(dǎo)和尾部的“*”數(shù)目,作為for循環(huán)條件,并且在循環(huán)過程中第一個(gè)非“*'號(hào)開始前移,實(shí)現(xiàn)函數(shù)功能。

30.floatfun(intmintn){inti;doublep=1.0;for(i=1;i<=m;i++)p=p*i;/*求m!*/for(i=1;i<=n;i++)p=p/i;/*求m!/n!*/for(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/returnp;}floatfun(intm,intn)\r\n{\r\ninti;\r\ndoublep=1.0;\r\nfor(i=1;i<=m;i++)p=p*i;/*求m!*/\r\nfor(i=1;i<=n;i++)p=p/i;/*求m!/n!*/\r\nfor(i=1;i<=m-n;i++)p=p/i;/*求m!/(n!(m-n)!)*/\r\nreturnp;\r\n}解析:本題中,欲求P的值,需要先求m,n,m-n的階乘值,可用循環(huán)語句實(shí)現(xiàn)。注意階乘值應(yīng)當(dāng)是double類型,若定義x,y,z為整型變量,則p=x/(y*z)中的除法為整數(shù)除法。

31.

解析:該程序功能是進(jìn)行四舍五入。其中,通常求實(shí)數(shù)x保留m位小數(shù),首先將x擴(kuò)大10(m+1)倍,擴(kuò)大后的x加上5后,進(jìn)行截取判斷,最后進(jìn)行恢復(fù)。

32.

解析:該程序功能是把分?jǐn)?shù)最高的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中。本題是關(guān)于求解結(jié)構(gòu)體中某些成員的最大值,首先將第一個(gè)值設(shè)定為最大值,并在循環(huán)中將其他所有值與該值進(jìn)行比較,求得最大值。然后將最大值與所有值進(jìn)行比較,求得所有的最大值。

33.voidfun(char*schart[]){intij=0;for(i=0;s[i]!='\0';i++)if(i%2!=0&&s[i]%2==0)/*將s所指字符串下標(biāo)為奇數(shù)同時(shí)ASCII值為偶數(shù)的字符放入數(shù)組t中*/t[j++]=s[i];t[j]='\0';/*在字符串最后加上結(jié)束標(biāo)志位*/}voidfun(char*s,chart[])\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!='\\0';i++)\r\nif(i%2!=0&&s[i]%2==0)/*將s所指字符串下標(biāo)為奇數(shù)同時(shí)ASCII值為偶數(shù)的字符放入數(shù)組t中*/\r\nt[j++]=s[i];\r\nt[j]='\\0';/*在字符串最后加上結(jié)束標(biāo)志位*/\r\n}解析:本題要求除了下標(biāo)為奇數(shù)同時(shí)ASCII值為偶數(shù)的字符之外,其他字符都刪除。即題目要求留下下標(biāo)為奇數(shù)同時(shí)ASCII值為偶數(shù)的字符。C語言中并沒有直接刪除字符的算法,請大家在做題的時(shí)候注意。

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

35.C解析:編譯預(yù)處理時(shí),用“typel.h”中的內(nèi)容替代命令#include“typel.h”。表達(dá)式“i=M1+M2”經(jīng)過宏替換為“i=5*3+5*2”即i=25,所以最后輸出的i的值為25。

36.B

37.A解析:題中要求x的取值是小于等于0或者大于等于1,這說明表達(dá)式是或的關(guān)系,所以在寫成C語言表達(dá)式應(yīng)是邏輯或的關(guān)系,邏輯或運(yùn)算符是'‖'。2021-2022學(xué)年甘肅省蘭州市全國計(jì)算機(jī)等級考試C語言程序設(shè)計(jì)模擬考試(含答案)學(xué)校:________班級:________姓名:________考號(hào):________

一、單選題(12題)1.有以下程序:#include<stdio.h>voidfun(intn){if(n/2)fun(n/2);printf(“%d”,n%2);}main(){fun(10);printf(“\n”);}程序運(yùn)行后的輸出結(jié)果是()。

A.0101B.1000C.1100D.1010

2.在面向?qū)ο蠓椒ㄖ?,一個(gè)對象請求另一對象為其服務(wù)的方式是通過發(fā)送()。A.調(diào)用語句B.命令C.口令D.消息

3.若有說明“chars1[30]="abc",s2[]="defghi";",則在使用函數(shù)stoat(s1,s2)后,結(jié)果是()。

A.s1的內(nèi)容更新為abcdefghi

B.s1的內(nèi)容更新為defghi\0

C.s1的內(nèi)容更新勾defghiabc\0

D.s1的內(nèi)容更新為abcdefghi\0

4.下列敘述中正確的是()。A.一個(gè)邏輯數(shù)據(jù)結(jié)構(gòu)只能有一種存儲(chǔ)結(jié)構(gòu)

B.邏輯結(jié)構(gòu)屬于線性結(jié)構(gòu),存儲(chǔ)結(jié)構(gòu)屬于非線性結(jié)構(gòu)

C.一個(gè)邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu),且各種存儲(chǔ)結(jié)構(gòu)不影響數(shù)據(jù)處理的效率

D.一個(gè)邏輯數(shù)據(jù)結(jié)構(gòu)可以有多種存儲(chǔ)結(jié)構(gòu),且各種存儲(chǔ)結(jié)構(gòu)影響數(shù)據(jù)處理的效率

5.廣義表((a),a)的表頭是()。

A.aB.(a)C.((a))D.()

6.設(shè)char型變量x中的值為10100111,則表達(dá)式(2+x)(-3)的值為______。

A.10101001B.10101000C.11111101D.1010101

7.用二分法查找一個(gè)長度為10的,排好序的線性表,查找不成功時(shí),最多需要比較()次

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

8.數(shù)據(jù)庫DB、數(shù)據(jù)庫系統(tǒng)DBS、數(shù)據(jù)庫管理系統(tǒng)DBMS之間的關(guān)系是()。

A.DB包含DBS和DBMSB.DBMS包含DB和DBSC.DBS包含DB和DBMSD.沒有任何關(guān)系

9.在具有101個(gè)元素的順序表中查找值為x的元素結(jié)點(diǎn)時(shí),平均比較元素的次數(shù)為()。

A.50B.51C.100D.101

10.輸出語句“printf(“%d\n”,11+011);”的輸出結(jié)果是()。

A.20B.22C.022D.021

11.若有定義floata[15],*p=a;,且數(shù)組a的首地址為300H,則p+13所指向的數(shù)組元素的地址為()。

A.334HB.30DHC.352HD.31AH

12.若a是數(shù)值類型,則邏輯表達(dá)式“(a==1)||(a!=1)”的值是()。

A.1B.0C.2D.不知道a的值,不能確定

二、2.填空題(12題)13.下述函數(shù)用于統(tǒng)計(jì)一行字符中的單詞個(gè)數(shù),單詞之間用空格分隔。

word_num(str

charstr[];

{inti,num=0,word=0;

for(i=0;str[i]!=【】;i++)

if(【】=")word=0

elseif(word=0)

{

word=1;

【】;

}

return(num);

}

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

main()

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

d=(a>b>C);

printf(“%d\n”,D);

}

15.下面程序的功能是:將字符數(shù)組a中下標(biāo)值為偶數(shù)的元素從小到大排列,其他元素不變。請?zhí)羁铡?/p>

#include<stdio.h>

#include<string.h>

main()

{chara[]="clanguage",t;

inti,j,k;

k=strlen(a);

for(i=0;i<=k-2;i+=2)

for(j=i+2;j<=k;j+=2;)

if(【】)

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

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

}

16.以下程序輸出的最后一個(gè)值是【】。

intff(intn)

{staticintf=1;

f=f*n;

retumf;

}

main()

{inti;

for(i=1;i<=5;i++)printf("%d\n",ff(i))i

}

17.以下程序的功能是輸出如下形式的方陣:

13141516

9101112

5678

1234

請?zhí)羁铡?/p>

main()

{inti,i,x;

for(j=4;j______;j--)

{for(i=1;i<4;i++)

{x=(j-1)*4+______;

printf("%4d",x);

}

printf("\n");

}

18.下面程序有兩個(gè)printf語句,如果第一個(gè)printf語句輸出的是194,則第二個(gè)printf語句的輸出結(jié)果是【】。

main()

{inta[10]={1,2,3,4,5,6,7,8,9,0},*p;

p=a;

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

printf("%\n",p+9);

}

19.以下程序運(yùn)行后的輸出結(jié)果是______。

voidswap(intx,inty)

{intt;

t=x;x=y;y=t;printf("%d%d",x,y);

}

main()

{inta=3,b=4;

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

}

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

fun(inta)

{intb=0;staticintc=3;

b++;c++;

return(a+b+c);

}

main()

{inti,a=5;

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

printf("\n");

}

21.以下程序中函數(shù)fun的功能是:構(gòu)成一個(gè)如圖所示的帶頭結(jié)點(diǎn)的單詞鏈表,在結(jié)點(diǎn)的數(shù)據(jù)域中放入了具有兩個(gè)字符的字符串。函數(shù)disp的功能是顯示輸出該單鏈表中所有結(jié)點(diǎn)中的字符串。請?zhí)羁胀瓿珊瘮?shù)disp。[*]

#include<stdio.h>

typedefstructnode/*鏈表結(jié)點(diǎn)結(jié)構(gòu)*/

{charsub[3];

structnode*next;

}Node;

Nodefun(chars)/*建立鏈表*/

{…}

voiddisp(Node*h)

{Node*

22.結(jié)構(gòu)化程序設(shè)計(jì)的3種基本結(jié)構(gòu)分別是順序、選擇和______。

23.若由以下定義,則不移動(dòng)指針p,且通過指針p引用值為98的數(shù)組元素的表達(dá)式是【】。

intw[10]={23,54,10,33,47,98,72,80,61},*p=w;

24.以下程序運(yùn)行后的輸出結(jié)果是______。

structNODE

{

inthum;

structNODE*next;

};

main()

{structNODEs[3]={{1,'\0'},{2,'\0'},{3,'\0'}},*p,*q,*r;

intsum=0:

s[0].next=s+1;

s[1].next=s+2;

s[2].next=s:

p=s;

q=p->next;

r=q->next;

sum+=q->nexs->num;

sum+=r>next->next->num:

prlntf("%d\n",sum;

}

三、3.程序設(shè)計(jì)題(10題)25.請編寫函數(shù)fun,函數(shù)的功能是:刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個(gè)數(shù)。

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

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

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

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

26.m個(gè)人的成績存放在score數(shù)組中,請編寫函數(shù)fun(),它的功能是:將低于平均分的人數(shù)作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在below所指的數(shù)組中。

例如,當(dāng)score數(shù)組中的數(shù)據(jù)為10,20,30,40,50,60,70,80,90時(shí),函數(shù)返回的人數(shù)應(yīng)該是4,below中的數(shù)據(jù)應(yīng)為10,20,30,40。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intbelow[])

{

}

main()

{

ihti,n,below[9];

intscore[9]={10,20,30,40,50,60,70,

80,90};

clrscr();

n=fun(score,9,below);

printf("\nBelowtheaveragescoreare:");

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

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

}

27.請編寫函數(shù)fun(),它的功能是:求出ss所指字符串中指定字符的個(gè)數(shù),并返回此值。

例如,若輸入字符串123412132,輸入字符1,則輸出3。

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

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

試題程序:

#include<coio.h>

#include<stdio.h>

#defineM81

intfun(char*ss,charc)

{

}

main()

{chara[M],ch;

clrscr();

printf("\nPleaseenterastring:");

gets(a);

printf("\nPleaseenterachar:");

ch=getchar();

printf("\nThenumberofthecharis:%d\n",fun(a,ch));

}

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

S=1-x+x2(上標(biāo))/2!-x3(上標(biāo))/3!+…+(-1*x)n(上標(biāo))/n!

例如,當(dāng)n=15,x=0.5時(shí),函數(shù)值為0.606531。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0.5,15));

}

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

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

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

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

30.編寫函數(shù)fun(),它的功能是;根據(jù)以下公式求p的值,結(jié)果由函數(shù)值帶回。m與n為兩個(gè)正數(shù)且要求m>n。

P=m!/n!(m-n)!),例如:m=12,n=8時(shí),運(yùn)行結(jié)果為495.000000。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

printf("p=%f\n",fun(12,8));

}

31.請編一個(gè)函數(shù)fun,函數(shù)的功能是使實(shí)型數(shù)保留2位小數(shù),并對第三位進(jìn)行四舍五入(規(guī)定實(shí)型數(shù)為正數(shù))。

例如:實(shí)型數(shù)為1234.567,則函數(shù)返回1234.572000;

實(shí)型數(shù)為1234.564,則函數(shù)返回1234.562000。

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

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

32.學(xué)生的記錄由學(xué)號(hào)和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun,它的功能是:把分?jǐn)?shù)最高的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中,注意:分?jǐn)?shù)最高的學(xué)生可能不止一個(gè),函數(shù)返回分?jǐn)?shù)最高的學(xué)生的人數(shù)。

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

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

33.請編寫函數(shù)fun(),其功能是:將s所指字符串中除了下標(biāo)為奇數(shù)、同時(shí)ASCII值為偶數(shù)的字符外,其余的全部刪除,串中剩余字符所形成的一個(gè)新串放在t所指的數(shù)組中。

例如,若s所指字符串中的內(nèi)容為edB2A4Dsdg,其中字符A的ASCII碼值為奇數(shù),因此應(yīng)當(dāng)刪除;其中字符B的ASCII碼值為偶數(shù),但在數(shù)組中的下標(biāo)為偶數(shù),因此也應(yīng)當(dāng)刪除:而字符2的ASCII碼值為偶數(shù),所在數(shù)組中的下標(biāo)為奇數(shù),因此不應(yīng)當(dāng)刪除,其他依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是d24。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string,h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

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

}

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

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

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

試題程序:

#defineM4

#include<stdio.h>

fun(inta[])[M])

{

}

main()

{

intarr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7);

printf(“min=%d\n”,fun(arr));

}

四、單選題(0題)35.程序中頭文件typel.h的內(nèi)容是:#defineN5#defineM1N*3程序如下:#include“typel.h”#defineM2N*2main(){inti;i=M1+M2;Printf(“%d\n”,0;}程序編譯后運(yùn)行的輸出結(jié)果是:

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

五、單選題(0題)36.設(shè)有一個(gè)10階的對稱矩陣A,采用壓縮存儲(chǔ)方式,以行序?yàn)橹鞔鎯?chǔ),a1,1為第一個(gè)元素,其存儲(chǔ)地址為1,每個(gè)元素占1個(gè)地址空間,則a8,5的地址為()。

A.13B.33C.18D.40

六、單選題(0題)37.下列表達(dá)式中,可以正確表示的關(guān)系是()。

A.(x>=1)10(x<=0)B.x>1‖x=0C.x>=1ORx<=0D.X>=1&&x<=0

參考答案

1.D函數(shù)fun的作用是求一個(gè)十進(jìn)制數(shù)的二進(jìn)制數(shù)。通過輾轉(zhuǎn)相除法獲取這個(gè)整數(shù)的二進(jìn)制數(shù)。因此(10)10=(1010)2。故本題答案為D選項(xiàng)。

2.D解析:面向?qū)ο蟮氖澜缡峭ㄟ^對象與對象間彼此的相互合作來推動(dòng)的,對象間的這種相互合作需要一個(gè)機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制稱為消息。消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞的信息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統(tǒng)一了數(shù)據(jù)流和控制流。

3.Dstrcat(s1,s2)函數(shù)的功能是把s2字符串連接到s1字符串的末尾,要保證s1有足夠的空間容納下連接后的字符串。

4.DD)【解析】數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是指數(shù)據(jù)的邏輯結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式,一種數(shù)據(jù)結(jié)構(gòu)可以根據(jù)需要采用不同的存儲(chǔ)結(jié)構(gòu),常用的存儲(chǔ)結(jié)構(gòu)有順序和鏈?zhǔn)浇Y(jié)構(gòu)。采用不同的存儲(chǔ)結(jié)構(gòu),其處理的效率是不同的。

5.B

6.D解析:異或運(yùn)算符(^)的運(yùn)算規(guī)則是:參加運(yùn)算的兩個(gè)相應(yīng)位同號(hào),則結(jié)果為0(假);異號(hào)則為1(真)。取反運(yùn)算符(-)的運(yùn)算規(guī)則是:對一個(gè)二進(jìn)制數(shù)按位取反,即將0變?yōu)?,1變?yōu)?。本題(-3)是對3(二進(jìn)制形式為00000011)按位取反即11111100。表達(dá)式(2+x)(-3)的值就等價(jià)于(00000010+10100111)^11111100,結(jié)果為01010101。

7.C

8.C(10)C)解析:DB即數(shù)據(jù)庫(Database),是統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合;DBMS即數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem),是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應(yīng)用程序提供訪問DB的方法;DBS即數(shù)據(jù)庫系統(tǒng)(DatabaseSystem)由如下5部分組成,數(shù)據(jù)庫(數(shù)據(jù))、數(shù)據(jù)庫管理系統(tǒng)(軟件)、數(shù)據(jù)庫管理員(人員)、系統(tǒng)平臺(tái)之一——硬件平臺(tái)(硬件)、系統(tǒng)平臺(tái)之二——軟件平臺(tái)(軟件)。

9.B

10.A“printf(“%d\\n”,11+011);”中,“11”為十進(jìn)制數(shù),“011”為八進(jìn)制數(shù),%d表示以十進(jìn)制格式輸出。因此,先將八進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),即(011)8=81×1+1×80=(9)10,相當(dāng)于“printf(“%d\\n”,11+9)”,輸出結(jié)果為20。故本題答案為A選項(xiàng)。

11.C解析:解答本題,首先要明白在對指針進(jìn)行加、減運(yùn)算的時(shí)候,數(shù)字“1”不是十進(jìn)制的數(shù)“1”,而是指'1'個(gè)存儲(chǔ)單元長度,而1個(gè)存儲(chǔ)單元長度占多少存儲(chǔ)空間,應(yīng)該視具體情況而定。如果基本類型是int型,移動(dòng)1個(gè)存儲(chǔ)單元的長度就是位移2個(gè)字節(jié),如果基本類型是float型,移動(dòng)1個(gè)存儲(chǔ)單元的長度就是位移4個(gè)字節(jié)。所以p+13所指向的數(shù)組元素的地址:300H+(13*上標(biāo))4)H=352H。

12.A邏輯或“||”要求兩邊的運(yùn)算對象有一個(gè)非零值,結(jié)果就為真。變量a的值不確定,但是若a為1,則左邊運(yùn)算對象的值為1;若a不為1,則右邊運(yùn)算對象的值為1,所以總能保證一邊為非零值。故本題答案為A選項(xiàng)。

13.\0'或0或NULLstr[i]num++或num=num+1或num+=1\\0'或0或NULL\r\nstr[i]\r\nnum++或num=num+1或num+=1解析:觀察題目要求,可以知道以下幾點(diǎn):

①for循環(huán)的結(jié)束條件應(yīng)當(dāng)是:str[i]已是字符串的最后一個(gè)字符;

②str[i]代表字符串str中的第i+1個(gè)字符;

③整型變量num的值是要記錄的單詞的個(gè)數(shù)。

C語言中規(guī)定字符串的最后一個(gè)字符是一個(gè)隱含的字符串結(jié)束符“\\0”,所以在題中第一個(gè)空中應(yīng)填寫“\\0”;題中第二個(gè)空應(yīng)填寫“str[i]”,以判斷當(dāng)前位置的字符是否為空格;題中第三個(gè)空中應(yīng)當(dāng)填寫“num++”,通過變量num的加1累加得到字符串中的單詞個(gè)數(shù)。

14.00解析:關(guān)系運(yùn)算符“>”的結(jié)合方式是從左向右的,所以在本題中的表達(dá)式a>b=c;從左向右開始計(jì)算,a>b的結(jié)果為“1”,接著1和c比較假,該空格處應(yīng)該填0。

15.a[I]>a[j]a[I]>a[j]解析:本題中的嵌套的循環(huán)結(jié)構(gòu)用在了數(shù)組元素的排序上。本題需要注意的一點(diǎn)是:由于題目只要求出下標(biāo)值為偶數(shù)的元素從小到大排序,所以內(nèi)外層for循環(huán)的條件變量變更條件都是+=2,最后通過條件a[i]>a[j]對元素大小進(jìn)行判斷并交換。

16.120120解析:靜態(tài)變量的類型說明符是static,靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)方式,它具有以下特點(diǎn):

①靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。

②對靜態(tài)局部變量是在編譯時(shí)賦初值的,即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。

③如在定義局部變量時(shí)不賦初值的話,則對靜態(tài)局部變量來說,編譯對自動(dòng)賦初值0(對數(shù)值型變量)或空字符(對字符變量)。(注意:C語言中的非靜態(tài)變量在定義時(shí),系統(tǒng)并不會(huì)自動(dòng)給它賦初值)

④雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)是不能引用它的。

本題中函數(shù)的功能是:與for語句一起求一個(gè)整數(shù)的階乘。

17.ii解析:本題使用了一個(gè)兩重for循環(huán)輸出如題所示的方陣。從外層for循環(huán)的最后一條語句prinff('\\n');可以看出,外層for循環(huán)每次輸出方陣的一行,由于方陣是4行所以外層循環(huán)會(huì)循環(huán)4次,又從j=4和卜可以看出這4次循環(huán),循環(huán)變量i的值分別為4、3、2、1.故前一空應(yīng)該填j>=1或者j>0,以保證j等于0時(shí)循環(huán)結(jié)束。內(nèi)層循環(huán)控制每行輸出的4個(gè)數(shù),其循環(huán)變量i從1遞增到4,由于每行的4個(gè)結(jié)果也是差1遞增的,所以將每次結(jié)果減去循環(huán)變量i的值為一個(gè)常數(shù),每行分別是12、8、4、0,而這些值正好與4次外循環(huán)中表達(dá)式(j-1)*4的值相吻合,故后一空應(yīng)該填i。

18.1a61a6解析:對于指針變量的運(yùn)算,就是對地址的運(yùn)算。本題中由于指針指向的是整型變量,所以,使指針變量移動(dòng)9個(gè)位置也就是移動(dòng)18個(gè)字節(jié)。注意,本題是以十六進(jìn)制輸出的。

19.4334

20.010111212010111212解析:本題考查的是靜態(tài)局部變量的運(yùn)用。靜態(tài)局部變量的作用域與普通局部變量一樣,但它的生存期將延長到程序運(yùn)行結(jié)束。本題的主函數(shù)中使用一個(gè)for循環(huán)輸出循環(huán)變量i和fun(a)的值,由于a的值一直沒被修改過,所以三次調(diào)用的都是fun(5)。第1次調(diào)用,b=0,c=3,所以返回值為5+1+4=10;第2次調(diào)用,因?yàn)閏是靜態(tài)局部變量,它仍然保存著上次調(diào)用結(jié)束時(shí)的值4,而b重新被創(chuàng)建和初始化為0,所以返回值為5+1+5=11;同理,第3次調(diào)用返回的是12。所以,程序最終輸出為:010111212。

21.

22.重復(fù)(循環(huán))重復(fù)(循環(huán))解析:結(jié)構(gòu)化程序設(shè)計(jì)包括3種基本的結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)(循環(huán)結(jié)構(gòu)),利用這3種結(jié)構(gòu)就足以表達(dá)出各種其他形式結(jié)構(gòu)的程序設(shè)計(jì)方法。其中利用循環(huán)結(jié)構(gòu),可以簡化大量的程序執(zhí)行。

23.*(p+5)或p[5]*(p+5)或p[5]解析:本題的考查點(diǎn)是通過指針引用數(shù)組元素。98是數(shù)組w的第5個(gè)元素(最開始的為第0個(gè)),而通過*p=w已經(jīng)將p指向了數(shù)組w,要想不移動(dòng)指針p而引用98,可以有以下兩種方法:p[5]、*(p+5)。

24.55解析:主函數(shù)首先聲明了一個(gè)結(jié)點(diǎn)數(shù)組s[3],并分別初始化其成員num為1,2、3,而成員next全部被初始化為'\\0',也就是0。下面又用三條語句s[0].next=s+1;s[1].next=s+2;s[2].next=s;分別將三個(gè)結(jié)點(diǎn)指向其后面一個(gè)結(jié)點(diǎn),而最后一個(gè)結(jié)點(diǎn)指向笫1個(gè)結(jié)點(diǎn),構(gòu)造出一條單向循環(huán)鏈表。接下來用結(jié)點(diǎn)指針p=s即讓其指向s[0],然后讓q=p->next,即指向了s[1],r=-q->next即讓r指向s[2],然后讓一個(gè)累計(jì)變量sam累加q->next->hum和r->next->next->num,因?yàn)閝指向s[1)所以它的next指針指向的是s[2],故第1次累加的是s[2].num=3,而r指向的是s[2]所以它的next是s[0],s[0]的next指向s[1],故笫2次累加的是s[1].num=2。所以程序最終輸出結(jié)果為5。

25.

解析:該程序功能是刪去一維數(shù)組中所有相同的數(shù),使之只剩一個(gè)。解題思路是,首先在函數(shù)中定義臨時(shí)變量指向每一個(gè)元素,然后在循環(huán)過程中將臨時(shí)值和其他元素進(jìn)行比較,如果相同,那么跳過相同字符。

26.intfun(intscore[]intmintbelow[]){intij=0;floatav=0.0;for(i=0;i<m;i++)av=av+score[i]/m;/*求平均值*/for(i=0;i<m;i++)if(score[i]<av)/*如果分?jǐn)?shù)低于平均分則將此分?jǐn)?shù)放入below數(shù)組中*/below[j++]=score[i];returnj;/*返回低于平均分的人數(shù)*/}intfun(intscore[],intm,intbelow[])\r\n{\r\ninti,j=0;\r\nfloatav=0.0;\r\nfor(i=0;i<m;i++)\r\nav=av+score[i]/m;/*求平均值*/\r\nfor(i=0;i<m;i++)\r\nif(score[i]<av)/*如果分?jǐn)?shù)低于平均分,則將此分?jǐn)?shù)放入below數(shù)組中*/\r\nbelow[j++]=score[i];\r\nreturnj;/*返回低于平均分的人數(shù)*/\r\n}解析:該題第1個(gè)循環(huán)的作用是求出平均分av,第2個(gè)循環(huán)的作用是找出低于平均分的成績并存入below數(shù)組中。

27.intfu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論