2022年廣東省汕尾市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2022年廣東省汕尾市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2022年廣東省汕尾市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2022年廣東省汕尾市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2022年廣東省汕尾市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2022年廣東省汕尾市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.數據庫DB、數據庫系統DBS、數據庫管理系統DBMS之間的關系是()。

A.DB包括DBS和DBMSB.DBMS包括DB和DBSC.DBS包括DB和DBMSD.沒有任何關系

2.判斷字符串s1是否大于字符串s2,應該使用()。

A.if(strcmp(s1,s2)<0)

B.if(s1>s2)

C.if(strcmp(s2,s1)<0)

D.if(strcmp(s1,s2))

3.

4.在面向對象方法中,一個對象請求另一對象為其服務的方式是通過發(fā)送()。A.調用語句B.命令C.口令D.消息

5.對線性表進行折半查找時,必須要求線性表()。

A.順序方式存儲B.鏈式方式存儲C.以順序方式存儲,且結點按關鍵字有序排列D.以鏈式方式存儲,且結點按關鍵字有序排列

6.有下列程序:main{inty=10;do{y--;}while(--y);printf("%d\n",--y);)當執(zhí)行程序時,輸出的結果是()。A.-1B.1C.4D.0

7.下列程序段的時間復雜度為()。A.O(n)B.O(log2n)C.O(n3)D.O(n2)

8.若a是數值類型,則邏輯表達式(a==1)II(a!=1)的值是()。

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

9.若以“a+”方式打開一個已存在的文件,則下列敘述正確的是()。

A.文件打開時,原有文件內容不被刪除,位置指針移到文件末尾,可以進行添加或讀操作

B.文件打開時,原有文件內容不被刪除,只能進行讀操作

C.文件打開時,原有文件內容被刪除,只能進行寫操作

D.以上三種說法都不正確

10.設有定義“intk=0;”,以下選項的4個表達式中與其他3個表達式的值不相同的是()。

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

11.

12.下面哪個序列不是此圖的一個拓撲排序()A.ebfgadchB.aebdgfchC.adchebfgD.Aedbfgch

二、2.填空題(12題)13.以下程序的功能是計算:s=1+12+123+1234+12345。請?zhí)羁铡?/p>

main()

{intt=0,s=0,i;

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

{t=i+______;s=s+t;}

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

}

14.下面程序的功能:輸出100以內能被3整除且個位數為6的所有整數,請?zhí)羁铡?/p>

#include<stdio.h>

main()

{inti,j;

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

{j=i*10+6;

if(【】)continue;

printf("%d",j);

}

}

15.在面向對象的方法中,______描述的是具有相似屬性與操作的一組對象。

16.指針變量p和數組a的說明如下:

int*a[3]={"aa","bb","cc"},**p;

執(zhí)行語句p=&a[2];后,*p指向的字符串是______。

17.以下scanf函數調用語句中對結構體變量成員的引用不正確的是{charname[20];}pup[5],*p;

18.與結構化需求分析方法相對應的是【】方法。

19.下面程序的功能是【】。

doublesub(doublex,inty)

{intn;doublez;

for(n=1,z=x;n<y;n++)z=z*x;

returnz;}

main()

{doublea=2.0,b=4.0,c;

c=sub(a,b);printf("%f",c);}

20.下面程序的功能是:計算1~10之間的奇數之和與偶數之和,請?zhí)羁铡?/p>

#include<stdio.h>

main()

{inta,b,c,i;

a=c=0;

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

{a+=i;

【】;

c+=b;}

printf("偶數之和=%d\n",a);

printf("奇數之和=%d\n",c-11);}

21.有以下定義語句,則sizeof(a)的值是【】,而sizeof(a.share)的值是【】。

structdate

{intday;

intmouth;

intyear,

union{intshare1;

floatshare2;

}share;

}a;

22.下列程序的運行結果是______。

#definePOW(r)(r)*?

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

23.以下程序從終端讀入數據到數組中,統計其中正數的個數,并計算它們之和,請?zhí)羁铡?/p>

#include<stdio,h>

main()

inti,a[20],sum,count;

sum=count=0;

for(i=0;i<20;i++)scanf("%d",【】);

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

{if(a[i]>0)

{count++;

sum+=【】;

}

prinff("sum=%d,count=%d\n",sum,count);

}

24.在面向對象方法中,對象之間進行通信的構造稱為()。

三、3.程序設計題(10題)25.請編寫一個函數fun,它的功能是:將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串“-1234”,則函數把它轉換為整數值-1234。

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

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

