2022年湖北省孝感市全國計算機等級考試C語言程序設計真題一卷(含答案)_第1頁
2022年湖北省孝感市全國計算機等級考試C語言程序設計真題一卷(含答案)_第2頁
2022年湖北省孝感市全國計算機等級考試C語言程序設計真題一卷(含答案)_第3頁
2022年湖北省孝感市全國計算機等級考試C語言程序設計真題一卷(含答案)_第4頁
2022年湖北省孝感市全國計算機等級考試C語言程序設計真題一卷(含答案)_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2022年湖北省孝感市全國計算機等級考試C語言程序設計真題一卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.下列二維數組的說明中,不正確的是()。

A.floata[][4]={0,1,8,5,9};

B.inta[3][4]

C.#defineN5floata[N][3]

D.inta[2][9.5];

2.判斷一個順序存儲的隊列sp為空的條件是()。

A.sp->front=sp->rear

B.sp->front=sp->rear+1

C.sp->front=sp->rear-1

D.sp->front=NULL

3.有下列程序:main{intk=5,n=0;while(k>0){switch(k){dcfault:break;case1:n=n+k;case2:case3:n+=k;}k--;}printf("%d\n".n);}程序運行后的輸出結果足()。A.0B.4C.6D.7

4.下列描述中,不是線性表順序存儲結構特征的是

A.不便于插入和刪除B.需要連續的存儲空間C.可隨機訪問D.需另外開辟空間來保存元素之間的關系

5.有以下定義語句,編譯時會出現編譯錯誤的是()。

A.chara=a;B.chara=\nC.chara=aa;D.chara=\x2d;

6.

7.if語句的基本形式是:if(表達式)語句,以下關于“表達式”值的敘述中正確的是A.必須是邏輯值B.必須是整數值C.必須是正數D.可以是任意合法的數值

8.已知廣義表L=((x,y,z),a,(u,t,w)),從L表中取出原子項t的運算是()。

A.head(tail(tail(L)))

B.tail(head(head(tail(L))))

C.head(tail(head(tail(L))))

D.head(tail(head(tail(tail(L)))))

9.下列描述錯誤的是()。

A.繼承分為多重繼承和單繼承

B.對象之間的通信靠傳遞消息來實現

C.在外面看不到對象的內部特征是基于對象的“模塊獨立性好”這個特征

D.類是具有共同屬性、共同方法的對象的集合

10.

11.若有定義“intk=7,x=12;”,則以下表達式值為3的是()。

A.(x%=k)-(k%=5)B.x%=(k%=5)C.x%=(k-k%5)D.x%=k-k%5

12.以下四個選項,不能看作一條語句的是()。

A.{;}B.a=0,b=0,c=0;C.if(a>0);D.if(b==0)m=1;n=2;

二、2.填空題(12題)13.若從鍵盤輸入24,則以下程序輸出的結果是()。

#include<stdio.h>

main()

{inta;

scanf("%d",&A);

if(a>20)printf("%d",A);

if(a>10)printf("%d",A);

if(a>5)printf("%d",A);

}

14.E-mail地址由用戶名和域名兩部分組成,這兩部分的分隔符為【】。

15.有如下圖所示的雙鏈表結構,請根據圖示完成結構體的定義:

structaa

{intdata;

【】}node;

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

structdate

{intday;

intmouth;

intyear;

union{intshare1;

floatshare2;

}share;

}a;

17.下述函數統計—個字符串中的單詞個數,單詞是指處在空格之間的字符序列,請填空。

intword(char*s)

{intnum=0,flag=0;

while(*s)

{if(【】='')flag=0;

elseif(【】){flag=1;num++}

}

return【】;}

18.Jackson方法是一種面向【】的結構化方法。

19.函數compare的功能是比較兩個字符串是否相等,若相等則函數返回值0,否則返回值1,請填空。

compare(chars[],chart[])

{inti=0;

while(s[i]==t[i]||【】)i++;

return(【】?1:0);

}

20.數據的物理結構在計算機存儲空間中的存放形式稱為數據的【】。

21.若從鍵盤輸入58,則以下程序的輸出結果是【】。

main()

{inta;

scanf(“%d”,&A);

if(a>50)printf(“%d”,A);

if(a>40)printf(“%d”,A);

if(a>30)printf(“%d”,A);

}

22.【】是數據庫設計的核心。

23.下列程序中的函數stropy2()實現字符串兩次復制,即將t所指字符串復制兩次到s所指內存空間中,合并形成一個新字符串。例如,若t所指字符串為:efgh,調用strcpy2后,s所指字符串為:efghefgh。請填空。

#include<stdio.h>

#include<string.h>

voidstrcpy2(char*s,char*t)

{char*p=t;

while(*s++=*t++);

s=【】;

while(【】=*p++);

}

main()

{charstr1[100]="abed",str2[]="efgh";

strcpy2(str1,str2);printf("%s\n",str1);

}

