2021-2022學年四川省眉山市全國計算機等級考試C語言程序設計測試卷(含答案)_第1頁
2021-2022學年四川省眉山市全國計算機等級考試C語言程序設計測試卷(含答案)_第2頁
2021-2022學年四川省眉山市全國計算機等級考試C語言程序設計測試卷(含答案)_第3頁
2021-2022學年四川省眉山市全國計算機等級考試C語言程序設計測試卷(含答案)_第4頁
2021-2022學年四川省眉山市全國計算機等級考試C語言程序設計測試卷(含答案)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

2021-2022學年四川省眉山市全國計算機等級考試C語言程序設計測試卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.下列程序段的輸出結果是()。chara=9,b=020;prihtf("%o\n",~a&b<<1);

A.100000B.8C.40D.77

2.

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

4.fgetc函數的作用是從指定文件讀入—個字符,該文件的打開方式必須是______。

A.只讀B.追加C.讀或讀寫D.以上均正確

5.若用一個大小為6的數值來實現循環隊列,且當前rear和front的值分別為0和3,當從隊列中刪除一個元素,再加入兩個元素后,rear和front的值分別為()。

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

6.將數據和操作置于對象統一體中的實現方式是()。

A.隱藏B.抽象C.封裝D.結合

7.有以下程序:#include<stdio.h>main(){inta=2,b;b=a<<2;printf("%d\n",b);}程序運行后的輸出結果是()。A.2B.4C.6D.8

8.對n個數進行排序,哪種算法,其時間復雜度在最壞和最好都是O(nlogn)()

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

9.在循環雙鏈表的p所指的結點之前插入s所指結點的操作是()。A.p->prior->prior

B.p->prior->prior

C.s->prior->next=s

D.s->prior->prior=s

10.

11.對矩陣進行壓縮存儲是為了()。

A.方便運算B.方便存儲C.提高運算速度D.減少存儲空間

12.有以下程序段當執行上述程序段,從鍵盤上輸A,555667777123后,y的值為()。

A.566.0B.55566.0C.7777.0D.566777.0

二、2.填空題(12題)13.若有定義語句:inta=5;,則表達式:a++的值是【】。

14.數據結構分為邏輯結構和存儲結構,循環隊列屬于______結構。

15.以下程序的運行結果是【】。

#include<string.h>

typedefstructstudent{

charname[10];

longsno;

floatscore;

}STU;

main()

STUa={"Zhangsan",2001,95},b={"Shangxian",2002,90},

c={"Anhua",2003,95},d,*p=&d;

d=a;

if(strcmp(,)>0)d=b;

if(strcmp(,)>0)d=c;

printf("%1d%s\n",d.sno,p->name);

}

16.以下程序運行后的輸出結果是______。

main()

{inta=1,b=2,c=3;

if(c=A)printf("%d\n",C);

elseprintf("%d\n",B);

}

17.以下程序中函數f的功能是在數組x的n個數(假定n個數互不相同)中找出最大最小數,將其中最小的數語第一個數兌換,把最大的數語最后一個數對換。請填空。

#include<stdio.h>

voidf(intx[],intn)