26.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun,它的功能是:把分數最高的學生數據放在h所指的數組中,注意:分數最高的學生可能不止一個,函數返回分數最高的學生的人數。

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

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

27.請編寫函數fun,其功能是:計算并輸出給定10個數的方差:

例如,給定的10個數為95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,輸出為s=11.730729。

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

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

28.請編寫一個函數unsignedfun(unsignedw),w是一個大于10的無符號整數,若w是n(n≥2)位的整數,則函數求出w的后n-1位的數作為函數值返回。

例如:w值為5923,則函數返回923;若w值為923,則函數返回23。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

unsignedfun(unsignedw)

{

}

main()

{

unsignedx;

clrscr();

printf("Enteraunsignedinteger

number:");

scanf("%u",&x);

printf("Theoriginaldatais:%u\n",x);

if(x<10)

printf("Dataerror!");

else

printf("Theresult:%u\n",fun(x));

}

29.N名學生的成績已在主函數中放入一個帶頭節(jié)點的鏈表結構中,h指向鏈表的頭節(jié)點。請編寫函數fun(),它的功能是:找出學生的最高分,由函數值返回。

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

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

試題程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

{

}

STREC*creat(double*s)

{

STREC*h,*p,*q;

inti=0;

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

p->s=0;

while(i<N)

/*產生8個節(jié)點的鏈表,各分數存入鏈表中*/

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

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

}

p->next=0;

returnh;/*返回鏈表的首地址*/

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

{printf("->%2.0f",p->s);p=p->next;}

/*輸出各分數*/

while(p!=0);

printf("\n\n");

}

main()

{

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

max;

STREC*h;

h=creat(s);

outlist(h);

max=fun(h);

printf("max=%6.1f\n",max);

}

30.請編寫一個函數fun(),它的功能是:根據以下公式求π的值(要求滿足精度0.005,即某項小于0.005時停止迭代)。

π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…

+1*2*3*…*n/(3*5*7*…*(2n+1))

程序運行后,如果輸入精度0.0005,則程序輸出3.14…。

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

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

試題程序:

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

{

}

main()

{

doublex;

printf("Inputeps:");

scanf("%1f",&x);

printf("\neps=%1f,PI=%1f\n",x,fun(x));

}

31.請編寫一個函數fun(),它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數),函數返回較短的字符串。若兩個字符串長度相等,則返回第1個字符串。

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

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

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

試題程序:

#include<stdio.h>

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

{

}

main()

{

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

inti;

printf("Inputlthstring:");

gets(a);

printf("Input2thstring:");

gets(b);

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

}

32.請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數),函數返回較長的字符串。若兩個字符串長度相同,則返回第一個字符串。

例如,輸入beijingshah曲aj(為回車鍵),函數將返回shanghai。

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

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

33.請編寫一個函數fun(),它的功能是:求出一個2×M整型二維數組中最大元素的值,并將此值返回調用函數。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fan的花括號中填入所編寫的若干語句。

試題程序:

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

}

34.程序定義了N×N的二維數組,并在主函數中自動賦值。

請編寫函數fun(inta[][N],intn),該函數的功能是使數組左下半三角元素中的值加上n。

例如:若n的值為3,a數組中的值為

a=254

169

537

則返回主程序后a數組中的值應為

554

499

8610

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

請勿改動主函數main和其他函數中的任何內容,僅在函數full的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

fun(inta[][N],intn)

{

}

main()

{

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

clrscr();

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

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

/*產生—個隨機5*5矩陣*/

{

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

{

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

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

}

printf("\n");

}

do

n=rand()%10;

/*產生一個小于5的隨機數n*/

while(n>=5);

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

fun(a,n);

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

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

{

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

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

printf("\n");

}

}

四、單選題(0題)35.下列程序的輸出結果是()main(){intx=0,y=5,z=3;while(z-->0&&++x<5)y=y-1;printf(“%d,%d,%d\n”,x,y,z);}A.3,2,0B.3,2,-1C.4,3,-1D.5,-2,-5

五、單選題(0題)36.有以下程序main()inta[10]={1,2,3,4,5,6,7,8,9,10},*p=.&a[3],*q=p+2;printf("%d\n",*p+*q);程序運行后輸出結查是

A.16B.10C.8D.6

六、單選題(0題)37.有以下程序:#include<stdio,h>main(){intk=5,n=0;while(k>0){switch(k){default:break;case1:n+=k;case2:case3:n+=k;}k--;printf("%d\n",n);}程序運行后的輸出結果是()。

A.0B.4C.6D.7

參考答案

