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

下載本文檔

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

文檔簡介

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

一、單選題(12題)1.若有如下程序:#definePI3.1415926#defineA(r)2*PI*rmain(){floata,1;a=3.0;1=A(a);printf("r=%.2f,1=%.2f\n",a,1);}則程序運行后的輸出結果是()

A.r=3.001=18.85

B.3.00,18.85

C.r=3.0000001=18.8495555

D.r=3.01=18.8495555

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

A.軟件測試應該由程序開發者來完成

B.程序經調試后一般不需要測試

C.軟件維護只包括對程序代碼的維護

D.以上三種說法都不對

3.有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3,d=0;if(a==1&&b++==2) if(b!=2||c--!=3) printf(“%d,%d,%d\n”,a,b,c); elseprintf(“%d,%d,%d\n”,a,b,c);elseprintf(“%d,%d,%d\n”,a,b,c);}程序的運行結果是()。

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

4.一個二維數組的定義語句為“inta[3][4]={{3,4},{2,8,6}};”,則元素a[2][1]的值為()。

A.0B.4C.8D.6

5.現有如下程序段#include"stdio.h"main(){inta[5][6]={23,3,65,21,6,78,28;5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};inti=0,j=5;printf("%d\n",*(&a[0][0]+2*i+j-2));}則程序的輸出結果為

A.21B.78C.23D.28

6.設有定義“Charp[]={‘1’,‘2’,‘3’},*q=p;”,以下不能計算出一個char型數據所占字節數的表達式是()。A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

7.

8.

A.if(x>0)y=1;elseif(x==0)y=0;elsey=-1;

B.y=0;if(x>0)y=1;elseif(x<0)y=-1;

C.y=0;if(x>=0)if(x>0)y=1;e1sey=-1;

D.if(x>=0)if(x>0)y=1;elsey=0:elsey=-1;

9.下述程序的輸出結果是()。#include<stdio.h>voidmain(){chara=1,b=2;charc=a^b<<2;printf("\n%d",C);}

A.9B.10C.12D.2

10.層次型、網狀型和關系型數據庫劃分原則是()。

A.記錄長度B.文件的大小C.聯系的復雜程度D.數據之間的聯系方式

11.

12.有以下程序:

程序運行后的輸出結果是()。A.1B.11C.7D.9

二、2.填空題(12題)13.以下程序的定義語句中,x[1]的初值是【】,程序運行后輸出的內容是【】。

#include<stdio.h>

main()

{intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;

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

{p[i]=&x[2*i+1];

printf("%d",p[i][0]);

}

printf("\n");)

}

14.下面函數用來求兩個單精度數之和,并通過形參將結果傳回,請填空。

voidsub(floatx,floaty,【】z)

{【】=x+y;}

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

16.下列程序的輸出結果是【】。

#include<stdio.h>

main()

{charb[]="Helloyou";

b[5]=0;

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

}

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

main()

{unsignedshorta=65536;intb;

printfC%d\n",b=a);

}

18.如下程序片段:

ina,b,c;

printf("inputa,b,c:");

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

欲使輸出結果為1、2、3(分別對應于a、b、c),輸入數據的正確形式為【】。

19.與表達式a+=b等價的另一書寫形式是______。

20.觀察題目要求,可以知道以下幾點:}

21.strcmp函數的功能是【】。

22.設有以下定義和語句,則*(*(p+2)+1)的值為【】。

inta[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

23.若x為血類型,請寫出與!x等價的C語言表達式______。

24.已定義charch=′$′;inti=1,j;,執行j!=ch&&i++以后,i的值為【】。

三、3.程序設計題(10題)25.請編寫一個函數fun(),它的功能是:將ss所指字符串中所有下標為偶數位置的字母轉換為小寫(若該位置上不是字母,則不轉換)。

例如,若輸入ABC4efG,則應輸出aBc4efg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*SS)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80

characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

\%s",tt);

fun(tt);

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

}

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

