2021-2022學年安徽省淮北市全國計算機等級考試C語言程序設計模擬考試(含答案)_第1頁
2021-2022學年安徽省淮北市全國計算機等級考試C語言程序設計模擬考試(含答案)_第2頁
2021-2022學年安徽省淮北市全國計算機等級考試C語言程序設計模擬考試(含答案)_第3頁
2021-2022學年安徽省淮北市全國計算機等級考試C語言程序設計模擬考試(含答案)_第4頁
2021-2022學年安徽省淮北市全國計算機等級考試C語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩47頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2021-2022學年安徽省淮北市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.以下敘述中錯誤的是()。

A.由3種基本結構構成的程序只能解決簡單問題

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

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

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

2.

3.在銀行業務中,實體客戶和實體銀行之間的聯系是()。

A.—對一B.—對多C.多對一D.多對多

4.以下敘述中正確的是()。

A.構成C程序的基本單位是函數

B.可以在一個函數中定義另一個函數

C.main函數必須放在其他函數之前

D.C函數定義的格式是K&R格式

5.設s1="Good",s2="",s3="Bye",則s1、s2和s3連接后的結果是()。

A.GoodB.GoodByeC.GoodByeD.Bye

6.

7.以下選項中合法的C語言常量是()。

A.‘C-STR’B.2014.1C.”\1.0D.2EK

8.若有定義:“inta=4,b=5;floatx=3.4,y=2.1;”,則下列表達式的值為()。(float)(a+b)/2+(int)x%(int)y;

A.5.5B.55C.5.500000D.55.00000

9.按照標識符的要求,()符號不能組成標識符。A.連接符B.下劃線C.大小寫字母D.數字字符

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

A.在switch語句中不一定使用break語句

B.在switch語句中必須使用default語句

C.break語句必須與switch語句中的case配對使用

D.break語句只能用于switch語句

11.下面程序的輸出結果是______。#inc1ude<stdio.h>main(){char*p[]={"BOOL","OPK","H","SP"};inti;for(i=3;i>=0;i-,i-)prinf("%c",*p[i]);print("\n")}

A.SOB.SPC.SPOPKD.SHOB

12.C語言中的變量名只能由字母,數字和下劃線三種字符組成,且第一個字符()。

A.必須為字母B.必須為下劃線C.必須為字母或下劃線D.可以是字母,數字或下劃線中的任意一種

二、2.填空題(12題)13.下面程序輸出的結果是()。intm=17;intfun(intx,inty){intm=3;return(x*y-m);}main(){inta=5,b=7;printf("%d\n”,fun(a,B)/m);}

14.表示條件;10<x<100或x<0的C語言表達式是【】。

15.#define命令出現在程序中函數的外面,宏名的有效范圍為______。

16.一個項目具有一個項目主管,一個項目主管可管理多個項目,則實體“項目主管”與實體“項目”的聯系屬于______的聯系。

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

main()

{inta=2,b=2,c=4;

a*=16+(b++)-(++C);

printf("%d",a);

}

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

#include<stdio.h>

main()

{intfun();

fun();

}

fun()

{staticinta[4]={1,2,3,4};

inti;

for(i=0;i<4;i++)a[i]+=a[i];

for(i=0;i<4;i++)printf("%d,",a[i]);

printf"\n");

}

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

20.一個模塊直接調用的其他模塊的模塊個數稱為______。

21.下列程序的運行結果為【】。

main()

{inta[3]C4}={{1,3,5,7},{2,4,6,8},{15,17,34,12}};

printf("maxvalueis%d\n",maxvalue(3,4,a));

}

maxvalue(m,n,array)

intm,n,array[][4];

{inti,j,max;

max=array[0][0];

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

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

if(max<array[i][j])max=array[i][j];

return(max);

}

22.在數據結構中,順序存儲結構的數據元素所占的存儲空間是______的。

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

24.設有定義:

struct{inta;floatb;charc;}abc;*p_abc=&abc;

則對結構體成員a的引用方法可以是abc.a和p_abc【】a。

三、3.程序設計題(10題)25.請編寫函數fun(),該函數的功能是:將s所指字符串中ASCII值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。