1.CC?!窘馕觥繑祿煜到y(DBS)由數據庫(DBS)、數據庫管理系統(DBMS)、數據庫管理員、硬件平臺和軟件平臺五個部分組成,可見DB和DBMS都是DBS的組成部分。

2.C解析:本題考查字符串比較函數strcmp()。調用形式:strcmp(s1,s2),其中s1、s2分別是字符串存儲區(qū)的首地址。函數功能:比較字符串str1和str2,當str1<str2時,返回值為負數;當str1=str2時,返回0;當str1>str2,返回值為正數(注意:不能使用關系運算符比較兩個字符串的大小)。

3.A

4.D解析:面向對象的世界是通過對象與對象間彼此的相互合作來推動的,對象間的這種相互合作需要一個機制協助進行,這樣的機制稱為消息。消息是一個實例與另一個實例之間傳遞的信息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統一了數據流和控制流。

5.C

6.A本題考查do-while循環(huán)。當--y是0(即y是o)時結束循環(huán),輸出--y,先將y的值減1再輸出Y的值。

7.A

8.A由于a==l和a!=1兩者互斥,即總有一個為真,因此二者的或也必定為真。

9.A解析:本題考查文件使用方式標識符,以“a+”方式打開一個已存在的文件,則表示保留文件中原有的數據,文件的位置指針在文件末尾,此時,可以進行追加或讀操作。

10.C表達式“++k”是先使得k的值自增1后再使用。表達式“k++”是先取得k的值再將k的值自增1。所以C選項中表達式的值為0,而其他3個選項中表達式的值均為1。故本題答案為C選項。

11.B

12.C

13.t*10或10*tt*10或10*t解析:本題要求累加一系列有規(guī)律的數,從輸出結果來看,s保存的是最終結果,而s在循環(huán)體中,每次累加一個t,則說明t在5次循環(huán)中分別等于1.12、123、1234、12345;而t每次循環(huán)等于“填空內容”加上循環(huán)變量i,又因為i在5次循環(huán)中分別等于1、2、3、4,5,所以t每次循環(huán)要加的“填空內容”應分別為0、10、120,1230,12340,這一系列值正好是前一次t的值的10倍.所以“填空內容”應是t*10。

14.j%3!=0或j%3j%3!=0或j%3解析:題目要求輸出100以內能被3整除且個位數為6的所有整數,且通過for循環(huán)實現,循環(huán)體內j=i*10+6;這也就滿足了個位數為6的條件,所以第1個空格填入i<10或i<=9;if語句中的continue說明如果條件不成立則不輸出j,所以第2空填j%3!=0或j%3。

15.類類解析:在面向對象的方法中,把具有相同屬性和方法的對象稱為類,類是對象的抽象,對象是類的實例。

16.cc。cc。解析:a是指針數組,每個數組元素存放的是字符數據的地址,數組a的3個元素分別指向字符串常量'aa'、'bb'和'cc',指針p賦予數組元素a[2]的值,即指向第3個字符串。

17.D

18.結構化設計結構化設計解析:與結構化需求分析方法相對應的是結構化設計方法。結構化設計就是采用最佳的可能方法設計系統的各個組成部分以及各個成分之間的內部聯系的技術。

19.本程序的功能是求a的b次方本程序的功能是求a的b次方

20.b=i+1b=i+1解析:本題考查了for循環(huán)語句的執(zhí)行過程。i+=2是修正表達式,執(zhí)行一次循環(huán)體后i的值就增加2,i的初始值為0,每次加2之后和累加至a,所以a的值就是1~10之間的偶數之后;b的值是1~11之間的奇數和,但在輸出b值時c去掉多加的11,即為1~10之間的奇數之和。

21.10410\r\n4解析:結構體變量所占內存長度是各成員占的內存長度之和。每個成員分別占有其自己的內存單元。int占2個字節(jié),float占4個字節(jié),共用體變量所占的內存長度等于最長的成員的長度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4-10。

22.解析:本題考查帶參數的宏的定義及相關運算。運算過程為:t=POW(x+y)=(2+3)*(2+3)=25。

23.&a[i]a[i]&a[i]\r\na[i]解析:scanf的格式為:scanf(格式控制,地址表列),因此,第一處應該填寫地址,由于是循環(huán)輸入,所以填&a[i]。依據題意第二處應該填寫a[i],以實現sum=sum+a[i]的求和。

24.消息消息解析:對象之間進行通信的構造叫做消息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統一了數據流和控制流。

25.

