2021年山東省臨沂市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2021年山東省臨沂市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2021年山東省臨沂市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2021年山東省臨沂市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2021年山東省臨沂市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

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

一、單選題(12題)1.語句“printf("akbre"\'hi\'y\\\bou\n")”;的輸出結果是()。

A.akbre\'hi\'y'\\\bou

B.a\bre\'hi\\y\bou

C.re'hi'you

D.abre'hi'y\bou

2.有以下程序:#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];printf(“%d\n”,t);}程序的運行結果是()。

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

3.

4.有以下程序#include<stdio.h>main(){char*s=(“ABC);do{printf(“%d”,*s%10);s++;}while(*s);}注意,字母A的ASCII碼值為65。程序運行后的輸出結果是A.5670B.656667C.567D.ABC

5.在下列關系運算中,不改變關系表中的屬性個數但能減少元組個數的是A.并B.交C.投影D.笛卡兒乘積

6.假設以行序為主序存儲二維數組array[100][100],設每個數據元素占2個存儲單元,基地址為10,下標從0開始,則元素array[5][5]的地址為()。

A.808B.818C.1010D.1020

7.設在C語言中,float類型數據占4個字節,則double類型數據占()個字節。

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

8.為了提高軟件的獨立性,模塊之間最好是()。

A.控制耦合B.公共耦合C.內容耦合D.數據耦合

9.一棵二叉樹共有25個結點,其中5個是葉子結點,則度為l的結點數為()。

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

10.若有以下定義和語句:chars[10]="abcd!",*s2="\nl23\\";Drintf("%d%d\n",strlen(sl),strlen(s2));則輸出結果是()。A.55B.105C.107D.58

11.廣義表((a),a)的表頭是()。

A.aB.(a)C.((a))D.()

12.以下數據結構中,()是線性結構。

A.有向圖B.棧C.線索二叉樹D.B樹

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

#include<stdio.h>

main()

{intx=10,y=10,i;

for(i=0;x>8;y=++i)

printf("%d%d",x--,y);

}

14.下面程序的功能是將一個字符串str的內容顛倒過來,請填空。

#include<string.h>

main()

{inti,j,【】;charstr[]={"1234567"};

for(i=0,j=strlen(str)【】;i<j;i++,j--)

{k=str[i];str[i]=str[j];str[j]=k;}

printf("%s\n",str);}

15.測試的目的是暴露錯誤,評價程序的可靠性;而______的目的是發現錯誤的位置并改正錯誤。

16.在結構化設計方法中,數據流圖表達了問題中的數據流與加工間的關系,并且每一個______實際上對應一個處理模塊。

17.對二叉排序樹進行查找的方法是:用待查的值與根結點的值相比,若比根小,則繼續在【】子樹中找。

18.關系數據庫管理系統能實現的專門關系運算包括選擇、連接和【】。

19.若x和a均是int型變量,則計算完x=(a=4,6*2)后的x值為______。

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

main()

{intx;0;

sub(&x,8,1);

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

}

sub(int*a,intn,intk)

{if(k<=n)sub(a,n/2,2*k);

*a+=k;

}

21.在算法正確的前提下,評價一個算法的兩個標準是空間復雜度和()。

22.軟件是程序、數據和【】的集合。

23.如果輸入'1'、'2'、'3'、'4',則以下程序的運行結果為【】。

#include<stdio.h>

main()

{charc;

inti,k;

k=0;

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

{while(1)

{c=getchar();

if(c>='0'&&c<='9')break;

}

k=k*10+c-'0';

}

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

}

24.在數據管理技術的發展過程中,經歷了人工管理階段、文件系統階段和數據庫系統階段。其中數據獨立性最高的階段是【】。

三、3.程序設計題(10題)25.請編寫一個函數voidfun(chara[],charb[],intn),其功能是:刪除一個字符串中指定下標的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數組中,n中存放指定的下標。

例如,輸入一個字符串:World,然后輸入3。則調用該函數后的結果為:Word。

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

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

26.請編寫函數fun,其功能是:計算并輸出當x<0.97時下列多項式的值,直到|Sn-Sn-2

|<0.000001為止。

例如,在主函數中從鍵盤給x輸入0.21后,輸出為:s=1.100000。

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

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

27.請編寫函數fun(),該函數的功能是:統計一行字符串中單詞的個數,作為函數值返回。一行字符串在主函數中輸入,規定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。

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

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

試題程序:

#include<string.h>

#include<stdio,h>

#defineN80

intfun(char*s)

{

}

main()

{

charline[N];

intnum=0;

printf("Enterastring:\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",

num);

}

28.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]);

}

