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

下載本文檔

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

文檔簡介

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

一、單選題(12題)1.下列程序的輸出結果是()。

#include<stdio.h>

intb=2;

intfunc(int*A)

{b+=*a;retumb;}

main()

{inta=1,t=2;

t+=func(&A);

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

}

A.4B.5C.6D.8

2.與單鏈表相比,雙向鏈表的優點之一是()。

A.插入、刪除操作更加簡單B.可以隨機訪問C.可以省略表頭指針或表尾指針D.順序訪問相鄰結點更加靈活

3.設有遞歸算法如下試問計算x(x(8))時需要計算()次x函數。A.8B.9C.16D.18

4.在待排序的元素序列基本有序的前提下,效率最高的排序方法是()。A.A.冒泡排序B.選擇排序C.快速排序D.歸并排序

5.關于排序算法的以下說法,錯誤的是()

A.歸并排序的平均時間復雜度O(nlogn),最壞時間復雜度O(n^2)

B.堆排序平均時間復雜度O(nlogn),最壞時間復雜度O(nlogn)

C.冒泡排序平均時間復雜度O(n^2),最壞時間復雜度O(n^2)

D.快速排序的平均時間復雜度O(nlogn),最壞時間復雜度O(n^2)

6.采用深度優先搜索或拓撲排序算法可以判斷出一個有向圖中是否有環(回路)()

A.對B.錯

7.以下敘述中正確的是()。

A.結構體變量中的成員可以是簡單變量、數組或指針變量

B.不同結構體的成員名不能相同

C.結構體定義時,其成員的數據類型可以是本結構體類型

D.結構體定義時,類型不同的成員項之間可以用逗號隔開

8.

9.若有定義語句“doublea,*p=&a;”,下列敘述中錯誤的是()。

A.定義語句中的“*”是一個間址運算符

B.定義語句中的“*”是一個說明符

C.定義語句中的“p”只能存放double類型變量的地址

D.定義語句中*p=&a”把變量a的地址作為初值賦給指針變量p

10.程序運行中需要從鍵盤上輸入多于一個數據時,各數據之間應使用()符號作為分隔符。

A.空格或逗號B.逗號或回車C.逗號或分號D.空格或回車

11.

12.算法的時間復雜度取決于()

A.問題的規模B.待處理數據的初態C.A和B

二、2.填空題(12題)13.以下程序的輸出結果是【】。

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\N,*p,*q))

}

14.下列程序的運行結果為【】。

main()

{intx=2,y,z;

x*=3+1;

printf("%d,",x++);

x+=y=z=5;

printf("%d,",x);

K=y==Z;

printf{"%d\n",x);

}

15.在關系模型中,二維表的行稱為______。

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

main()

{intx=15;

while(x>10&&x<50)

{x++;

if(x/3){x++;break;}

elsecontinue;

}

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

}

17.下面程序有兩個printf語句,如果第一個printf語句輸出的是194,則第二個printf語句的輸出結果是【】。

main()

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

p=a;

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

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

}

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

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\n",*p,*q);

}

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

#defineMCRA(m)2*m

#defineMCRB(n,m)2*MCRA(n)+m

main()

{

inti=2,j=3;

printf("%d\n",MCRB(j,MCRA(i)));

}

20.數據結構包括數據的邏輯結構、數據的【】以及對數據的操作運算。

21.strcat函數的作用是【】。

22.寫出下列程序的輸出結果______。

main()

{intn=0;

while(n++<=1);

printf("%d,",n);

printf("%d",n++);

}

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

main()

{inta;

scanf(“%d”,&A);

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

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

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

}

24.閱讀下列程序,則程序的輸出結果為【】。

#include"stdio.h"

structty

{intdata;

charc;};

main()

{structtya={30,'x'};

fun(a);

printf("%d%c",a.data,a.c);}

fun(structtyb)

{b.data=20;

b.c='y';}

三、3.程序設計題(10題)25.下列程序定義了NXN的二維數組,并在主函數中自動賦值。請編寫函數fun(inta[][N]),該函數的功能是使數組右上半三角元素中的值全部置成0。例如a數組中的值為

a=456

179

326,

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

000

100

320

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[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”);

}