解析:該程序功能是將一個數字字符串轉換為一個整數。其中,解題思路是將每位數字字符串的ASCII碼減去48(字符“0”的ASCII碼值),變成數字0~9。然后再不斷進行高位乘以10加低位的運算,或者反過來從低位向高位求,即不斷進行低位加高位乘以10的運算。

26.

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

27.

解析:該程序功能是計算并輸出給定10個數的方差。解題思路是,根據題干中給出的方差公式首先計算出x’的值,然后計算根號里面的值,最后求其平方根。

28.unsignedfun(unsignedw){if(w>=10000)returnw%10000;/*求出n位整數w的后n-1位的數*/if(w>=1000)returnw%1000;if(w>=100)returnw%100;if(w>=10)returnw%10;}unsignedfun(unsignedw)\r\n{\r\nif(w>=10000)\r\nreturnw%10000;/*求出n位整數w的后n-1位的數*/\r\nif(w>=1000)\r\nreturnw%1000;\r\nif(w>=100)\r\nreturnw%100;\r\nif(w>=10)\r\nreturnw%10;\r\n}解析:我們首先應該明白無符號整數的定義形式,若它大于10000(5位)時,將10000對它求余則結果為后4位;當它大于1000(4位)時,將1000對它求余則結果為后3位,花此類推。特別注意這里所有if()的順序不能顛倒。

29.doublefun(STREC*h){doublemax=h->s;while(h!=NULL)/*通過循環(huán)找到最高分數*/{if(max<h->s)max=h->s;h=h->next;}returnmax;}doublefun(STREC*h)\r\n{\r\ndoublemax=h->s;\r\nwhile(h!=NULL)/*通過循環(huán)找到最高分數*/\r\n{if(max<h->s)max=h->s;\r\nh=h->next;\r\n}\r\nreturnmax;\r\n}解析:在本題中,h為一個指向結構體的指針變量,若要引用它所指向的結構體中的某一成員時,要用指向運算符“->”。由于是鏈表,所以要使h逐一往后移動,使用的是h=h->next。

30.doublefun(doubleeps){doubles=1.0s1=1.0;intn=1;while(s1>=eps)/*當某項大于精度要求時繼續(xù)求下—項*/{s1=s1*n/(2*n+1);/*求多項式的每—項*/s=s+s1;/*求和*/n++;}return2*s;}doublefun(doubleeps)\r\n{\r\ndoubles=1.0,s1=1.0;\r\nintn=1;\r\nwhile(s1>=eps)/*當某項大于精度要求時,繼續(xù)求下—項*/\r\n{s1=s1*n/(2*n+1);/*求多項式的每—項*/\r\ns=s+s1;/*求和*/\r\nn++;\r\n}\r\nreturn2*s;\r\n}解析:從第2項開始以后的每一項都是其前面一項乘以n/(2*n+1),程序中用s1來表示每一項,s來表示總和后的結果。要注意s1,s的初值都為1.0,返回時要乘以2即return2*s,這跟數學思想有關系,學習者理解后就很簡單了。

31.char*fun(char*Schar*t){intij;for(i=0s[i]!=‘\0’;i++);/*求字符串的長度*/for(j=0;t[j]!=‘\0’;j++);/*比較兩個字符串的長度*/returns;/*函數返回較短的字符串若兩個字符串長度相等則返回第1個字符串*/elsereturnt;}char*fun(char*S,char*t)\r\n{\r\ninti,j;\r\nfor(i=0,s[i]!=‘\\0’;i++);/*求字符串的長度*/\r\nfor(j=0;t[j]!=‘\\0’;j++);/*比較兩個字符串的長度*/\r\nreturns;/*函數返回較短的字符串,若兩個字符串長度相等,則返回第1個字符串*/\r\nelse\r\nreturnt;\r\n}解析:本題中,第1個for循環(huán)的作用是求出s的字符個數i,第2個for循環(huán)的作用是求出t的字符個數j,因為任何循環(huán)都要控制—條語句,所以在每—個for循環(huán)條件后面必須要有—個分號。

本題也可用如下技巧:

#include<string.h>/*一定要注意在最前面加#include<string.h>*/

char*fun(char*s,char*t)

{

if(strlen(S)>=strten(t)

returns;

elsereturnt;

}

32.

解析:該程序功能是比較兩個字符串的長度。解題過程是首先分別求得兩個字符串的長度,然后對這兩個值進行判斷,實現兩個字符串長度的比較。

33.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];/*求出二維數組的最大值*/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];/*求出二維數組的最大值*/\r\nreturnmax;\r\n}解析:此類求最大值或最小值的C語言問題,我們可以采用逐個比較的方式。要求數組中的所有元素走動一遍,并從中找出最大、最小值,要注意一開始應使max存放數組中的第一個元素的值??砂粗鹦胁檎乙部砂粗鹆胁檎业姆绞剑绢}采用的是逐行查找的方式。即行下標在外層循環(huán)列下標在內層循環(huán),因為在循環(huán)的嵌套中越在內層循環(huán),循環(huán)變化就越快。

