2022年黑龍江省雙鴨山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2022年黑龍江省雙鴨山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2022年黑龍江省雙鴨山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2022年黑龍江省雙鴨山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2022年黑龍江省雙鴨山市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022年黑龍江省雙鴨山市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.字符串通常采用的兩種存儲方式是()A.散列存儲和索引存儲B.索引存儲和鏈式存儲C.順序存儲和鏈式存儲D.散列存儲和順序存儲

2.設有下列二叉樹:

對此二叉樹后序遍歷的結果為

A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA

3.設有定義:int?x=2,以下表達式中,值不為6的是()。

A.2*<.x+=2B.x++.2*xC.x=x*(1+x)D.x*=x+1

4.下面程序的輸出結果是()。#include<stdio.h>intm=13;intfun2(intx,inty){intm=3;return(x*y-m);}main(){inta=7,b=5;printf("%d\n",fun2(a,b)/m);}

A.1B.2C.7D.10

5.有下列程序:程序執(zhí)行后的輸出結果是()。

A.15,12,9,B.15,13,11,C.15,11,7,D.15,15,15,

6.

7.一個關系中屬性個數為1時,稱此關系為()。

A.對應關系B.單一關系C.一元關系D.二元關系

8.下列定義數組的語句中錯誤的是()。

A.intnum[][3]={{1,2},3,4,5,6};

B.intnum[2][4]={{1,2},{3,4},{5,6}};

C.intnum[]={1,2,3,4,5,6};

D.intnum[][4]={1,2,3,4,5,6};

9.有以下程序:#include<stdio.h>main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d\n”,a,b,c,d);}程序輸出為()。

A.編譯有錯B.0,0,0,3C.1,1,2,0D.0,1,2,0

10.下列敘述中正確的是()

A.一個算法的空間復雜度打,則其時間復雜度也必定大

B.一個算法的空間復雜度大,則其時間復雜度也必定小

C.一個算法的時間復雜度大,則其空間復雜度也必定小

D.算法的時間復雜度與空間復雜度沒有直接相關

11.

12.結構化程序由三種基本結構組成,三種基本結構組成的算法A.可以完成任何復雜的任務B.只能完成部分復雜的任務C.只能完成符合結構化的任務D.只能完成一些簡單的任務

二、2.填空題(12題)13.程序測試分為靜態(tài)分析和動態(tài)測試。其中【】是指不執(zhí)行程序,而只是對程序文本進行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤。

14.______是數據庫應用的核心。

15.函數delete(s,i,n)的作用是從字符串s中刪除從第i個字符開始的n個字符,請?zhí)羁铡?/p>

voiddelete(chars[],inti,intn)

{intj,k,legth=0;

while(s[length])

【】;

-i;

j=i;

}

if(【】)

{k=i+n;

if(i+n<length)

while(k<length)

s[j++]=s[k++];

s[j]='\0'

}

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

#include<stdio,h>

main()

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

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

elseprintf("%d\n",b);}

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

18.設有下列宏定義:

#defineA2

#defineB(A+3)

則執(zhí)行賦值語句“k=B*20;”(k為int型變量)后,k的值是______。

19.在面向對象的程序設計中,用來請求對象執(zhí)行某一處理或回答某些信息的要求稱為【】。

20.下面程序執(zhí)行后輸出的結果是【】。

intm=13;

intfun(intx,inty)

{intm=3;

return(x*y-m);

}

main()

{inta=7,b=5;

printf("%d\n",fun(a,b)/m);

}

21.下述程序的輸出結果是【】。

#include<stdio.h>

intfun(intx)

{intp;

if(x==0||x==1)

return3;

else

p=x-fun(x-2);

returnp;}

voidmain()

{printf("\n%d",fun(9));}

22.以下程序中,函數fun的功能是計算x2-2x+6,主函數中將調用fun函數計算:

y1=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

請?zhí)羁铡?/p>

doublefun(doublex){return(x*x-2*x+6);}