例如,若s所指字符串中的內容為ABCDEFGl2345,其中字符B的ASCⅡ碼值為偶數、…、字符2的ASCⅡ碼值為偶數、…,都應當刪除,其他依次類推。最后t所指的數組中的內容應是ACEGl35。

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

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

試題程序;

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf(,\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

}

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

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

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

試題程序:

#defineM4

#include<stdio.h>

fun(inta[])[M])

{

}

main()

{

intarr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7);

printf(“min=%d\n”,fun(arr));

}

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

for(k=0;kif((k+1)%10==0)

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

printf("\n");}/*一行寫9個數*/

else

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

}

28.編寫函數fun(),函數的功能是:根據以下公式計算s,計算結果作為函數值返回;n通過形參傳入。

S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)

例如:若n的值為11時,函數的值為1.833333。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

floatfun(intn)

{

}

main()

{

intn;

floats;

clrscr();

printf("\nPleaseenterN:");

scanf("%d",&n);

s=fun(n);

printf("Theresultis:%f\n",s);

}

29.請編寫一個函數fun,它的功能是:將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串“-1234”,則函數把它轉換為整數值-1234。

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

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

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

}

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

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

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

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

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

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

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

}

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

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定義結構體*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}},m;

inti;

clrscr();

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",a[i].hum,

a[i].s);

fun(a,&m);

printf("*****THERESULT*****\n");

printf("Thetop:%s,%d\n",m.num,m.s);

}

34.請編寫函數fun(),該函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中。要求函數把0至9歲年齡段的人數在d[0]中,把10至19歲年齡段的人數放在d[1]中,把20至29歲年齡段的人數放在d[2]中,依次類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>#defineN50#defineM11voidfun(int*a,int*b){}doublernd(){statict=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}main(){intage[N],i,d[M];for(i=0;i<N;i++)age[i]=(int)(i15*rnd());/*產生一個隨機的年齡數組*/printf("Theoriginaldata:\n");for(i=0;i<N;i++)printf((i+l)%10==07“%4d\n”;“%4d”,age[i]);/*每行輸出10個數*/printf(“\n\n”);fun(age,d);for(i=0;i<l0;i++)printf(“%4d---%4d:%4d\n”;,i*l0,i*10+9,d[i]);printf(“Over100;%4dkn”;,d[10]).;}

四、單選題(0題)35.

五、單選題(0題)36.有下列程序:

程序執行后的輸出結果是()。A.3,7,3,7B.7,3,7,3C.3,7,7,3D.7,3,3,7

六、單選題(0題)37.用鄰接矩陣A表示有向圖G的存儲結構,則有向圖G中頂點i的入度為()。

A.第i行非0元素的個數之和B.第i列非0元素的個數之和C.第i行0元素的個數之和D.第i列0元素的個數之和

參考答案

1.A由順序、選擇(分支)、循環3種基本結構構成的程序可以解決所有問題,而不只是解決簡單問題,所以A選項錯誤。故本題答案為A選項。

2.C

3.D一個客戶可以在多家銀行辦理業務,一家銀行也有多個客戶辦理業務,因此,實體客戶和實體銀行之間的聯系是多對多。本題選擇D選項。

4.A解析:本題考查C語言的綜合基礎知識。構成C程序的基本單位是函數,一個C程序總是從main函數開始執行,而不論main函數在整個程序中的位置如何。C語言的函數定義都是互相平行、獨立的,在定義函數時,一個函數內不能定義另一個函數。C函數定義的一般格式有兩種:傳統格式和現代格式。傳統格式也稱K&R格式,是早期編譯系統使用的格式;現代格式又稱ANSI格式,是現代編譯系統使用的格式。

5.C

6.D

7.B所謂常量,是指在程序運行的過程中,其值不能被改變的量。在C語言中,有整型常量、實型常量、字符常量和字符串常量等類型。選項A是字符串,需要使用雙引號;選項C不是合法的常量形式;選項D為實型常量中的指數形式,但指數形式e(E)之前必須是數字,之后必須為整數。故本題答案為B選項。

8.C在計算(float)(a4-b)/2時,由于通過強制類型轉換將(a+b)轉換成了float型,所以應先將2轉換成float型,再進行計算,得4.500000。在計算(int)x%(int)y時,先將x和y通過強制類型轉換成int型,再進行求余運算,結果為1。又因為4.500000是float型,所以將1和它相加時,先將1換成float型,再計算,得到5.500000。類型轉換的一般規則是:低級類型從高級類型,并進行相應的轉換。數據類型的級別由低到高的排序表示為:char→int→unsigned→log→float→double。