34.fun(inta[][N]intn){intij;for(i=0;i<N;i++)for(j=0;j<i;j++)a[i][j]=a[i][j]+n/*使數組左下半三角元素中的值加上n*/}fun(inta[][N],intn)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<i;j++)\r\na[i][j]=a[i][j]+n/*使數組左下半三角元素中的值加上n*/\r\n}解析:首先從數組中找出要被加上n的那部分元素,找的過程其實就是找出將被挑出的那部分元素在原數組中的分布規(guī)律的過程。通過觀察得出,要被處理的那部分元素的下標值的范圍是每行中從第一個元素開始,直到列數等于該行行數時為止。找到這個規(guī)律后,依次從數組中取得合乎要求的元素,然后再加上n。

35.B解析:本題的執(zhí)行過程是:

在While循環(huán)中,

比較xyz

第—次:3>0&&1<5142

第二次:2>0&&2<5231

第三次:1>0&&3<5320

判斷條件“z-->0”不成立,也不執(zhí)行“i+=2”語句,循環(huán)結束,因此,輸出結果為3,2,-1。

36.B解析:本題考查的是指針的簡單應用。題目中首先定義了一個int型數組a并初始化了,然后定義了兩個指針變量p和q,并分別初始化p為指向數組元素a[3]、q指向p后面的第2個元素即指向a[5]。所以最終輸出的值為a[3]+a[5]的值10。應該選B。

37.D解析:在程序中,當L的值為5和4時,case都沒有與其匹配的值,所以執(zhí)行default語句;當k=3時,執(zhí)行n+=k;得n=3;當L=2時,執(zhí)行case2:然后順序執(zhí)行case3:n+=k;得n=5;當k=1時,執(zhí)行case1:n+=k;得n=6,然后順序執(zhí)行case2:和case3:n+=k;使得n=7。2022年廣東省汕尾市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.數據庫DB、數據庫系統DBS、數據庫管理系統DBMS之間的關系是()。

A.DB包括DBS和DBMSB.DBMS包括DB和DBSC.DBS包括DB和DBMSD.沒有任何關系

2.判斷字符串s1是否大于字符串s2,應該使用()。

A.if(strcmp(s1,s2)<0)

B.if(s1>s2)

C.if(strcmp(s2,s1)<0)

D.if(strcmp(s1,s2))

3.

4.在面向對象方法中,一個對象請求另一對象為其服務的方式是通過發(fā)送()。A.調用語句B.命令C.口令D.消息

5.對線性表進行折半查找時,必須要求線性表()。

A.順序方式存儲B.鏈式方式存儲C.以順序方式存儲,且結點按關鍵字有序排列D.以鏈式方式存儲,且結點按關鍵字有序排列

6.有下列程序:main{inty=10;do{y--;}while(--y);printf("%d\n",--y);)當執(zhí)行程序時,輸出的結果是()。A.-1B.1C.4D.0

7.下列程序段的時間復雜度為()。A.O(n)B.O(log2n)C.O(n3)D.O(n2)

8.若a是數值類型,則邏輯表達式(a==1)II(a!=1)的值是()。

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

9.若以“a+”方式打開一個已存在的文件,則下列敘述正確的是()。

A.文件打開時,原有文件內容不被刪除,位置指針移到文件末尾,可以進行添加或讀操作

B.文件打開時,原有文件內容不被刪除,只能進行讀操作

C.文件打開時,原有文件內容被刪除,只能進行寫操作

D.以上三種說法都不正確

10.設有定義“intk=0;”,以下選項的4個表達式中與其他3個表達式的值不相同的是()。

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

11.

12.下面哪個序列不是此圖的一個拓撲排序()A.ebfgadchB.aebdgfchC.adchebfgD.Aedbfgch

二、2.填空題(12題)13.以下程序的功能是計算:s=1+12+123+1234+12345。請?zhí)羁铡?/p>

main()

{intt=0,s=0,i;

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

{t=i+______;s=s+t;}

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

}

14.下面程序的功能:輸出100以內能被3整除且個位數為6的所有整數,請?zhí)羁铡?/p>

#include<stdio.h>