29.請編寫一個函數fun(),它的功能是:將ss所指字符串中所有下標為奇數位置的字母轉換為大寫(若該位置上不是字母,則不轉換)。

例如,若輸入abc4Efg,則應輸出aBc4EFg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*ss)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n\%s",tt);

fun(tt);

printf("\nbecomes\n\%s\n",tt);

}

30.請編寫函數fun(),其功能是:將所有大于1小于整數m的素數存入xx所指數組中,素數的個數通過k傳回。

例如,輸入25,則應輸出23571113171923。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,int*k,intxx[])

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("/nPleaseenteranintegernumberbetween10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dprimenumbers

lessthan%d:",m,n);

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

printf("\n%4d",zz[n]);

}

31.程序定義了NxN的二維數組,并在主函數中賦值。請編寫函數fun,函數的功能是:求出數組周邊元素的平均值并作為函數值返給主函數中的s。

例如:a數組中的值為:

則返回主程序后s的值應為:3.375。

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

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

32.下列程序定義了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”);

}

}

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

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

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

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

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

例如,當score數組中的數據為24,35,88,76,90,54,59,66,96時,函數返回的人數應該是5,up中的數據應為88,76,90,66,96。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intup[])

{

}

main()

{

inti,n,up[9];

intscore[9]={24,35,88,76,90,54,

59,66,96};

clrscr();

n=fun(score,9,up);

printf("\nuptotheaveragescoreare:");

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

printf("%d",up[i]);

}

四、單選題(0題)35.有以下程序:

A.CDEFB.ABEFC.ABCDD.CDAB

五、單選題(0題)36.當執行下面的程序時,如果輸入ABC,則輸出結罘是()。#include<stdio.h>#include<string.h>main(){charss[10]="1,2,3,4,5":gets(ss);strcat(ss,"6789");printf("%s\n",ss);}A.ABC6789B.ABC67C.12345ABC6D.ABC456789

六、單選題(0題)37.

參考答案

1.C先輸出a、b表示退一格,當執行到:\b后,光標往后退,接著輸出re'hi'y\(反斜杠后又加一個反斜杠的意思是要輸出一個反斜杠),此時又執行:\b后,\就被ou覆蓋。

2.B內循環只循環一次就結束,第1次外循環時,t=t+b[0][b[0][0]]=1+b[0][0]=1+0=1;第2次外循環時,t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第3次外循環時,1=1+b[2][b[2][2]]=2+b[2][2]=2+2=4。故本題答案為B選項。

3.D

4.C

5.B并運算的含義是:假設有一個“在校學生信息表”,它包括這樣一些字段:學號、姓名、性別、出生日期、籍貫、聯系電話,這個表的關系模式可以表示為:校學生信息表(學號,姓名,性別,出生日期,籍貫,聯系電話)。還有一個“新生信息表(學號,姓名,性別,出生日期,籍貫,聯系電話)”。若要將9月份進校的新生信息加入到“在校學生信息表”中,這樣進行的就是并運算。并運算不會改變表的字段(又叫屬性)個數,但是會增加記錄(又叫元組)個數。交運算的含義是:兩個表(要求結構要一模一樣)進行交運算取兩個表中相同的記錄構成一個新表,交運算不會改變表的字段個數,但是一般會減少記錄個數。投影運算的含義是:從在“校學生信息表(學號,姓名,性別,出生日期,籍貫,聯系電話)”中選取學生的“姓名”和“聯系電話”這兩個字段,可以構成一個“學生聯系表(姓名,聯系電話)”,這就是一個投影運算,所以投影運算一般會減少字段(又叫屬性)的個數。笛卡兒乘積又叫稱乘運算,設有n元關系R和m元關系s,他們分別有P、q個元組,則關系R和關系s的笛卡兒積表示為R×S,該關系是一個n+m元關系,元組個數是PXq。因此本題的正確答案是B。\r\n