{doublex,y1,y2;

printf("Enterx:");scanf("%lf",&x);

y1=fun([6]);

y2=fun([7]);

printf("y1=%lf,y2=%lf\n",y1,y

23.若有以下程序

intf(intx,inty)

{return(y-x)*x;}

main()

{inta=3,b=4,c=5,d;

d=f(f(3,4),f(3,5));

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

}

執(zhí)行后輸出結果是【】。

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

voidswap(intx,inty)

{intt;

t=x;x=y;y=t;printf("%d%d",x,y);

}

main()

{inta=3,b=4;

swap(a,b);printf("%d%d\n",a,b);

}

三、3.程序設計題(10題)25.函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c中。合并的方式是:將a中的十位和個位數依次放在變量c的十位和千位上,b中的十位和個位數依次放在變量c的個位和百位上。

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

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

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

26.已知學生的記錄由學號和學習成績構成,N名學生的數據已存入a結構體數組中。請編寫函數fun,函數的功能是:找出成績最低的學生記錄,通過形參返回主函數(規(guī)定只有一個最低分)。

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

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

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,an);

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

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

{

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

printf("\n");/*—行寫10個數*/

}

else

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

}

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

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

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

請勿改動主函數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");

}

29.請編寫函數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("kn\nsum=%f\n\n",sum);

}

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

例如,當a=16,b=35,調用該函數后,c=5361。

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

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

試題程序:

#include<stdio.h>

voidfun(inta,intb/long*c)

{

}

main()

{

inta,b;

longc;

clrscr();

printf("Inputa,b;");

scanf("%d%d",&a,&b);

fun(a,b,&c);

printf("Theresultis:%ld\n",c);

}

31.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:將字符串中的前導*號全部刪除,中間和后面的*號不刪除。

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

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

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

試題程序;

#include<stdio.h>

#include<conio.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.請編寫函數fun(),該函數的功能是:實現(xiàn)B=A+A',即把矩陣A加上A的轉置,存放在矩陣B中。計算結果在main()函數中輸出。

例如,輸入下面矩陣:

123

456

789

其轉置矩陣為:

147

258

369

則程序輸出:

2610

61014

101418

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

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

試題程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},

t[3][3];

inti,j;

clrscr();

fun(a,t);

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

{for(j=0;j<3;j++)

printf("%7d",t[i][j]);

printf("\n");

}

}

34.請編寫函數fun,其功能是求出數組的最大元素在數組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數:87667589610l30l401980431451777則輸出結果為:6,980

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

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

四、單選題(0題)35.若有定義“inta=1234,b=-5678;”,用語句“printf("%+-6d%+-6d",a,b);”輸出,以下正確的輸出結果是()。

A.+1234-5678(中間有一個空格,最后有一個空格)

B.+1234-5678(最前面有一個空格,中間有一個空格)

C.+-1234+-5678(最前面和最后均無空格)

D.1234-5678(中間有兩個空格,最后有一個空格)

五、單選題(0題)36.有下列程序:main{inti,j,x=0;for(i=0,i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++:}x++:}printf("x=%d\n",x);}程序執(zhí)行后的輸出結果是()。A.x=4B.x=8C.x=6D.x=12

六、單選題(0題)37.若有語句“void*P=malloc(80);”,則以下敘述錯誤的是()。

A.可以通過指針P直接訪問用malloc開辟的這塊內存

B.p所指內存可以通過強制類型轉換當作具有20個int型元素的一維數組來使用

C.p所指內存可以通過強制類型轉換當作具有10個double型元素的一維數組來使用

D.P所指內存可以通過強制類型轉換當作具有80個char型元素的一維數組來使用

參考答案

1.C

2.D解析:二叉樹的遍歷分為先序、中序、后序三種不同方式。本題要求后序遍歷,其遍歷順序應該為:后序遍歷左子樹->,后序遍歷右子樹->,訪問根結點。按照定義,后序遍歷序列是DEBFCA,故答案為D。

3.A?A)選項中逗號表達式先計算第一表達式2*x,然后計算表達式x+=2的值,即x=x+2即4,整個逗號表達式為第二個表達式的值4,所以選A)。B)選項中首先計算逗號表達式中第一一個表達式x++,此時x為3,再執(zhí)行第二個表達式2*x=2*3=6,所以逗號表達式為第二個表達式的值6。C)選項的賦值表達式可以表示為x=x*(1+x)=2*(1+2)=6。D)選項中的表達式可以表示為x=x*(x+1)=2*3=6。

4.B解析:本題考查函數的調用。函數fun2的作用是將形參x和y的值相乘后減去3,在fun2中的變量m是一個局部變量,它的值在fun2函數內有效;在主函數中的m指的是全局變量,其值為13,所以fun2(a,b)/m的值為(7*5-3)/13,即2。