main()

{inti,j;

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

{j=i*10+6;

if(【】)continue;

printf("%d",j);

}

}

15.在面向對象的方法中,______描述的是具有相似屬性與操作的一組對象。

16.指針變量p和數組a的說明如下:

int*a[3]={"aa","bb","cc"},**p;

執(zhí)行語句p=&a[2];后,*p指向的字符串是______。

17.以下scanf函數調用語句中對結構體變量成員的引用不正確的是{charname[20];}pup[5],*p;

18.與結構化需求分析方法相對應的是【】方法。

19.下面程序的功能是【】。

doublesub(doublex,inty)

{intn;doublez;

for(n=1,z=x;n<y;n++)z=z*x;

returnz;}

main()

{doublea=2.0,b=4.0,c;

c=sub(a,b);printf("%f",c);}

20.下面程序的功能是:計算1~10之間的奇數之和與偶數之和,請?zhí)羁铡?/p>

#include<stdio.h>

main()

{inta,b,c,i;

a=c=0;

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

{a+=i;

【】;

c+=b;}

printf("偶數之和=%d\n",a);

printf("奇數之和=%d\n",c-11);}

21.有以下定義語句,則sizeof(a)的值是【】,而sizeof(a.share)的值是【】。

structdate

{intday;

intmouth;

intyear,

union{intshare1;

floatshare2;

}share;

}a;

22.下列程序的運行結果是______。

#definePOW(r)(r)*?

main()

{intx=3,y=2,t;

t=POW(x+y);

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

}

23.以下程序從終端讀入數據到數組中,統計其中正數的個數,并計算它們之和,請?zhí)羁铡?/p>

#include<stdio,h>

main()

inti,a[20],sum,count;

sum=count=0;

for(i=0;i<20;i++)scanf("%d",【】);

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

{if(a[i]>0)

{count++;

sum+=【】;

}

prinff("sum=%d,count=%d\n",sum,count);

}

24.在面向對象方法中,對象之間進行通信的構造稱為()。

三、3.程序設計題(10題)25.請編寫一個函數fun,它的功能是:將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串“-1234”,則函數把它轉換為整數值-1234。

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

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

26.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun,它的功能是:把分數最高的學生數據放在h所指的數組中,注意:分數最高的學生可能不止一個,函數返回分數最高的學生的人數。

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

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

27.請編寫函數fun,其功能是:計算并輸出給定10個數的方差:

例如,給定的10個數為95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,輸出為s=11.730729。

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

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

28.請編寫一個函數unsignedfun(unsignedw),w是一個大于10的無符號整數,若w是n(n≥2)位的整數,則函數求出w的后n-1位的數作為函數值返回。

例如:w值為5923,則函數返回923;若w值為923,則函數返回23。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

unsignedfun(unsignedw)

{

}

main()

{

unsignedx;

clrscr();

printf("Enteraunsignedinteger

number:");

scanf("%u",&x);

printf("Theoriginaldatais:%u\n",x);

if(x<10)

printf("Dataerror!");

else

printf("Theresult:%u\n",fun(x));

}

29.N名學生的成績已在主函數中放入一個帶頭節(jié)點的鏈表結構中,h指向鏈表的頭節(jié)點。請編寫函數fun(),它的功能是:找出學生的最高分,由函數值返回。

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

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

試題程序:

#include<stdio.h>

#include<stdlib.h>

#defineN8

structslist

{doubles;

structslist*next;

};

typedefstructslistSTREC;

doublefun(STREC*h)

{

}

STREC*creat(double*s)

{

STREC*h,*p,*q;

inti=0;

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

p->s=0;

while(i<N)

/*產生8個節(jié)點的鏈表,各分數存入鏈表中*/

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

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

}

p->next=0;

returnh;/*返回鏈表的首地址*/

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

{printf("->%2.0f",p->s);p=p->next;}

/*輸出各分數*/

while(p!=0);

printf("\n\n");

}

main()

{

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

max;

STREC*h;

h=creat(s);

outlist(h);

max=fun(h);

printf("max=%6.1f\n",max);

}

30.請編寫一個函數fun(),它的功能是:根據以下公式求π的值(要求滿足精度0.005,即某項小于0.005時停止迭代)。

π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…

+1*2*3*…*n/(3*5*7*…*(2n+1))

程序運行后,如果輸入精度0.0005,則程序輸出3.14…。

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

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

試題程序:

#include<conio.h>

#include<math.h>

doublefun(doubleeps)

{

}

main()

