C語言程式設計測試2 (附參考答案)
範圍: 1~6章
試題
一、單項選擇題(1~30題,每題1分;31~40題,每題2分;共50分)
1. 若有以下定義:
char s='/072';
則該語句:
(A) 使s的值包含1個字元 (B) 定義不合法,s的值不確定
(C) 使s的值包含4個字元 (D) 使s的值包含3個字元
2.以下的選項中,非法的C語言逸出字元是:
(A)'/t' (B) '/017' (C) '/n' (D)'/0xaa'
3.不能正確表示數學運算式a*b/(c*d)的C語言運算式是:(註:以“*”代替小圓點)
(A) a*b/c*d (B) a/(c*d)*b (C) a*b/c/d (D)a*b/(c*d)
4.下列標識符中,不能作為使用者自訂標識符的是:
(A)ab_2 (B) if (C) _123 (D)a_3
5.組成C語言程式的是:
(A) 子程式 (B) 過程 (C) 函數 (D)主程式和子程式
6.以下各標識符中,合法的使用者識別碼為:
(A)p#a (B)a10 (C) void (D) 10a
7.以下資料中,不正確的數值是:
(A) 0.0 (B) 5L (C) 3e3.5 (D) 986
8.以下資料中,不正確的字元常量是:
(A) "c" (B) '/n' (C) '/041' (D) 'c'
9.以下整數中,不正確的八進位或十六進位數是:
(A) 0x16 (B) 016 (C) -16 (D) 0xaaaa
10.已知各變數的類型定義如下:
int i=8,k,a,b;
unsigned long w=5;
double x=1.42,y=5.2;
則以下選項中,不符合C語言文法的運算式是:
(A) k=i++; (B) (int)x+0.4 (C)y+=x++; (D)a=2*a=3
11.以下選項中,不符合C語言文法的指派陳述式是:
(A) a=1,b=2 (B) ++i; (C) a=b=5; (D) y=(a=3,6*5);
12.以下選項中,合法的C語言關鍵字是:
(A) integer (B) Char (C) int (D) real
13.以下不正確的敘述是:
(A) 在C程式中所用的變數必須先定義後使用
(B) 在C程式中,APH和aph是兩個不同的變數
(C) 若a和b類型相同,在執行了指派陳述式a=b;後,b中的值將放入a中,
b中的值不變
(D) 當輸入數值資料時,對於整型變數只能輸入整型值;對於實型變數只
能輸入實型值
14.已知字元a的ASCII碼為十進位的97,下面程式的輸出是:
main()
{
char c1,c2;
c1='a'+'6'-'2';
c2='a'+'6'-'3';
printf("%c,%d/n",c2,c1);
}
(A) 輸出無定值 (B) d,100 (C)d,c (D)d,101
15.在C語言中,為了結束由while語句構成的迴圈,while後一對圓括弧中
運算式的值應該為:
(A) 0 (B) 1 (C) true (D) 非0
16.在C語言中,為了結束由do-while語句構成的迴圈,while後一對
圓括弧中運算式的值應該為:
(A) 0 (B) 1 (C) false (D) 非0
17.在C語言中,if語句後的一對圓括弧中,用以決定分支的流程的運算式是:
(A) 只能用邏輯運算式 (B) 只能用關聯運算式
(C) 只能用邏輯運算式或關聯運算式 (D) 可用任意運算式
18.在以下運算子中,優先順序別最高的運算子是:
(A) <= (B) / (C) != (D) &&
19.在以下運算子中,優先順序別最高的運算子是:
(A) ! (B) = (C) + (D) ||
20.在以下給出的運算式中,與do…while(E)語句中的(E)不等價的運算式是:
(A) (!E==0) (B) (E>0||E<0) (C) (E==0) (D) (E!=0)
21.在C語言中,switch語句後一對圓括弧中運算式的類型:
(A) 可以是任何類型 (B) 只能為int類型
(C) 可以是整型或字元型 (D) 只能是整型或實型
22.C語言來源程式的副檔名為:
(A) .c (B) .bat (C) .exe (D) .lib
23.下面運算式中不能滿足:當x的值為偶數時其值為真,為奇數時其值為假的是:
(A) x%2==0 (B) !x%2!=0 (C) (x/2*2-x)==0 (D) !(x%2)
24.在C語言中,能代表邏輯值“真”的是:
(A) true (B) 大於0的數 (C)非0整數 (D) 非0的數
25.設a、b和c都是int型變數,且a=3,b=4,c=5,則以下運算式中,
值為0的運算式是:
(A) 'a'&&'b' (B) a<=b
(C) a||b+c&&b-c (D) !((a<b)&&!c||1)
26.若x和y都是int型變數,x=100,y=200,且有下面的程式片段:
printf("%d",(x,y));
上面程式片段的輸出結果是:
(A) 200 (B) 100
(C) 100 200 (D) 輸出格式符不夠,輸出不確定的值
27.若k是int型變數,且有下面的程式片段:
k=-3;
if(k<=0)printf("####");
else printf("&&&&");
上面程式片段的輸出結果是:
(A) #### (B) &&&&
(C) ####&&&& (D) 有語法錯誤,無輸出結果
28.在C語言中,要求運算數必須是整型的運算子是:
(A) % (B) / (C) < (D)!
29.下面程式的輸出是:
(A) 0 (B) 1 (C) 3 (D) 不確定的值
main()
{
int x=10,y=3;
printf("%d/n",y=x/y);
}
30.執行下面程式中輸出語句後,a的值是:
(A) 65 (B) 20 (C) 15 (D) 10
main()
{
int a;
printf("%d/n",(a=3*5,a*4,a+5));
}
31.下面程式的輸出是
(A) 0 0 3 (B) 0 1 2
(C) 1 0 3 (D) 1 1 2
main()
{
int a=-1,b=4,k;
k=(a++<=0)&&(!(b--<=0));
printf("%d %d %d/n",k,a,b);
}
32.下面的程式片段所表示的數學函數關係是
(A) -1(x<0) (B) 1(x<0)
y= 0(x=0) y=-1(x=0)
1(x=0) 0(x>0)
(C) 0(x<0) (D) -1(x<0)
y= -1(x=0) y= 1(x=0)
1(x>0) 0(x>0)
y=-1;
if(x!=0)
if(x>0) y=1;
else y=0;
33.下面程式的輸出是:
(A) 741 (B) 852 (C) 963 (D) 875421
main()
{ int y=9;
for(;y>0;y--)
{
if(y%3==0)
{printf("%d",--y);continue;}
}
}
34.C語言中最簡單的資料類型包括:
(A) 整型、實型、邏輯型 (B) 整型、實型、字元型
(C) 整型、實型、邏輯型 (D) 整型、實型、邏輯型、字元型
35.為表示關係x≥y≥z,應使用C語言運算式:
(A) (x>=y)&&(y>=z) (B) (x>=y)AND(y>=z)
(C) (x>=y>=z) (D) (x>=y)&(y>=z)
36.以下程式的輸出結果是:
main()
{
int x=10,y=10;
printf("%d %d/n",x--,--y);
}
(A) 10 10 (B) 9 9 (C) 9 10 (D) 10 9
37.以下程式段的輸出結果是:
int x=3;
do
{
printf("%3d",x-=2);
}
while(!(--x));
(A) 1 (B) 3 0 (C) 1 -2 (D) 死迴圈
38.若k為整型,則while迴圈
k=0;
while(k=0)k=k-1;
(A) 執行1次 (B) 無限迴圈
(C) 一次也不執行 (D) 執行2次
39.兩次運行下面的程式,如果從鍵盤上分別輸入6和4,則輸出結果是
main()
{
int x;
scanf("%d",&x);
if(x++>5)printf("%d/n",x);
else printf("%d/n",x--);
}
(A) 7和5 (B)6和3 (C)7和4 (D) 6和4
40.能正確表示a≥10或a≤0的關聯運算式是
(A) a>=10 or a<=0 (B) a>=10 | a<=0
(C) a>=10 || a<=0 (D) a>=10 && a<=0
(註:原題選項c、d相同,本題稍作修改)
二、寫出程式或程式段的運行結果。(每題4分,共20分)
1. main()
{
int num=0;
while(num<=2)
{
num++;
printf("%d/n",num);
}
}
上面程式的輸出結果是_______________。
2. main()
{
float x,y;
scanf("%f",&x);
if(x<0.0)y=0.0;
else if((x<5.0)&&(x!=2.0))
y=1.0/(x+2.0);
else if(x<10.0) y=1.0/x;
else y=10.0;
printf("%f/n",y);
}
若運行時從鍵盤鍵入2.0,則上面程式的輸出結果為_______________。
3. main()
{ int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:
a++;b++;break;
}
printf("a=%d,b=%d/n",a,b);
}
上面程式的輸出結果是______________________________。
4. main()
{ int a,b;
for(a=1,b=1;a<=100;a++)
{
if(b>=20) break;
if(b%3==1)
{
b+=3;continue;
}
b-=5;
}
printf("%d/n",a)
}
上面程式的輸出結果是______________________________。
5. main()
{
int a=-1;b=4;k;
k=(++a<0)&&!(b--<=0);
printf("%d %d %d /n",k,a,b);
}
上面程式的輸出結果是______________________________。
三填空題(1~10空,每空1分;11~20空,每空2分,共30分)
1. 設C語言中,int型資料佔2個位元組,則long型資料占(1)_____個位元組,
short型資料占(2)_______個位元組, float型資料占(3)______個位元組,
double型資料占(4)_______個位元組,char型資料占(5)_______個位元組。
2. 設有如下定義:
int a=12; 分別寫出下面運算式運算後a的值:
a. a+=a 則a的值為(6)_________________。
b. a+=a-=a*=a 則a的值為(7)_________________。
3. 設有一字串"ab/ncd/x12",則該字串的長度為(8)___________。
4. 將下列運算式改寫成C語言中合法的運算式:
a.b*b-4ac 改寫成(9)_________________。
b.(1/2)(ax-(a+x)/4a) 改寫成(10)________________。
5. 以下程式的功能是:從鍵盤上輸入若干個學生的成績,統計並輸出最高成績
和最低成績,
當輸入負數時結束輸入,請填空。
main()
{
float x,amax,amin;
scanf("%f",&x);
amax=x;
amin=x;
while((11)__________)
{
if(x>amax)amax=x;
if((12)__________)amin=x;
(13)__________
} printf("/namax=%f/namin=%f/n",amax,amin);
}
6. 以下程式段要求從鍵盤輸入字元,輸入字母為Y時,停止迴圈。請填空。
ch='/0';
while (14)__________ch=getchar();
7. π的近似值可用下面公式求得:
π×π/6 ≈1/(1×1)+1/(2×2)+1/(3×3)+……+1/(n×n)
若n取值10000,則最後一項的值約為1/10000,認為可達到精度要求。
用下面的程式求π的近似值,請填空。
#include <stdio.h>
#include <math.h>
main()
{
long i;
(15)__________pi;
pi=0.0;
for(i=1;i<=10000;i++)
pi+=(16)__________;
pi=sqrt(6.0*pi); /*sqrt():求平方根函數*/
printf("pi=%f/n",pi);
}
8. 費伯納西數列中的頭兩個數是0和1,從第3個數開始,每個數字
等於前兩個數的和,即:
0,1,1,2,3,5,8,13,21,……
求費伯納西數列的前20個數。要求每行輸出5個數。請填空。
#include <stdio.h>
main()
{
int f,f1,f2;
printf("Fibonacci series:/n");
f1=0;f2=1;
printf("%6d%6d",f1,f2);
for(i=3;i<=20;(17)__________)
{
f=(18)__________;
printf("%6d",f);
if((19)__________)printf("/n");
f1=f2;f2=(20)__________;
}
printf("/n");
}
附參考答案:
一、單項選擇。
01~10 A D A B C B C A C D
11~20 A C D D A A D B A C
21~30 C A B D D A A A C C
31~40 C C B B A D C C A C
二、寫出程式或程式段的運行結果。
1. 1 2 3
2. 0.5
3. a=2,b=1
4. 8
5. 0 0 4
三、填空題。
1. (1)~(5) 4 2 4 8 1
2. (6) 24
(7) 0
3. (8) 7
4. (9) b*b-4*a*c
(10) (a*x+(a+x)/(4*a))/2
5. (11) x>=0
(12) x<amin
(13) scanf("%f",&x);
6. (14) (ch!='Y')
7. (15) float或double
(16) 1.0/(i*i)
8. (17) i++
(18) f1+f2
(19) i%5==0
(20) f