6.C

7.C

\n在C語言中各種數據類型在內存中所占的字節數與機器的位數有關,16位機中(也就是在標準c中),若int類型數據占2個字節,則float類型數據占4個字節,double類型數據占8個字節。

\n

8.D在程序設計中,各模塊間的內聚性越強,則耦合性越弱。一般較優秀的軟件設計,應盡量做到高內聚、低耦合,以有利于提高模塊的獨立性。耦合性與內聚性是模塊獨立的兩個定性標準,是互相關聯的。

9.A根據二叉樹的性質,n=n0+n1+n2(n表示總結點數,n0表示葉子結點數,nl表示度數為1的結點數,n2表示度數為2的結點數),而葉子結點數總是比度數為2的結點數多1,所以n2=n1-1=5-1=4,而n=25,所以nl=n-n0-n2=25-5-4=16。

10.A\\n和\\\\分別為轉義字符,各占據一個字符的位置。

11.B

12.B

13.101091101091解析:for(表達式1;表達式2:表達式3)語句的功能是:首先計算表達式1的值,然后檢測表達式2的值,若其值為真,則執行循環體語句,執行完畢后,再計算表達式3的值。然后再檢測表達式2的值是否為真,若為真,繼續執行循環體語句,若為假,則退出循環:第1次循環x>8成立,輸出x=10,y=10后,x的值減1,i=1,執行y=++i操作,y的值變為1;判斷條件還成立,輸出x=9,y=1,然后x的值減1,循環條件不成立,則退出循環。

14.k-1k,-1解析:顛倒一個字符串中的字符,就是首尾對應的元素兩兩交換。簡單地可用兩個游標變量i和j,i是前端元素的下標,j是后端元素的下標,交換以這兩個變量值為下標的元素str[i]和str[j]。開始時,i的值為0,j的值為字符串末元素的下標(字符串長度減1)。每次交換后,i增1,j減1。繼續交換的條件是str[i]位于str[j]的前面,即i<j。字符串末元素的下標是它的長度減1,所以在第二個空框處應填入-1。程序為了交換str[i]和str[j],使用了變量k,該變量應在程序的變量定義部分中一起定義,所以在第一個空框處應填入k。

15.調試調試

16.加工加工解析:數據流圖是從數據傳遞和加工的角度,來刻畫數據流從輸入到輸出的移動變換過程。其中的每一個加工對應一個處理模塊。

17.左左解析:對二叉排序樹進行查找,若待查的值與根結點的值相比,若比根小,則繼續在左子樹中找;若比根大,則在右子樹中找。

18.投影專門關系運算包括對單個關系進行垂直分解(投影操作)或水平分解(選擇操作)和對多個關系的結合(連接操作)等。

19.1212解析:x=(表達式1,表達式2,…)的形式,結果為最后一個表達式的值:x=(a=4,6*2)=2*6=12。

20.77解析:在主函數中定義了一個變量x并賦初值0,然后執行函數調用語句,該語句的執行過程為sub(&x,8,1)調用sub(&a,4,2),sub(&s,4,2)調用sub(&a,2,4),sub(&a,2,4)中由于2<4,所以if后面括號里的判斷為假,遞歸結束,執行其后的。*a+=k;語句此時x=x+k=0+4+4,回推到上一層調用函數sub(Rx,4,2)中,執行后面的語句,x=x+k=4+2=6,在回推到最上一層調用函數sub(&x,8,1)執行后面的語句,x=x+k=6+1=7,所以最后輸出7。

21.時間復雜度時間復雜度解析:在算法正確的前提下,評價一個算法的兩個標準是空間復雜度和時間復雜度。算法的時間復雜度,是指執行算法所需要的計算工作量。算法的空間復雜度是指執行這個算法所需要的內存空間。

22.文檔文檔解析:計算機軟件是計算機系統中與硬件相互依存的另一部分,是包括程序、數據以及相關文檔的完整集合。

23.k=1234

