2021年內蒙古自治區包頭市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2021年內蒙古自治區包頭市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2021年內蒙古自治區包頭市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2021年內蒙古自治區包頭市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2021年內蒙古自治區包頭市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩51頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2021年內蒙古自治區包頭市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.有以下程序:voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i+=2)for(j=i+2;j<n;j+=2)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i<10;i++)printf("%d",aa[i]);printf("\n");}其輸出結果是

A.1,2,3,4,5,6,7,8,9,10,

B.10,9,8,7,6,5,4,3,2,1,

C.9,2,7,4,5,6,3,8,1,10,

D.1,10,3,8,5,6,7,4,9,2,

2.

3.有以下程序:voidsum(int*a){a[0]=a[1];}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=1;i>0;i--)sum(&aa[i]);print("%d\n",aa[0]);}程序運行后的輸出結果是______。

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

4.有以下程序:main(){intx[8]={8,7,6,5,O,0},*s;s=x+3;printf("%d\n",s[2]);}執行后輸出結果是()。

A.隨機值B.0C.5D.6

5.對長度為n的無序線性表進行順序查找,則查找成功、不成功時的平均數據比較次數分別為()。

A.n/2,nB.n+1/2,n-1C.n+1/2,nD.n-1/2,n-1

6.

7.C語言中函數返回值的類型是由()決定的。

A.return語句中的表達式類型B.調用該函數的主調函數類型C.定義函數時所指定的函數類型D.以上說法都不正確

8.若f(n)=3n2+2n+1,則f(n)=()。

A.O(n2)B.O(n)C.O(2n)D.O(3n2)

9.

10.下列程序的輸出結果是()。voidfun(int*X,inty){printf("%d%d",*x,*y);*x=3;*y=1;}main{intx=1,y=2;fun(&y,&x);printf("%d%d",x,y);}A.2143B.1212C.1234D.2112

11.有以下程序#include<stdio.h>main{inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的運行結果是()。A.741B.963C.852D.875421

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

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

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

main()

{chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

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

if(*(p1+k)==*(p2+k))printf("%c,*(p1+k));

}

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

main()

{inti,n[]={0,0,0,0,0};

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

{n[i]=n[i-1]*2+1;

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

}

}

15.用以下語句調用庫函數malloc,使字符指針st指向具有11個字節的動態存儲空間,請填空。st=(char*)【】;

16.一張3.5英寸軟盤大約能存儲140萬個ASCⅡ字符,若存放漢字大約能存放【】個。

17.軟件維護活動包括以下幾類:改正性維護、適應性維護、【】維護和預防性維護。

18.在一個容量為25的循環隊列中,若頭指針front=16,尾指針rear=9,則該循環隊列中共有上【】個元素。

19.設有以下程序,為使之正確運行,請在下劃線中填入應包含的命令行。(注:try_me()函數在a:\myfile.txt中有定義。)

【】

main()

{printf("\n");

try_me();

printf("\n");}

20.下面程序的功能:將字符數組a中下標值為偶數的元素從小到大排列,其他元素不變。請填空。

#include<stdio.h>

#include<string.h>

main()

{chara[]="clanquage",t;

inti,j,k;

k=strlen(A);

for(i=0;i<=k-2;i+=2)

for(j=i+2;j<k;j+=2)

if(【】)

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

puts(A);

printf("\n");

}

21.在數據的存儲結構中,不僅需要存儲各數據元素的信息,還要存放各元素之間______的信息。

22.軟件的【】設計又稱為總體結構設計,其主要任務是建立軟件系統的總體結構。

23.當運行以下程序時,輸入abed,程序的輸出結果是:【】。

insert(charstr[])

{inti

i=strlen(str);

while(i>0)

{str[2*i]=str[i];str[2*-1]='*';i--;}

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

}

main()

{charstr[40];

scanf("%s",sB);insert(str);

}

24.設有如下宏定義

#defineMYSWAP(z,x,y)

{z=x;x=y;y=z;}

以下程序段通過宏調用實現變量a,b內容交換,請填空。

floata=5,b=16,c;

MYSWAP(【】a,b);

三、3.程序設計題(10題)25.編寫函數fun(),它的功能是求n以內(不包括n)同時能被5與11整除的所有自然數之和的平方根s,并作為函數值返回。

例如:n為1000時,函數值應為s=96.979379。

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

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

試題程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

printf("s=%f\n",fun(1000));

}

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

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

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