24.在關系模型中,把數據看成一個二維表,每一個二維表稱為一個______。

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

例如,若一維數組中的數據是:

2223445666677899101010

刪除后,數組中的內容應該是:

2345678910。

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

請勿改動主函數main和其他函數中的任何內容,僅在函數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");

}

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

例如,當score數組中的數據為10,20,30,40,50,60,70,80,90時,函數返回的人數應該是4,below中的數據應為10,20,30,40。

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

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

試題程序:

#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.請編寫函數fun,函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中;要求函數把O至9歲年齡段的人數放在d[0]中,把10至19歲年齡段的人數放在d[1],把20至29歲年齡段的人數放在d[2]中,其余依此類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。

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

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

28.請編寫函數fun,其功能是:計算并輸出下列多項式的值:

例如,在主函數中從鍵盤給n輸入15,則輸出為:s=2.718282。

注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。

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

29.編寫一個函數,從num個字符串中找出最長的一個字符串,并通過形參指針max傳回該串地址。(注意:主函數中用¨¨作為結束輸入的標志。)

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

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

30.編寫函數fun(),它的功能是:計算和輸出下列級數的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

例如,當n=10時,函數值為0.909091。

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

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

試題程序;

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

clrscr();

printf("%f\n",fun(10));

}

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

例如,若學生的成績是85,76,69,91,72,64,87,則平均分應當是78.625。

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

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

試題程序:

#include<stdlib.h>

#include<stdio.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)

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

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

}

p->next=0;

returnh;

}

outlist(STREC*h)

{

STREC*p;

p=h->next;

printf("head");

do

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

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

}

while(p!=0)

}

main()

{

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

87},ave;

STREC*h;

h=creat(s);

outlist(h);

ave=fun(h);

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

}

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

P=m!/n!(m-n)!),例如:m=12,n=8時,運行結果為495.000000。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

floatfun(intm,intn)

{

}

main()

{

clrscr();

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

}

33.已知學生的記錄由學號和學習成績構成,N名學生的數據已存入a結構體數組中。請編寫函數fun(),該函數的功能是:找出成績最低的學生記錄,通過形參返回主函數(規定只有一個最低分)。己給出函數的首部,請完成該函數。

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<aonio.h>

#defineN10

typedefstructss

{charnum[10];

ihts;

}STU;

fun(STUail,STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80),{"Al0",71}},m;

inti;

clrscr0;

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",ail].num,

a[i].s);

fun(a,&m);

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

printf("Thelowest:%s,%d\n",m.num,

m.s);

}

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

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

注意:部分源程序存在文件PROGl.C文件中。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。

四、單選題(0題)35.用二分法查找一個長度為10的,排好序的線性表,查找不成功時,最多需要比較()次

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

五、單選題(0題)36.

六、單選題(0題)37.

參考答案

1.D解析:C語言規定,對于二維數組,只可以省略第一個方括號中的常量表達式,而不能省略第二個方括號中的常量表達式:二維數組的一般定義格式是:類型說明符數組名[常量表達式][常量表達式]。

2.A

3.D本題主要考查while循環語句和switchcase語句的使用方法。其執行步驟為:k=5時,跳出switch語句,然后k自減1;當k=4時,跳出switch語句,然后k自減1;當k=3時,n=13+k=0+3=3,跳出switch語句,然后k自減1;當k=2時n=n+k=3+2=5,跳出switch語句,然后k自減l;當k=1時,case1:n=n+k一5+1=6,沒有break繼續執行CaSe3;n=n+k=6+1=7,跳出switch語句,然后k自減1;當k=0時,退出循環,所以輸出結果為7。

4.D解析:線性表的順序存儲是用一片連續的空間來存放數據元素,其特點是邏輯上相鄰的元素在物理位置上也相鄰。數據元素之間邏輯上的先后關系自動隱含在物理位置的相鄰元素之中,因此,不需要另外開辟空間來保存元素之間的關系。

5.Cchar類型用于存儲單個字符的簡單變量類型,它可以被指定為一個字符常量或一個整數。

6.B

7.D

8.D

9.C解析:對象的封裝性是指從外面看只能看到對象的外部特性;而對象的內部,其處理能力的實行和內部狀態對外是不可見的,是隱蔽的。

10.D

11.A選項A中,表達式“x%=k”結果為5,表達式“k%=5”結果為2,5-2結果為3;選項B中,“k%=5”結果為2,“x%=2”結果為0;選項C中,“k%5”結果為2,“k-k%5”結果為5,“x%5”結果為2;選項D中,“k%5”結果為2,“k-k%5”結果為5,x%5結果為2。故本題答案為A選項。

12.D解析:在if后面只能有一條語句,或一條復合語句,即用花括號將多條語句括起來。選項D)中沒有將兩條語句括起來,不能看成一條語句。

13.242424

14.@

15.structaa*lhead*rchild;structaa*lhead,*rchild;解析:結構體對鏈表的定義。

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