{

doublex;

printf("Inputeps:");

scanf("%1f",&x);

printf("\neps=%1f,PI=%1f\n",x,fun(x));

}

31.請編寫一個函數fun(),它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數),函數返回較短的字符串。若兩個字符串長度相等,則返回第1個字符串。

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

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

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

試題程序:

#include<stdio.h>

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

{

}

main()

{

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

inti;

printf("Inputlthstring:");

gets(a);

printf("Input2thstring:");

gets(b);

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

}

32.請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用C語言提供的求字符串長度的函數),函數返回較長的字符串。若兩個字符串長度相同,則返回第一個字符串。

例如,輸入beijingshah曲aj(為回車鍵),函數將返回shanghai。

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

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

33.請編寫一個函數fun(),它的功能是:求出一個2×M整型二維數組中最大元素的值,并將此值返回調用函數。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數fan的花括號中填入所編寫的若干語句。

試題程序:

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

}

34.程序定義了N×N的二維數組,并在主函數中自動賦值。

請編寫函數fun(inta[][N],intn),該函數的功能是使數組左下半三角元素中的值加上n。

例如:若n的值為3,a數組中的值為

a=254

169

537

則返回主程序后a數組中的值應為

554

499

8610

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

請勿改動主函數main和其他函數中的任何內容,僅在函數full的花括號中填入所編寫的若干語句。

試題程序:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

fun(inta[][N],intn)

{

}

main()

{

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

clrscr();

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

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

/*產生—個隨機5*5矩陣*/

{

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

{

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

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

}

printf("\n");

}

do

n=rand()%10;

/*產生一個小于5的隨機數n*/

while(n>=5);

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

fun(a,n);

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

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

{

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

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

printf("\n");

}

}

四、單選題(0題)35.下列程序的輸出結果是()main(){intx=0,y=5,z=3;while(z-->0&&++x<5)y=y-1;printf(“%d,%d,%d\n”,x,y,z);}A.3,2,0B.3,2,-1C.4,3,-1D.5,-2,-5

五、單選題(0題)36.有以下程序main()inta[10]={1,2,3,4,5,6,7,8,9,10},*p=.&a[3],*q=p+2;printf("%d\n",*p+*q);程序運行后輸出結查是

A.16B.10C.8D.6

六、單選題(0題)37.有以下程序:#include<stdio,h>main(){intk=5,n=0;while(k>0){switch(k){default:break;case1:n+=k;case2:case3:n+=k;}k--;printf("%d\n",n);}程序運行后的輸出結果是()。

A.0B.4C.6D.7

參考答案

1.CC?!窘馕觥繑祿煜到y(DBS)由數據庫(DBS)、數據庫管理系統(DBMS)、數據庫管理員、硬件平臺和軟件平臺五個部分組成,可見DB和DBMS都是DBS的組成部分。

2.C解析:本題考查字符串比較函數strcmp()。調用形式:strcmp(s1,s2),其中s1、s2分別是字符串存儲區(qū)的首地址。函數功能:比較字符串str1和str2,當str1<str2時,返回值為負數;當str1=str2時,返回0;當str1>str2,返回值為正數(注意:不能使用關系運算符比較兩個字符串的大小)。

3.A

4.D解析:面向對象的世界是通過對象與對象間彼此的相互合作來推動的,對象間的這種相互合作需要一個機制協助進行,這樣的機制稱為消息。消息是一個實例與另一個實例之間傳遞的信息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統一了數據流和控制流。

5.C

6.A本題考查do-while循環(huán)。當--y是0(即y是o)時結束循環(huán),輸出--y,先將y的值減1再輸出Y的值。

7.A

8.A由于a==l和a!=1兩者互斥,即總有一個為真,因此二者的或也必定為真。

9.A解析:本題考查文件使用方式標識符,以“a+”方式打開一個已存在的文件,則表示保留文件中原有的數據,文件的位置指針在文件末尾,此時,可以進行追加或讀操作。

10.C表達式“++k”是先使得k的值自增1后再使用。表達式“k++”是先取得k的值再將k的值自增1。所以C選項中表達式的值為0,而其他3個選項中表達式的值均為1。故本題答案為C選項。

11.B

12.C

13.t*10或10*tt*10或10*t解析:本題要求累加一系列有規(guī)律的數,從輸出結果來看,s保存的是最終結果,而s在循環(huán)體中,每次累加一個t,則說明t在5次循環(huán)中分別等于1.12、123、1234、12345;而t每次循環(huán)等于“填空內容”加上循環(huán)變量i,又因為i在5次循環(huán)中分別等于1、2、3、4,5,所以t每次循環(huán)要加的“填空內容”應分別為0、10、120,1230,12340,這一系列值正好是前一次t的值的10倍.所以“填空內容”應是t*10。