27.請編寫函數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);

}

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

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

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

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

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

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

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubles;

}STREC;

doublefun(STREC*a,STREC*b,int*n)

{

}

main()

STRECsIN]={{"GA05",85},{"GA03",76},

{"GA02",69},{"GA04",85},{"GA01",91},

{"GA07",72},{"GA08",64},{"GA06",87},

{"GA09",60},{"GAll",79},{"GA12",73},

{"GA10",90}};

STRECh[N],t;

FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichis

higherthan%7.3f:In",n,ave);

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

printf("%s%4.1f\n",h[i].num,h[i].s);

printf("\n");

out=fopen("out90.dat","w");

fprintf(out,"%dkn%7.3f\n",n,ave);

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

for(j=i+l;j<n;j++)

if(h[i].s<h[j].s)

{t=hIi];h[i]=h[j];h[j]=t;}

/*分數從高到低排列*/

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

fprintf(out,"%4.1f\n",h[i].s);

fclose(out);

}

30.請編寫函數fun(),其功能是:將s所指字符串中除了下標為偶數、同時ASCII值也為偶數的字符外,其余的全部刪除,串中剩余字符所形成的一個新中放在t所指的數組中。

例如,若s所指字符串中的內容為ABCDEFG123456,其中字符A的ASCII碼值為奇數,因此應當刪除;其中字符B的ASCII碼值為偶數,但在數組中的下標為奇數,因此也應當刪除;而字符2的ASCII碼值為偶數,所在數組中的下標也為偶數,因此不應當刪除,其他依此類推。最后t所指的數組中的內容應是246。

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

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

}

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

}

32.請編寫函數fun(),它的功能是計算:s=(1-In(1)-In(2)-In(3)-…-1n(m))2

s作為函數值返回。

在C語言中可調用log(n)函數求In(n)。log函數的引用說明是doublelog(doublex)。

例如,若m的值為15,則fun()函數值為723.570801。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(intm)

{

}

main()

{

clrscr();

printf("%f\n",fun(15));

}

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

例如,若輸入“abc4EFg”,則應輸出“aBc4EFg”。

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

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

34.請編寫函數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的花括號中填入你編寫的若干語句。

四、單選題(0題)35.某線性表中最常用的操作是在最后一個元素之后插入一個元素和刪除第一個元素,則采用()存儲方式最節省運算時間。

A.單鏈表B.僅有頭指針的單循環鏈表C.雙鏈表D.僅有尾指針的單循環鏈表

五、單選題(0題)36.在下面的一維數組定義中,哪一個有語法錯誤()。A.inta[]={1,2,3};B.inta[10]={0};C.inta[];D.inta[5];

六、單選題(0題)37.設變量P是指針變量,語句P=NULL;是給指針變量賦NULL值,它等價于()。A.A.p="";

B.p="0";

C.p=0;

D.p="";

參考答案

1.C解析:本題考核的知識點是程序中算法的基本分析。sort()函數作用是將數組aa中的下標為偶數的元素按大到小排序.主函數中首先定義了一個長度為10的數組并賦值,然后調用sort()函數,將數組aa中奇數個元素的值按大到小排序,因此執行完該函數后,數組中奇數個元素的值為9,7、5、3和1,故主函數中最后通過一個for循環輸出數組aa中各元素的值為9、2、7、4、5、6、3、8、1和10,所以,4個選項中選項C符合題意。