例如:a數組中的值為:

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

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

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

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

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

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

28.編寫一個函數fun(),它的功能是:實現兩個字符串的連接(不使用庫函數strcat,即把p2所指的字符串連接到p1所指的字符串后。

例如,分別輸入下面兩個字符串:

FirstString

SecondString

則程序輸出:

FirstStringSecondString

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(charpi[],charp2[])

{

}

main()

{

chars1[80],s2[40];

clrscr();

printf("Enters1ands2:\n");

scanf("%s%s",s1,s2);

printf("s1=%s\n",s1);

printf("s2=%s\n",s2);

printf("Invokefun(s1,s2):\n");

fun(s1,s2);

printf("Afterinvoking:\n");

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

}

29.請編寫一個函數fun,它的功能是:找出一維整型數組元素中最大的值和它所在的下標,最大的值和它所在的下標通過形參傳回。數組元素中的值已在主函數中賦予。

主函數中x是數組名,n是x中的數據個數,max存放最大值,index存放最大值所在元素的下標。

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

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

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

}

31.請編寫函數voidfun(intx,intpp[],int*n),它的功能是求出能整除x且不是奇數的各整數,并按從小到大的順序放在pp所指的數組中,這些除數的個數通過形參n返回。

例如,若x中的值為24,則有6個數符合要求,它們是2,4,6,8,12,24。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(intx,intPP[],int*n)

{

}

main()

{

intx,aa[1000],n,i;

clrscr();

printf("\nPleaseenteranintegernumber:

\n");

scanf("%d",&X);

fun(x,aa,&n);

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

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

printf("\n");

}

32.編寫函數intfun(intlim,intaa[MAX]),該函數的功能是求出小于或等于lim的所有素數并放在aa數組中,該函數返回所求出的素數的個數。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineMAX100

intfun(intlim,intse[MAX])

{

}

main()

{

intlimit,i,sum;

intaa[MAX];

clrscr();

printf("輸入一個整數");

scanf("%d",&limit);

sum=fun(limit,aa);

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

{

if(i%10==0&&i!=0)/*每行輸出10個數*/

printf("\n");

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

}

}

33.請編寫函數fun,函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中;要求函數把O至9歲年齡段的人數放在d[0]中,把10至19歲年齡段的人數放在d[1],把20至29歲年齡段的人數放在d[2]中,其余依此類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。

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

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

34.請編寫函數fun,其功能是:計算并輸出3到n之間(含3和n)所有素數的平方根之和。

例如,在主函數中從鍵盤給n輸入100后,輸出為:sum=148.874270。

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

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

四、單選題(0題)35.下列選項中,能正確定義數組的語句是()。

A.intnum[0..2008];

B.intnum[];

C.intN=2008;intnum[N];

D.#defineN2008;intnum[N];

五、單選題(0題)36.設有關鍵碼初始化序列{Q,H,C,Y,P,A,M,S,R,D,F,X},新序列{F,H,C,D,P,A,M,Q,R,S,Y,X}是采用()方法對初始序列精細第一堂排序的結果。

A.直接插入排序B.二路歸并排序C.快速排序D.基數排序

六、單選題(0題)37.

有以下程序

#include<stdio.h>

#include<string.h>

typedefstrlIct{charname[9];charsex;floatscore[2];}STU;

STUf(STUa)

{STUb={"Zhao",m,85.0,90.0);inti;

strcpy(aname,b.name);

sex:b.sex;

for(i=0;i<2;i++)a.score[i]=b.score[i];

returna;

}

main

{STUc="Qian",f,95.0,92.0},d;

d=f(c).printf("%s,%c,%2.0f,%2.0f",d.Name,d.sex,d.score[0],d.score[1]);

}

程序的運行結果是()。

A.Qian,f,95,92

B.Qian,m,85,90

C.Zhao,m,85,90

D.Zhao,f,95,92

參考答案

1.A