24.數據庫系統數據庫系統解析:數據管理技術的發展過程中,經歷了人工管理階段、文件系統階段和數據庫系統階段。(1)人工管理階段。這一階段的計算機主要用于科技計算。外存只有磁帶、卡片和紙帶等,軟件只有匯編語言,尚無數據管理方面的軟件。數據處理方式是批處理。(2)文件系統階段。文件系統是數據庫系統發展的初級階段,它提供了簡單的數據共享與數據管理能力,但是它無法提供完整的、統一的管理和數據共享的能力。由于它的功能簡單,因此它附屬于操作系統而不能成為獨立的軟件,目前一般將其看成僅是數據庫系統的雛形,而不是真正的數據庫系統。(3)數據庫系統階段。數據庫階段用數據模型表示復雜的數據模型,有較高的數據獨立性。數據庫系統為用戶提供了方便的用戶接口,用戶可使用查詢語言或終端命令操作數據庫,也可以用程序方式(用COBOL、C一類高級語言和數據庫語言編制的程序)操作數據庫。數據庫管理系統提供了數據控制功能。

25.

解析:(1)該程序功能是刪除一個字符串中指定下標的字符。它的解題思路,可以分解為以下兩步:逐個判斷字符串中的下標是否滿足條件,滿足條件的就放到題目要求的新串,否則就不放。

(2)從已給部分源程序的main主函數開始入手,核心函數“fun(str1,str2,n);”中的參數由題目可知,str1存放著原始字符串,str2存放刪除了下標為n的字符的結果字符串,注意下標是從“0”開始的。

26.

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

27.intfun(char*s){intij=0;for(i=0;s[i]!='\0';i++)if(s[i]!=''&&(s[i+l]==''||s[i+1]=='\O'))/*如果一個字母的下一個字符為空格或者結束標記則表示一個單詞結束*/j++;returnj;/*返回單詞個數*/}intfun(char*s)\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!=\'\\0\';i++)\r\nif(s[i]!=\'\'&&(s[i+l]==\'\'||s[i+1]==\'\\O\'))/*如果一個字母的下一個字符為空格或者結束標記,則表示一個單詞結束*/\r\nj++;\r\nreturnj;/*返回單詞個數*/\r\n}解析:判斷單詞的個數,我們首先想到的是程序怎樣識別是一個單詞,也即循環語句中的fir(i=0;s[i]!='\\0';i++),本題重點是if句中的條件表達方式。

28.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數組中。

29.voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++)/*將ss所指字符串中所有下標為奇數位置的字母轉換為大寫*/if(i%2==1&&ss[i]>='a'&&SS[i]<='z')ss[i]=ss[i]-32;}voidfun(char*ss)\r\n{\r\ninti;\r\nfor(i=0;ss[i]!='\\0';i++)/*將ss所指字符串中所有下標為奇數位置的字母轉換為大寫*/\r\nif(i%2==1&&ss[i]>='a'&&SS[i]<='z')\r\nss[i]=ss[i]-32;\r\n}解析:從C語言的學習中我們知道,只要將小寫字母減去32則轉成大寫字母,將大寫字母加上32則轉成小寫字母。該程序是用if語句實現該功能轉化的。

30.voidfun(intmint*kintXX[]){intijtn=0;for(i=2;i<m;i++)/*找出大于1小于整數m的素數*/{t=l;for(j=2;j<i;j++)if(i%j==0){t=0;break;}if(t==1)xx[n++]=i;}*k=n;/*返回素數的個數*/}voidfun(intm,int*k,intXX[])\r\n{\r\ninti,j,t,n=0;\r\nfor(i=2;i<m;i++)/*找出大于1小于整數m的素數*/\r\n{\r\nt=l;\r\nfor(j=2;j<i;j++)\r\nif(i%j==0)\r\n{\r\nt=0;\r\nbreak;\r\n}\r\nif(t==1)\r\nxx[n++]=i;\r\n}\r\n*k=n;/*返回素數的個數*/\r\n}解析:這道題是考查一個數是不是素數,只要掌握了判斷素數的方法,問題便能順利解決,請以此題為例,掌握判斷素數的方法。

31.