2.B本題考查標準輸入輸出函數和循環語句。gets(s)函數的作用是將輸入的字符讀入字符串s,直到遇到回車。而scanf函數接收字符串時的結束標志為回車或者空格。因此選項B)不能,選項C)和選項D)中按字符逐個讀入字符串s中,直到讀入的字符是換行符為止,因此B正確。

3.D解析:C語言覿定,實參變量對形參變量的數據傳遞是“值傳遞”,只由實參傳給形參,而不能由形參傳回來給實參。函數調用結束后,形參單元被釋放,實參單元仍保留并維持原值。本題要求輸出aa[0]的值,結果應為1。

4.B解析:通過賦值語句“s=x+3”,使指針變量s指向數組元素x[3],輸出語句中的spl等價于*(s+2),即x[5]值為0。所以,B選項為所選。

5.C

6.A

7.C

8.A

9.B

10.C當執行fun函數時,因為參數傳遞時是地址傳遞,因此形參值的改變會影響實參中的數,在執行fun函數時先輸出12,接著把*X賦3,*y賦4,此時帶回主函數中,輸出的值為34。

11.C在for循環中,當y的值為9、6或3時,執行輸出語句,輸出表達式--Y的值。Y先自減l,然后再輸出y的值。

12.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。

13.gae

14.1371513715解析:本題中,定義了一個整型數組n并初始化,在for循環語句中,再對數組中各元素重新賦值。循環執行第一次時,n[1]=n[0]*2+1=0+1=1,printf函數輸出1,然后i的值加1,比較i<=4成立,繼續執行循環體語句,使后一個數為前一個數的2倍加1。所以最后輸出為1、3、7、15。

15.malloc(11)malloc函數的格式是void*(或char*)malloc(size),size表示應分配的存儲區,此題要分配11字節的單元,把11代入即可。

16.70萬70萬

17.完善性軟件維護活動包括以下幾類:改正性維護,適應性維護、完善性維護和預防性維護,完善性維護是指為了滿足用戶對軟件提出的新功能與性能要求,需要修改或再開發軟件,以擴充軟件功能、增強軟件性能、改進加工效率、提高軟件的可維護性。

18.1818解析:設循環隊列的容量為n。若rear>front,則循環隊列中的元素個數為rear-front;若rear<front,則循環隊列中的元素個數為n+(rear-from)。題中,front=16,rear=9,即rear>front,所以,循環隊列中的元素個數為m+(rear-front)=25+(9-16)=18。

19.#include<a:\myfile.txt>#include<a:\\myfile.txt>解析:本題考查了函數的存儲分類的概念。如果沒有特別說明,函數的存儲范圍是從定義函數的位置到文件的結尾,如果其他文件想使用這個函數,需要用#include文件包含命令將定義函數的文件包含進來。

20.a[j]<a[i]a[j]<a[i]解析:本題考查排序算法,題目中通過雙循環嵌套來實現,外層循環跳出待排序的元素,內層循環具體實現a[i]到a[k-2]之間偶數下標元素的排序,每次將最小的放在a[i]中。所以空中填a[j]<a[i]。

21.前后件關系前后件關系解析:在數據存儲結構中,除了要存儲數據,還要存儲數據的前后件關系,對于順序存儲的數據結構,前后件之間的關系,是通過存儲空間的位置來實現的,而對于鏈式存儲來說,數據元素之間的前后件關系是通過指針來實現的。

22.概要概要