5.A程序定義整型的全局變量a,初值為5,main函數定義整型局部變量a,初值為4。所以在main函數中,局部變量a屏蔽全局變量a。func函數中定義局部變量b,初值為5,定義靜態(tài)變量c,初值為5,并且在func函數中變量a引用的是全局變量a。綜上,我們使用a_a代表全局變量a,使用m_a代表main函數中局部變量a。main函數中,當k=0時,a_a=5,m_a=4,調用函數func(4),函數func中d的值為4,b的值為5,c的值為5,執(zhí)行表達式“a_a--;b--;--c;--d;”后,a_a的值為4,b的值為4,c的值為4,d的值為3,a+b+c+d的值為15,程序輸出15。當k=1時,a_a=4,m_a=3,調用函數func(3),函數func中d的值為3,b的值為5,c的值為4(靜態(tài)變量使用上一次調用結束時的值),執(zhí)行表達式“a_a--;b--;--c;--d;”后,a_a的值為3,b的值為4,c的值為3,d的值為2,a+b+c+d的值為12,程序輸出12。當k=2時,a_a=3,m_a=2,調用函數func(2),函數func中cl的值為2,b的值為5,c的值為3,執(zhí)行表達式“a_a--;b--;--c;--d;”后,a_a的值為2,b的值為4,c的值為2,d的值為1,a+b+c+d的值為9,程序輸出9。本題答案為A選項。

6.D

7.C解析:在關系模型數據庫中,基本結構是二維表,這種二維表稱為關系。關系的列稱為屬性,一個具有N個屬性的關系稱為N元關系。注意:各種關系查詢語言與過程性語言和非過程性語言的關系,過程性語言的特點。

8.BB選項中定義的數組為2行4列,而賦值時卻賦成了3行,所以錯誤。故本題答案為B選項。

9.AC語言中規(guī)定else總是和之前與其最近的且不帶else的if配對。題目中,“if(a=1)b=1;c=2;”默認省略了else,導致下一句else沒有匹配語句。故本題答案為A選項。

10.D

11.A

12.A解析:C程序由順序結構、選擇結構和循環(huán)結構三種基本的結構組成,這三種結構可以組成任何復雜的C程序,即可以完成任何復雜的任務。

13.靜態(tài)分析靜態(tài)分析解析:程序測試分為靜態(tài)分析和動態(tài)測試。其中,靜態(tài)分析是指不執(zhí)行程序,而只是對程序文本進行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤。

14.數據庫設計數據庫設計

15.length++i<lengthlength++\r\ni<length解析:第—個循環(huán)極有可能是計算串的長度,在i<=length時字符才被刪除,被刪除的是從第i個到第i+n或最后一個間的所有字符。刪除前,應判斷i<=length。由于已經進行了-i運算,故實際應填入i<length。

16.11解析:該程序要注意的是if語句的判斷條件“c=a”是賦值,而不是“c==a”。由于a=1,故條件c=a使c的值為1(真),所以輸出c的值1。

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

18.100100解析:本題考查帶參數的宏定義及相關運算。運算過程為:k=B*20=(A+3)*20=(2+3)*20=100。

19.消息消息解析:消息是一個實例與另一個實例之間傳遞的信息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統(tǒng)一了數據流和控制流。

20.22解析:本題變量m既是外部變量(值是13),又是fun函數的局部變量(值為3)。函數fun(x*y-m)的值為7*5-3=32,在main函數中,fun(a,b)/m中的m應取外部變量的值13,因此輸出2。

21.77解析:本題考查的是函數的遞歸調用。x=0或x=1是遞歸的終止條件,然后用回代的方法從一個已知值推出下一個值,直到計算出最終結果。

22.

23.99解析:函數的嵌套調用是在主函數中函數f(f(3,4),f(3,5))的返回值賦給d。函數的第一個參數為f(3,4)的返回值,函數f(3,4)返回值為(4-3)*3=3,f(3,5)返回值為(5-3)*3=6,那么函數f(f(3,4),f(3,5))等價于函數f(3,6)其返回值為(6-3)*3=9。因此d被賦值為9,所以輸出9。

24.4334

25.

解析:該程序功能是將兩個正整數合并形成一個整數的題型。本題類型首先要考慮整數的位數分離,然后要進行位數合成。也就是先將數字的各位數拆開,改變排列順序后,再組合成新的數字。

