版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2022-2023學年浙江省杭州市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________
一、單選題(12題)1.下面屬于黑盒測試方法的是()。
A.邊界值分析B.路徑覆蓋C.語句覆蓋D.邏輯覆蓋
2.若有定義“inta,b,c;”以下程序段的輸出結果是()。a=11;b=3;c=0;printf(“%d\n”,c=(a/b,a%b));
A.2B.0C.3D.1
3.
4.以下敘述中錯誤的是()。
A.對于double類型數組,不可以直接用數組名對數組進行整體輸入或輸出
B.數組名代表的是數組所占存儲區(qū)的首地址,其值不可改變
C.當程序執(zhí)行中,數組元素的下標超出所定義的下標范圍時,系統將給出“下標越界”的出錯信息
D.可以通過賦初值的方式確定數組元素的個數
5.以下程序運行后的輸出結果是()。
A.1,2,3,1,5,9,
B.1,3,5,1,3,5,
C.1,3,5,0,d,8,
D.1,3,5,-1,3,7,
6.以下敘述中錯誤的是______。A.C程序必須由—個或—個以上的函數組成
B.函數調用可以作為—個獨立的語句存在
C.若函數有返回值,必須通過return語句返回
D.函數形參的值也可以傳回給對應的實參
7.
8.在學生管理的關系數據庫中,存取一個學生信息的數據單位是()。
A.文件B.數據庫C.字段D.記錄
9.以下程序的輸出結果是()。main{charch[3][4]={"123","456","78"),*p[3];inti;for(i=0;i<3;i++)p[i]=ch[i];for(i=0;i<3;i++)printf("%s",p[i]);}A.123456780B.123456780C.12345678D.147
10.以下選項中能表示合法常量的是()。
A.1,200B.1.5E2.0C.‘\’D.“\007”
11.查找效率最高的二叉排序樹是()。
A.所有結點的左子樹都為空的二叉排序樹
B.所有結點的右子樹都為空的二叉排序樹
C.平衡二叉排序樹
D.沒有左子樹的二叉排序樹
12.某二叉樹共有7個結點,其中葉子結點只有l(wèi)個,則該二叉樹的深度為(假設根結點在第1層)()。
A.3B.4C.6D.7
二、2.填空題(12題)13.注釋說明了程序的功能,它分為【】注釋和功能性注釋。
14.數據模型按不同應用層次分成三種類型,它們是概念數據模型、【】和物理數據模型。
15.下列程序的輸出結果是【】。
intt(intx,inty,ntcp,intdp)
{cp=x*x+y*y;
dp=x*x-y*y;
}
main()
{inta=4,b=3,c=5,d=6;
t(a,b,c,d);
printf("%d%d\n",c,d);
}
16.當循環(huán)隊列非空且隊尾指針等于隊頭指針時,說明循環(huán)隊列已滿,不能進行入隊運算。這種情況稱為【】。
17.下列程序段的運行結果是______。
charstr[]="ABCD",*p=str;
printf("%d\n",*(p+3));
18.面向對象的模型中,最基本的概念是對象和______。
19.數據庫管理系統常見的數據模型有層次模型、網狀模型和【】3種。
20.下面程序有兩個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);
}
21.在索引查找或分塊查找中,首先查找【】,然后再查找相應的【】,整個索引查找的平均查找長度等于查找索引表的平均查找長度與查找相應子表的平均查找長度之和。
22.以下程序的輸出結果是【】。
main()
{ints,i;
for(s=0,i=1;1<3;i++,s+=i);
printf("%d\n",s);
}
23.以下程序的運行結果為【】。
#include<stdio.h>
main()
{staticintb[2][3]={{1,2,3},{4,5,6}};
staticint*pb[]={b[0],b[1]};
inti,j;
i=0;
for(j=0;j<3;j++)
printf("b[%d][%d]=%d",i,j,*(pb[i]+j));
printf("\n");
}
24.以下程序的輸出結果是【】。
#include<string.h>
main()
{printf("%d\n",strlen("IBM\n012\1\\"));}
三、3.程序設計題(10題)25.請編寫函數fun,其功能是:計算并輸出下列多項式的值:
例如,在主函數中從鍵盤給n輸入15,則輸出為:s=2.718282。
注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。
26.請編寫函數fun,函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中;要求函數把O至9歲年齡段的人數放在d[0]中,把10至19歲年齡段的人數放在d[1],把20至29歲年齡段的人數放在d[2]中,其余依此類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。
注意:部分源程序在文件PROGl.C中。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。
27.請編寫函數fun(),它的功能是:求出ss所指字符串中指定字符的個數,并返回此值。
例如,若輸入字符串123412132,輸入字符1,則輸出3。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<coio.h>
#include<stdio.h>
#defineM81
intfun(char*ss,charc)
{
}
main()
{chara[M],ch;
clrscr();
printf("\nPleaseenterastring:");
gets(a);
printf("\nPleaseenterachar:");
ch=getchar();
printf("\nThenumberofthecharis:%d\n",fun(a,ch));
}
28.請編寫一個函數fun(),它的功能是將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉為整數的函數)。
例如,若輸入字符串“-1234”,則函數把它轉換為整數值-1234。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<string.h>
longfun(char*p)
{
}
main()
{
chars[6];
longn;
printf("Enterastring:\n");
gets(s);
n=fun(s);
printf("%ld\n",n);
}
29.請編寫一個函數voidfun(char*ss),其功能是:將字符串ss中所有下標為偶數位置上的字母轉化為大寫(若該位置上不是字母,則不轉換)。
例如,若輸入abc4Efg,則應輸出AbC4EfG。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
voidfun(char*ss)
{
}
main()
{
chartt[51];
clrscr();
printf("Pleaseenterancharacterstring
within50characters:\n");
gets(tt);
printf("\n\nAfterchanging,thestring\n
%s",tt);
fun(tt);
printf("\nbecomes\n\%s",tt);
}
30.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]);
}
31.請編寫函數fun(),其功能是:計算并輸出給定10個數的方差。
其中
例如,給定的10個數為95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,則輸出為S=11.730729。
注意;部分源程序給出如下.
請勿改動主函數mam和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<math.h>
#include<stdio.h>
doublefun(doublex[10])
{
}
main()
{
doubles,x[i0]={95.0,89.0,76.0,65.0,
88.0,72.0,85.0,81.0,90.0,56.0};
inti;
printf("\nTheoriginaldatais:\n");
for(i=0;i<10;i++)
printf("%6.1f",x[i]);
printf("\n\n");
s=fun(x);
printf("s=%f\n\n",s);
}
32.m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平均分的人數作為函數值返回,將低于平均分的分數放在below所指的數組中。
例如,當score數組中的數據為:10、20、30、40、50、60、70、80、90時,函數返回的人數應該是4,below中的數據應為:10、20、30、40。
注意:部分源程序在文件PROGl.C文件中。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。
33.請編寫一個函數fun(),它的功能是:求出1到m(含m)之內能被7或11整除的所有整數放在數組a中,通過n返回這些數的個數。
例如,若傳給m的值為50,則程序輸出:
7111421X283335424449
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
#defineM100
voidfun(intm,int*a,int*n)
{
}
main()
{
intaa[M],n,k;
clrscr();
fun(50,aa,&n);
for(k=0;k<n;k++)
if((k+1)%20==0)/*每行輸出20個數*/
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");
}
34.請編一個函數voidfun(inttt[M][N],intpp[N],tt指向一個M行N列的二維數組,求出二維數組每列中最大元素,并依次放入pp所指的一維數組中。二維數組中的數已在主函數中給出。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
#defineM3
#defineN4
voidfun(inttt[M][N],intpp[N])
{
}
main()
{
intt[M][N]={{68,32,54,12},{14,24,88,
58},{42,22,44,56}};
intp[N],i,j,k;
clrscr();
printf("Theriginaldatais:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nTheresultis:\n");
for(k=0;k<N;k++)
printf("%4d",p[k]);
printf("\n");
}
四、單選題(0題)35.
五、單選題(0題)36.
六、單選題(0題)37.有以下程序:#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf(“%d\n”,s);}程序的運行結果是()。
A.10B.30C.0D.64
參考答案
1.A黑盒測試方法主要有等價類劃分、邊界值分析、因果圖、錯誤推測等。白盒測試的主要方法有邏輯驅動、路徑測試等,主要用于軟件驗證。
2.AC語言中,逗號運算符可以把兩個以上(包含兩個)的表達式連接成一個表達式。逗號運算符的優(yōu)先級是所有運算符中級別最低的,逗號運算符保證左邊的子表達式運算結束后才進行右邊的子表達式的運算。也就是說,逗號運算符是一個序列點,其左邊所有子表達式運算都結束后,才對其右邊的子表達式進行運算,并以最右邊表達式的值作為整個逗號表達式的值。因此c的值為“a%b”,即“11%3=2”。故本題答案為A選項。
3.B
4.C解析:在C語言中,除字符數組外,一個數組不能通過數組名對數姐進行整體引用,因此選項A是對的。數組名中存放的是一個地址常量,它代表整個數組的首地址,因此選項B是對的。C語言程序在運行過程中,系統不自動檢驗數組元素的下標是否越界,因此選項C是錯誤的。C語官規(guī)定可以通過賦初值來定義數組的大小,這時數組說明符的一對方括號中可以不指定數組的大小,因此選項D也是正確的。所以,4個選項中選項C符合題意。
5.Dmain函數中,fun(fun(t))嵌套調用fun函數。第一次調用為fun(1),調用后,a[3]={1,3,5},輸出1,3,5,返回a[1]=3。第二次調用為fun(3),調用后,a[3]={一1,3,7},輸出一l,3,7。
6.D解析:在調用函數時,給形參分配存儲單元,并將實參對應的值傳遞紿形參,調用結束后,形參單元彼釋放,實參單元仍保留并維持原值。因此,在執(zhí)行—個被調用函數時,形參的值如果發(fā)生改變,并不會改變主調函數的實參的值,也就是說形參的值是不傳回紿對應的實參的。
7.B
8.D解析:在關系數據表中,行稱為元組,對應存儲文件中的記錄,列稱為屬性,對應存儲文件中的字段,所以本題答案為D。
9.B第一個for循環(huán)的作用是讓p指向每行的首地址,第二個for循環(huán)的作用是把它指向的字符串輸出,故選擇B選項。
10.DA選項中整型常量應表示為1200,數字中不能包含逗號。B選項中E后面的指數必須為整數。C選項中轉義字符以“\\”開始,若要表示字符“\\”,應寫為“\\\\”。故本題答案為D選項。
11.C對于結點個數相同的二叉排序樹,平衡二叉排序樹的深度最小。而二叉排序樹的查找效率取決于二叉排序樹的深度。
12.D根據二叉樹的基本性質3:在任意一棵二叉樹中,度為0的葉子結點總比度為2的結點多一個,因此本題中度為2的結點為l一1=0個,據此可以知道本題目中的二叉樹的每一個結點都有一個分支,所以共7個結點共7層,即深度為7,選擇D)。
13.序言性序言性解析:注釋一般分為序言性注釋和功能性注釋。
14.邏輯數據模型邏輯數據模型解析:數據模型按不同的應用層次分成三種類型,它們是概念數據模型、邏輯數據模型、物理數據模型。
15.5656解析:本題中a,b,c,d是實參,x,y,cp,dp是形參。C語言規(guī)定,實參變量對形參變量的數據傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。在內存中,實參單元與形參單元是不同的單元。在調用函數時,給形參分配存儲單元,并將實參對應的值傳遞給形參,調用結束后,形參單元被釋放,實參單元仍保留并維持原值。因此,程序的輸出結果是56。
16.上溢上溢解析:入隊運算是指在循環(huán)隊列的隊尾加入一個新元素。這個運算有兩個基本操作:首先將隊尾指針進一(即rear=rear+1),并當rear=m+1時置rear=1;然后將新元素插入隊尾指針指向的位置。當循環(huán)隊列非空(s=1)時且隊尾指針等于隊頭指針時,說明循環(huán)隊列已滿,不能進行入隊運算,這種情況稱為“上溢”。
17.6868解析:本題考查如何用指針引用數組元素。本題先定義了一個指向字符型數組str的指針p,指針p指向數組str的首地址,p+3將指針指向str[3],*(p+3)指的是字符“D”,輸出時是以“%d”格式輸出的,即輸出其相應ASCII碼值68。
18.類類
19.關系模型關系模型解析:數據庫管理系統是位于用戶與操作系統之間的一層系統管理軟件,是一種系統軟件,是用戶與數據庫之間的一個標準接口。其總是基于某種數據模型,可以分為層次模型、網狀模型和關系模型。
20.1a61a6解析:對于指針變量的運算,就是對地址的運算。本題中由于指針指向的是整型變量,所以,使指針變量移動9個位置也就是移動18個字節(jié)。注意,本題是以十六進制輸出的。
21.索引表塊索引表\r\n塊
22.55解析:此程序中,for循環(huán)語句后面直接跟了一個“;”,表明循環(huán)體為空。輸出語句不在for循環(huán)體內,所以在循環(huán)執(zhí)行完畢后才輸出s的值。s、i的初值分別為。和1,判斷循環(huán)條件,表達式“1<3”成立,執(zhí)行“i++,s+=i”后,i和s的值分別為2和1,繼續(xù)判斷循環(huán)條件,表達式“2<3”成立,執(zhí)行“i++,s+=j”后,i和s的值分別為3,再次判斷循環(huán)條件,表達式“3<3”不成立,循環(huán)結束。
23.b[0][0]=1b[0][1]=2b[0][2]=3
24.99解析:本題的字符串中共有9個字符,它們分別是\'I\'、\'B\'、\'M\'、\'\\n\'、\'0\'、\'1\'、\'2\'、\'\\1\'、\'\\\\\',其中,'\\n'表示換行,'\\\\'表示反斜杠字符'\\',所以本題的最后輸出結果為9。
25.
解析:該程序功能是計算并輸出多項式的值。該題的解題思路是。根據題干中給出的數列,首先推出每一項的表達式,然后再對多項式進行累加求和。
26.
解析:該程序功能是統計各年齡段的人數。本題中采用的是多if選擇語句,實現了不同年齡段的分支選擇。
27.intfun(char*sscharc){inti=0;for(;*ss!='\0';ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的個數*/returni;}intfun(char*ss,charc)\r\n{\r\ninti=0;\r\nfor(;*ss!='\\0';ss++)\r\nif(*ss==c)\r\ni++;/*求出ss所指字符串中指定字符的個數*/\r\nreturni;\r\n}解析:從字符串ss中找出子字符串的方法是:從第1個字符開始,對字符串進行遍歷:若ss串的當前字符等于t串的第1個字符,兩字符串的指針自動加1,繼續(xù)比較下一個字符;若比較至字符串的結尾,則跳出循環(huán);若“串的字符和c串的字符不對應相同,則繼續(xù)對,s串的下一個字符進行處理。本程序是采用逐一比較的方式找出出現的次數。循環(huán)的作用是在串中從左到右逐一走動,if()的作用是進行判斷是否相同,若與c相同則表示又出現一次.
28.longfun(char*p){longn=0;intflag=1;if(*p=='-')/*負數時置flag為-1*/{p++;flag=-1;}elseif(*p=='+')/*正數時置flag為1*/p++;while(*p!='\0'){n=n*10+*p-'0';/*將字符串轉成相應的整數*/p++;}returnn*flag;}longfun(char*p)\r\n{\r\nlongn=0;\r\nintflag=1;\r\nif(*p=='-')/*負數時置flag為-1*/\r\n{p++;flag=-1;}\r\nelseif(*p=='+')/*正數時置flag為1*/\r\np++;\r\nwhile(*p!='\\0')\r\n{n=n*10+*p-'0';/*將字符串轉成相應的整數*/\r\np++;\r\n}\r\nreturnn*flag;\r\n}解析:if()的作用是判斷它是正數還是負數。while()循環(huán)的作用是將字符串轉成相應的整數。注意*p是一個字符如'9','4',并不是一個數,要將其轉成相應的數字必須令其減去'0'(不是'\\0'),即*p-'0'就得到*p這個字符的相應數字。如'0'-'0'=0,'8'-'0'=8等。必須在程序的前面加#include<stdlib.h>,函數atol()的作用是將字符串p轉成長整型數,它是一個庫函數。
29.voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++){if(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*將ss所指字符串中所有下標為偶數位置的字母轉換成大寫*/ss[i]==ss[i]-32;}/*大寫字母比相應的小寫字母的ASCII碼值小32*/}voidfun(char*ss)\r\n{inti;\r\nfor(i=0;ss[i]!='\\0';i++){\r\nif(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*將ss所指字符串中所有下標為偶數位置的字母轉換成大寫*/\r\nss[i]==ss[i]-32;}/*大寫字母比相應的小寫字母的ASCII碼值小32*/\r\n}解析:從C語言的學習中我們知道,只要將小寫字母減去32則轉換成大寫字母,將大寫字母加上32則轉成小寫字母,該程序使用if語句實現該功能轉換的。
30.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個循環(huán)的作用是求出平均分av,第2個循環(huán)的作用是找出高于平均分的成績并存入up數組中。
31.doublefun(doublex[10]){doublexl=0.0s=0.0;inti;for(i=0;i<10;i++)xl=xl+x[i];xl-xl/10;/*求10個數的平均值*/for(i=0;i<l0;i++)s=s+(x[i]-xl)*(x[i]-x1);returnsqrt(s/l0);/*求10個數的方差*/}doublefun(doublex[10])\r\n{\r\ndoublexl=0.0,s=0.0;\r\ninti;\r\nfor(i=0;i<10;i++)\r\nxl=xl+x[i];\r\nxl-xl/10;\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10個數的平均值*/\r\nfor(i=0;i<l0;i++)\r\ns=s+(x[i]-xl)*(x[i]-x1);\r\nreturnsqrt(s/l0);\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000\u3000/*求10個數的方差*/\r\n}解析:又是一道算式表達題,程序中用第1個循環(huán)來完成求10個數的總和,接著再用x1=x1/10來求出平均值。
32.
解析:(1)該程序功能是返回低于平均分的人數。它的解題思路可以分解為以下幾步:求總分一求平均分一逐個元素與平均分比較一統計低于平均分的人數。
(2)從已給部分源程序的main主函數開始入手,核心函數fun(score,9,below)中的參數由題目可知,score存放著m個人的成績,below存放低于平均分的分數。另外,根據score的定義,可知9為score數組中元素的個數,傳給函數fun中的參數m。
33.voidfun(intmint*aint*n){intij=0;for(i=1;i<=m;i++)if(i%7==0||i%11==0)/*求出1到m(含m)之內能被7或11整除的所有整數放在數組a中*/a[j++]=i;*n=j;/*返回這些數的個數*/}voidfun(intm,int*a,int*n)\r\n{\r\ninti,j=0;\r\nfor(i=1;i<=m;i++)\r\nif(i%7==0||i%11==0)/*求出1到m(含m)之內能被7或11整除的所有整數放在數組a中*/\r\na[j++]=i;\r\n*n=j;/*返回這些數的個數*/\r\n}解析:本題要找出能被7或11整除的所有整數,注意數學中的“或”和C語言中的“或”的區(qū)別,但在此處,if條件語句中用了“||”運算符,若要找能同時被7和11整除的所有整數則在if()中應用“&&”運算符。
34.voidfun(inttt[M][N]intpp[N]){intiimax;for(j=0;j<N;j++){max=tt[0][j];/*假設各列中的第一個元素最大*/for(i=0;i<M;i++)if(tt[i][j]>max)/*如果各列中的其他元素比最大值大則將這個更大的元素看作當前該列中最大元素*/max=tt[i][j];pp[j]=max;/*將各列的最大值依次放入pp數組中*/}}voidfun(inttt[M][N],intpp[N])\r\n{\r\ninti,i,max;\r\nfor(j=0;j<N;j++)\r\n{\r\nmax=tt[0][j];/*假設各列中的第一個元素最大*/\r\nfor(i=0;i<M;i++)\r\nif(tt[i][j]>max)/*如果各列中的其他元素比最大值大,則將這個更大的元素看作當前該列中最大元素*/\r\nmax=tt[i][j];\r\npp[j]=max;/*將各列的最大值依次放入pp數組中*/\r\n}\r\n}解析:本題中函數的功能是求出二維數組中每列的最大元素。首先,假設各列中的第一個元素最大,然后利用行標值的移動來依次取得各列中其他元素的值,并與假設的最大值進行比較,如果遇到更大的,則把這個更大的元素看做當前該列中最大的元素,繼續(xù)與該列中其他元素比較。
35.B
36.D
37.D本題中靜態(tài)局部變量X,在靜態(tài)存儲區(qū)內分配存儲單元,在程序整個運行期間都不釋放。在main函數中,執(zhí)行for循環(huán),第1次循環(huán),變量s的值為2;第2次循環(huán),函數的返回值為4,所以變量s的值為8;第3次循環(huán),函數的返回值為8,所以s的值為64。故本題答案為D選項。2022-2023學年浙江省杭州市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________
一、單選題(12題)1.下面屬于黑盒測試方法的是()。
A.邊界值分析B.路徑覆蓋C.語句覆蓋D.邏輯覆蓋
2.若有定義“inta,b,c;”以下程序段的輸出結果是()。a=11;b=3;c=0;printf(“%d\n”,c=(a/b,a%b));
A.2B.0C.3D.1
3.
4.以下敘述中錯誤的是()。
A.對于double類型數組,不可以直接用數組名對數組進行整體輸入或輸出
B.數組名代表的是數組所占存儲區(qū)的首地址,其值不可改變
C.當程序執(zhí)行中,數組元素的下標超出所定義的下標范圍時,系統將給出“下標越界”的出錯信息
D.可以通過賦初值的方式確定數組元素的個數
5.以下程序運行后的輸出結果是()。
A.1,2,3,1,5,9,
B.1,3,5,1,3,5,
C.1,3,5,0,d,8,
D.1,3,5,-1,3,7,
6.以下敘述中錯誤的是______。A.C程序必須由—個或—個以上的函數組成
B.函數調用可以作為—個獨立的語句存在
C.若函數有返回值,必須通過return語句返回
D.函數形參的值也可以傳回給對應的實參
7.
8.在學生管理的關系數據庫中,存取一個學生信息的數據單位是()。
A.文件B.數據庫C.字段D.記錄
9.以下程序的輸出結果是()。main{charch[3][4]={"123","456","78"),*p[3];inti;for(i=0;i<3;i++)p[i]=ch[i];for(i=0;i<3;i++)printf("%s",p[i]);}A.123456780B.123456780C.12345678D.147
10.以下選項中能表示合法常量的是()。
A.1,200B.1.5E2.0C.‘\’D.“\007”
11.查找效率最高的二叉排序樹是()。
A.所有結點的左子樹都為空的二叉排序樹
B.所有結點的右子樹都為空的二叉排序樹
C.平衡二叉排序樹
D.沒有左子樹的二叉排序樹
12.某二叉樹共有7個結點,其中葉子結點只有l(wèi)個,則該二叉樹的深度為(假設根結點在第1層)()。
A.3B.4C.6D.7
二、2.填空題(12題)13.注釋說明了程序的功能,它分為【】注釋和功能性注釋。
14.數據模型按不同應用層次分成三種類型,它們是概念數據模型、【】和物理數據模型。
15.下列程序的輸出結果是【】。
intt(intx,inty,ntcp,intdp)
{cp=x*x+y*y;
dp=x*x-y*y;
}
main()
{inta=4,b=3,c=5,d=6;
t(a,b,c,d);
printf("%d%d\n",c,d);
}
16.當循環(huán)隊列非空且隊尾指針等于隊頭指針時,說明循環(huán)隊列已滿,不能進行入隊運算。這種情況稱為【】。
17.下列程序段的運行結果是______。
charstr[]="ABCD",*p=str;
printf("%d\n",*(p+3));
18.面向對象的模型中,最基本的概念是對象和______。
19.數據庫管理系統常見的數據模型有層次模型、網狀模型和【】3種。
20.下面程序有兩個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);
}
21.在索引查找或分塊查找中,首先查找【】,然后再查找相應的【】,整個索引查找的平均查找長度等于查找索引表的平均查找長度與查找相應子表的平均查找長度之和。
22.以下程序的輸出結果是【】。
main()
{ints,i;
for(s=0,i=1;1<3;i++,s+=i);
printf("%d\n",s);
}
23.以下程序的運行結果為【】。
#include<stdio.h>
main()
{staticintb[2][3]={{1,2,3},{4,5,6}};
staticint*pb[]={b[0],b[1]};
inti,j;
i=0;
for(j=0;j<3;j++)
printf("b[%d][%d]=%d",i,j,*(pb[i]+j));
printf("\n");
}
24.以下程序的輸出結果是【】。
#include<string.h>
main()
{printf("%d\n",strlen("IBM\n012\1\\"));}
三、3.程序設計題(10題)25.請編寫函數fun,其功能是:計算并輸出下列多項式的值:
例如,在主函數中從鍵盤給n輸入15,則輸出為:s=2.718282。
注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。
26.請編寫函數fun,函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中;要求函數把O至9歲年齡段的人數放在d[0]中,把10至19歲年齡段的人數放在d[1],把20至29歲年齡段的人數放在d[2]中,其余依此類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。
注意:部分源程序在文件PROGl.C中。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。
27.請編寫函數fun(),它的功能是:求出ss所指字符串中指定字符的個數,并返回此值。
例如,若輸入字符串123412132,輸入字符1,則輸出3。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<coio.h>
#include<stdio.h>
#defineM81
intfun(char*ss,charc)
{
}
main()
{chara[M],ch;
clrscr();
printf("\nPleaseenterastring:");
gets(a);
printf("\nPleaseenterachar:");
ch=getchar();
printf("\nThenumberofthecharis:%d\n",fun(a,ch));
}
28.請編寫一個函數fun(),它的功能是將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉為整數的函數)。
例如,若輸入字符串“-1234”,則函數把它轉換為整數值-1234。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<string.h>
longfun(char*p)
{
}
main()
{
chars[6];
longn;
printf("Enterastring:\n");
gets(s);
n=fun(s);
printf("%ld\n",n);
}
29.請編寫一個函數voidfun(char*ss),其功能是:將字符串ss中所有下標為偶數位置上的字母轉化為大寫(若該位置上不是字母,則不轉換)。
例如,若輸入abc4Efg,則應輸出AbC4EfG。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
voidfun(char*ss)
{
}
main()
{
chartt[51];
clrscr();
printf("Pleaseenterancharacterstring
within50characters:\n");
gets(tt);
printf("\n\nAfterchanging,thestring\n
%s",tt);
fun(tt);
printf("\nbecomes\n\%s",tt);
}
30.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]);
}
31.請編寫函數fun(),其功能是:計算并輸出給定10個數的方差。
其中
例如,給定的10個數為95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0,則輸出為S=11.730729。
注意;部分源程序給出如下.
請勿改動主函數mam和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<math.h>
#include<stdio.h>
doublefun(doublex[10])
{
}
main()
{
doubles,x[i0]={95.0,89.0,76.0,65.0,
88.0,72.0,85.0,81.0,90.0,56.0};
inti;
printf("\nTheoriginaldatais:\n");
for(i=0;i<10;i++)
printf("%6.1f",x[i]);
printf("\n\n");
s=fun(x);
printf("s=%f\n\n",s);
}
32.m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平均分的人數作為函數值返回,將低于平均分的分數放在below所指的數組中。
例如,當score數組中的數據為:10、20、30、40、50、60、70、80、90時,函數返回的人數應該是4,below中的數據應為:10、20、30、40。
注意:部分源程序在文件PROGl.C文件中。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。
33.請編寫一個函數fun(),它的功能是:求出1到m(含m)之內能被7或11整除的所有整數放在數組a中,通過n返回這些數的個數。
例如,若傳給m的值為50,則程序輸出:
7111421X283335424449
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
#defineM100
voidfun(intm,int*a,int*n)
{
}
main()
{
intaa[M],n,k;
clrscr();
fun(50,aa,&n);
for(k=0;k<n;k++)
if((k+1)%20==0)/*每行輸出20個數*/
{printf("%4d",aa[k]);
printf("\n");
}
else
printf("%4d",aa[k]);
printf("\n");
}
34.請編一個函數voidfun(inttt[M][N],intpp[N],tt指向一個M行N列的二維數組,求出二維數組每列中最大元素,并依次放入pp所指的一維數組中。二維數組中的數已在主函數中給出。
注意:部分源程序給出如下。
請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
#defineM3
#defineN4
voidfun(inttt[M][N],intpp[N])
{
}
main()
{
intt[M][N]={{68,32,54,12},{14,24,88,
58},{42,22,44,56}};
intp[N],i,j,k;
clrscr();
printf("Theriginaldatais:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nTheresultis:\n");
for(k=0;k<N;k++)
printf("%4d",p[k]);
printf("\n");
}
四、單選題(0題)35.
五、單選題(0題)36.
六、單選題(0題)37.有以下程序:#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf(“%d\n”,s);}程序的運行結果是()。
A.10B.30C.0D.64
參考答案
1.A黑盒測試方法主要有等價類劃分、邊界值分析、因果圖、錯誤推測等。白盒測試的主要方法有邏輯驅動、路徑測試等,主要用于軟件驗證。
2.AC語言中,逗號運算符可以把兩個以上(包含兩個)的表達式連接成一個表達式。逗號運算符的優(yōu)先級是所有運算符中級別最低的,逗號運算符保證左邊的子表達式運算結束后才進行右邊的子表達式的運算。也就是說,逗號運算符是一個序列點,其左邊所有子表達式運算都結束后,才對其右邊的子表達式進行運算,并以最右邊表達式的值作為整個逗號表達式的值。因此c的值為“a%b”,即“11%3=2”。故本題答案為A選項。
3.B
4.C解析:在C語言中,除字符數組外,一個數組不能通過數組名對數姐進行整體引用,因此選項A是對的。數組名中存放的是一個地址常量,它代表整個數組的首地址,因此選項B是對的。C語言程序在運行過程中,系統不自動檢驗數組元素的下標是否越界,因此選項C是錯誤的。C語官規(guī)定可以通過賦初值來定義數組的大小,這時數組說明符的一對方括號中可以不指定數組的大小,因此選項D也是正確的。所以,4個選項中選項C符合題意。
5.Dmain函數中,fun(fun(t))嵌套調用fun函數。第一次調用為fun(1),調用后,a[3]={1,3,5},輸出1,3,5,返回a[1]=3。第二次調用為fun(3),調用后,a[3]={一1,3,7},輸出一l,3,7。
6.D解析:在調用函數時,給形參分配存儲單元,并將實參對應的值傳遞紿形參,調用結束后,形參單元彼釋放,實參單元仍保留并維持原值。因此,在執(zhí)行—個被調用函數時,形參的值如果發(fā)生改變,并不會改變主調函數的實參的值,也就是說形參的值是不傳回紿對應的實參的。
7.B
8.D解析:在關系數據表中,行稱為元組,對應存儲文件中的記錄,列稱為屬性,對應存儲文件中的字段,所以本題答案為D。
9.B第一個for循環(huán)的作用是讓p指向每行的首地址,第二個for循環(huán)的作用是把它指向的字符串輸出,故選擇B選項。
10.DA選項中整型常量應表示為1200,數字中不能包含逗號。B選項中E后面的指數必須為整數。C選項中轉義字符以“\\”開始,若要表示字符“\\”,應寫為“\\\\”。故本題答案為D選項。
11.C對于結點個數相同的二叉排序樹,平衡二叉排序樹的深度最小。而二叉排序樹的查找效率取決于二叉排序樹的深度。
12.D根據二叉樹的基本性質3:在任意一棵二叉樹中,度為0的葉子結點總比度為2的結點多一個,因此本題中度為2的結點為l一1=0個,據此可以知道本題目中的二叉樹的每一個結點都有一個分支,所以共7個結點共7層,即深度為7,選擇D)。
13.序言性序言性解析:注釋一般分為序言性注釋和功能性注釋。
14.邏輯數據模型邏輯數據模型解析:數據模型按不同的應用層次分成三種類型,它們是概念數據模型、邏輯數據模型、物理數據模型。
15.5656解析:本題中a,b,c,d是實參,x,y,cp,dp是形參。C語言規(guī)定,實參變量對形參變量的數據傳遞是“值傳遞”,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。在內存中,實參單元與形參單元是不同的單元。在調用函數時,給形參分配存儲單元,并將實參對應的值傳遞給形參,調用結束后,形參單元被釋放,實參單元仍保留并維持原值。因此,程序的輸出結果是56。
16.上溢上溢解析:入隊運算是指在循環(huán)隊列的隊尾加入一個新元素。這個運算有兩個基本操作:首先將隊尾指針進一(即rear=rear+1),并當rear=m+1時置rear=1;然后將新元素插入隊尾指針指向的位置。當循環(huán)隊列非空(s=1)時且隊尾指針等于隊頭指針時,說明循環(huán)隊列已滿,不能進行入隊運算,這種情況稱為“上溢”。
17.6868解析:本題考查如何用指針引用數組元素。本題先定義了一個指向字符型數組str的指針p,指針p指向數組str的首地址,p+3將指針指向str[3],*(p+3)指的是字符“D”,輸出時是以“%d”格式輸出的,即輸出其相應ASCII碼值68。
18.類類
19.關系模型關系模型解析:數據庫管理系統是位于用戶與操作系統之間的一層系統管理軟件,是一種系統軟件,是用戶與數據庫之間的一個標準接口。其總是基于某種數據模型,可以分為層次模型、網狀模型和關系模型。
20.1a61a6解析:對于指針變量的運算,就是對地址的運算。本題中由于指針指向的是整型變量,所以,使指針變量移動9個位置也就是移動18個字節(jié)。注意,本題是以十六進制輸出的。
21.索引表塊索引表\r\n塊
22.55解析:此程序中,for循環(huán)語句后面直接跟了一個“;”,表明循環(huán)體為空。輸出語句不在for循環(huán)體內,所以在循環(huán)執(zhí)行完畢后才輸出s的值。s、i的初值分別為。和1,判斷循環(huán)條件,表達式“1<3”成立,執(zhí)行“i++,s+=i”后,i和s的值分別為2和1,繼續(xù)判斷循環(huán)條件,表達式“2<3”成立,執(zhí)行“i++,s+=j”后,i和s的值分別為3,再次判斷循環(huán)條件,表達式“3<3”不成立,循環(huán)結束。
23.b[0][0]=1b[0][1]=2b[0][2]=3
24.99解析:本題的字符串中共有9個字符,它們分別是\'I\'、\'B\'、\'M\'、\'\\n\'、\'0\'、\'1\'、\'2\'、\'\\1\'、\'\\\\\',其中,'\\n'表示換行,'\\\\'表示反斜杠字符'\\',所以本題的最后輸出結果為9。
25.
解析:該程序功能是計算并輸出多項式的值。該題的解題思路是。根據題干中給出的數列,首先推出每一項的表達式,然后再對多項式進行累加求和。
26.
解析:該程序功能是統計各年齡段的人數。本題中采用的是多if選擇語句,實現了不同年齡段的分支選擇。
27.intfun(char*sscharc){inti=0;for(;*ss!='\0';ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的個數*/returni;}intfun(char*ss,charc)\r\n{\r\ninti=0;\r\nfor(;*ss!='\\0';ss++)\r\nif(*ss==c)\r\ni++;/*求出ss所指字符串中指定字符的個數*/\r\nreturni;\r\n}解析:從字符串ss中找出子字符串的方法是:從第1個字符開始,對字符串進行遍歷:若ss串的當前字符等于t串的第1個字符,兩字符串的指針自動加1,繼續(xù)比較下一個字符;若比較至字符串的結尾,則跳出循環(huán);若“串的字符和c串的字符不對應相同,則繼續(xù)對,s串的下一個字符進行處理。本程序是采用逐一比較的方式找出出現的次數。循環(huán)的作用是在串中從左到右逐一走動,if()的作用是進行判斷是否相同,若與c相同則表示又出現一次.
28.longfun(char*p){longn=0;intflag=1;if(*p=='-')/*負數時置flag為-1*/{p++;flag=-1;}elseif(*p=='+')/*正數時置flag為1*/p++;while(*p!='\0'){n=n*10+*p-'0';/*將字符串轉成相應的整數*/p++;}returnn*flag;}longfun(char*p)\r\n{\r\nlongn=0;\r\nintflag=1;\r\nif(*p=='-')/*負數時置flag為-1*/\r\n{p++;flag=-1;}\r\nelseif(*p=='+')/*正數時置flag為1*/\r\np++;\r\nwhile(*p!='\\0')\r\n{n=n*10+*p-'0';/*將字符串轉成相應的整數*/\r\np++;\r\n}\r\nreturnn*flag;\r\n}解析:if()的作用是判斷它是正數還是負數。while()循環(huán)的作用是將字符串轉成相應的整數。注意*p是一個字符如'9','4',并不是一個數,要將其轉成相應的數字必須令其減去'0'(不是'\\0'),即*p-'0'就得到*p這個字符的相應數字。如'0'-'0'=0,'8'-'0'=8等。必須在程序的前面加#include<stdlib.h>,函數atol()的作用是將字符串p轉成長整型數,它是一個庫函數。
29.voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++){if(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*將ss所指字符串中所有下標為偶數位置的字母轉換成大寫*/ss[i]==ss[i]-32;}/*大寫字母比相應的小寫字母的ASCII碼值小32*/}voidfun(char*ss)\r\n{inti;\r\nfor(i=0;ss[i]!='\\0';i++){\r\nif(i%2==0&&ss[i]>='a'&&ss[i]<='z')/*將ss所指字符串中所有下標為偶數位置的字母轉換成大寫*/\r\nss[i]==ss[i]-32;}/*大寫字母比相應的小寫字母的ASCII碼值小32*/\r\n}解析:從C語言的學習中我們知道,只要將小寫字母減去32則轉換成大寫字母,將大寫字母加上32則轉成小寫字母,該程序使用if語句實現該功能轉換的。
30.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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云計算安全配置建議探討與分享
- 中醫(yī)護理肺脹病要點
- 2026年建筑設計創(chuàng)意及設計規(guī)范筆試模擬題
- 2026年公共關系危機管理與應對策略測試題
- 2026年注冊會計師CPA會計信息系統應用與維護考試模擬題
- 2026年稅務師稅法實務方向專業(yè)筆試模擬卷
- 2026年公共關系管理企業(yè)形象塑造與傳播問題集
- 2026年企業(yè)戰(zhàn)略規(guī)劃模擬測試題
- 2026年土木工程結構設計與施工管理習題集
- 2026年初級會計師實務與財經法規(guī)習題集
- 2026中國建材集團數字科技有限公司招聘23人參考考試試題及答案解析
- 高考沖刺歷史預測必考熱點十三 世界殖民體系的演進與亞非拉民族國家的崛起
- 2026衢州市柯城區(qū)機關事業(yè)單位編外招聘78人筆試參考題庫及答案解析
- 2026年上海市初三語文一模試題匯編之古詩文閱讀(學生版)
- 2025年聊城事業(yè)編考試作文真題及答案
- AI支持的幼兒園語言發(fā)展游戲化教學策略研究課題報告教學研究課題報告
- 旋挖樁試樁方案
- 產品認證常見問題及實操指南
- 2025至2030實驗室能力驗證行業(yè)調研及市場前景預測評估報告
- 藕種購銷合同范本
- 紗窗生產合同范本
評論
0/150
提交評論