14.j%3!=0或j%3j%3!=0或j%3解析:題目要求輸出100以內能被3整除且個位數為6的所有整數,且通過for循環(huán)實現,循環(huán)體內j=i*10+6;這也就滿足了個位數為6的條件,所以第1個空格填入i<10或i<=9;if語句中的continue說明如果條件不成立則不輸出j,所以第2空填j%3!=0或j%3。

15.類類解析:在面向對象的方法中,把具有相同屬性和方法的對象稱為類,類是對象的抽象,對象是類的實例。

16.cc。cc。解析:a是指針數組,每個數組元素存放的是字符數據的地址,數組a的3個元素分別指向字符串常量'aa'、'bb'和'cc',指針p賦予數組元素a[2]的值,即指向第3個字符串。

17.D

18.結構化設計結構化設計解析:與結構化需求分析方法相對應的是結構化設計方法。結構化設計就是采用最佳的可能方法設計系統的各個組成部分以及各個成分之間的內部聯系的技術。

19.本程序的功能是求a的b次方本程序的功能是求a的b次方

20.b=i+1b=i+1解析:本題考查了for循環(huán)語句的執(zhí)行過程。i+=2是修正表達式,執(zhí)行一次循環(huán)體后i的值就增加2,i的初始值為0,每次加2之后和累加至a,所以a的值就是1~10之間的偶數之后;b的值是1~11之間的奇數和,但在輸出b值時c去掉多加的11,即為1~10之間的奇數之和。

21.10410\r\n4解析:結構體變量所占內存長度是各成員占的內存長度之和。每個成員分別占有其自己的內存單元。int占2個字節(jié),float占4個字節(jié),共用體變量所占的內存長度等于最長的成員的長度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4-10。

22.解析:本題考查帶參數的宏的定義及相關運算。運算過程為:t=POW(x+y)=(2+3)*(2+3)=25。

23.&a[i]a[i]&a[i]\r\na[i]解析:scanf的格式為:scanf(格式控制,地址表列),因此,第一處應該填寫地址,由于是循環(huán)輸入,所以填&a[i]。依據題意第二處應該填寫a[i],以實現sum=sum+a[i]的求和。

24.消息消息解析:對象之間進行通信的構造叫做消息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統一了數據流和控制流。

25.

解析:該程序功能是將一個數字字符串轉換為一個整數。其中,解題思路是將每位數字字符串的ASCII碼減去48(字符“0”的ASCII碼值),變成數字0~9。然后再不斷進行高位乘以10加低位的運算,或者反過來從低位向高位求,即不斷進行低位加高位乘以10的運算。

26.

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

27.

解析:該程序功能是計算并輸出給定10個數的方差。解題思路是,根據題干中給出的方差公式首先計算出x’的值,然后計算根號里面的值,最后求其平方根。

28.unsignedfun(unsignedw){if(w>=10000)returnw%10000;/*求出n位整數w的后n-1位的數*/if(w>=1000)returnw%1000;if(w>=100)returnw%100;if(w>=10)returnw%10;}unsignedfun(unsignedw)\r\n{\r\nif(w>=10000)\r\nreturnw%10000;/*求出n位整數w的后n-1位的數*/\r\nif(w>=1000)\r\nreturnw%1000;\r\nif(w>=100)\r\nreturnw%100;\r\nif(w>=10)\r\nreturnw%10;\r\n}解析:我們首先應該明白無符號整數的定義形式,若它大于10000(5位)時,將10000對它求余則結果為后4位;當它大于1000(4位)時,將1000對它求余則結果為后3位,花此類推。特別注意這里所有if()的順序不能顛倒。

29.doublefun(STREC*h){doublemax=h->s;while(h!=NULL)/*通過循環(huán)找到最高分數*/{if(max<h->s)max=h->s;h=h->next;}returnmax;}doublefun(STREC*h)\r\n{\r\ndoublemax=h->s;\r\nwhile(h!=NULL)/*通過循環(huán)找到最高分數*/\r\n{if(max<h->s)max=h->s;\r\nh=h->next;\r\n}\r\nreturnmax;\r\n}解析:在本題中,h為一個指向結構體的指針變量,若要引用它所指向的結構體中的某一成員時,要用指向運算符“->”。由于是鏈表,所以要使h逐一往后移動,使用的是h=h->next。

30.doublefun(double

溫馨提示

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

評論

0/150

提交評論