{intp0,p1,i,j,t,m;

i=j=x[0];p0=p1=0;

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

if(x[m]>i){i=x[m];p0=m;}

elseif(x[m]<j){j=x[m];p1=m;

}

t=x[p0];x[p0]=x[n-1];x[n-1]=t;

t=x[p1];x[p1]=[11];[12]=t;

main()

{inta[10],u;

for(u=0;u<10;u++)scanf("%d",&a[u]);

f(a,10);

for(u=0;u<10;u++)printf("%d",a[u]);

printf("\n");

}

18.以下程序的輸出結果是【】。

#include<stdio.h>

fun()

{staticinta=0;

a+=2;printf("%d",a);}

main()

{intcc;

for(cc=1;CC<4;CC++)fun();

printf("\n");}

19.設一棵完全二叉樹共有500個結點,則在該二叉樹中有【】個葉子結點。

20.以下程序的輸出結果是______。

voidfun()

{staticinta=0;

a+=2;printf("%d",a);

}

main()

{intcc;

for(cc=1;cc<4;cc++)fun();

printf("\n");

}

21.數據元素之間______的整體稱為邏輯結構。

22.數據結構分為線性數據結構和非線性數據結構,帶鏈的隊列屬于()。

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

24.下面程序的功能是將字符串s中所有的字符c刪除,補足所缺語句。

#include<stdio.h>

main()

{chars[80];

inti,j;

gets(s);

for(i=j=0;s[i]!='\0';i++)

if(s[i]!='c')【】;

s[j]='\0';

puts(s);

}

三、3.程序設計題(10題)25.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun(),它的功能是:把指定分數范圍內的學生數據放在b所指的數組中,分數范圍內的學生人數由函數值返回。

例如,輸入的分數是60和69,則應當把分數在60到69的學生數據進行輸出,包含60分和69分的學生數據。主函數中把60放在low中,把69放在heigh中。

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

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

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

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

{

}

main()

{

STRECs[N]={{"GA005",85},{"GA003",76},

{"GA002",69},{"GA004",85},{"GA001",96},

{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",94},{"GA012",64},

{"GA014",91},{"GA011",90},{"GA017",64},

{"GA018",64},{"GA016",72}};

STRECh[N],tt;

FILE*out;

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

printf("Enter2integernumberlow&

heigh:");

scanf("%d%d",&low,&heigh);

if(heigh<low)

{t=heigh;heigh=low;low=t;}

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

printf("Thestudent'sdatabetween

%d--%d:\n",low,heigh);

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

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

/*輸出指定分數范圍內的學生記錄*/

printf("\n");

ut=fopen("out74.dat","w")

fprintf(out,"%d\n",n)-

n=fun(s,h,80,98);

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

/*分數在80~98之間的學生記錄按他數從低到高排序*/

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

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

{tt=h[i];h[ii=h[j];h[j]=tt;}

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

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

fprintf(out,"\n");

fclose(out);

}

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

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

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

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

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,其功能是:根據以下公式求P的值,結果由函數值帶回。m與n為兩個正整數且要求m>n。

例如:m=12,n=8時,運行結果為495.000000。

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

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

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

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

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

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

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

30.函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c中。合并的方式是:將a中的十位和個位數依次放在變量c的千位和十位上,b中的十位和個位數依次放在變量c的個位和百位上。

例如,當a=45,b=12。調用該函數后,c=4251。

注意:部分源程序存在文件PROGl.C中。數據文件IN.DAT中的數據不得修改。

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

31.N名學生的成績已在主函數中放入一個帶頭節點的鏈表結構中,h指向鏈表的頭節點。請編寫函數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個節點的鏈表,各分數存入鏈表中*/

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

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

}

p->next=NULL;

returnh;

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

}

outlist(STREC*h)

{

STREC*p;

p=h;

printf("head");

do

{printf("->%2.of",p->s);p=p->next;}

/*輸/出各分數*/

while(p!=NULL);

printf("\n\n");

}

main()

{

doubles[N]={56,89,76,95,91,68,75,

85},min;

STREC*h;

h=creat(S);

outlist(h);

min=fun(h);

printf("min=%6.If\n",min);

}

32.請編寫函數fun(),其功能是;計算井輸出下列多項式值。

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

例如,若主函數從鍵盤給n輸入8后,則輸出為S-0.662872。

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

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

試題程序;

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doubles;

printf("\nInputn:");

scanf("%d",&n);

s=fun(n);

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

}

33.請編寫一個函數voidfun(char*tt,intpp[]),統計在tt字符串中“a”到“z”26個字母各自出現的次數,并依次放在pp所指數組中。

例如:當輸入字符串abcdefghabcdeabc后,程序的輸出結果應該是:33322110000000000000000000

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(char*tt,intpp[])

{

}

main()

{

charaa[1000];

intbb[26],k,n;

clrscr();

printf("\nPleaseenteracharstring:");

scanf("%s",aa);

fun(aa,bb);

for(k=0;k<26;k++)

printf("%d",bb[k]);

printf("\n");

}

34.編寫函數fun(),它的功能是:求出1~1000之內能被7或11整除,但不能同時被7和11整除的所有整數,并將它們放在a所指的數組中,通過n返回這些數的個數。

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

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

[試題源程序]

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

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

if(k+1)%10==0)

{

printf("%5d",aa[k]);

printf("\n");

}

else

printf("%5d",aa[i]);

}

四、單選題(0題)35.廣義表((a))的表頭是(a),表尾是()。A.aB.()C.(a)D.((a))

五、單選題(0題)36.若程序中有宏定義行“#defineN100”,則下列敘述中正確的是()。

A.宏定義行中定義了標識符N的值為整數100

B.在編譯程序對C語言源程序進行預處理時用100替換標識符N

C.上述宏定義行實現將100賦給標識符N

D.在運行時用100替換標識符N

六、單選題(0題)37.圖的BFS生成樹的樹高比DFS生成樹的樹高()

A.小或相等B.小C.大或相等D.大

參考答案

1.C解析:將變量a按位求反,再與b按位與,最后左移1位。9的二進制表示為00001001,020的二進制表示為00010000。a按位求反為11110110,再與b按位與結果為00010000,左移1位結果為00100000。按八進制輸出為040。

2.B

3.A

4.D解析:fgetc函數是指從指定的文件讀入—個字符,該文件必須是以讀或讀寫方式打開的。fgetc函數的調用形式為:ch=fgetc(fp);。

5.B

6.C對象具有封裝性,從外面看只能看到對象的外部特性,對象的內部對外是封閉的。即封裝實現了將數據和操作置于對象統一體中。本題答案為C選項。

7.D本題考查運算符“<<”,b=a<<2,是左移2位,a=2,即b=2*2*2=8。

8.C

9.D

10.B

11.D

12.A本題考查的是格式輸)ki$i數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變量之中,其中的格式命令可以說明最大域寬。在百分號(%)與格式碼之間的整數用于限制從對應域讀入的最大字符數。因此j的值為55,y的值為566.0,字符數組nanle的值為7777123。故本題答案為A)。