26.

解析:該程序功能是求最低分數的學生。本題是關于求解結構體中某些成員的最小值,首先將第一個值設定為最小值,并在循環(huán)中將其他所有值與該值進行比較,求得最小值。

27.voidfun(int*aint*n){inti.j=0;for(i=1;i<=1000;i++)/*求1到1000之內能被5或13整除、但不能同時被5和13整除的所有整數并放入數組a中*/if((i%5==0||i%13==0)&&i%65!=0)a[j++]=i;*n=j;/*傳回滿足條件的數的個數*/}voidfun(int*a,int\u3000*n)\r\n{\r\ninti.j=0;\r\nfor(i=1;i<=1000;i++)/*求1到1000之內能被5或13整除、但不能同時被5和13整除的所有整數,并放入數組a中*/\r\nif((i%5==0||i%13==0)&&i%65!=0)\r\na[j++]=i;\r\n*n=j;/*傳回滿足條件的數的個數*/\r\n}解析:注意本題題目是找出能被5或13整除但不能同時被5和13整除的所有整數。能同時被5和13整除的整數一定能被65整除,且不能被65整除的數不一定就是能被5或13整除的數。所以可得出程序中的if()。按運算優(yōu)先級可知(i%5==0||i%13==0),注意,兩邊必須要有小括號。

28.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循環(huán)左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*實現(xiàn)循環(huán)左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循環(huán)左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*實現(xiàn)循環(huán)左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本題采用“循環(huán)左移”的算法(關于“循環(huán)左移”,我們在后面的試題中有詳細的解釋)。和我們在前面分析的稍有不同的是,一個是整型數組,一個是字符型數組。

29.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}

30.voidfun(intaintblong*c){*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;}voidfun(inta,intb,long*c)\r\n{\r\n*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;\r\n}解析:語句“*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;”是將a數的十位和個位數依次放在c數個位和十位上,b數的十位和個位數依次放在c數的百位和千位上。注意“/”和“%”的用法。

31.voidfun(char*a){char*p=a;while(*P==‘+’)p++;/*指針p指向字符串第一個字母*/for(;*p!=‘\0’;p++a++)*a=*p;/*從第—個字母開始其后的字符都放入指針a所指的字符串中*/*a=‘\0’;/*在字符串最后加上結束標記符*/}voidfun(char*a)\r\n{\r\nchar*p=a;\r\nwhile(*P==‘+’)p++;/*指針p指向字符串第一個字母*/\r\nfor(;*p!=‘\\0’;p++,a++)\r\n*a=*p;/*從第—個字母開始,其后的字符都放入指針a所指的字符串中*/\r\n*a=‘\\0’;/*在字符串最后加上結束標記符*/\r\n}解析:在前面的改錯題和編程題中,相關試題已經出現(xiàn)好多次了,我們在此提供另一種解答方法。

#include<string.h>

voidfun(char*a)

{char*p=a;

while(*p==‘*’)p++;

strcpy(a,p);

}

32.

解析:該程序功能是將一個數字字符串轉換為一個整數。其中,解題思路是將每位數字字符串的ASCII碼減去48(字符“0”的ASCII碼值),變成數字0~9。然后再不斷進行高位乘以10加低位的運算,或者反過來從低位向高位求,即不斷進行低位加高位乘以10的運算。