2.D程序調試是由程序開發者完成診斷和改正程序中的錯誤的過程;軟件測試是由專門的測試人員完成,是發現錯誤而執行程序的過程;軟件維護是指軟件系統交付使用以后,為了改正錯誤或滿足新的需要而修改軟件的過程,是軟件生存周期中非常重要的一個階段。

3.Belse總是和最近的if配對。進入第1個if語句進行條件判斷時,因為是選輯與操作,需要兩邊運算對象的值均為非零值才為真,所以需要逐個執行判斷。結果為1,進入第2個if語句進行條件判斷。因為“b!=2”條件成立,所以整個條件表達式的值為真,不再執行邏輯或的第2個運算對象“(c--!=3)”變量c的值不變,也不再執行第1個else語句。輸出a的值1,b的值3,c的值3。故本題答案為B選項。

4.A

5.A解析:通過地址來引用二維數組,若有以下定義:inta[3][4],i,j;且當0≤i≤3,0≤j<4則可以有以下幾種方式來引用數組中的第i行,第j列的元素:\ue008a[i][j]\ue009,\ue008*(a[i]+j),\ue009*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表達式&a[0][0]+2*i+j-2相當于是地址&a[0][0]加上多少偏移量。

6.A根據題目中的定義可知,“sizeof(p)”計算的是數組p中所有元素所占用的字節數,而不是char型數據所占的字節數。故本題答案為A選項。

7.C

8.C解析:選項A的意思是:在x>O情況下,y為1,否則,在x=O時,y為0,剩下x<O時,y為-1,滿足本題中函數的要求。選項B描述的意思是:初始化y的值為0,在x>O時,給y重新賦值為1,否則,在x<O時,給y重新賦值為-1,滿足本題中函數的要求。選項C描述的意思是:在x>=0情況下,如果x>O,則y為1,否則,即x==0時,y為-1;剩下的x<O時,y為0??梢姶鸢窩實現的結果不是給定的表達式。選項D中描述的意思是:在x>=0的情況下,如果x>O,就給y賦值為1,否則即x==0時給y賦值為0,在不是x>=0的其他情況下,就給y賦值為-1,滿足本題中函數的要求。所以4個選項中C為所選。

9.A

10.D層次模型的基本結構是樹形結構,網狀模型是一個不加任何條件限制的無向圖,關系模型采用二維表來表示,所以三種數據庫的劃分原則是數據之間的聯系方式。

11.C

12.D題干中,函數fun的功能是將二維數組p的行下標為1、列下標為1的元素(p[1][1])的值賦給二維地址s指向的*s所指向的存儲單元。main函數中定義了整型指針p,動態分配了整型長度的內存空間,調用函數fun將數組元素a[1][1],即9賦給p所指向的空間。本題答案為D選項。

13.224682,2468解析:在主函數中根據整型數組x[]的定義可知,x[1]的初值等于2。在for循環語句中,當i=0時,p[0]=&x[1],p[0][0]=2;當i=1時,p[1]=&x[3],p[1][0]=4;當i=2時,p[2]=&x[5],p[2][0]=6;當i=3時,p[3]=&x[7],\ue008p[3][0]\ue009=8,所以程序輸出的結果為2、4、6、8。

14.float**zfloat*\r\n*z解析:C程序中可以通過傳送地址的方式在被調用函數中直接改變被調用函數中變量的值,從而達到函數之間數據的傳遞。

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

16.HelloHello解析:語句b[5]=0;相當于語句b[5]='\\0';且'\\0'為字符串結束標志,輸出時遇到'\\0'就停止輸出。

17.00解析:對于一個unsignedshort來說,它能取的最大值是65535。這里給a賦值65536,已經超出了它的取值范圍,這樣它的高位將被截掉,只把低位賦給它(全零)。所以a的值實際為0。

18.a=1b=2c=3a=1,b=2,c=3解析:此題考查了scanf函數的輸入格式。scanf函數的輸入格式規定如果兩個格式說明項間有一個或多個普通字符,那么在輸入數據時,在兩個數據之間也必須以這一個或多個字符作為分隔符。

