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

下載本文檔

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

文檔簡介

2022-2023學年福建省龍巖市全國計算機等級考試C語言程序設計測試卷(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.以下說法錯誤的是A.A.高級語言都是用接近人們習慣的自然語言和數學語言作為語言的表達形式

B.計算機只能處理由0和1的代碼構成的二進制指令或數據

C.C語言源程序經過C語言編譯程序編譯之后生成一個后綴為.EXE的二進制文件

D.每一種高級語言都有它對應的編譯程序

2.下列敘述中錯誤的是()。

A.用戶定義的函數中可以沒有return語句

B.用戶定義的函數中可以有多個return語句,以便調用一次返回多個函數值

C.用戶定義的函數中若沒有return語句,則應當定義函數為void類型

D.函數的return語句中可以沒有表達式

3.

4.有以下程序:intf(intn){if(n==1)return1;elsereturnf(n-1)+1;}main(){inti,j=0;for(i=i;i<3;i++)j+=f(i);printf("%d\n",j);}程序運行后的輸出結果是()。

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

5.有以下程序:

程序運行后的輸出結果是()。

A.0B.一1C.1D.7

6.若要求從鍵盤讀入含有空格字符的字符串,應使用函數A.getc()B.gets()C.getchar()D.scanf()

7.有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3;charflag;flag=b>=2&&c<=3;switch(a){ case1:switch(flag) { case0:printf(“**”);break; case1:printf(“%%”);break; } case0:switch(c) { case1:printf(“$$”);break; case2:printf(“&&”);break; default:printf(“##”); }}printf(“\n”);}程序運行后的輸出結果是()。

A.**$$B.%##C.%&&D.**##

8.計算機硬件組成中,CPU包含______。

A.控制器和存儲器B.控制器和運算器C.控制器、運算器和存儲器D.內存儲器和外存儲器

9.

10.以下敘述中錯誤的是()。

A.使用三種基本結構構成的程序只能解決簡單問題

B.結構化程序由順序、分支、循環三種基本結構組成

C.C語言是-種結構化程序設計語言

D.結構化程序設計提倡模塊化的設計方法

11.

12.下列程序的輸出結果是()。#include<stdio.h>main{inti;for(i=1;i<=10,i++){if((i*i>=20)&&(i*i<=100))break;}printf("%d\n",i*i;}A.49B.36C.25D.64

二、2.填空題(12題)13.若有以下程序:

main()

{chara;

a='H'-'A'+'0';

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

}

執行后的輸出結果是【】。

14.數據庫設計分為以下6個設計階段:需求分析階段、______、邏輯設計階段、物理設計階段、實施階段、運行和維護階段。

15.若a=1,b=2,c=3,d=4;則條件表達式a>b?a:c<d?c:d的結果為()。

16.能把計算機處理好的結果轉換成為文本、圖形、圖像或聲音等形式并輸送出來的設備稱為【】設備。

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

main()

{intp=30;

printf("%dkn",(p/3>0?p/10:p%3));

}

18.在關系數據庫中,用來表示實體之間聯系的是【】。

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

#include<stdio.h>

main()

{inta=1,b=2,c;

c=max(a,b);

printf("maxis%d\n",c);}

max(intx,inty)

{intz;

z=(x>y)?x:y;

return(z);}

20.下面程序的輸出結果是【】。

unsignedfun6(unsignednum)

{unsignedk=1;

do{k*=hum%10;

num/=10;}while(num);

return(k);}

main()

{unsignedn=26;

printf("%d\n",fun6(n));}

21.x和y都是double型變量,x的初值為4.0,y的初值為2.0,則表達式pow(y,fabs(x))的值為______。

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

#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';}

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

#defineP(A)printf("%d",A)

main()

{intj,a[]={1,2,3,4,5,6,7),i=5;

for(j=3;j>1;j--)

{switch(j)

{case1:

case2:P(a[i++]);break;

case3:P(a[--i]);

}

}

}

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

main()

{unsignedshorta=65536;intb;

printfC%d\n",b=a);

}

三、3.程序設計題(10題)25.請編寫一個函數,函數的功能是刪除字符串中的所有空格。

例如,主函數中輸入“asdafaaz67”,則輸出為“asdafaaz67”。

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

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

26.請編寫一個函數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");

}

27.請編寫函數fun,其功能是:計算并輸出3到n之間(含3和n)所有素數的平方根之和。

例如,在主函數中從鍵盤給n輸入100后,輸出為:sum=148.874270。

注意:要求n的值大于2但不大于100。部分源程序給出如下。清勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

[試題源程序]

#include<math.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

intn;

doublesum;

printf("\n\nInputn:");

scanf("%d",&n);

sum=fun(n);

printf("\n\nsum=%f\n\n",sum);

}

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

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

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

29.學生的記錄由學號和成績組成,N名學生的數據已在主函數中放入結構體數組s中,請編寫函數fun,它的功能是:按分數的高低排列學生的記錄,高分在前。

[注意]部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。

[試題源程序]

#include<stdio.h>

#defineN16

typedefstruct

{

charnum[i0];

ints;

}STREC;

intfun(STRECa[])

{

}

main()

{

STRECs[N]={

{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

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

{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}

};

inti;

FILE*out;

fun(s);

printf("Thedataaftersorted:\n");

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

{

if((i)%4==0)

printf("\n");

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

}

printf("\n");

}

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

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

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

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

31.請編寫函數fun,函數的功能是:移動一維數組中的內容:若數組中有n個整數,要求把下標從0到p(含p,p小于等于n-1)的數組元素平移到數組的最后。

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

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

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

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

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

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

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

試題程序:

#include<stdio.h>

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

{

}

main()

{

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

inti;

printf("Input1thstring:");

gets(a);

printf{"Input2thstring:");

gets(b);

printf("%s",fun(a,b));

}

33.請編寫一個函數fun(),它的功能是:找出一維數組元素中最大的值和它所在的下標,最大值和它所在的下標通過形參傳回。數組元素中的值已在主函數中賦予。

主函數中x是數組名,n是x中的數據個數,max存放最大值,index存放最大值所在元素的下標。

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

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

試題程序:

#include<stdlib.h>

#include<stdio.h>

voidfun(inta[],intn,int*max,int*d)

{

}

main()

{

inti,x[20],max,index,n=10;

randomize();

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

{

x[i]=rand()%50;

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

/*輸出一個隨機數組*/

}

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

34.請編寫函數fun(),該函數的功能是:將M行N列的二維數組中的數據,按行的順序依次放到一維數組中,一維數組中數據的個數存放在形參n所指的存儲單元中。

例如,若二維數組中的數據為:

33333333

44444444

55555555

則一維數組中的內容應該是33333333444444AA,55555555

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

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

試題程序:

#include<stdio.h>

voidfun(int(*s)[10],int*b,int*n,

intmm,intnn)

{

}

main()

{

intw[10][10]={{33,33,33,33},{44,44,

44,44},{55,55,55,55}},i,j;

inta[100]={0},n=0;

printf("Thematrix:\n");

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

{for(j+0;j<4;j++)

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

printf("\n");

}

fun(w,a,&n,3,4);

printf("TheAarray:In");

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

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

printf("\n\n");

}

四、單選題(0題)35.設char型變量x中的值為10100111,則表達式(2+x)(-3)的值為______。

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

五、單選題(0題)36.下列存儲器中,存取速度最快的是()。

A.軟盤B.硬盤C.光盤D.內存

六、單選題(0題)37.有以下程序:#include<stdio.h>main{shortC=124;C=C_;printf("%d\n",c);}若要使程序的運行結果為248,應在下劃線處填入的是()。A.>>2B.|248C.&0248D.<<1

參考答案

1.C本題主要考查我們對C語言一些基礎知識的掌握情況。下面分別分析本題的四個選項。

由于高級程序設計語言具有可讀寫、可理解性好等特點,這就要求高級程序設計語言用接近人們習慣的自然語言和數學語言作為語言的表達形式,選項A的說法正確。

在計算機中,機器可以接受和處理的只能是由0和1組成的二進制代碼,用高級語言編寫的程序都需要經過編譯和連接,使其轉化為二進制代碼才能被機器執行。因此,選項B的說法正確。

C語言源程序經過C語言編譯程序編譯之后生成一個后綴為.OBJ的二進制文件(稱為目標文件);最后要由“連接程序”把此.OBJ文件與C語言提供的各種庫函數連接起來生成一個后綴為.EXE的可執行文件。因此,選項C的說法不正確。

由于高級語言編寫的程序都需要經過編譯和連接,才能被計算機執行,因此,每一種高級語言都有它對應的編譯程序,D選項的說法正確。

2.B函數的值只能通過return語句返回主調函數。函數中允許有多個return語句,但每次只能調用一個return語句,因此只能返回一個函數值。不返回函數值的函數,可以明確定義為“空類型”,類型說明符為void。故本題答案為B選項。

3.D

4.B解析:通過分析不難寫出,f()函數的數學表達式為:

f(n)=1n=l;

f(n)=f(-1)+1n≠1;

在主函數中for循環執行了兩次函數調用f(i)。第一次:i為1,調用f(1)得到返回值1,并把它加到j中,j的值為1。第二次i為2,調用f(n),根據遞歸公式可知f(2)=f(1)+1,得到返回值2并把它加到j中,j的值為3。所以最后輸出,i的值為3。

5.Ba一一的含義是先用后減l,所以當a的值為0時,跳出循環,但是仍要執行a一一,g的值變為一1。

6.Bscanf(\u3000)語句中用“空格”間隔不同的字符串,空格將被全部忽略掉,所以用scanf(\u3000)函數不能輸入空格;getehar(\u3000)函數用于輸入字符,其調用形式為:ch=getelaar(\u3000),getehar(\u3000)函數從終端讀入一個字符作為函數值,把讀入的字符賦給變量ch。在輸入時,空格、回車符都將作為字符讀入,而且只有在用戶敲入Enter鍵時,讀入才開始執行。gets(\u3000)函數的凋用形式為:gets(str_adr),其中stradr是存放輸入字符串的起始地址,可以是字符數組名、字符數組元素的地址或字符指針變量。9ets函數用來從終端鍵盤讀入字符串(包括空格符),直到讀入一個換行符為止。getc(\u3000)函數的調用形式為:ch=getc(pf)其中pf是文件指針。函數的功能是從pf指定的文件中讀入一個字符,并把它作為函數值返回。

7.Bmain函數中,根據“b=2,c=3”可知表達式“b>=2&&c<=3”為真,flag值為1。由“a=1”和外層switch語句的case標號沒有break語句,可知外層switch語句執行case1,case0。對于外層case1:嵌套的switch語句根據“flag=1”執行case1,執行“printf(“%%”);”,輸出“%”,接著執行break語句,結束內層switch執行外層;對于外層case0:嵌套的switch語句根據“c=3”執行default語句,執行“printf(“##”);”,輸出“##”。故本題答案為B選項。

8.B

9.C

10.A使用順序,選擇(分支),循環三種基本結構構成的程序可以解決所有問題,而不只是解決簡單問題,所以A錯誤。

11.A

12.C本題考查for循環及if語句。當執行到第一個滿足(i*i>一20)&&(i*i<=100)這個條件的i出現時,break跳出循環,執行下列的printf語句。

13.77解析:本題考查英文字母ASCII碼值的概念。字符參與運算的值是其對應的ASCII碼,字符H的ASCII碼為72,A的ASCII碼為65,0的ASCII碼為48,所以a=72-65+48=55,ASCII碼值為55的字符是7。

14.概念設計階段(數據庫概念設計階段)概念設計階段(數據庫概念設計階段)

15.3

16.輸出輸出

17.33本試題中,先判斷表達式p/3>0,該值為真,所以此表達式等于p/10的值3,故最后輸出的值為3。

18.關系關系解析:在關系數據庫中,用關系也就是二維表來表示實體之間的聯系。

19.maxis2maxis2解析:函數通過參數來傳遞數據是單向的,只能由實參傳給形參而不能由形參傳給實參,但是可以通過函數的返回值將函數中的數據帶回。注意:函數的兩種調用方式及函數調用的語法要求。

20.1212解析:do…while循環的一個比較顯著的特點是:先執行一次循環體然后再判斷循環的條件是否滿足,若滿足則接著進入下一次循環,否則就退出循環。注意:3種循環結構的比較。

21.1616解析:函數運算不改變數據類型,所以結果也是double型,fabs(x)是對x取絕對值,pow(y,fabs(x))是y的labs(x)次冪,即2.04。0=16.000000(注意;結果為double型)。

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

23.5555解析:分析程序執行過程,第一次循環時,j=3,i=5。因為switch(3),所以執行case3,調用P(a[--i])=P(a[4])=P(5),輸出5;第二次循環時,j=2,i=4,因為switch(2),所以執行case2,調用P(a[i++])-P(a[4])=P(5),輸出5,之后i自加等于5。

24.00解析:對于一個unsignedshort來說,它能取的最大值是65535。這里給a賦值65536,已經超出了它的取值范圍,這樣它的高位將被截掉,只把低位賦給它(全零)。所以a的值實際為0。

25.

解析:該程序功能是刪除字符串中的所有空格。本題的解題思路是首先利用一個指向字符串的指針,查找不是空格的字符,然后將不是空格的字符賦值到字符串,如果是空格,則跳過該字符,這樣就實現了空格字符的刪除。

26.voidfun(char*ttintpp[]){inti;fori=0;i<26;i++)pp[i]=0;/*初始化pp數組各元素為0*/for(;*tt!='\0';tt++)if(*tt>='a'&&*tt<='z')pp[*tt-'a']++;/*將tt字符串中'a'到'z'26個字母各自出現的次數依次放在pp數組中任一個小寫字母減去'a'后所得結果正好是它對應的下標*/}voidfun(char*tt,intpp[])\r\n{\r\ninti;\r\nfori=0;i<26;i++)\r\npp[i]=0;/*初始化pp數組各元素為0*/\r\nfor(;*tt!='\\0';tt++)\r\nif(*tt>='a'&&*tt<='z')\r\npp[*tt-'a']++;/*將tt字符串中'a'到'z'26個字母各自出現的次數,依次放在pp數組中,任一個小寫字\r\n母減去'a'后所得結果正好是它對應的下標*/\r\n}解析:第1個循環的作用是初始化數組pp,未經賦值變量的量為一個不確定數字。由于它要將'a'到'z'26個字母的個數依次放到數組pp中。即'a'的個數存于pp[0]中,'b'的個數存于pp[1]中,'c'的個數存于pp[2]中,…,依次類推。而'a'-'a'的值正好為0,'b'-'a'的值為1,'c'-'a'的值為2,…,依此類推。即任一個小寫字母減去'a'后所得結果正好是它對應的下標,所以就有了pp[*tt-'a']++。但*tt必須是小寫字母即if()不應省略。

27.doublefun(intn){intij=0;doubles=0;for(i=3;i<=n;i++){for(j=2;j<i;j++)if(i%j==0)break;if(j==i)s=s+sqrt(i);}returns;}doublefun(intn)\r\n{\r\ninti,j=0;\r\ndoubles=0;\r\nfor(i=3;i<=n;i++)\r\n{\r\nfor(j=2;j<i;j++)\r\nif(i%j==0)\r\nbreak;\r\nif(j==i)\r\ns=s+sqrt(i);\r\n}\r\nreturns;\r\n}

28.

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

29.#include<stdi0.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STRECa[]){STRECtmp;intij;for(i=0;i<N;i++)for(j=i+1;j<N;J++)if(a[i].s<a[j].S){tmp=a[i];a[i]=a[j];a[j]=tmp;}}#include<stdi0.h>\r\n#defineN16\r\ntypedefstruct\r\n{\r\ncharnum[10];\r\nints;\r\n}STREC;\r\nintfun(STRECa[])\r\n{\r\nSTRECtmp;\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i+1;j<N;J++)\r\nif(a[i].s<a[j].S)\r\n{\r\ntmp=a[i];\r\na[i]=a[j];\r\na[j]=tmp;\r\n}\r\n}

30.

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

31.

解析:該程序功能是移動一維數組中的內容。解題思路首先將字符串拷貝到一個臨時的數組,然后將字符串進行前移操作,最后將由于前移覆蓋掉的字符,由臨時數組中拷貝到指定字符串。

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

本題也可用如下技巧:

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

{if(strlen(s)>=strlen(t)returns;

elsereturnt;

}

33.voidfun(inta[]intnint*maxint*d){inti;*max=a[0];*d=0;for(i=0;i<n;i++)/*將

溫馨提示

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

評論

0/150

提交評論