33.voidfun(inta[3][3]intb[3][3]){intij;for(i=0;i<3;i++)for(j=0;j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的轉置存放在矩陣b中*/}voidfun(inta[3][3],intb[3][3])\r\n{\r\ninti,j;\r\nfor(i=0;i<3;i++)\r\nfor(j=0;j<3;j++)\r\nb[i][j]=a[i][j]+a[j][i];/*把矩陣a加上a的轉置,存放在矩陣b中*/\r\n}解析:在《線性代數》里面有矩陣轉置的概念,行列數相等的二維數組的轉置就是行列互換。即轉置后的第i行第j列正好對應原矩陣的第j行第i列。

若要將矩陣a轉置后還存入a中可用程序:

inti,j,t;

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

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

{t=a[i][j];a[i][j]=a[j][i];a[j][ii=t;}

注意第2個循環(huán)的初值。

若要將矩陣a轉置后存入c中:

inti,j;

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

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

c[i][j]=a[j][i];

注意數組c和a的下標。

34.

解析:(1)該程序功能是求最大元素在數組中的下標。它的解題思路是,用最大值變量max標記第一個待找數據,逐個把所有待找數據和max進行比較,并用pos標記其當前最大值所在位置,從而找出最大值。(2)從已給部分源程序的main主函數開始入手,核心函數“fun(a,10,&k);”中的參數a存放著給出的整數,fun函數實現(xiàn)查找最大元素的下標。

35.Aprintf函數參數包括格式控制字符串和輸出參數,其中格式控制字符串中除了格式控制字符外,其他字符原樣輸出。本題中的printf(“%+-6d%+-6d”,a,b);”,在%和格式控制字符d之間,“+”號表示輸出的數字帶正負號號表示輸出數據向左對齊,“6”表示輸出寬度,如果輸出數據的寬度不夠6,那么左對齊,右邊補空格。所以本題輸出+1234-5678(中間有一個空格,最后有一個空格)。本題答案為A選項。

36.B在第1次外層for循環(huán)中,首先x++得到x=1。進入到內層for循環(huán),只有循環(huán)j的值為奇數時,變量x的值才自加1,所以在內層for循環(huán)執(zhí)行過程中,變量x的值自加兩次,當退出內層for循環(huán)時,x=3,然后執(zhí)行x++,得到x=4。在進入執(zhí)行第2次外層for循環(huán)中,首先x++得到x=5。進入到內層for循環(huán),只有循環(huán)變量j的值為奇數時,變量x的值才自加1,所以在內層for循環(huán)執(zhí)行過程中,變量X的值自加1兩次,當退出內層for循環(huán)時,x=7,然后執(zhí)行x++,得到x=8,所以打印輸出變量x的值為8。

37.A題干中使用malloc函數分配了80個字節(jié)的內存單元,void指針p指向該內存單元。在C語言中,void*不能直接使用,必須利用強制類型轉換將其轉成所需的類型才能使用,選項A錯誤。int類型的元素占4個字節(jié),所以可以將p指向的內存強制類型轉換成具有20個int類型的一維數組來使用,同理,也可以強制類型轉換成10個double類型的一維數組來使用,或強制類型轉換成80個char類型的一維數組來使用,選項B、C、D正確。故本題答案為A選項。2022年黑龍江省雙鴨山市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.字符串通常采用的兩種存儲方式是()A.散列存儲和索引存儲B.索引存儲和鏈式存儲C.順序存儲和鏈式存儲D.散列存儲和順序存儲

2.設有下列二叉樹:

對此二叉樹后序遍歷的結果為

A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA

3.設有定義:int?x=2,以下表達式中,值不為6的是()。

A.2*<.x+=2B.x++.2*xC.x=x*(1+x)D.x*=x+1

4.下面程序的輸出結果是()。#include<stdio.h>intm=13;intfun2(intx,inty){intm=3;return(x*y-m);}main(){inta=7,b=5;printf("%d\n",fun2(a,b)/m);}

A.1B.2C.7D.10

5.有下列程序:程序執(zhí)行后的輸出結果是()。

A.15,12,9,B.15,13,11,C.15,11,7,D.15,15,15,

6.

7.一個關系中屬性個數為1時,稱此關系為()。

A.對應關系B.單一關系C.一元關系D.二元關系

8.下列定義數組的語句中錯誤的是()。

A.intnum[][3]={{1,2},3,4,5,6};

B.intnum[2][4]={{1,2},{3,4},{5,6}};

C.intnum[]={1,2,3,4,5,6};

D.intnum[][4]={1,2,3,4,5,6};

9.有以下程序:#include<stdio.h>main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d\n”,a,b,c,d);}程序輸出為()。

A.編譯有錯B.0,0,0,3C.1,1,2,0D.0,1,2,0

10.下列敘述中正確的是()

A.一個算法的空間復雜度打,則其時間復雜度也必定大

B.一個算法的空間復雜度大,則其時間復雜度也必定小

C.一個算法的時間復雜度大,則其空間復雜度也必定小

D.算法的時間復雜度與空間復雜度沒有直接相關

11.

12.結構化程序由三種基本結構組成,三種基本結構組成的算法A.可以完成任何復雜的任務B.只能完成部分復雜的任務C.只能完成符合結構化的任務D.只能完成一些簡單的任務

二、2.填空題(12題)13.程序測試分為靜態(tài)分析和動態(tài)測試。其中【】是指不執(zhí)行程序,而只是對程序文本進行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤。

14.______是數據庫應用的核心。

15.函數delete(s,i,n)的作用是從字符串s中刪除從第i個字符開始的n個字符,請?zhí)羁铡?/p>

voiddelete(chars[],inti,intn)

{intj,k,legth=0;

while(s[length])

【】;

-i;

j=i;

}

if(【】)

{k=i+n;

if(i+n<length)

while(k<length)

s[j++]=s[k++];

s[j]='\0'

}

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

#include<stdio,h>

main()

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

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

elseprintf("%d\n",b);}

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