fun(a);

printf(“THERESULT\n”);

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

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

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

printf(“\n”);

}

}

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

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

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

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

27.請編一個函數floatfun(doubleh),函數的功能是對變量h中的值保留兩位小數,并對第三位進行四舍五入(規定h中的值為正數)。

例如:若h值為8.32433,則函數返回8.32:若h值為8.32533,則函數返回8.33。

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

floatfun(floath)

{

}

main()

{

floata;

clrscr();

printf("Entera:");

scanf("%f",&a);

printf("Theoriginaldatais:");

printf("%f\n\n",a);

printf("Theresult:%f\n",fun(a));

}

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

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

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

試題程序:

#include<stdio.h>

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b)

{

}

main()

{

STRECs[N]={{“GA005”,82},{“GA003”,75},

{“GA002”,85},{“GA004”,78},{“GA001”,95},

{“GA007”,62},{“GA008”,60},{“GA006”,85},

{“GA015”,83},{“GA013”,94},{“GA012”,78},

{“GA014”,97},{“GA011”,60},{“GA017”,65},

{“GA018”,60},{“GA016”,74}};

STRECh[N];

inti,n;

FILE*out;

n=fun(S,h);

printf(“The%dlowestscore:\n”,n);

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

printf(“%s%4d\n”,h[i].mum,h[i].s);

/*輸出最低分學生的學號和成績*/

printf(“\n”);

out=fopen("outl9.dat",“w”);

fprintf(out,“%d\n”,n);

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

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

fclose(out);

}

29.請編寫函數fun(),其功能是:將s所指字符串中下標為奇數的字符刪除,串中剩余字符形成的新串放在t所指數組中。

例如,當s所指字符串中的內容為siegAHdied,則在t所指數組中的內容應是seAde。

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

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

試題程序:

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

}

30.請編寫函數fun(),該函數的功能是:移動一維數組中的內容,若數組中有n個整數,要求把下標從p到n-1(p≤n-1)的數組元素平移到數組的前面。

例如,一維數組中的原始內容為1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值為6。移動后,一維數組中的內容應為7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。

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

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

試題程序:

#include<stdio.h>

#defineN80

voidfun(int*w,intp,intn)

{

}

main()

{

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

inti,p,n=15;

printf("Theoriginaldata:\n");

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

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

printf("\n\nEnterp:");

scanf("%d",&p);

fun(a,p,n);

printf("\nThedataaftermoving:\n");

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

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

printf("\n\n");

}

31.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:刪除字符串中所有的*號。在編寫函數時,不得使用C語言中提供的字符串函數。

例如,若字符串中的內容為****A*BC*DEF*G*******,刪除后,字符串中的內容則應當是ABCDEFG。

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

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

試題程序:

#include<conio,h>

#include<stdio,h>

voidfun(char*a)

{

}

main()

{

chars[81];

printf("Enterastring:\n");

gets(s);

fun(s);

printf("Thestringafterdeleted:\n");

puts(s);

}

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

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

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

33.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun,它的功能是:把高于等于平均分的學生數據放在b所指的數組中,高于等于平均分的學生人數通過形參n傳回,平均分通過函數值返回。

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

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

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

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

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

四、單選題(0題)35.以下關于C語言數據類型使用的敘述中錯誤的是A.若要準確無誤差的表示自然數,應使用整數類型

B.若要保存帶有多位小數的數據,應使用雙精度類型

C.若要處理如“人員信息”等含有不同類型的相關數據,應自定義結構體類型

D.若只處理“真”和“假”兩種邏輯值,應使用邏輯類型

五、單選題(0題)36.已知inta=2,b=3;則執行表達式a=a<b后,變量a的值為()。

A.0B.1C.2D.3

六、單選題(0題)37.下列敘述中錯誤的是()。

A.C語言函數中定義的自動變量,系統不自動賦確定的初值

B.在C語言的同一函數中,各復合語句內可以定義變量,其作用域僅限于本復合語句內

C.C語言函數中定義的賦有初值的靜態變量,每調用一次函數為其賦一次初值

D.C語言函數的形參不可以說明為static型變量

參考答案