13.55解析:a++的含義是在使用a值以后,使a值加1,所以a++的值為5。

14.存儲或物理或存儲結構或物理結構存儲或物理或存儲結構或物理結構解析:數據的邏輯結構在計算機存儲空間中的存放形式稱為數據的存儲結構(也稱數據的物理結構)。所謂循環隊列,就是將隊列存儲空間的最后一個位置繞到第一個位置,形成邏輯上的環狀空間。供隊列循環使用。可知,循環隊列應當是物理結構。

15.2002Shangxian2002Shangxian解析:本題中首先定義一個結構體類型STU,該結構體由一個長度為10的字符型數組、一個long型變量和一個float型變量組成。接著在主函數中用STU定義了4個結構體變量a、b、c、d,并且給a、b、c賦初值,然后定義了一個結構體指針p,并讓它指向變量do將變量a的值賦給變量d,接著通過兩個if語句比較結構體變量a、b、c的成員name大小。第一個if語句將結構體變量和結構體變量中較小的那個賦值給結構體變量d,第二個if語句將結構體變量和結構體變量較大的那個賦給結構體變量do比較通過函數strcmp實現。strcmp()函數有兩個參數,分別為被比較的兩個字符串。如果第一個字符串大于第二個字符串返回值大于0,若第一個小于第二個返回值小于0,相等時返回值為0。字符串比較大小的標準是從第一個字符開始依次向右比較,遇到某一個字符大,該字符所在的字符串就是較大的字符串,如果遇到某一個字符小,該字符所在的字符串就是較小的字符串。程序中第一個if語句strcmp(,)>0為真,故將b的值賦給d,第二個if語句strcmp(,)>0為假,故不執行后面的語句,最后d的值為b的值,因此輸出d.sn0和p->name的值為2002Shangxian。

16.11解析:本題是一個陷阱題。在if語句的判斷表達式中,使用的不是邏輯運算符==而是賦值運算符=,使該表達式返回的結果正好相反。如果是c==a,則結果為假。但是c=a則是將a賦給c,且表達式的結果是賦值之后的c的值,因此結果為1是真.故最后輸出c的值1。

17.x[0]x[0]x[0]x[0]解析:函數f()通過for循環逐個比較數組x中的元素,循環結束后,p0和p1分別表示最大值和最小值在數組中的下標位置,然后按照題意將最大值x[p0]和數組的最后一個元素x[n-1)交換位置,再將最小值x[p1]和第一個元素(x[0])進行交換,所以空白處應該填入x[0]。

18.246246解析:本題考查了for循環語句的使用,同時靜態局部變量的存儲和生存其特性也要注意。第一次執行fun()函數時,a=0,所以a+=2=2;第二次執行fun()函數時,a保留著上次制形式的結果2,所以a+=2=4;同理第三次執行fun()函數時,a=6,所以輸出結果為246。

19.250250解析:所謂完全二叉樹是指除最后一層外,每—層上的結點數均達到最大值;在最后—層上只缺少右邊的若干結點。具有n個結點的完全二叉樹,其父結點數為int(n/2),而葉子結點數等于總結點數減去父結點數。本題n=500,故父結點數等于int(500/2)=250,葉子結點數等于500-25=250。

20.246

21.邏輯關系邏輯關系

22.線性數據結構線性數據結構解析:隊列的鏈式存儲稱為鏈隊列,它屬于線性數據結構。

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

24.s[j++]=s[i]

25.intfun(STREC*aSTREC*bint1inth){intij=0;for(i=0;i<N;i++)if(a[i].s>-l&&a[i].s<=h)/*將分數高于1低于h的學生記錄存在于結構體數組b中*/b[j++]=a[i];returnj;/*返回分數范圍內的學生人數*/}intfun(STREC*a,STREC*b,int1,inth)\r\n{\r\ninti,j=0;\r\nfor(i=0;i<N;i++)\r\nif(a[i].s>-l&&a[i].s<=h)/*將分數高于1,低于h的學生記錄存在于結構體數組b中*/\r\nb[j++]=a[i];\r\nreturnj;/*返回分數范圍內的學生人數*/\r\n}解析:處理此類分段統計問題,可采用多分支選擇語句或條件選擇語句。此處采用條件選擇語句解答,具體見參考答案。使用條件選擇語句進行分段統計時應當注意分段范圍。

26.

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

27.

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

28.

解析:(1)該程序功能是對組合數公式求值。它的解題思路,可以分解為以下幾步:求m!→求n!→求(m-n)!→求組合數的值。

(2)從已給部分源程序的main主函數開始入手,主函數中的“printf(“P=%f\n”,fun(12,8));”語句中“fun(12,8)”將12、8傳遞給fun中的m與n,fun函數實現對組合數的求佰。

29.

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

30.*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);解析:該程序功能是將正整數a、b合并形成一個新整數。本題類型首先要考慮整數的位數分離,然后要進行位數合成。也就是先將數字的各位數拆開,改變排列順序后,再組合成新的數字。

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

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

33.void

溫馨提示

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

最新文檔

評論

0/150

提交評論