解析:該程序功能是求出數組周邊元素的平均值。其中周邊元素是指第一行的元素的行下標為0,或者第n行的元素行下標為n-1,或者第一列元素的元素列下標為0,或者第n列的元素的列下標為n-1。

32.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}解析:本題旨在考查控制數組中右上半三角元素的算法,也就是兩個千篇一律的循環語句,希望學習者能夠掌握消化。

33.

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

34.intfun(intscore[]intmintup[]){intij=0;floatav=0.0for(i=0;i<m;i++)av=av+score[i]/m;/*求平均值*/for(i=0;i<m;i++)if(score[i]>av)/*如果分數高于平均分則將此分數放入up數組中*/up[j++]=score[i];returnj;/*返回高于平均分的人數*/}intfun(intscore[],intm,intup[])\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)/*如果分數高于平均分,則將此分數放入up數組中*/\r\nup[j++]=score[i];\r\nreturnj;/*返回高于平均分的人數*/\r\n}解析:該題第1個循環的作用是求出平均分av,第2個循環的作用是找出高于平均分的成績并存入up數組中。

35.A在函數funl()之前定義了全局字符變量a和b。這兩個變量的作用域是從其定義處開始到整個程序末結束。在函數funl()之內定義了兩個變量a和b,并且分別初始化為字符ˊCˊ和ˊDˊ。

36.A當執行gets(ss)后,ss數組中的元素為ABC,再執行strcat(ss,"6789"),strcat的作用,是把6789連接到了ss數組后面,執行完后SS數組為ABC6789,故選擇A選項。

37.C

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

一、單選題(12題)1.語句“printf("akbre"\'hi\'y\\\bou\n")”;的輸出結果是()。

A.akbre\'hi\'y'\\\bou

B.a\bre\'hi\\y\bou

C.re'hi'you

D.abre'hi'y\bou

2.有以下程序:#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];printf(“%d\n”,t);}程序的運行結果是()。

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

3.

4.有以下程序#include<stdio.h>main(){char*s=(“ABC);do{printf(“%d”,*s%10);s++;}while(*s);}注意,字母A的ASCII碼值為65。程序運行后的輸出結果是A.5670B.656667C.567D.ABC

5.在下列關系運算中,不改變關系表中的屬性個數但能減少元組個數的是A.并B.交C.投影D.笛卡兒乘積

6.假設以行序為主序存儲二維數組array[100][100],設每個數據元素占2個存儲單元,基地址為10,下標從0開始,則元素array[5][5]的地址為()。

A.808B.818C.1010D.1020

7.設在C語言中,float類型數據占4個字節,則double類型數據占()個字節。

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

8.為了提高軟件的獨立性,模塊之間最好是()。

A.控制耦合B.公共耦合C.內容耦合D.數據耦合

9.一棵二叉樹共有25個結點,其中5個是葉子結點,則度為l的結點數為()。

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

10.若有以下定義和語句:chars[10]="abcd!",*s2="\nl23\\";Drintf("%d%d\n",strlen(sl),strlen(s2));則輸出結果是()。A.55B.105C.107D.58

11.廣義表((a),a)的表頭是()。

A.aB.(a)C.((a))D.()

12.以下數據結構中,()是線性結構。

A.有向圖B.棧C.線索二叉樹D.B樹

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

#include<stdio.h>

main()

{intx=10,y=10,i;

for(i=0;x>8;y=++i)

printf("%d%d",x--,y);

}

14.下面程序的功能是將一個字符串str的內容顛倒過來,請填空。

#include<string.h>

main()

{inti,j,【】;charstr[]={"1234567"};

for(i=0,j=strlen(str)【】;i<j;i++,j--)

{k=str[i];str[i]=str[j];str[j]=k;}

printf("%s\n",str);}

15.測試的目的是暴露錯誤,評價程序的可靠性;而______的目的是發現錯誤的位置并改正錯誤。

16.在結構化設計方法中,數據流圖表達了問題中的數據流與加工間的關系,并且每一個______實際上對應一個處理模塊。

17.對二叉排序樹進行查找的方法是:用待查的值與根結點的值相比,若比根小,則繼續在【】子樹中找。

18.關系數據庫管理系統能實現的專門關系運算包括選擇、連接和【】。

19.若x和a均是int型變量,則計算完x=(a=4,6*2)后的x值為______。

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

main()

{intx;0;

sub(&x,8,1);

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

}

sub(int*a,intn,intk)

{if(k<=n)sub(a,n/2,2*k);

*a+=k;

}

21.在算法正確的前提下,評價一個算法的兩個標準是空間復雜度和()。

22.軟件是程序、數據和【】的集合。

23.如果輸入'1'、'2'、'3'、'4',則以下程序的運行結果為【】。

#include<stdio.h>

main()

{charc;

inti,k;

k=0;

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

{while(1)

{c=getchar();

if(c>='0'&&c<='9')break;

}

k=k*10+c-'0';

}

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

}

24.在數據管理技術的發展過程中,經歷了人工管理階段、文件系統階段和數據庫系統階段。其中數據獨立性最高的階段是【】。

三、3.程序設計題(10題)25.請編寫一個函數voidfun(chara[],charb[],intn),其功能是:刪除一個字符串中指定下標的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數組中,n中存放指定的下標。

例如,輸入一個字符串:World,然后輸入3。則調用該函數后的結果為:Word。

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

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

26.請編寫函數fun,其功能是:計算并輸出當x<0.97時下列多項式的值,直到|Sn-Sn-2

|<0.000001為止。

例如,在主函數中從鍵盤給x輸入0.21后,輸出為:s=1.100000。

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

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

27.請編寫函數fun(),該函數的功能是:統計一行字符串中單詞的個數,作為函數值返回。一行字符串在主函數中輸入,規定所有單詞由小寫字母組成,單詞之間有若干個空格隔開,一行的開始沒有空格。

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

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

試題程序:

#include<string.h>

#include<stdio,h>

#defineN80

intfun(char*s)

{

}

main()

{

charline[N];

intnum=0;

printf("Enterastring:\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:%d\n\n",

num);

}

28.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]);

}