9.A

10.Adefault語句在switch語句中可以省略,所以B選項錯誤;switch語句中并非每個case后都需要使用break語句,所以C選項錯誤;break語句還可以用于for等循環結構中,所以D選項錯誤。故本題答案為A選項。

11.A解析:p[0]存放的是“BOOL\\0”的首地址;p[1]存放的是“OPk\\0”的首址等。在printf語句中輸出的*p[i]表示p[i]字符串中的第一個字符。在for循環中,i的初值為3,那么輸出的第—個字符為“S”,接著兩次i--,則輸出的值為*p[1],即字符“O”,所以本題的輸出為SO。

12.C

13.11解析:本題考查局部變量和全局變量的區別:局部變量是指作甩域在函數級和塊級的變量,全局變量是指作用域在程序級和文件級的變量。

14.(x>10&&x<100)||x<0

15.從定義到本源文件結束從定義到本源文件結束解析:C語言規定,宏名的有效范圍為從定義宏到本源程序結束。

16.1對多(或1:N)1對多(或1:N)

17.2626解析:a*=16+(b++)-(++c)等價于a*=a*(16+(b++)-(++c))=2*(16+(2-5)=26。b++是先使用b的值參加運算,再對b加1;++c是先c加1,再使用c的值參加運算。

18.24682,4,6,8解析:子函數fun()的功能是將數組a中的元素都自加一遍,然后仍然將結果存在原數組中,其實就是將數組a的每個元素都變為原來的2倍,然后輸出。在主程序中首先通過intfun()定義了子函數fun(),然后再調用fun()。

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

20.扇出扇出解析:在結構圖中,調用一個給定模塊的模塊個數稱為扇入,一個模塊直接調用的其他模塊個數稱為扇出。

21.maxvalueis34

22.連續連續解析:順序存儲結構具有兩個特點:1)數據元素所占空間是連續的;2)數據元素在存儲空間中是按邏輯順序依次存放的。

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

24.->->解析:結構變量abc有成員a,并有指針pabc指向結構變量abc,則引用變量abc成員a的形式有abc.a和p_abc->a。

25.voidfun(char*schart[]){inti=0;for(;*s!='\0';s++)/*找出ASCII值為奇數的字符依次存入數組t中*/if(*s%2==1)t[i++]=*s;t[i]='\0';/*在字符串的末尾口上串結束符*/}voidfun(char*s,chart[])\r\n{\r\ninti=0;\r\nfor(;*s!='\\0';s++)/*找出ASCII值為奇數的字符依次存入數組t中*/\r\nif(*s%2==1)\r\nt[i++]=*s;\r\nt[i]='\\0';/*在字符串的末尾口上串結束符*/\r\n}解析:要刪除ASCH值為偶數的字符,也就是要留下ASCH值為奇數的字符,由于最終是要求求出剩余字符(BPASCⅡ值為奇數)形成的新串,所以本題程序的算法是從原字符串的頭到尾掃描并找出ASCⅡ值為奇數的字符依次存入數組沖。此外,還要注意數組t的下標變化和下標的初值(初值必須為0,即i=0),t[i++]州的作用是先使用t[i]然后再使自增1。任何字符串的末尾都要有串結束符。這種算法在很多題中都要用到,學習者可以舉一反三地找一些其他相關習題練習一下。

26.fun(inta[][M]){intijmin=a[0][0];for(i=0;i<4;i++)for(j=0;j<M;j++)if(min>a[i][j])min=a[i][j];/*求出二維數組的最小值*/returnmin;}fun(inta[][M])\r\n{\r\n\u3000inti,j,min=a[0][0];\r\n\u3000for(i=0;i<4;i++)\r\nfor(j=0;j<M;j++)\r\nif(min>a[i][j])\r\nmin=a[i][j];/*求出二維數組的最小值*/\r\nreturnmin;\r\n}解析:此類求最大值或最小值的C語言問題,我們可以采用逐個比較的方式。要求數組中的所有元素走動一遍,并從中找出最大、最小值,要注意一開始應使min存放數組中的第—個元素的值。可按逐行查找也可按逐列查找的方式,本題采用的是逐行找的方式。即行下標在外層循環,列下標在內層循環,因為在循環的嵌套中越在內層循環,循環變化就越快。

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