18.設有下列宏定義:

#defineA2

#defineB(A+3)

則執(zhí)行賦值語句“k=B*20;”(k為int型變量)后,k的值是______。

19.在面向對象的程序設計中,用來請求對象執(zhí)行某一處理或回答某些信息的要求稱為【】。

20.下面程序執(zhí)行后輸出的結果是【】。

intm=13;

intfun(intx,inty)

{intm=3;

return(x*y-m);

}

main()

{inta=7,b=5;

printf("%d\n",fun(a,b)/m);

}

21.下述程序的輸出結果是【】。

#include<stdio.h>

intfun(intx)

{intp;

if(x==0||x==1)

return3;

else

p=x-fun(x-2);

returnp;}

voidmain()

{printf("\n%d",fun(9));}

22.以下程序中,函數fun的功能是計算x2-2x+6,主函數中將調用fun函數計算:

y1=(x+8)2-2(x+8)+6

y2=sin2(x)-2sin(x)+6

請?zhí)羁铡?/p>

doublefun(doublex){return(x*x-2*x+6);}

{doublex,y1,y2;

printf("Enterx:");scanf("%lf",&x);

y1=fun([6]);

y2=fun([7]);

printf("y1=%lf,y2=%lf\n",y1,y

23.若有以下程序

intf(intx,inty)

{return(y-x)*x;}

main()

{inta=3,b=4,c=5,d;

d=f(f(3,4),f(3,5));

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

}

執(zhí)行后輸出結果是【】。

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

voidswap(intx,inty)

{intt;

t=x;x=y;y=t;printf("%d%d",x,y);

}

main()

{inta=3,b=4;

swap(a,b);printf("%d%d\n",a,b);

}

三、3.程序設計題(10題)25.函數fun的功能是:將a、b中的兩個兩位正整數合并形成一個新的整數放在c中。合并的方式是:將a中的十位和個位數依次放在變量c的十位和千位上,b中的十位和個位數依次放在變量c的個位和百位上。

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

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

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

26.已知學生的記錄由學號和學習成績構成,N名學生的數據已存入a結構體數組中。請編寫函數fun,函數的功能是:找出成績最低的學生記錄,通過形參返回主函數(規(guī)定只有一個最低分)。

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

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

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,an);

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

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

{

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

printf("\n");/*—行寫10個數*/

}

else

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

}

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

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

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

請勿改動主函數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");

}

29.請編寫函數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("kn\nsum=%f\n\n",sum);

}

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

例如,當a=16,b=35,調用該函數后,c=5361。

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

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

試題程序:

#include<stdio.h>

voidfun(inta,intb/long*c)

{

}

main()

{

inta,b;

longc;

clrscr();

printf("Inputa,b;");

scanf("%d%d",&a,&b);

fun(a,b,&c);

printf("Theresultis:%ld\n",c);

}

31.假定輸入的字符串中只包含字母和*號。請編寫函數fun(),它的功能是:將字符串中的前導*號全部刪除,中間和后面的*號不刪除。

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

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

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

試題程序;

#include<stdio.h>

#include<conio.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.請編寫函數fun(),該函數的功能是:實現(xiàn)B=A+A',即把矩陣A加上A的轉置,存放在矩陣B中。計算結果在main()函數中輸出。

例如,輸入下面矩陣:

123

456

789

其轉置矩陣為:

147

258

369

則程序輸出:

2610

61014

101418

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

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

試題程序:

#include<stdio.h>

#include<conio,h>

voidfun(inta[3][3],intb[3][3])

{

}

main()

{

inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},

t[3][3];

inti,j;

clrscr();

fun(a,t);

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

{for(j=0;j<3;j++)

printf("%7d",t[i][j]);

printf("\n");

}

}