29.請編寫一個函數fun(),它的功能是:將ss所指字符串中所有下標為奇數位置的字母轉換為大寫(若該位置上不是字母,則不轉換)。

例如,若輸入abc4Efg,則應輸出aBc4EFg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*ss)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n\%s",tt);

fun(tt);

printf("\nbecomes\n\%s\n",tt);

}

30.請編寫函數fun(),其功能是:將所有大于1小于整數m的素數存入xx所指數組中,素數的個數通過k傳回。

例如,輸入25,則應輸出23571113171923。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(intm,int*k,intxx[])

{

}

main()

{

intm,n,zz[100];

clrscr();

printf("/nPleaseenteranintegernumberbetween10and100:");

scanf("%d",&n);

fun(n,&m,zz);

printf("\n\nThereare%dprimenumbers

lessthan%d:",m,n);

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

printf("\n%4d",zz[n]);

}

31.程序定義了NxN的二維數組,并在主函數中賦值。請編寫函數fun,函數的功能是:求出數組周邊元素的平均值并作為函數值返給主函數中的s。

例如:a數組中的值為:

則返回主程序后s的值應為:3.375。

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

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

32.下列程序定義了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”);

}

}

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

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

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

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

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

例如,當score數組中的數據為24,35,88,76,90,54,59,66,96時,函數返回的人數應該是5,up中的數據應為88,76,90,66,96。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

intfun(intscore[],intm,intup[])

{

}

main()

{

inti,n,up[9];

intscore[9]={24,35,88,76,90,54,

59,66,96};

clrscr();

n=fun(score,9,up);

printf("\nuptotheaveragescoreare:");

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

printf("%d",up[i]);

}

四、單選題(0題)35.有以下程序:

A.CDEFB.ABEFC.ABCDD.CDAB

五、單選題(0題)36.當執行下面的程序時,如果輸入ABC,則輸出結罘是()。#include<stdio.h>#include<string.h>main(){charss[10]="1,2,3,4,5":gets(ss);strcat(ss,"6789");printf("%s\n",ss);}A.ABC6789B.ABC67C.12345ABC6D.ABC456789

六、單選題(0題)37.

參考答案