17.*s++flag=0或*(s-1)=''num*s++\r\nflag=0或*(s-1)=''\r\nnum解析:在統計字符串單詞個數的算法中,本題的flag是為了記錄—個單詞是否結束。第18空應填*s++;如果某個字符不是空格,則必須判斷它是否是單詞,如是,則使得flag的標志為1,num的值加1。本題判斷方法是:先判斷s所指向的字符是否為空格,如果是則使得flag=0,否則判斷前—個字符是否是空格,如果是則說明這個字符是—個單詞的開始,將flag標志為1,num的值加1,如果不是,則不必記錄。故第19空應填flag=0或*(s-1)='';最后—個空格需填寫的是返回的單詞的個數,即num。

18.數據結構數據結構解析:Jackson方法是—‘種面向數據結構的結構化方法。

19.s[i]!='\0'||t[i]!='\0's[i]=='\0'&&t[i]=='\0's[i]!='\\0'||t[i]!='\\0'\r\ns[i]=='\\0'&&t[i]=='\\0'

20.內模式或物理模式或存儲模式內模式或物理模式或存儲模式解析:一個數據庫只有一個內模式,它是數據物理結構和存儲方式的描述,是數據庫內部的表示方法。例如,記錄的存儲方式是順序存儲、索引按照什么方式組織;數據是否壓縮存儲,是否加密等。

21.585858585858解析:在程序中,執行scanf()語句后,a被賦值為58。接著執行第一個if語句,因為,a=58>50,執行第一個if語句后面的輸出語句,輸出58;接著執行第二個if語句,因為,a=58>40,執行第二個if語句后面的輸出語句,輸出58;接著執行第三個if語句,因為,a=58>30,執行第三個if語句后面的輸出語句,輸出58,所以最后的輸出為585858。

22.數據模型數據模型

23.s-1或--s或s--*s++s-1或--s或s--\r\n*s++解析:在函數。strcpy2()中,首先將指針t保存到指針p中,然后進入第1個while()循環,其循環條件為*s++=*t++,其中“*”和“++”運算符的優先級相同,但他們的結合性為從右至左,而“=”運算符優先級比較低,所以原表達式等價于(*s++)=(*(t++)),即將t當前所指內容復制到s當前所指地址中,然后讓s和t同時往后移動一位,整個表達式返回的是復制給s的值。所以,當t所指內容是字符串結束符'\\0',時,while循環結束,原先t所指的整個字符串也就復制到s所指的地址中去了。但是,while循環最后一次判斷也會讓s和t往后移動一位,即此時s指向了字符串結束符'\\0'的后一位。所以第2次復制字符串之前,應先將s指針往回移動一位,故前一空應該填入s-1或其他等價形式。接下來的while循環實現第二次復制,照抄第1次的while循環就行,故后一空應填入*s++。

24.關系關系解析:關系模型用;維表表示,則每個;維表代表一種關系。

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

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)/*如果分數低于平均分則將此分數放入below數組中*/below[j++]=score[i];returnj;/*返回低于平均分的人數*/}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)/*如果分數低于平均分,則將此分數放入below數組中*/\r\nbelow[j++]=score[i];\r\nreturnj;/*返回低于平均分的人數*/\r\n}解析:該題第1個循環的作用是求出平均分av,第2個循環的作用是找出低于平均分的成績并存入below數組中。

27.

解析:該程序功能是統計各年齡段的人數。本題中采用的是多if選擇語句,實現了不同年齡段的分支選擇。

28.

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

29.

解析:該程序功能是找出最長的一個字符串。解題思路,首先指定第一個字符串為長度最大的字符串,然后在循環過程中將其與其他的所有串的長度進行比較,求出最長的串。

30.doublefun(intn){inti;doubles=0.0;for(i=l;i<=n;i++)s=s+l.0/(i*(i+l));/*求級數的和*/returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=l;i<=n;i++)\r\ns=s+l.0/(i*(i+l));/*求級數的和*/\r\nreturns;\r\n}解析:解決數學序列的問題,我們的思路依然是“數學先行”,即先看清楚題目的數學邏輯,然后再根據C語言來“翻譯”出來。本題中,每一項的值都是n*(n+1)的倒數。當輸入n時,從1開始循環,注意,此處for(i=1;i

31.doublefun(STREC*h){doubleav=0.0;STREC*p-h->next;/*p直接指向“頭結點”的下一個結點即第—個成績*/while(p!=NULL){aY=ay+p->s;/*求總分數*/p=p->next;}returnay/N;/*返回平均值*/}doublefun(STREC*h)\r\n{\r\ndoubleav=0.0;\r\nSTREC*p-h->next;/*p直接指向“頭結點”的下一個結點,即第—個成績*/\r\nwhile(p!=NULL)\r\n{aY=ay+p->s;/*求總分數*/\r\np=p->next;\r\n}\r\nreturnay/N;/*返回平均值*

溫馨提示

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

評論

0/150

提交評論