19.a=a+ba=a+b解析:a+=b與a=a+b等價,作用是把變量a的值加b后再賦給變量a。

20.p=i;i>=pi<=Np=i;\r\ni>=p\r\ni<=N解析:本題主要考查了插入排序。由于程序中的數組在開始已經按從小到的大順序排好。在插入時,首先要查到第一個大于待插入數的數組下標,即當待插入元素小于數組中當前元素時,記下數組的當前下標p,并結束循環。故第一空目的是為了記下數組下標,應填p=i;插入的第二部是將大于待插入元素的所有元素都向后移動一位,故在循環時,要從最后一個元素到第p個元素都要后移一位,因此第二空應填i>=p。最后一個循環是將N+1個元素都輸出,故最后一空應為i<=N。(注:本題有多種答案,以上僅提供一種)

21.字符串的比較strcmp函數的原型是intstrcmp(char*s1,char*s2);功能是對s1和s2所指字符串進行比較,若s1<s2返回負數,若s1==s2返回0,若s1>s2返回正數。

22.6060解析:程序中定義a是一個3行2列的二維數組,p是指向兩個元素的一維數組指針,并讓p指向二維數組a的首行。則代碼*(*(p+2)+1)中的p+2指向二維數組a的第三行a[2],*(p+2)指向a[2[]0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60。

23.x==0x==0解析:!x的邏輯意思就是x為非,即x==0。

24.11解析:在執行邏輯表達式'j=!ch&&i++'時,首先判斷j=!ch的值,因為'ch=\'$\''不為0,所以'j=!ch=0',編譯系統便不再計算表達式'i++'的值,i的值不變,仍為1。

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

26.

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

27.

解析:該程序功能是把高于或等于平均分的學生數據放在b所指的數組中,高于等于平均分的學生人數通過形參n傳回,平均分通過函數返回值返回。解題過程首先求得平均分,然后將所有成績與平均分進行比較,如果大于或等于平均分,存入指定數組。

28.voidfun(charp1[]charp2[]){intij;for(i=0;p1[i]!='\0';i++);/*求出的i為p1字符的總長度包括結束標記位*/for(j=0;p2[j]!='\0';j++)p1[i++]=p2[j];/*將p2字符串連在p1字符串的后面*/p1[i]='\0';/*在字符串最后加上結束標記符*/}voidfun(charp1[],charp2[])\r\n{\r\ninti,j;\r\nfor(i=0;p1[i]!='\\0';i++);/*求出的i為p1字符的總長度,包括結束標記位*/\r\nfor(j=0;p2[j]!='\\0';j++)\r\np1[i++]=p2[j];/*將p2字符串連在p1字符串的后面*/\r\np1[i]='\\0';/*在字符串最后加上結束標記符*/\r\n}解析:本題用兩個循環,第1個循環的作用是將i走到第1個字符串的末尾。第2個循環的作用是將第2個字符串的字符連到第1個字符串的末尾。

29.

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

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

31.voidfun(intxintpp[]int*n){intij=0for(i=2;i<=x;i=i+2)/*i的初始值為2步長為2確保i為偶數*/if(x%i==0)/*將能整除x的數存入數細pp中*/pp[j++]=i*n=j/*傳回滿足條件的數的個數*/}voidfun(intx,intpp[],int*n)\r\n{\r\ninti,j=0\r\nfor(i=2;i<=x;i=i+2)/*i的初始值為2,步長為2,確保i為偶數*/\r\nif(x%i==0)/*將能整除x的數存入數細pp中*/\r\npp[j++]=i\r\n*n=j/*傳回滿足條件的數的個數*/\r\n}解析:本題題干信息是;能整除x且不是奇數的所有整數。循環語句中i從2開始且每次增2,所以i始終是偶數。

32.intfun(intlimintaa[MAX]){intijk=0;for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素數*/{for(j=2;j<i;j++)if(i%j==0)break;if(j>=i)aa[k++]=i;;/*將求出的素數放入數組aa中*/}returnk;/*返回所求出的素數的個數*/}intfun(intlim,intaa[MAX])\r\n{\r\ninti,j,k=0;\r\nfor(i=2;i<=lim;i++)/*求出小于或等于lim的全部素數*/\r\n{for(j=2;j<i;j++)\r\nif(i%j==0)break;\r\nif(j>=i)\r\naa[k++]=i;;/*將求出的素數放入數組aa中*/\r\n}\r\nreturnk;/*返回所求出的素數的個數*/\r\n}解析:在做這道題時,我們只需掌握素數的基本算法就可以了,一般表示素數的方法如下:

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

if(i%j==0)break;

if(j>=i)

33.

解析:該程序功能是統計各年齡段的人數。本題中采用的是多if選擇語句,實現了不同年齡段的分支選擇。

34.

解析:函數fun的功能是計算并輸出3到n之間(含3和n)所有素數的平方根之和,首先根據題干中的要求找出3到n之間的素數,并求出素數的平方根,然后求得這些平方根的和。

35.DC語言不允許定義動態數組,定義數組的大小必須為常量表達式。A選項錯誤,C語言中的數組沒有此類型的定義方法;B選項錯誤,定義數組應指明數組大小,如果不指明數組大小,需要給定元素的個數;C選項錯誤,N為變量,不能用來定義數組大小。故本題答案為D選項。

36.C

37.Cf函數的功能是對形參a的各個成員用結構體變量b的各個成員進行賦值后,然后返回變量a。2022-2023學年山東省泰安市全國計算機等級考試C語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、單選題(12題)1.若有如下程序:#definePI3.1415926#defineA(r)2*PI*rmain(){floata,1;a=3.0;1=A(a);printf("r=%.2f,1=%.2f\n",a,1);}則程序運行后的輸出結果是()

A.r=3.001=18.85

B.3.00,18.85

C.r=3.0000001=18.8495555

D.r=3.01=18.8495555

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

A.軟件測試應該由程序開發者來完成

B.程序經調試后一般不需要測試

C.軟件維護只包括對程序代碼的維護

D.以上三種說法都不對

3.有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3,d=0;if(a==1&&b++==2) if(b!=2||c--!=3) printf(“%d,%d,%d\n”,a,b,c); elseprintf(“%d,%d,%d\n”,a,b,c);elseprintf(“%d,%d,%d\n”,a,b,c);}程序的運行結果是()。

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