34.請編寫函數fun,其功能是求出數組的最大元素在數組中的下標并存放在k所指的存儲單元中。

例如,輸入如下整數:87667589610l30l401980431451777則輸出結果為:6,980

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

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

四、單選題(0題)35.若有定義“inta=1234,b=-5678;”,用語句“printf("%+-6d%+-6d",a,b);”輸出,以下正確的輸出結果是()。

A.+1234-5678(中間有一個空格,最后有一個空格)

B.+1234-5678(最前面有一個空格,中間有一個空格)

C.+-1234+-5678(最前面和最后均無空格)

D.1234-5678(中間有兩個空格,最后有一個空格)

五、單選題(0題)36.有下列程序:main{inti,j,x=0;for(i=0,i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++:}x++:}printf("x=%d\n",x);}程序執(zhí)行后的輸出結果是()。A.x=4B.x=8C.x=6D.x=12

六、單選題(0題)37.若有語句“void*P=malloc(80);”,則以下敘述錯誤的是()。

A.可以通過指針P直接訪問用malloc開辟的這塊內存

B.p所指內存可以通過強制類型轉換當作具有20個int型元素的一維數組來使用

C.p所指內存可以通過強制類型轉換當作具有10個double型元素的一維數組來使用

D.P所指內存可以通過強制類型轉換當作具有80個char型元素的一維數組來使用

參考答案

1.C

2.D解析:二叉樹的遍歷分為先序、中序、后序三種不同方式。本題要求后序遍歷,其遍歷順序應該為:后序遍歷左子樹->,后序遍歷右子樹->,訪問根結點。按照定義,后序遍歷序列是DEBFCA,故答案為D。

3.A?A)選項中逗號表達式先計算第一表達式2*x,然后計算表達式x+=2的值,即x=x+2即4,整個逗號表達式為第二個表達式的值4,所以選A)。B)選項中首先計算逗號表達式中第一一個表達式x++,此時x為3,再執(zhí)行第二個表達式2*x=2*3=6,所以逗號表達式為第二個表達式的值6。C)選項的賦值表達式可以表示為x=x*(1+x)=2*(1+2)=6。D)選項中的表達式可以表示為x=x*(x+1)=2*3=6。

4.B解析:本題考查函數的調用。函數fun2的作用是將形參x和y的值相乘后減去3,在fun2中的變量m是一個局部變量,它的值在fun2函數內有效;在主函數中的m指的是全局變量,其值為13,所以fun2(a,b)/m的值為(7*5-3)/13,即2。

5.A程序定義整型的全局變量a,初值為5,main函數定義整型局部變量a,初值為4。所以在main函數中,局部變量a屏蔽全局變量a。func函數中定義局部變量b,初值為5,定義靜態(tài)變量c,初值為5,并且在func函數中變量a引用的是全局變量a。綜上,我們使用a_a代表全局變量a,使用m_a代表main函數中局部變量a。main函數中,當k=0時,a_a=5,m_a=4,調用函數func(4),函數func中d的值為4,b的值為5,c的值為5,執(zhí)行表達式“a_a--;b--;--c;--d;”后,a_a的值為4,b的值為4,c的值為4,d的值為3,a+b+c+d的值為15,程序輸出15。當k=1時,a_a=4,m_a=3,調用函數func(3),函數func中d的值為3,b的值為5,c的值為4(靜態(tài)變量使用上一次調用結束時的值),執(zhí)行表達式“a_a--;b--;--c;--d;”后,a_a的值為3,b的值為4,c的值為3,d的值為2,a+b+c+d的值為12,程序輸出12。當k=2時,a_a=3,m_a=2,調用函數func(2),函數func中cl的值為2,b的值為5,c的值為3,執(zhí)行表達式“a_a--;b--;--c;--d;”后,a_a的值為2,b的值為4,c的值為2,d的值為1,a+b+c+d的值為9,程序輸出9。本題答案為A選項。

6.D

7.C解析:在關系模型數據庫中,基本結構是二維表,這種二維表稱為關系。關系的列稱為屬性,一個具有N個屬性的關系稱為N元關系。注意:各種關系查詢語言與過程性語言和非過程性語言的關系,過程性語言的特點。

8.BB選項中定義的數組為2行4列,而賦值時卻賦成了3行,所以錯誤。故本題答案為B選項。

