程序設計入門-C語言基礎知識-翁愷-期中測試

1、試題

程序設計入門—C 語言
期中測評less

試題下載地址:測試

http://nos.netease.com/edu-lesson-pdfsrc/217E194E46A6595A3F55438033749061-1519633077802?Signature=Anos05NiH%2B7uB0aMTm87OqfWlOz38TBUVYhQnBfoNtY%3D&Expires=1535260083&NOSAccessKeyId=7ba71f968e4340f1ab476ecb300190fa&download=%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%85%A5%E9%97%A8-C%E8%AF%AD%E8%A8%80-week4%E6%9C%9F%E4%B8%AD%E6%B5%8B%E8%AF%84.pdf
1 在代碼:
while ( !e )
中,!e 等價於:
A.e ==0 B. e != 1 C. e!=0 D. e == 1
2. 如下代碼片斷的輸出是:
int j=4;
for ( int i=j; i<=2*j; i++ ) {
switch ( i/j ) {
case 0:
case 1: printf(「*」); break;
case 2: printf(「#」);
}
}
A.****## B. ***# C. *# D. ****# E. ****
3. 下列可用於 C 語言程序標識符的一組是(名字間以逗號分隔):(多選)
A.For, _abc, IF B. _if, _123, file C. void, d, WORD
D. For, -abc, IF E. 2_a, xyz, b1_s
4. 對於如下代碼:
int i,j=6;
如下哪句話是對的?
A.i 和 j 的初始值都是 6 B. i 被初始爲 0,而 j 是 6
C. i 不會被初始化,而 j 是 6 D. 不能經過編譯
5. 對於如下代碼:
int i;
scanf("%d", &i);
i %= 4
執行後,i 會有幾種可能性?
A.7 B. 4 C. 3 D. 2 E.1 F.0
6. 對於如下代碼:
int i=6;
if ( i<= 6 )
printf("hello\n");;
else
printf("bye-bye\n");;
哪句話是對的?(多選)
A. 打印出"hello" B. 沒法編譯 C. 打印出"bye-bye"
D. 不能經過編譯 E. 打印出"hello bye-bye"
7. 對於如下代碼:
int i=6;
do {
printf("%d", i--);
} while (0);
哪句話是對的?
A. 打印出 5 B. 由於 while(0),沒法編譯
C. 打印出 6 D. 打印不出東西
8. 對於如下代碼:
int i;
for ( i=0; i<10;i++)
printf("%d", i);
for 循環後,i 的值是多少?
A.11 B. 9 C. 10 D. 不肯定
9. 下列程序段輸出結果爲:
int x=1, y=12;
printf(「%d」,y*x++);
A.20 B. 10
C. 24 D. 12
10. 對
for(表達式 1;;表達式 3)
可理解爲
A. for(表達式 1;表達式 1;表達式 3) B. for(表達式 1;1;表達式 3)
C. for(表達式 1; 表達式 3;表達式 3) D. for(表達式 1;0;表達式 3)
11. 如下表達式
x&&1
用在 if 的條件中時,和哪一個是等價的(多選)
A.x==0 B. x==1 C. x!=0 D. x!=1 E. x.net

 

2、分析及答案

 

程序設計入門—C 語言
期中測評
1 在代碼:
while ( !e )
中,!e 等價於:
A.e ==0 B. e != 1 C. e!=0 D. e == 1
 
* 只有當e的邏輯爲false時這個表達式才成立,!false=true  
* 而對於整數e而言,任何非0的整數值都是邏輯的true,換句話說只有整數0才表明邏輯false,所以!e換一個寫法既是e == 0
所以選 A
 
2. 如下代碼片斷的輸出是:
int j=4;
for ( int i=j; i<=2*j; i++ ) {
switch ( i/j ) {
case 0:
case 1: printf(「*」); break;
case 2: printf(「#」);
}
}
A.****## B. ***# C. *# D. ****# E. ****
 
表格模擬:
j     i    循環條件   i/j       輸出
4    4    4<=8    1    *
4    5    5<=8    1    *
4    6    6<=8    1    *
4    7    7<=8    1    *
4    8    8<=8    2    #
4    9    9<=8    break    break
****#
所以選D
 
3. 下列可用於 C 語言程序標識符的一組是(名字間以逗號分隔):(多選)
A.For, _abc, IF B. _if, _123, file C. void, d, WORD
D. For, -abc, IF E. 2_a, xyz, b1_s
 
知識點:
* c語言是大小寫敏感的語言
* 標識符以字母或下劃線開頭,有數字字母下劃線構成
* 不能使用c語言關鍵字(保留字)
 
A 符合
B 符合,file不是c語言的關鍵字
C 不能有關鍵詞(保留字)void
D -abc "-"減號不能出如今標識符中
E 2_a 不能以數字開頭
所以選 A B
 
 
4. 對於如下代碼:
int i,j=6;
如下哪句話是對的?
A.i 和 j 的初始值都是 6 B. i 被初始爲 0,而 j 是 6
C. i 不會被初始化,而 j 是 6 D. 不能經過編譯
 
這個語句作了兩件事情:
1. 聲明瞭變量i,和j
2. 對j賦初始值6
 
所以選C
 
5. 對於如下代碼:
int i;
scanf("%d", &i);
i %= 4
執行後,i 會有幾種可能性?
A.7 B. 4 C. 3 D. 2 E.1 F.0
 
用戶輸入一個整數i,而後i對於4作取餘運算。
這裏i多是正整數0或負整數
對於取餘4而言,取餘的結果多是 0、一、二、三、-一、-二、-3
題目問的是有幾種可能,那麼一共是7種
所以選:A
 
 
6. 對於如下代碼:
int i=6;
if ( i<= 6 )
printf("hello\n");;
else
printf("bye-bye\n");;
哪句話是對的?(多選)
A. 打印出"hello" B. 沒法編譯 C. 打印出"bye-bye"
D. 不能經過編譯 E. 打印出"hello bye-bye"
 
* 在沒有大括號的狀況下這裏if後面多出來的分號會致使if和else沒法聯接,多個分號表明一個空的語句,if在沒有大括號的狀況下只會和if後面第一條語句結合造成一個if判斷分支,若是加賽一條語句,if就是一個獨立的判斷了,因此不能和後面的else聯接上了。
* 咱們建議在全部的if分支的後面都加上大括號
所以選 B D
 
 
7. 對於如下代碼:
int i=6;
do {
printf("%d", i--);
} while (0);
哪句話是對的?
A. 打印出 5 B. 由於 while(0),沒法編譯
C. 打印出 6 D. 打印不出東西
 
* do-while循環至少會執行一次
* i--是i減之前的值,先計算後減,而--i是i減之後的值,先減後運算。
* 0徹底等價於邏輯false,可是整數1只是邏輯true的一個子集,任何非零整數都爲邏輯true
i的初始值爲6,第一次打印爲6,i--是減之前的值所以爲6,printf執行完後i爲5,while條件0始終爲false所以循環體只會執行一次。
所以選 C 
 
8. 對於如下代碼:
int i;
for ( i=0; i<10;i++)
printf("%d", i);
for 循環後,i 的值是多少?
A.11 B. 9 C. 10 D. 不肯定
 
咱們知道當i < 10 不成立時循環纔會終止,也就是說i>=10 那麼步進1的狀況下i的臨界值就是10
所以選 C
 
 
9. 下列程序段輸出結果爲:
int x=1, y=12;
printf(「%d」,y*x++);
A.20 B. 10
C. 24 D. 12
 
咱們知道++、--的優先級要低於四則運算的,而且這是一個後置的自增,++i是加1之前的值,先參與運算在作自增。
1*12  輸出12 ,而後x自增一,x=2,y不變,固然咱們並不推薦這樣的寫法,不利於閱讀,正確的寫法能夠把x++拆分到下一個語句執行:
printf(「%d」,y*x);
x++;
 
所以選D
 
 
10. 對
for(表達式 1;;表達式 3)
可理解爲
A. for(表達式 1;表達式 1;表達式 3) B. for(表達式 1;1;表達式 3)
C. for(表達式 1; 表達式 3;表達式 3) D. for(表達式 1;0;表達式 3)
 
這個循環的條件判斷被省略掉了,只有初始化和步進的語句,所以也能夠當作是一個終止條件始終爲1的循環。
也能夠用for改寫爲:for(表達式 1;1;表達式 3);  或 while改寫  表達式 1;   while(1){表達式 3}; 固然這個循環若是循環體內部沒有break等跳出循環結構的語句的話就是一個死循環。若是有明確的終止條件,咱們仍是推薦將循環繼續條件寫在循環體規定的地方,便於閱讀。
所以此題選B
 
11. 如下表達式
x&&1
用在 if 的條件中時,和哪一個是等價的(多選)
A.x==0 B. x==1 C. x!=0 D. x!=1 E. x
 
這裏x&&1右邊的1始終成立,所以能夠當作 x
當x的值不爲0邏輯則爲true,所以等價於 x != 0 或者 x 
x == 1 只是邏輯true x取值範圍的一個子集,所以 x == 1 不等價於 x != 0 或者 x
所以選 C E
 
咱們來運行下面一段代碼:
```c
#include <stdio.h>
 
void main(int argc, char *argv[])
{
 
 if (-1)
 {
  printf("-1\n");
 }
 
 if (0)
 {
  printf("0\n");
 }
 
 if (1)
 {
  printf("1\n");
 }
 
 if (2)
 {
  printf("2\n");
 }
}
 
```
測試樣例:
```
-1
1
2
 
--------------------------------
```
 
咱們發如今邏輯表達式的判斷中, 當x取非0的任意值時,x會被轉換爲邏輯true。固然咱們並不推薦這種作法,好比你要判斷x是否大於0,能夠用if(x)來作這件事,看起來很聰明,可是並很差理解,推薦的作法是  int isPositive = x > 0;  if(isPositive)
相關文章
相關標籤/搜索