C語言綜合練習題及詳解

2021-09-19 20:51:33 字數 3958 閱讀 7949

綜合練習題

一、從下列四個供選擇的答案中選出正確的乙個答案

1、語句printf(「%%d%d」, 123); 將輸出:

a) %123%d b) %%d123 c) %d123 d)上述語句語法有錯

「%%」格式表示輸出乙個「%」。

2、執行下列程式段後, a值為:

int a, b;

a=15; b=12;

a=(a-- ==b++)? a%5 : a/5;

a) 0b) 2.8c ) 4d) 2

先計算a--==b++的值:

a--的值為15,執行後a=14;b++的值為12,執行後b=13;15==12為假

執行a/5即14/5值為2

結果: a = 2

3、判斷字元變數c的值為數字(』0』---』9』)則返回1,否則返回0, 可用表示式:

a) 『0』<=c<=『9』 b) 『0』<=c && c<=『9』 c) 『0』<=c || c<= 『9』 d)以上均不是

4、對於int x, y; 語句 if (x<0) y= -1; else if (!x) y=0; else y=1; 等價於:

a) y=0; if (x>=0) if (x) y=1; else y= -1;

b) if (x!=0) if (x>0) y=1; else y= -1; else y=0;

c) if (x<0) y= -1; if (x!=0) y=1; else y=0;

d) y= -1; if (x!=0) if (x>0) y=1; else y=0;

語句if (x<0) y= -1; else if (!x) y=0; else y=1; 等價於:

if (x < 0)

y = -1;

else

即:1 x < 0

y = 0 x = 0

1 x > 0

5、迴圈 for(i=0, j=5; ++i!=--j; ) printf(「%d %d」, i, j); 將執行

a) 6次 b) 3次 c) 0次 d) 無限次

i = 0, j = 5, (++i1) != (--j4) 成立: i = 1, j = 4

i = 1, j = 4, (++i2) != (--j3) 成立: i = 2, j = 3

i = 2, j = 3, (++i3) != (--j2) 成立: i = 3, j = 2

……6、下列程式段執行後s值為:

int i=5, s=0;

do if (i%2) continue; else s+=i; while (--i);

a) 15 b) 9 c) 6 d) 以上均不是

寫成規範形式:

doif (i % 2)

continue;

else

s += i;

while (--i);

i = 5, s = 0: i % 2 = 1i = 4

i = 4, s = 0: i % 2 = 0: s = 0 + 4 = 4; i = 3

i = 3, s = 4: i % 2 = 1i = 2

i = 2, s = 4: i % 2 = 0: s = 4 + 2 = 6; i = 1

i = 1, s = 6: i % 2 = 1i = 0

7、對於int a,要使((1<<2>>1)|a)==a; 則a 可以是:

a) 2 b) 6 c) 10 d) 2,6,10均可

10000 0000 0000 0001

1<<20000 0000 0000 0100

1<<2>>1: 0000 0000 0000 0010

(1<<2>>1) | 2: 0000 0000 0000 0010 (2)

(1<<2>>1) | 6: 0000 0000 0000 0110 (6)

(1<<2>>1) | 10: 0000 0000 0000 1010 (10)

8、對於以下巨集定義:

#define sq(x) x*x

#define dd(x,y) sq(x)-sq(y)

巨集呼叫dd(2*3, 2+3)執行後值為:

a) 43 b) 11 c) 25 d) 以上均不是

dd(2*3,2+3)

sq(2*3)-sq(2+3)

2*3*2*3-2+3*2+3

439、對於以下結構定義:

struct *p;

*p->str++中的++加在

a) 指標str上 b) 指標p上 c) str所指的內容上 d) 以上均不是

優先順序: 「->」 >是右結合

*p->str++ *((p->str)++)

例子: 假如有

則*p->str++的值為 『h』, 執行後, str指向』e』單元.

10、將s所指節點加到p所指節點之後(如下圖), 其語句應為:

next .

pnext

s a) s->next = p+1; p->next = s

b) p->next = s; s->next = p->next;

c) s->next=p->next; p->next=s->next;

d) s->next = p->next; p->next = s;

11、語句if (a>b) k=0; else k=1; (int a, b, k) 等價於:

a) k=(a>b)?1:0; b) k=a>b; c) k=a<=b; d) 以上均不是

12、對於int i; char c, s[20];從輸入序列123ab45efg中將123讀入i; 』 b』讀入c; 「45efg」讀入s, 則scanf語句應寫為:

a) scanf(「%da%c%s」, i, c, s) b) scanf(「%d%*c%c%s」,&i, &c, s);

c) scanf(「%da%c%s」, &i,&c,&s) d) scanf(「%d%c%c%s」, &i, &c, s);

13、若有以下說明和語句, 已知int和double型別分別佔2和8個位元組,則sizeof(st)的值為:

struct st

};a) 18b) 20c) 12d) 以上均不是

14、對於以下程式段, 執行後i值為:

enum weeks ;

enum weeks a=1;

int i=0;

switch (a)

a) 1 b) 0 c) 3 d) 上述程式有語法錯誤

15、對於以下遞迴函式f, 呼叫f(4),其返回值為:

int f(int n)

a) 10 b) 11c) 0d) 以上均不是

16、某一程式test.c,編譯後執行:test 123 456 abc 則相應的argc及ar**[3]分別為:

a) 3 「456」 b) 3 「abc」 c) 4 「456」 d) 4 「 abc」

17、如下程式段:

int c=;

int *k;

k=c;

printf("next k is %d",*++k);

其輸出應為:

a) 2 b) 7 c) 1 d)以上均不對

18、如果變數xx有如下型別:

struct {

char a1; 1

int a2; 2

xx; 如果sizeof(xx)的值為3, 則:

union {

char a1;

int a2;

c語言練習題

下列敘述中不正確的是 c a 函式可以帶引數 也可以不帶引數。b main函式在c程式中必須有惟一乙個 c c程式的執行從main函式開始,所以main函式必須放在程式最前面 d 每個函式執行時,按函式體中語句的先後次序,依次執行每條語句 以下四個程式中,完全正確的是 d a include mai...

C語言練習題

1.兔子繁殖問題 設有一對新生兔子,從第三個月開始它們每個月都生一對兔子。按此規律,並假設沒有兔子死亡,一年後共有多少對兔子?答 include int main void 執行後結果 一年後的兔子數為 144 1 fib1 1 2 fib2 1 3 fib3 2 4 fib4 3 5 fib5 5...

C語言迴圈結構練習題

while語句的使用格式和注意事項 do while語句的使用格式和注意事項 for語句的使用格式和注意事項 break和continue語句在迴圈語句中的應用 迴圈結構的巢狀 使用goto語句實現迴圈結構 窮舉法程式設計方法 迭代程式設計方法 1 語句while e 中的條件 e等價於 a.e 0...