9.AC語言中規(guī)定else總是和之前與其最近的且不帶else的if配對。題目中,“if(a=1)b=1;c=2;”默認省略了else,導致下一句else沒有匹配語句。故本題答案為A選項。

10.D

11.A

12.A解析:C程序由順序結構、選擇結構和循環(huán)結構三種基本的結構組成,這三種結構可以組成任何復雜的C程序,即可以完成任何復雜的任務。

13.靜態(tài)分析靜態(tài)分析解析:程序測試分為靜態(tài)分析和動態(tài)測試。其中,靜態(tài)分析是指不執(zhí)行程序,而只是對程序文本進行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤。

14.數據庫設計數據庫設計

15.length++i<lengthlength++\r\ni<length解析:第—個循環(huán)極有可能是計算串的長度,在i<=length時字符才被刪除,被刪除的是從第i個到第i+n或最后一個間的所有字符。刪除前,應判斷i<=length。由于已經進行了-i運算,故實際應填入i<length。

16.11解析:該程序要注意的是if語句的判斷條件“c=a”是賦值,而不是“c==a”。由于a=1,故條件c=a使c的值為1(真),所以輸出c的值1。

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

18.100100解析:本題考查帶參數的宏定義及相關運算。運算過程為:k=B*20=(A+3)*20=(2+3)*20=100。

19.消息消息解析:消息是一個實例與另一個實例之間傳遞的信息,它請求對象執(zhí)行某一處理或回答某一要求的信息,它統(tǒng)一了數據流和控制流。

20.22解析:本題變量m既是外部變量(值是13),又是fun函數的局部變量(值為3)。函數fun(x*y-m)的值為7*5-3=32,在main函數中,fun(a,b)/m中的m應取外部變量的值13,因此輸出2。

21.77解析:本題考查的是函數的遞歸調用。x=0或x=1是遞歸的終止條件,然后用回代的方法從一個已知值推出下一個值,直到計算出最終結果。

22.

23.99解析:函數的嵌套調用是在主函數中函數f(f(3,4),f(3,5))的返回值賦給d。函數的第一個參數為f(3,4)的返回值,函數f(3,4)返回值為(4-3)*3=3,f(3,5)返回值為(5-3)*3=6,那么函數f(f(3,4),f(3,5))等價于函數f(3,6)其返回值為(6-3)*3=9。因此d被賦值為9,所以輸出9。

24.4334

25.

解析:該程序功能是將兩個正整數合并形成一個整數的題型。本題類型首先要考慮整數的位數分離,然后要進行位數合成。也就是先將數字的各位數拆開,改變排列順序后,再組合成新的數字。

26.

解析:該程序功能是求最低分數的學生。本題是關于求解結構體中某些成員的最小值,首先將第一個值設定為最小值,并在循環(huán)中將其他所有值與該值進行比較,求得最小值。

27.voidfun(int*aint*n){inti.j=0;for(i=1;i<=1000;i++)/*求1到1000之內能被5或13整除、但不能同時被5和13整除的所有整數并放入數組a中*/if((i%5==0||i%13==0)&&i%65!=0)a[j++]=i;*n=j;/*傳回滿足條件的數的個數*/}voidfun(int*a,int\u3000*n)\r\n{\r\ninti.j=0;\r\nfor(i=1;i<=1000;i++)/*求1到1000之內能被5或13整除、但不能同時被5和13整除的所有整數,并放入數組a中*/\r\nif((i%5==0||i%13==0)&&i%65!=0)\r\na[j++]=i;\r\n*n=j;/*傳回滿足條件的數的個數*/\r\n}解析:注意本題題目是找出能被5或13整除但不能同時被5和13整除的所有整數。能同時被5和13整除的整數一定能被65整除,且不能被65整除的數不一定就是能被5或13整除的數。所以可得出程序中的if()。按運算優(yōu)先級可知(i%5==0||i%13==0),注意,兩邊必須要有小括號。

28.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循環(huán)左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*實現(xiàn)循環(huán)左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循環(huán)左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*實現(xiàn)循環(huán)左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本題采用“循環(huán)左移”的算法(關于“循環(huán)左移”,我們在后面的試題中有詳細的解釋)。和我們在前面分析的稍有不同的是,一個是整型數組,一個是字符型數組。

29.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;

溫馨提示

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

評論

0/150

提交評論