4.一個二維數組的定義語句為“inta[3][4]={{3,4},{2,8,6}};”,則元素a[2][1]的值為()。

A.0B.4C.8D.6

5.現有如下程序段#include"stdio.h"main(){inta[5][6]={23,3,65,21,6,78,28;5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};inti=0,j=5;printf("%d\n",*(&a[0][0]+2*i+j-2));}則程序的輸出結果為

A.21B.78C.23D.28

6.設有定義“Charp[]={‘1’,‘2’,‘3’},*q=p;”,以下不能計算出一個char型數據所占字節數的表達式是()。A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])

7.

8.

A.if(x>0)y=1;elseif(x==0)y=0;elsey=-1;

B.y=0;if(x>0)y=1;elseif(x<0)y=-1;

C.y=0;if(x>=0)if(x>0)y=1;e1sey=-1;

D.if(x>=0)if(x>0)y=1;elsey=0:elsey=-1;

9.下述程序的輸出結果是()。#include<stdio.h>voidmain(){chara=1,b=2;charc=a^b<<2;printf("\n%d",C);}

A.9B.10C.12D.2

10.層次型、網狀型和關系型數據庫劃分原則是()。

A.記錄長度B.文件的大小C.聯系的復雜程度D.數據之間的聯系方式

11.

12.有以下程序:

程序運行后的輸出結果是()。A.1B.11C.7D.9