28.floatfun(intn){intis1=0;floats=0.0;for(i=1;i<=n;i++){s1=s1+i;/*求每一項的分母*/s=s+1.0/s1;/*求多項式的值*/}returns;}floatfun(intn)\r\n{\r\ninti,s1=0;\r\nfloats=0.0;\r\nfor(i=1;i<=n;i++)\r\n{s1=s1+i;/*求每一項的分母*/\r\ns=s+1.0/s1;/*求多項式的值*/\r\n}\r\nreturns;\r\n}解析:本題中用s1來表示式中每一項的分母,而每一項的分母都是其前一項分母加項數。注意由于s1定義成一個整型,所以在s=s+1.0/s1中不能把1.0寫成1。

29.

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

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

31.

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

32.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語言中并沒有直接刪除字符的算法,請大家在做題的時候注意。

33.fun(STUa[]STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*找出成績最高的學生記錄*/\r\nif(s->s<a[i].s)\r\n*s==a[i];\r\n}fun(STUa[],STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*找出成績最高的學生記錄*/\r\nif(s->s<a[i].s)\r\n*s==a[i];\r\n}解析:本題的流程是這樣的,先使s指向第1個學生,我們的題干目的是找出分數最高的學生,所以if語句的條件是s->s<a[i].s。此外,在做本題時,我們應該熟練掌握“指向運算符”和“成員運算符”的相關知識。題中“s->s”也可換成“(*s).s”。

34.voidfun(int*aint*b){intij;for(j=0;j<M;j++)b[j]=0;/*數組b初始化為0*/for(i=0;i<N;i++)if(a[i]>=100)b[10]++;/*如果年齡大于等于100b[10]自增1*/elseb[a[i]/10]++;/*如果年齡小于100則將其分別統計到b[a[i]/10]中*/}voidfun(int*aint*b){intij;for(j=0;j<M;j++)b[j]=0;/*數組b初始化為0*/for(i=0;i<N;i++)if(a[i]>=100)b[10]++;/*如果年齡大于等于100b[10]自增1*/elseb[a[i]/10]++;/*如果年齡小于100則將其分別統計到b[a[i]/10]中*/\r\n}voidfun(int*a,int*b){inti,j;for(j=0;j<M;j++)b[j]=0;/*數組b初始化為0*/for(i=0;i<N;i++)if(a[i]>=100)b[10]++;/*如果年齡大于等于100,b[10]自增1*/elseb[a[i]/10]++;/*如果年齡小于100,則將其分別統計到b[a[i]/10]中*/\r\n}

35.C

36.C程序定義兩個整型變量i、j,初值為3,7。另外,定義兩個整型指針變量p、q,其中p指向i,q指向j。將i、j的地址傳給swap函數。在swap函數中,a指向i,b指向j。通過臨時變量t交換a和b指向的值,此時a指向的實參i、b指向的實參j的值發生了交換。即a指向i的值為7,b指向j的值為3;再通過臨時變量tp交換a和b的指針值,使得a指向j,b指向i。所以swap中輸出a指向的值為3(j),b指向的值為7(i);swap函數調用結束后,輸出p和q指向的值,即i、j的值為7、3。所以程序輸出:3,7,7,3。本題答案為C選項。

37.B2021-2022學年安徽省淮北市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.以下敘述中錯誤的是()。

A.由3種基本結構構成的程序只能解決簡單問題

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

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

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

2.

3.在銀行業務中,實體客戶和實體銀行之間的聯系是()。

A.—對一B.—對多C.多對一D.多對多

4.以下敘述中正確的是()。

A.構成C程序的基本單位是函數

B.可以在一個函數中定義另一個函數

C.main函數必須放在其他函數之前

D.C函數定義的格式是K&R格式

5.設s1="Good",s2="",s3="Bye",則s1、s2和s3連接后的結果是()。

A.GoodB.GoodByeC.GoodByeD.Bye

6.

7.以下選項中合法的C語言常量是()。