23.a*b*c*da*b*c*d,解析:在insert()函數,因為題目要求輸入的字符串為abed,所以執行完“i=strlen(str);”后,i中存放的是字符串abcd的長度值4。所以接F來的while循環會循環4次,每次讓i減1,故4次循環中i的值依次為4、3、2、1。每次循環會執行兩條語句str[2*i]=str[i];str[2*i-1]='*',當i=4時為:str[8]=str[4];str[7=='*';。執行結果是將字符串abed末尾的結束符'\\0'復制到其下標值2倍的位置,并在其前1位插入—個'*'哼符。接下來i=3,執行str[6]=str[3];str[5]='*'。執行后會將字符串abcd最后一個字符,d復制到其下標值2倍的位置,并在其前1位插入一個'*'字符。依次類推,直到i=1,執行str[2]=str[1];str[1]='*',將字符tb,往后移動了1位,并在原位置插入'*'字符。所以,循環結束后,字符串str會變為a*b*c*d*。這就是程序的輸出結果。

24.cc解析:該題考查以下兩個知識點:

(1)用一個指定的標識符(即名字)來代表一個字符串,它的一般形式為#define標識符字符串

(2)在MYSWAP宏定義中,利用中間變量z來交換x和y的值,所以要實現a和b的交換,只需通過中間變量即可,所以,此處應填c。

25.doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++)/*從0~n中找到既能被5整除同時又能被11整除的數并將這些數求和*/if(i%5==0&&i%11==0)s=s+i;s=sqrt(s);/*對s求平方根*/returns;doublefun(intn)\r\n{doubles=0.0;\r\ninti;\r\nfor(i=0;i<n;i++)/*從0~n中找到既能被5整除同時又能被11整除的數,并將這些數求和*/\r\nif(i%5==0&&i%11==0)\r\ns=s+i;\r\ns=sqrt(s);/*對s求平方根*/\r\nreturns;解析:本題的解題思路是逐個取得從。0-n之間的所有數,對每次取得的數進行條件判斷,條件是既能被5整除同時又能被11整除,注意:這兩個條件要求同時成立,因此用到了“&&”運算符。滿足條件,該數就被累加到s中去,求出所有符合條件的數后,用sqrt()函數(包含于頭文件<math.h>中)對s求平方根。

26.

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

27.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個循環來完成求10個數的總和,接著再用x1=x1/10來求出平均值。

28.

解析:該程序功能是尋找二維數組中最大元素的值。其中,求最大元素的方法:用最大值變量maX標記第一個待找數據,逐個把所有待找數據和max進行比較,并用max標記當前最大值及其所在位置,從而找出最大值。

29.doublefun(STREC*aSTREC*bint*n){inti;doubleay=0.0;*n=0;for(i=0;i<N;i++)av=av+a[i].s;ay=ay/N;/*求平均值*/for(i=0;i<N;i++)if(av<=a[i].s){b[*n]=a[i];*n-*n+l;}/*將高于等于平均分的學生存從所指存儲單元中并統計人數*/returnay;/*返回嚴均分*/}doublefun(STREC*a,STREC*b,int*n)\r\n{\r\ninti;\r\ndoubleay=0.0;\r\n*n=0;\r\nfor(i=0;i<N;i++)\r\nav=av+a[i].s;\r\nay=ay/N;/*求平均值*/\r\nfor(i=0;i<N;i++)\r\nif(av<=a[i].s)\r\n{b[*n]=a[i];*n-*n+l;}/*將高于等于平均分的學生存從所指存儲單元中,并統計人數*/\r\nreturnay;/*返回嚴均分*/\r\n}解析:本題中第1個循環的作用求出所有分數的總和,只有進行了av=av/N后才得到平均值(我們在前面的程序中碰到過類似問題)。第2個循環的作用是將高于等于平均分的學生存入b所指存儲單元中。同一結構體變量之間可以互相賦值。

本程序中直接用*n來表示b的下標,注意開始時要給,*n賦0,且使用時不能少*號。因為單獨的n是一個指針變量,而我們要用的是它所指向的那個存儲單元中的值。

30.voidfun(char*schart[]){intij=0;for(i=0;s[i]!='\0';i++)if(i%2==0&&s[i]%2==0)/*將s所措字符串中下標和ASCII值都為偶數的字符放入數組t中*/t[j++]=s[i];/*在字符串最后加上結束標志位*/t[j]='\0';}voidfun(char*s,chart[])\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!='\\0';i++)\r\nif(i%2==0&&s[i]%2==0)/*將s所措字符串中下標和ASCII值都為偶數的字符放入數組t中*/\r\nt[j++]=s[i];/*在字符串最后加上結束標志位*/\r\nt[j]='\\0';\r\n}解析:本題要求除了下標為偶數同時ASCII值也為偶數的字符之外,其他字符都刪除。題目要求留下下標為偶數同時ASCII值也為偶數的字符。