二、2.填空題(12題)13.以下程序的定義語句中,x[1]的初值是【】,程序運行后輸出的內容是【】。

#include<stdio.h>

main()

{intx[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;

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

{p[i]=&x[2*i+1];

printf("%d",p[i][0]);

}

printf("\n");)

}

14.下面函數用來求兩個單精度數之和,并通過形參將結果傳回,請填空。

voidsub(floatx,floaty,【】z)

{【】=x+y;}

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

16.下列程序的輸出結果是【】。

#include<stdio.h>

main()

{charb[]="Helloyou";

b[5]=0;

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

}

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

main()

{unsignedshorta=65536;intb;

printfC%d\n",b=a);

}

18.如下程序片段:

ina,b,c;

printf("inputa,b,c:");

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

欲使輸出結果為1、2、3(分別對應于a、b、c),輸入數據的正確形式為【】。

19.與表達式a+=b等價的另一書寫形式是______。

20.觀察題目要求,可以知道以下幾點:}

21.strcmp函數的功能是【】。

22.設有以下定義和語句,則*(*(p+2)+1)的值為【】。

inta[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

23.若x為血類型,請寫出與!x等價的C語言表達式______。

24.已定義charch=′$′;inti=1,j;,執行j!=ch&&i++以后,i的值為【】。

三、3.程序設計題(10題)25.請編寫一個函數fun(),它的功能是:將ss所指字符串中所有下標為偶數位置的字母轉換為小寫(若該位置上不是字母,則不轉換)。

例如,若輸入ABC4efG,則應輸出aBc4efg。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*SS)

{

}

main()