1.B解析:本題考查函數調用時的參數傳遞。在執行函數func時,由于全局定義了一個變量b,所以在函數體中執行時b=2+1=3,最終t=2+3=5。

2.D

3.D

4.A解析:以下幾種算法的時間復雜度分別為:冒泡排序(n2);選擇排序(n2);快速排序(nlog2n);歸并排序(nlog2n)。當排序元素序列基本有序的情況下,冒泡排序的交換次數為0,只是順序掃描數據而已,所以其效率是最高的。

5.A

6.A

7.A結構體變量中的成員可以是簡單變量、數組、指針變量或者結構體變量,選項A正確;不同結構體成員名可以相同,選項B錯誤;結構體定義時,其成員的數據類型不能是本結構體類型,選項C錯誤;結構體定義時,類型不同的成員項之間使用分號隔開,選項D錯誤。本題答案為A選項。

8.D

9.A變量定義語句“doublea,*p=&a;”,“*”是一個指針運算符,而非間址運算符。故本題答案為A選項。

10.D

11.B

12.C

13.3535解析:函數swap(int*a,int*b)的功能是實現*a和*b中兩個數據的交換,在主函數中調用swap(p,q)后,形參指針變量a和b分別指向i和j,在swap(int*a,int*b)執行完后,指針變量a和b分別指向j和i,而指針變量p,q所指向變量的值沒有發生變化,所以輸出結果為35。

14.8141

15.元組元組解析:在關系型數據庫中,用二維表來表示關系,二維表的表名即關系名,二維表的行稱為關系的元組,二維表的列,稱為關系的屬性。

16.1717解析:bteak語句只能在循環體和switch語句體內使用,當break出現在循環體中的switch語句體內時,其作用只是跳出該switch語句體。當break出現在循環體中,但不在switch語句體內時,則在執行break后,跳出本層循環體。而continue語句的作用時結束本次循環;即跳過本次循環中余下尚未執行的語句,接著再一次進行循環的條件判定。本題中首先定義了一個變量x并賦初值15,然后判斷循環條件“x>5&&x<50”,即“x>5&&x<50”,為真,執行循環體。語句“x++;”執行后,x的值變為16,“x/3”的值為5為真,執行其后的語句“x++;”,x的值變為17,執行語句“break”,退出循環,輸出x的值為17。

17.1a61a6解析:對于指針變量的運算,就是對地址的運算。本題中由于指針指向的是整型變量,所以,使指針變量移動9個位置也就是移動18個字節。注意,本題是以十六進制輸出的。

18.3535解析:考查swap()函數。函數swap(int*a,int*b)的功能是實現*a和*b中兩個數據的交換,在主函數中調用swap(p,q)后,參形指針變量a和b分別指向i和j,在swap(int*a,int*b)執行完后,指針變量a和b分別指向j和i,而指針變量p,q所指向變量的值沒有發生變化,所以輸出結果為35。

19.1616解析:首先用j和MCRA(i)替換MCRB(n,m)中的參數n和m,變成2*MCRA(j)+MCRA(i),再用j和i替換MCRA(m)中的參數m,變成2*2*j+2*i=2*2*3+2*2=16。

20.存儲結構數據結構包括3個方面,即數據的邏輯結構、數據的存儲結構及對數據的操作運算。

21.連接兩個字符數組中的字符連接兩個字符數組中的字符解析:strcat函數的作用是連接兩個字符數組中的字符串。

22.333,3解析:本題在while(n++<=1)語句后,直接加了分號,說明如果while()的條件為真時,該循環什么都不做:n++是先取n的當前值和1做比較,然后再將n加1。第一次循環,n=0時,循環條件n++=<1成立,執行循環,然后得到n=1。第二次循環,n=1時,循環條件n++=1<=1成立,執行循環,然后得到n=2。第三次循環,n=2時,循環條件n++=2<=1不成立,不執行循環,但在判斷循環條件時仍將n加1,得到n=3.退出循環后執行printf語句,第二個printf語句輸出n++,是先輸出n的當前值3,然后再將n加l,即程序結束后得到n=4,但輸出的是3。

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

24.30x30x解析:本題的參數傳遞屬于值傳遞,所以函數內不能改變調用函數中的數據。