1.C先輸出a、b表示退一格,當執行到:\b后,光標往后退,接著輸出re'hi'y\(反斜杠后又加一個反斜杠的意思是要輸出一個反斜杠),此時又執行:\b后,\就被ou覆蓋。

2.B內循環只循環一次就結束,第1次外循環時,t=t+b[0][b[0][0]]=1+b[0][0]=1+0=1;第2次外循環時,t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第3次外循環時,1=1+b[2][b[2][2]]=2+b[2][2]=2+2=4。故本題答案為B選項。

3.D

4.C

5.B并運算的含義是:假設有一個“在校學生信息表”,它包括這樣一些字段:學號、姓名、性別、出生日期、籍貫、聯系電話,這個表的關系模式可以表示為:校學生信息表(學號,姓名,性別,出生日期,籍貫,聯系電話)。還有一個“新生信息表(學號,姓名,性別,出生日期,籍貫,聯系電話)”。若要將9月份進校的新生信息加入到“在校學生信息表”中,這樣進行的就是并運算。并運算不會改變表的字段(又叫屬性)個數,但是會增加記錄(又叫元組)個數。交運算的含義是:兩個表(要求結構要一模一樣)進行交運算取兩個表中相同的記錄構成一個新表,交運算不會改變表的字段個數,但是一般會減少記錄個數。投影運算的含義是:從在“校學生信息表(學號,姓名,性別,出生日期,籍貫,聯系電話)”中選取學生的“姓名”和“聯系電話”這兩個字段,可以構成一個“學生聯系表(姓名,聯系電話)”,這就是一個投影運算,所以投影運算一般會減少字段(又叫屬性)的個數。笛卡兒乘積又叫稱乘運算,設有n元關系R和m元關系s,他們分別有P、q個元組,則關系R和關系s的笛卡兒積表示為R×S,該關系是一個n+m元關系,元組個數是PXq。因此本題的正確答案是B。\r\n

6.C

7.C

\n在C語言中各種數據類型在內存中所占的字節數與機器的位數有關,16位機中(也就是在標準c中),若int類型數據占2個字節,則float類型數據占4個字節,double類型數據占8個字節。

\n

8.D在程序設計中,各模塊間的內聚性越強,則耦合性越弱。一般較優秀的軟件設計,應盡量做到高內聚、低耦合,以有利于提高模塊的獨立性。耦合性與內聚性是模塊獨立的兩個定性標準,是互相關聯的。

9.A根據二叉樹的性質,n=n0+n1+n2(n表示總結點數,n0表示葉子結點數,nl表示度數為1的結點數,n2表示度數為2的結點數),而葉子結點數總是比度數為2的結點數多1,所以n2=n1-1=5-1=4,而n=25,所以nl=n-n0-n2=25-5-4=16。

10.A\\n和\\\\分別為轉義字符,各占據一個字符的位置。

11.B

12.B

13.101091101091解析:for(表達式1;表達式2:表達式3)語句的功能是:首先計算表達式1的值,然后檢測表達式2的值,若其值為真,則執行循環體語句,執行完畢后,再計算表達式3的值。然后再檢測表達式2的值是否為真,若為真,繼續執行循環體語句,若為假,則退出循環:第1次循環x>8成立,輸出x=10,y=10后,x的值減1,i=1,執行y=++i操作,y的值變為1;判斷條件還成立,輸出x=9,y=1,然后x的值減1,循環條件不成立,則退出循環。

14.k-1k,-1解析:顛倒一個字符串中的字符,就是首尾對應的元素兩兩交換。簡單地可用兩個游標變量i和j,i是前端元素的下標,j是后端元素的下標,交換以這兩個變量值為下標的元素str[i]和str[j]。開始時,i的值為0,j的值為字符串末元素的下標(字符串長度減1)。每次交換后,i增1,j減1。繼續交換的條件是str[i]位于str[j]的前面,即i<j。字符串末元素的下標是它的長度減1,所以在第二個空框處應填入-1。程序為了交換str[i]和str[j],使用了變量k,該變量應在程序的變量定義部分中一起定義,所以在第一個空框處應填入k。

15.調試調試