C語言中并沒有直接刪除字符的算法,請大家在做題的時候注意。

31.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語句實現該功能轉換的。

32.doublefun(intm){inti;doubles=1.0;for(i=1;i<=m;i++)s=s-log(i);/*計算s=l-In(1)-In(2)-In(3)-…-In(m)*/return(s*s);/*對s求平方并返回*/}doublefun(intm)\r\n{\r\n\u3000inti;\r\ndoubles=1.0;\r\nfor(i=1;i<=m;i++)\r\ns=s-log(i);/*計算s=l-In(1)-In(2)-In(3)-…-In(m)*/\r\nreturn(s*s);/*對s求平方并返回*/\r\n}解析:首先,題目要求計算1依次減去1到M的對數,可用從1到M的循環,每次循環都減一個數的對數。該題需要注意,log()函數的形式參數應浩如煙海double型變量,用于循環的基數變量為整數,需要進行強制轉換。最后在返回的時求平方。

33.

解析:該程序功能是將字符串中所有下標為奇數位置上的字母轉換為大寫。其中,同一英文字母的大寫和小寫的ASCII碼值相差32,因此,要將小寫字母轉換為大寫字母,只要將其對應的ASCII碼值減去32即可。

34.

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

35.D

36.C

37.C在C語言中null等價于數字0。

2021年內蒙古自治區包頭市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.有以下程序:voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i+=2)for(j=i+2;j<n;j+=2)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i<10;i++)printf("%d",aa[i]);printf("\n");}其輸出結果是

A.1,2,3,4,5,6,7,8,9,10,

B.10,9,8,7,6,5,4,3,2,1,

C.9,2,7,4,5,6,3,8,1,10,

D.1,10,3,8,5,6,7,4,9,2,

2.

3.有以下程序:voidsum(int*a){a[0]=a[1];}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=1;i>0;i--)sum(&aa[i]);print("%d\n",aa[0]);}程序運行后的輸出結果是______。

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

4.有以下程序:main(){intx[8]={8,7,6,5,O,0},*s;s=x+3;printf("%d\n",s[2]);}執行后輸出結果是()。

A.隨機值B.0C.5D.6

5.對長度為n的無序線性表進行順序查找,則查找成功、不成功時的平均數據比較次數分別為()。

A.n/2,nB.n+1/2,n-1C.n+1/2,nD.n-1/2,n-1

6.

7.C語言中函數返回值的類型是由()決定的。

A.return語句中的表達式類型B.調用該函數的主調函數類型C.定義函數時所指定的函數類型D.以上說法都不正確

8.若f(n)=3n2+2n+1,則f(n)=()。

A.O(n2)B.O(n)C.O(2n)D.O(3n2)

9.

10.下列程序的輸出結果是()。voidfun(int*X,inty){printf("%d%d",*x,*y);*x=3;*y=1;}main{intx=1,y=2;fun(&y,&x);printf("%d%d",x,y);}A.2143B.1212C.1234D.2112

11.有以下程序#include<stdio.h>main{inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的運行結果是()。A.741B.963C.852D.875421

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

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

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

main()