{

chartt[81];

clrscr();

printf("\nPleaseenteranstringwithin80

characters:\n");

gets(tt);

printf("\n\nAfterchanging,thestring\n

\%s",tt);

fun(tt);

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

}

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

例如:a數組中的值為:

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

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

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

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

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

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

28.編寫一個函數fun(),它的功能是:實現兩個字符串的連接(不使用庫函數strcat,即把p2所指的字符串連接到p1所指的字符串后。

例如,分別輸入下面兩個字符串:

FirstString

SecondString

則程序輸出:

FirstStringSecondString

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

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

試題程序:

#include<stdio.h>

#include<conio.h>

voidfun(charpi[],charp2[])

{

}

main()

{

chars1[80],s2[40];

clrscr();

printf("Enters1ands2:\n");

scanf("%s%s",s1,s2);

printf("s1=%s\n",s1);

printf("s2=%s\n",s2);

printf("Invokefun(s1,s2):\n");

fun(s1,s2);

printf("Afterinvoking:\n");

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

}

29.請編寫一個函數fun,它的功能是:找出一維整型數組元素中最大的值和它所在的下標,最大的值和它所在的下標通過形參傳回。數組元素中的值已在主函數中賦予。

主函數中x是數組名,n是x中的數據個數,max存放最大值,index存放最大值所在元素的下標。

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

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

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

}

31.請編寫函數voidfun(intx,intpp[],int*n),它的功能是求出能整除x且不是奇數的各整數,并按從小到大的順序放在pp所指的數組中,這些除數的個數通過形參n返回。

例如,若x中的值為24,則有6個數符合要求,它們是2,4,6,8,12,24。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

voidfun(intx,intPP[],int*n)

{

}

main()

{

intx,aa[1000],n,i;

clrscr();

printf("\nPleaseenteranintegernumber:

\n");

scanf("%d",&X);

fun(x,aa,&n);

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

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

printf("\n");

}

32.編寫函數intfun(intlim,intaa[MAX]),該函數的功能是求出小于或等于lim的所有素數并放在aa數組中,該函數返回所求出的素數的個數。

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

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

試題程序:

#include<conio.h>

#include<stdio.h>

#defineMAX100

intfun(intlim,intse[MAX])

{

}

main()

{

intlimit,i,sum;

intaa[MAX];

clrscr();

printf("輸入一個整數");

scanf("%d",&limit);

sum=fun(limit,aa);

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

{

if(i%10==0&&i!=0)/*每行輸出10個數*/

printf("\n");

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

}

}

33.請編寫函數fun,函數的功能是:統計各年齡段的人數。N個年齡通過調用隨機函數獲得,并放在主函數的age數組中;要求函數把O至9歲年齡段的人數放在d[0]中,把10至19歲年齡段的人數放在d[1],把20至29歲年齡段的人數放在d[2]中,其余依此類推,把100歲(含100)以上年齡的人數都放在d[10]中。結果在主函數中輸出。

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

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

34.請編寫函數fun,其功能是:計算并輸出3到n之間(含3和n)所有素數的平方根之和。

例如,在主函數中從鍵盤給n輸入100后,輸出為:sum=148.874270。

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

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

四、單選題(0題)35.下列選項中,能正確定義數組的語句是()。

A.intnum[0..2008];

B.intnum[];

C.intN=2008;intnum[N];

D.#defineN2008;intnum[N];

五、單選題(0題)36.設有關鍵碼初始化序列{Q,H,C,Y,P,A,M,S,R,D,F,X},新序列{F,H,C,D,P,A,M,Q,R,S,Y,X}是采用()方法對初始序列精細第一堂排序的結果。

A.直接插入排序B.二路歸并排序C.快速排序D.基數排序

六、單選題(0題)37.

有以下程序

#include<stdio.h>

#include<string.h>

typedefstrlIct{charname[9];charsex;floatscore[2];}STU;

STUf(STUa)

{STUb={"Zhao",m,85.0,90.0);inti;

strcpy(aname,b.name);

sex:b.sex;

for(i=0;i<2;i++)a.score[i]=b.score[i];

returna;

}

main

{STUc="Qian",f,95.0,92.0},d;

d=f(c).printf("%s,%c,%2.0f,%2.0f",d.Name,d.sex,d.score[0],d.score[1]);

}

程序的運行結果是()。

A.Qian,f,95,92

B.Qian,m,85,90

C.Zhao,m,85,90

D.Zhao,f,95,92

參考答案

1.A

2.D程序調試是由程序開發者完成診斷和改正程序中的錯誤的過程;軟件測試是由專門的測試人員完成,是發現錯誤而執行程序的過程;軟件維護是指軟件系統交付使用以后,為了改正錯誤或滿足新的需要而修改軟件的過程,是軟件生存周期中非常重要的一個階段。

3.Belse總是和最近的if配對。進入第1個if語句進行條件判斷時,因為是選輯與操作,需要兩邊運算對象的值均為非零值才為真,所以需要逐個執行判斷。結果為1,進入第2個if語句進行條件判斷。因為“b!=2”條件成立,所以整個條件表達式的值為真,不再執行邏輯或的第2個運算對象“(c--!=3)”變量c的值不變,也不再執行第1個else語句。輸出a的值1,b的值3,c的值3。故本題答案為B選項。

4.A

5.A解析:通過地址來引用二維數組,若有以下定義:inta[3][4],i,j;且當0≤i≤3,0≤j<4則可以有以下幾種方式來引用數組中的第i行,第j列的元素:\ue008a[i][j]\ue009,\ue008*(a[i]+j),\ue009*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表達式&a[0][0]+2*i+j-2相當于是地址&a[0][0]加上多少偏移量。

6.A根據題目中的定義可知,“sizeof(p)”計算的是數組p中所有元素所占用的字節數,而不是char型數據所占的字節數。故本題答案為A選項。

7.C

8.C解析:選項A的意思是:在x>O情況下,y為1,否則,在x=O時,y為0,剩下x<O時,y為-1,滿足本題中函數的要求。選項B描述的意思是:初始化y的值為0,在x>O時,給y重新賦值為1,否則,在x<O時,給y重新賦值為-1,滿足本題中函數的要求。選項C描述的意思是:在x>=0情況下,如果x>O,則y為1,否則,即x==0時,y為-1;剩下的x<O時,y為0。可見答案C實現的結果不是給定的表達式。選項D中描述的意思是:在x>=0的情況下,如果x>O,就給y賦值為1,否則即x==0時給y賦值為0,在不是x>=0的其他情況下,就給y賦值為-1,滿足本題中函數的要求。所以4個選項中C為所選。

9.A

10.D層次模型的基本結構是樹形結構,網狀模型是一個不加任何條件限制的無向圖,關系模型采用二維表來表示,所以三種數據庫的劃分原則是數據之間的聯系方式。

11.C

12.D題干中,函數fun的功能是將二維數組p的行下標為1、列下標為1的元素(p[1][1])的值賦給二維地址s指向的*s所指向的存儲單元。main函數中定義了整型指針p,動態分配了整型長度的內存空間,調用函數fun將數組元素a[1][1],即9賦給p所指向的空間。本題答案為D選項。

13.224682,2468解析:在主函數中根據整型數組x[]的定義可知,x[1]的初值等于2。在for循環語句中,當i=0時,p[0]=&x[1],p[0][0]=2;當i=1時,p[1]=&x[3],p[1][0]=4;當i=2時,p[2]=&x[5],p[2][0]=6;當i=3時,p[3]=&x[7],\ue008p[3][0]\ue009=8,所以程序輸出的結果為2、4、6、8。

14.float**zfloat*\r\n*z解析:C程序中可以通過傳送地址的方式在被調用函數中直接改變被調用函數中變量的值,從而達到函數之間數據的傳遞。

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

16.HelloHello解析:語句b[5]=0;相當于語句b[5]='\\0';且'\\0'為字符串結束標志,輸出時遇到'\\0'就停止輸出。

17.00解析:對于一個unsignedshort來說,它能取的最大值是65535。這里給a賦值65536,已經超出了它的取值范圍,這樣它的高位將被截掉,只把低位賦給它(全零)。所以a的值實際為0。

18.a=1b=2c=3a=1,b=2,c=3解析:此題考查了scanf函數的輸入格式。scanf函數的輸入格式規定如果兩個格式說明項間有一個或多個普通字符,那么在輸入數據時,在兩個數據之間也必須以這一個或多個字符作為分隔符。

19.a=a+ba=a+b解析:a+=b與a=a+b等價,作用是把變量a的值加b后再賦給變量a。

20.p=i;i>=pi<=Np=i;\r\ni>=p\r\ni<=N解析:本題主要考查了插入排序。由于程序中的數組在開始已經按從小到的大順序排好。在插入時,首先要查到第一個大于待插入數的數組下標,即當待插入元素小于數組中當前元素時,記下數組的當前下標p,并結束循環。故第一空目的是為了記下數組下標,應填p=i;插入的第二部是將大于待插入元素的所有元素都向后移動一位,故在循環時,要從最后一個元素到第p個元素都要后移一位,因此第二空應填i>=p。最后一個循環是將N+1個元素都輸出,故最后一空應為i<=N。(注:本題有多種答案,以上僅提供一種)

21.字符串的比較strcmp函數的原型是intstrcmp(char*s1,char*s2);功能是對s1和s2所指字符串進行比較,若s1<s2返回負數,若s1==s2返回0,若s1>s2返回正數。

22.6060解析:程序中定義a是一個3行2列的二維數組,p是指向兩個元素的一維數組指針,并讓p指向二維數組a的首行。則代碼*(*(p+2)+1)中的p+2指向二維數組a的第三行a[2],*(p+2)指向a[2[]0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60。

23.x==0x==0解析:!x的邏輯意思就是x為非,即x==0。

24.11解析:在執行邏輯表達式'j=!ch&&i++'時,首先判斷j=!ch的值,因為'ch=\'$\''不為0,所以'j=!ch=0',編譯系統便不再計算表達式'i++'的值,i的值不變,仍為1。

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

26.

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

溫馨提示

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

評論

0/150

提交評論