A.‘C-STR’B.2014.1C.”\1.0D.2EK

8.若有定義:“inta=4,b=5;floatx=3.4,y=2.1;”,則下列表達式的值為()。(float)(a+b)/2+(int)x%(int)y;

A.5.5B.55C.5.500000D.55.00000

9.按照標識符的要求,()符號不能組成標識符。A.連接符B.下劃線C.大小寫字母D.數字字符

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

A.在switch語句中不一定使用break語句

B.在switch語句中必須使用default語句

C.break語句必須與switch語句中的case配對使用

D.break語句只能用于switch語句

11.下面程序的輸出結果是______。#inc1ude<stdio.h>main(){char*p[]={"BOOL","OPK","H","SP"};inti;for(i=3;i>=0;i-,i-)prinf("%c",*p[i]);print("\n")}

A.SOB.SPC.SPOPKD.SHOB

12.C語言中的變量名只能由字母,數字和下劃線三種字符組成,且第一個字符()。

A.必須為字母B.必須為下劃線C.必須為字母或下劃線D.可以是字母,數字或下劃線中的任意一種

二、2.填空題(12題)13.下面程序輸出的結果是()。intm=17;intfun(intx,inty){intm=3;return(x*y-m);}main(){inta=5,b=7;printf("%d\n”,fun(a,B)/m);}

14.表示條件;10<x<100或x<0的C語言表達式是【】。

15.#define命令出現在程序中函數的外面,宏名的有效范圍為______。

16.一個項目具有一個項目主管,一個項目主管可管理多個項目,則實體“項目主管”與實體“項目”的聯系屬于______的聯系。

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

main()

{inta=2,b=2,c=4;

a*=16+(b++)-(++C);

printf("%d",a);

}

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

#include<stdio.h>

main()

{intfun();

fun();

}

fun()

{staticinta[4]={1,2,3,4};

inti;

for(i=0;i<4;i++)a[i]+=a[i];

for(i=0;i<4;i++)printf("%d,",a[i]);

printf"\n");

}

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

20.一個模塊直接調用的其他模塊的模塊個數稱為______。

21.下列程序的運行結果為【】。

main()

{inta[3]C4}={{1,3,5,7},{2,4,6,8},{15,17,34,12}};

printf("maxvalueis%d\n",maxvalue(3,4,a));

}

maxvalue(m,n,array)

intm,n,array[][4];

{inti,j,max;

max=array[0][0];

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

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

if(max<array[i][j])max=array[i][j];

return(max);

}

22.在數據結構中,順序存儲結構的數據元素所占的存儲空間是______的。

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

24.設有定義:

struct{inta;floatb;charc;}abc;*p_abc=&abc;

則對結構體成員a的引用方法可以是abc.a和p_abc【】a。

三、3.程序設計題(10題)25.請編寫函數fun(),該函數的功能是:將s所指字符串中ASCII值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。

例如,若s所指字符串中的內容為ABCDEFGl2345,其中字符B的ASCⅡ碼值為偶數、…、字符2的ASCⅡ碼值為偶數、…,都應當刪除,其他依次類推。最后t所指的數組中的內容應是ACEGl35。

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

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

試題程序;

#include<stdio.h>

#include<string.h>

#include<conio.h>

voidfun(char*s,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf(,\nPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

printf("\nTheresultis:%s\n",t);

}

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

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

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

試題程序:

#defineM4

#include<stdio.h>

fun(inta[])[M])

{

}

main()

{

intarr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7);

printf(“min=%d\n”,fun(arr));

}

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

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(int*a,int*n)

{

}

main()

{

intaa[1000],n,k;

clrscr();

fun(aa,&n);

for(k=0;kif((k+1)%10==0)

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

printf("\n");}/*一行寫9個數*/

else

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

}

28.編寫函數fun(),函數的功能是:根據以下公式計算s,計算結果作為函數值返回;n通過形參傳入。

S=1+1/(1+2)+1/(1+2+3)+…+1/(1+2+3+…+n)

例如:若n的值為11時,函數的值為1.833333。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

floatfun(intn)

{

}

main()

{

intn;

floats;

clrscr();

printf("\nPleaseenterN:");

scanf("%d",&n);

s=fun(n);

printf("Theresultis:%f\n",s);

}