{chara[]="Language",b[]="Programe";

char*p1,*p2;

intk;

p1=a;p2=b;

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

if(*(p1+k)==*(p2+k))printf("%c,*(p1+k));

}

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

main()

{inti,n[]={0,0,0,0,0};

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

{n[i]=n[i-1]*2+1;

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

}

}

15.用以下語句調用庫函數malloc,使字符指針st指向具有11個字節的動態存儲空間,請填空。st=(char*)【】;

16.一張3.5英寸軟盤大約能存儲140萬個ASCⅡ字符,若存放漢字大約能存放【】個。

17.軟件維護活動包括以下幾類:改正性維護、適應性維護、【】維護和預防性維護。

18.在一個容量為25的循環隊列中,若頭指針front=16,尾指針rear=9,則該循環隊列中共有上【】個元素。

19.設有以下程序,為使之正確運行,請在下劃線中填入應包含的命令行。(注:try_me()函數在a:\myfile.txt中有定義。)

【】

main()

{printf("\n");

try_me();

printf("\n");}

20.下面程序的功能:將字符數組a中下標值為偶數的元素從小到大排列,其他元素不變。請填空。

#include<stdio.h>

#include<string.h>

main()

{chara[]="clanquage",t;

inti,j,k;

k=strlen(A);

for(i=0;i<=k-2;i+=2)

for(j=i+2;j<k;j+=2)

if(【】)

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

puts(A);

printf("\n");

}

21.在數據的存儲結構中,不僅需要存儲各數據元素的信息,還要存放各元素之間______的信息。

22.軟件的【】設計又稱為總體結構設計,其主要任務是建立軟件系統的總體結構。

23.當運行以下程序時,輸入abed,程序的輸出結果是:【】。

insert(charstr[])

{inti

i=strlen(str);

while(i>0)

{str[2*i]=str[i];str[2*-1]='*';i--;}

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

}

main()

{charstr[40];

scanf("%s",sB);insert(str);

}

24.設有如下宏定義

#defineMYSWAP(z,x,y)

{z=x;x=y;y=z;}

以下程序段通過宏調用實現變量a,b內容交換,請填空。

floata=5,b=16,c;

MYSWAP(【】a,b);

三、3.程序設計題(10題)25.編寫函數fun(),它的功能是求n以內(不包括n)同時能被5與11整除的所有自然數之和的平方根s,并作為函數值返回。

例如:n為1000時,函數值應為s=96.979379。

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

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

試題程序:

#include<conio.h>

#include<math.h>

#include

doublefun(intn)

{

}

main()

{

clrscr();

printf("s=%f\n",fun(1000));

}

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

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

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

27.請編寫函數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);

}

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

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

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

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

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

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

試題程序:

#include<stdio.h>

#defineN12

typedefstruct

{charnum[10];

doubles;

}STREC;

doublefun(STREC*a,STREC*b,int*n)

{

}

main()

STRECsIN]={{"GA05",85},{"GA03",76},

{"GA02",69},{"GA04",85},{"GA01",91},

{"GA07",72},{"GA08",64},{"GA06",87},

{"GA09",60},{"GAll",79},{"GA12",73},

{"GA10",90}};

STRECh[N],t;

FILE*out;

inti,j,n;

doubleave;

ave=fun(s,h,&n);

printf("The%dstudentdatawhichis

higherthan%7.3f:In",n,ave);

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

printf("%s%4.1f\n",h[i].num,h[i].s);

printf("\n");

out=fopen("out90.dat","w");

fprintf(out,"%dkn%7.3f\n",n,ave);

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

for(j=i+l;j<n;j++)

if(h[i].s<h[j].s)

{t=hIi];h[i]=h[j];h[j]=t;}

/*分數從高到低排列*/

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

fprintf(out,"%4.1f\n",h[i].s);

fclose(out);

}

30.請編寫函數fun(),其功能是:將s所指字符串中除了下標為偶數、同時ASCII值也為偶數的字符外,其余的全部刪除,串中剩余字符所形成的一個新中放在t所指的數組中。

例如,若s所指字符串中的內容為ABCDEFG123456,其中字符A的ASCII碼值為奇數,因此應當刪除;其中字符B的ASCII碼值為偶數,但在數組中的下標為奇數,因此也應當刪除;而字符2的ASCII碼值為偶數,所在數組中的下標也為偶數,因此不應當刪除,其他依此類推。最后t所指的數組中的內容應是246。

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

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

}

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

}