16.加工加工解析:數據流圖是從數據傳遞和加工的角度,來刻畫數據流從輸入到輸出的移動變換過程。其中的每一個加工對應一個處理模塊。

17.左左解析:對二叉排序樹進行查找,若待查的值與根結點的值相比,若比根小,則繼續在左子樹中找;若比根大,則在右子樹中找。

18.投影專門關系運算包括對單個關系進行垂直分解(投影操作)或水平分解(選擇操作)和對多個關系的結合(連接操作)等。

19.1212解析:x=(表達式1,表達式2,…)的形式,結果為最后一個表達式的值:x=(a=4,6*2)=2*6=12。

20.77解析:在主函數中定義了一個變量x并賦初值0,然后執行函數調用語句,該語句的執行過程為sub(&x,8,1)調用sub(&a,4,2),sub(&s,4,2)調用sub(&a,2,4),sub(&a,2,4)中由于2<4,所以if后面括號里的判斷為假,遞歸結束,執行其后的。*a+=k;語句此時x=x+k=0+4+4,回推到上一層調用函數sub(Rx,4,2)中,執行后面的語句,x=x+k=4+2=6,在回推到最上一層調用函數sub(&x,8,1)執行后面的語句,x=x+k=6+1=7,所以最后輸出7。

21.時間復雜度時間復雜度解析:在算法正確的前提下,評價一個算法的兩個標準是空間復雜度和時間復雜度。算法的時間復雜度,是指執行算法所需要的計算工作量。算法的空間復雜度是指執行這個算法所需要的內存空間。

22.文檔文檔解析:計算機軟件是計算機系統中與硬件相互依存的另一部分,是包括程序、數據以及相關文檔的完整集合。

23.k=1234

24.數據庫系統數據庫系統解析:數據管理技術的發展過程中,經歷了人工管理階段、文件系統階段和數據庫系統階段。(1)人工管理階段。這一階段的計算機主要用于科技計算。外存只有磁帶、卡片和紙帶等,軟件只有匯編語言,尚無數據管理方面的軟件。數據處理方式是批處理。(2)文件系統階段。文件系統是數據庫系統發展的初級階段,它提供了簡單的數據共享與數據管理能力,但是它無法提供完整的、統一的管理和數據共享的能力。由于它的功能簡單,因此它附屬于操作系統而不能成為獨立的軟件,目前一般將其看成僅是數據庫系統的雛形,而不是真正的數據庫系統。(3)數據庫系統階段。數據庫階段用數據模型表示復雜的數據模型,有較高的數據獨立性。數據庫系統為用戶提供了方便的用戶接口,用戶可使用查詢語言或終端命令操作數據庫,也可以用程序方式(用COBOL、C一類高級語言和數據庫語言編制的程序)操作數據庫。數據庫管理系統提供了數據控制功能。

25.

解析:(1)該程序功能是刪除一個字符串中指定下標的字符。它的解題思路,可以分解為以下兩步:逐個判斷字符串中的下標是否滿足條件,滿足條件的就放到題目要求的新串,否則就不放。

(2)從已給部分源程序的main主函數開始入手,核心函數“fun(str1,str2,n);”中的參數由題目可知,str1存放著原始字符串,str2存放刪除了下標為n的字符的結果字符串,注意下標是從“0”開始的。

26.

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

27.intfun(char*s){intij=0;for(i=0;s[i]!='\0';i++)if(s[i]!=''&&(s[i+l]==''||s[i+1]=='\O'))/*如果一個字母的下一個字符為空格或者結束標記則表示一個單詞結束*/j++;returnj;/*返回單詞個數*/}intfun(char*s)\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!=\'\\0\';i++)\r\nif(s[i]!=\'\'&&(s[i+l]==\'\'||s[i+1]==\'\\O\'))/*如果一個字母的下一個字符為空格或者結束標記,則表示一個單詞結束*/\r\nj++;\r\nreturnj;/*返回單詞個數*/\r\n}解析:判斷單詞的個數,我們首先想到的是程序怎樣識別是一個單詞,也即循環語句中的fir(i=0;s[i]!='\\0';i++),本題重點是if句中的條件表達方式。

28.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]<a

溫馨提示

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

評論

0/150

提交評論