29.請編寫一個函數fun,它的功能是:將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串“-1234”,則函數把它轉換為整數值-1234。

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

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

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

}

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

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

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

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

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

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

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

}

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

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

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

試題程序:

#include<stdio.h>

#include<string.h>

#include<conio.h>

#defineN10

typedefstructss/*定義結構體*/

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

{

}

main()

{

STUa[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{"A10",71}},m;

inti;

clrscr();

printf("*****Theoriginaldata*****");

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

printf("No=%sMark=%d\n",a[i].hum,

a[i].s);

fun(a,&m);

printf("*****THERESULT*****\n");

printf("Thetop:%s,%d\n",m.num,m.s);

}

34.請編寫函數fun(),該函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中。要求函數把0至9歲年齡段的人數在d[0]中,把10至19歲年齡段的人數放在d[1]中,把20至29歲年齡段的人數放在d[2]中,依次類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。試題程序:#include<stdio.h>#defineN50#defineM11voidfun(int*a,int*b){}doublernd(){statict=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}main(){intage[N],i,d[M];for(i=0;i<N;i++)age[i]=(int)(i15*rnd());/*產生一個隨機的年齡數組*/printf("Theoriginaldata:\n");for(i=0;i<N;i++)printf((i+l)%10==07“%4d\n”;“%4d”,age[i]);/*每行輸出10個數*/printf(“\n\n”);fun(age,d);for(i=0;i<l0;i++)printf(“%4d---%4d:%4d\n”;,i*l0,i*10+9,d[i]);printf(“Over100;%4dkn”;,d[10]).;}

四、單選題(0題)35.

五、單選題(0題)36.有下列程序:

程序執行后的輸出結果是()。A.3,7,3,7B.7,3,7,3C.3,7,7,3D.7,3,3,7

六、單選題(0題)37.用鄰接矩陣A表示有向圖G的存儲結構,則有向圖G中頂點i的入度為()。

A.第i行非0元素的個數之和B.第i列非0元素的個數之和C.第i行0元素的個數之和D.第i列0元素的個數之和

參考答案

1.A由順序、選擇(分支)、循環3種基本結構構成的程序可以解決所有問題,而不只是解決簡單問題,所以A選項錯誤。故本題答案為A選項。

2.C

3.D一個客戶可以在多家銀行辦理業務,一家銀行也有多個客戶辦理業務,因此,實體客戶和實體銀行之間的聯系是多對多。本題選擇D選項。

4.A解析:本題考查C語言的綜合基礎知識。構成C程序的基本單位是函數,一個C程序總是從main函數開始執行,而不論main函數在整個程序中的位置如何。C語言的函數定義都是互相平行、獨立的,在定義函數時,一個函數內不能定義另一個函數。C函數定義的一般格式有兩種:傳統格式和現代格式。傳統格式也稱K&R格式,是早期編譯系統使用的格式;現代格式又稱ANSI格式,是現代編譯系統使用的格式。

5.C

6.D

7.B所謂常量,是指在程序運行的過程中,其值不能被改變的量。在C語言中,有整型常量、實型常量、字符常量和字符串常量等類型。選項A是字符串,需要使用雙引號;選項C不是合法的常量形式;選項D為實型常量中的指數形式,但指數形式e(E)之前必須是數字,之后必須為整數。故本題答案為B選項。

8.C在計算(float)(a4-b)/2時,由于通過強制類型轉換將(a+b)轉換成了float型,所以應先將2轉換成float型,再進行計算,得4.500000。在計算(int)x%(int)y時,先將x和y通過強制類型轉換成int型,再進行求余運算,結果為1。又因為4.500000是float型,所以將1和它相加時,先將1換成float型,再計算,得到5.500000。類型轉換的一般規則是:低級類型從高級類型,并進行相應的轉換。數據類型的級別由低到高的排序表示為:char→int→unsigned→log→float→double。

9.A

10.Adefault語句在switch語句中可以省略,所以B選項錯誤;switch語句中并非每個case后都需要使用break語句,所以C選項錯誤;break語句還可以用于for等循環結構中,所以D選項錯誤。故本題答案為A選項。