32.請編寫函數fun(),它的功能是計算:s=(1-In(1)-In(2)-In(3)-…-1n(m))2

s作為函數值返回。

在C語言中可調用log(n)函數求In(n)。log函數的引用說明是doublelog(doublex)。

例如,若m的值為15,則fun()函數值為723.570801。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(intm)

{

}

main()

{

clrscr();

printf("%f\n",fun(15));

}

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

例如,若輸入“abc4EFg”,則應輸出“aBc4EFg”。

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

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

34.請編寫函數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的花括號中填入你編寫的若干語句。

四、單選題(0題)35.某線性表中最常用的操作是在最后一個元素之后插入一個元素和刪除第一個元素,則采用()存儲方式最節省運算時間。

A.單鏈表B.僅有頭指針的單循環鏈表C.雙鏈表D.僅有尾指針的單循環鏈表

五、單選題(0題)36.在下面的一維數組定義中,哪一個有語法錯誤()。A.inta[]={1,2,3};B.inta[10]={0};C.inta[];D.inta[5];

六、單選題(0題)37.設變量P是指針變量,語句P=NULL;是給指針變量賦NULL值,它等價于()。A.A.p="";

B.p="0";

C.p=0;

D.p="";

參考答案

1.C解析:本題考核的知識點是程序中算法的基本分析。sort()函數作用是將數組aa中的下標為偶數的元素按大到小排序.主函數中首先定義了一個長度為10的數組并賦值,然后調用sort()函數,將數組aa中奇數個元素的值按大到小排序,因此執行完該函數后,數組中奇數個元素的值為9,7、5、3和1,故主函數中最后通過一個for循環輸出數組aa中各元素的值為9、2、7、4、5、6、3、8、1和10,所以,4個選項中選項C符合題意。

2.B本題考查標準輸入輸出函數和循環語句。gets(s)函數的作用是將輸入的字符讀入字符串s,直到遇到回車。而scanf函數接收字符串時的結束標志為回車或者空格。因此選項B)不能,選項C)和選項D)中按字符逐個讀入字符串s中,直到讀入的字符是換行符為止,因此B正確。

3.D解析:C語言覿定,實參變量對形參變量的數據傳遞是“值傳遞”,只由實參傳給形參,而不能由形參傳回來給實參。函數調用結束后,形參單元被釋放,實參單元仍保留并維持原值。本題要求輸出aa[0]的值,結果應為1。

4.B解析:通過賦值語句“s=x+3”,使指針變量s指向數組元素x[3],輸出語句中的spl等價于*(s+2),即x[5]值為0。所以,B選項為所選。

5.C

6.A

7.C

8.A

9.B

10.C當執行fun函數時,因為參數傳遞時是地址傳遞,因此形參值的改變會影響實參中的數,在執行fun函數時先輸出12,接著把*X賦3,*y賦4,此時帶回主函數中,輸出的值為34。

11.C在for循環中,當y的值為9、6或3時,執行輸出語句,輸出表達式--Y的值。Y先自減l,然后再輸出y的值。

12.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。

13.gae

14.1371513715解析:本題中,定義了一個整型數組n并初始化,在for循環語句中,再對數組中各元素重新賦值。循環執行第一次時,n[1]=n[0]*2+1=0+1=1,printf函數輸出1,然后i的值加1,比較i<=4成立,繼續執行循環體語句,使后一個數為前一個數的2倍加1。所以最后輸出為1、3、7、15。

15.malloc(11)malloc函數的格式是void*(或char*)malloc(size),size表示應分配的存儲區,此題要分配11字節的單元,把11代入即可。

16.70萬70萬