25.intfun(inta[][N)){intij;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=0;/*將數組右上半三角元素中的值全部置成0*/}intfun(inta[][N))\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i;j<N;j++)\r\na[i][j]=0;/*將數組右上半三角元素中的值全部置成0*/\r\n}解析:本題旨在考查控制數組中右上半三角元素的算法,也就是兩個千篇一律的循環語句,希望學習者能夠掌握消化。

26.

解析:(1)該程序功能是返回低于平均分的人數。它的解題思路可以分解為以下幾步:求總分一求平均分一逐個元素與平均分比較一統計低于平均分的人數。

(2)從已給部分源程序的main主函數開始入手,核心函數fun(score,9,below)中的參數由題目可知,score存放著m個人的成績,below存放低于平均分的分數。另外,根據score的定義,可知9為score數組中元素的個數,傳給函數fun中的參數m。

27.floatfun(floath){longt;t=(h*1000+5)/10;/*單精度數h乘以1000后再加5相當十對h中的第三位小數進行四舍五入除以10后將其賦給一個長整型數時就把第三位小數后的數全部截去*/return(float)t/100;/*除以100保留2位小數*/floatfun(floath)\r\n{\r\nlongt;\r\nt=(h*1000+5)/10;/*單精度數h乘以1000后再加5,相當十對h中的第三位小數進行四舍五入\r\n除以10后將其賦給一個長整型數時就把第三位小數后的數全部截去*/\r\nreturn(float)t/100;/*除以100,保留2位小數*/解析:注意本題要求h的值真正發生了四舍五入,而不是為了輸出,即不能用printf(“%7.2f”,h)來直接得到結果。由于單精度數h乘以1000后再加5,此時相當于對h中的第三位小數進行四舍五入,再將其賦給一個長整型數時就把第三位小數后的數全部截去。注意在return中要將其中一個數轉成浮點型數。

28.intfun(STREC*aSTREC*b){intij=0min=a[0].s;for(i=0;i<N;i++)if(min>a[i].s)min=a[i].s;/*找出最小值*/for(i=0;i<N;i++):if(min==a[i].s)b[j++]=a[i];/*找出成績與min相等的學生的記錄存入結構體b中*/returnj;/*返回最低成績的學生人數*/intfun\u3000(STREC*a,STREC*b)\r\n{\r\ninti,j=0,min=a[0].s;\r\nfor(i=0;i<N;i++)\r\nif(min>a[i].s)\r\nmin=a[i].s;/*找出最小值*/\r\nfor(i=0;i<N;i++):\r\nif(min==a[i].s)\r\nb[j++]=a[i];/*找出成績與min相等的學生的記錄,存入結構體b中*/\r\nreturnj;/*返回最低成績的學生人數*/解析:該程序使用循環嵌套,第1個for語句的作用是找出最小值。第2個循環的作用是找出與min相等的成績,也即最低成績的學生記錄,并存入b中。

29.voidfun(char*Schart[]){intij=0k=strlen(s);/*k為字符串的長度*/for(i=0;i<k;i=i+2)/*將s所指字符串中下標為偶數的字符存入t所指字符串中*/t[j++]=s[i];t[j]='\0';/*在字符串最后加上結束標志*/}voidfun(char*S,chart[])\r\n{\r\ninti,j=0,k=strlen(s);/*k為字符串的長度*/\r\nfor(i=0;i<k;i=i+2)/*將s所指字符串中下標為偶數的字符存入t所指字符串中*/\r\nt[j++]=s[i];\r\nt[j]='\\0';/*在字符串最后加上結束標志*/\r\n}解析:本題使用了一種i永遠是偶數的循環方法,即for(i=0;i<k;i=i+2),因為開始時i的值為0,當i+2循環時,此值永遠是偶數。

30.voidfun(int*wintpintn){inti.jt;for(i=p;i<=n-1;i++)/*循環右移n-p次*/{t=w[n-11;for(j=n-2;j>=0;j--)/*實現循環右移*/w[j+1]=w[j];w[0]=t;}voidfun(int*w,intp,intn)\r\n{\r\ninti.j,t;\r\nfor(i=p;i<=n-1;i+

溫馨提示

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

評論

0/150

提交評論