11.A解析:p[0]存放的是“BOOL\\0”的首地址;p[1]存放的是“OPk\\0”的首址等。在printf語句中輸出的*p[i]表示p[i]字符串中的第一個字符。在for循環中,i的初值為3,那么輸出的第—個字符為“S”,接著兩次i--,則輸出的值為*p[1],即字符“O”,所以本題的輸出為SO。

12.C

13.11解析:本題考查局部變量和全局變量的區別:局部變量是指作甩域在函數級和塊級的變量,全局變量是指作用域在程序級和文件級的變量。

14.(x>10&&x<100)||x<0

15.從定義到本源文件結束從定義到本源文件結束解析:C語言規定,宏名的有效范圍為從定義宏到本源程序結束。

16.1對多(或1:N)1對多(或1:N)

17.2626解析:a*=16+(b++)-(++c)等價于a*=a*(16+(b++)-(++c))=2*(16+(2-5)=26。b++是先使用b的值參加運算,再對b加1;++c是先c加1,再使用c的值參加運算。

18.24682,4,6,8解析:子函數fun()的功能是將數組a中的元素都自加一遍,然后仍然將結果存在原數組中,其實就是將數組a的每個元素都變為原來的2倍,然后輸出。在主程序中首先通過intfun()定義了子函數fun(),然后再調用fun()。

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

20.扇出扇出解析:在結構圖中,調用一個給定模塊的模塊個數稱為扇入,一個模塊直接調用的其他模塊個數稱為扇出。

21.maxvalueis34

22.連續連續解析:順序存儲結構具有兩個特點:1)數據元素所占空間是連續的;2)數據元素在存儲空間中是按邏輯順序依次存放的。

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

24.->->解析:結構變量abc有成員a,并有指針pabc指向結構變量abc,則引用變量abc成員a的形式有abc.a和p_abc->a。

25.voidfun(char*schart[]){inti=0;for(;*s!='\0';s++)/*找出ASCII值為奇數的字符依次存入數組t中*/if(*s%2==1)t[i++]=*s;t[i]='\0';/*在字符串的末尾口上串結束符*/}voidfun(char*s,chart[])\r\n{\r\ninti=0;\r\nfor(;*s!='\\0';s++)/*找出ASCII值為奇數的字符依次存入數組t中*/\r\nif(*s%2==1)\r\nt[i++]=*s;\r\nt[i]='\\0';/*在字符串的末尾口上串結束符*/\r\n}解析:要刪除ASCH值為偶數的字符,也就是要留下ASCH值為奇數的字符,由于最終是要求求出剩余字符(BPASCⅡ值為奇數)形成的新串,所以本題程序的算法是從原字符串的頭到尾掃描并找出ASCⅡ值為奇數的字符依次存入數組沖。此外,還要注意數組t的下標變化和下標的初值(初值必須為0,即i=0),t[i++]州的作用是先使用t[i]然后再使自增1。任何字符串的末尾都要有串結束符。這種算法在很多題中都要用到,學習者可以舉一反三地找一些其他相關習題練習一下。

26.fun(inta[][M]){intijmin=a[0][0];for(i=0;i<4;i++)for(j=0;j<M;j++)if(min>a[i][j])min=a[i][j];/*求出二維數組的最小值*/returnmin;}fun(inta[][M])\r\n{\r\n\u3000inti,j,min=a[0][0];\r\n\u3000for(i=0;i<4;i++)\r\nfor(j=0;j<M;j++)\r\nif(min>a[i][j])\r\nmin=a[i][j];/*求出二維數組的最小值*/\r\nreturnmin;\r\n}解析:此類求最大值或最小值的C語言問題,我們可以采用逐個比較的方式。要求數組中的所有元素走動一遍,并從中找出最大、最小值,要注意一開始應使min存放數組中的第—個元素的值。可按逐行查找也可按逐列查找的方式,本題采用的是逐行找的方式。即行下標在外層循環,列下標在內層循環,因為在循環的嵌套中越在內層循環,循環變化就越快。

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

28.floatfun(intn){intis1=0;floats=0.0;for(i=1;i<=n;i++){s1=s1+i;/*求每一項的分母*/s=s+1.0/s1;/*求多項式的值*/}returns;}floatfun(intn)\r\n{\r\ninti,s1=0;\

溫馨提示

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

評論

0/150

提交評論