17.完善性軟件維護活動包括以下幾類:改正性維護,適應性維護、完善性維護和預防性維護,完善性維護是指為了滿足用戶對軟件提出的新功能與性能要求,需要修改或再開發軟件,以擴充軟件功能、增強軟件性能、改進加工效率、提高軟件的可維護性。

18.1818解析:設循環隊列的容量為n。若rear>front,則循環隊列中的元素個數為rear-front;若rear<front,則循環隊列中的元素個數為n+(rear-from)。題中,front=16,rear=9,即rear>front,所以,循環隊列中的元素個數為m+(rear-front)=25+(9-16)=18。

19.#include<a:\myfile.txt>#include<a:\\myfile.txt>解析:本題考查了函數的存儲分類的概念。如果沒有特別說明,函數的存儲范圍是從定義函數的位置到文件的結尾,如果其他文件想使用這個函數,需要用#include文件包含命令將定義函數的文件包含進來。

20.a[j]<a[i]a[j]<a[i]解析:本題考查排序算法,題目中通過雙循環嵌套來實現,外層循環跳出待排序的元素,內層循環具體實現a[i]到a[k-2]之間偶數下標元素的排序,每次將最小的放在a[i]中。所以空中填a[j]<a[i]。

21.前后件關系前后件關系解析:在數據存儲結構中,除了要存儲數據,還要存儲數據的前后件關系,對于順序存儲的數據結構,前后件之間的關系,是通過存儲空間的位置來實現的,而對于鏈式存儲來說,數據元素之間的前后件關系是通過指針來實現的。

22.概要概要

23.a*b*c*da*b*c*d,解析:在insert()函數,因為題目要求輸入的字符串為abed,所以執行完“i=strlen(str);”后,i中存放的是字符串abcd的長度值4。所以接F來的while循環會循環4次,每次讓i減1,故4次循環中i的值依次為4、3、2、1。每次循環會執行兩條語句str[2*i]=str[i];str[2*i-1]='*',當i=4時為:str[8]=str[4];str[7=='*';。執行結果是將字符串abed末尾的結束符'\\0'復制到其下標值2倍的位置,并在其前1位插入—個'*'哼符。接下來i=3,執行str[6]=str[3];str[5]='*'。執行后會將字符串abcd最后一個字符,d復制到其下標值2倍的位置,并在其前1位插入一個'*'字符。依次類推,直到i=1,執行str[2]=str[1];str[1]='*',將字符tb,往后移動了1位,并在原位置插入'*'字符。所以,循環結束后,字符串str會變為a*b*c*d*。這就是程序的輸出結果。

24.cc解析:該題考查以下兩個知識點:

(1)用一個指定的標識符(即名字)來代表一個字符串,它的一般形式為#define標識符字符串

(2)在MYSWAP宏定義中,利用中間變量z來交換x和y的值,所以要實現a和b的交換,只需通過中間變量即可,所以,此處應填c。

25.doublefun(intn){doubles=0.0;inti;for(i=0;i<n;i++)/*從0~n中找到既能被5整除同時又能被11整除的數并將這些數求和*/if(i%5==0&&i%11==0)s=s+i;s=sqrt(s);/*對s求平方根*/returns;doublefun(intn)\r\n{doubles=0.0;\r\ninti;\r\nfor(i=0;i<n;i++)/*從0~n中找到既能被5整除同時又能被11整除的數,并將這些數求和*/\r\nif(i%5==0&&i%11==0)\r\ns=s+i;\r\ns=sqrt(s);/*對s求平方根*/\r\nreturns;解析:本題的解題思路是逐個取得從。0-n之間的所有數,對每次取得的數進行條件判斷,條件是既能被5整除同時又能被11整除,注意:這兩個條件要求同時成立,因此用到了“&&”運算符。滿足條件,該數就被累加到s中去,求出所有符合條件的數后,用sqrt()函數(包含于頭文件<math.h>中)對s求平方根。

26.

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

27.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\nreturns

溫馨提示

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

評論

0/150

提交評論