學完就忘之記錄練習題

2021-09-26 03:22:24 字數 3654 閱讀 7432

1.若有以下定義:char a; int b; float c; double b;則表示式 a * b + d - c 值的型別為double

2.能正確表示邏輯關係:" a >= 10 或 a <= 0"的c語言表示式是a >= 10 || a <= 0

3.c 語言中,函式的返回值型別的定義可以預設,此時函式返回值的隱含型別是void

4. test.c 檔案中包含以下語句:檔案中定義的四個變數,哪個變數不是指標型別___b___

#define int_ptr int*

typedef int* int_ptr;

int_ptr a, b;

int_ptr c, d;

5.變數分為全域性和區域性兩種,全域性變數沒有賦初值時,將由系統自動置為0。

6.已知語句:const char *p = "hello!",則表語句 printf("%c\n",*p)輸出的是h

7.若 int a = 10,則執行表示式 a += a *= a -= a/3,後 a 的值為98

解析:操作符優先順序:*,/ 大於 = 大於 +=,-=,*=。並且結合方式是從右到左。則先計算 a = a - a/3 = 7,a = a * a = 49,a = a + a = 98。

若有 int a = 4;則執行下面語句 x = 4; x += x *= x +x後 x 的值為64。

解析:先執行乘法,x = 16;則剩下 x += x += x。從右往左執行 x = 32,x = 64。

8.過載插入運算子 << 時,其運算子函式的返回值型別應當是iostream

9.下列程式執行後的輸出結果是 7 。

#define f(x,y) ((x)+(y))

int main()

解析:()操作符的優先順序大於自增操作符。因此在巨集展開後先算 3 + 4,後 a++,b++。

10.如下程式的輸出結果是3

int change(int *px)

int main()

11.若有定義 typedef char string[255]; string s;則 s 是字元陣列變數

12.如下**的執行結果是12。\123轉為八進位制的123,代表十進位制的 75 。

13. strlen() 求字串長度,以 \0 結束(不包含\0), sizeof() 求運算元的型別長度(以位元組為單位),*p是指標變數存放位址永遠占用4個位元組。

char *p = "blue1";

char a = "bule1";

printf("%d\n", strlen(p));//5

printf("%d\n", strlen(a));//5

printf("%d\n",sizeof(p) );//4

printf("%d\n", sizeof(a));//6

14.

unsigned long a = 0x11000000;

printf("%x\n", *(unsigned char *)&a);//0

int a[5] = ;

int *p = (int *)((int)a + 1);

printf("%x", p[0]);//200 0000

int i = 1;

printf("%d,%d", sizeof(i++), i);//4,1

解析:sizeof()在編譯期間進行處理,預算i++的型別,但i並沒有參與運算。所以i的輸出還是1。

15.   則值為 3 的表示式是p += 2,*p++

int x = ;

int *p = x;

16.輸出結果:隨機的字串

char *mystring();

char *s = "hello world!";

for (int i = 0; i < sizeof(buffer)-1; i++)

return buffer;

}int main()

17.輸出為250。解析:a 先右移 5 位,成為 0000 0101,再按位取反變為 1111 1010,十進位制表示為 250。

unsigned char a = 0xa5;

unsigned char b = ~a >> 4 + 1;

printf("%d", b);

18.寫出中綴表示式: 12 + 5 * (2 + 6) - 1對應的字尾表示式:12 5 2 6+* + 1-19.在c/c++語言中,下面關於陣列的描述錯誤的是: c

a . 陣列的名字就是指向該陣列第乙個元素的指標

b. 長度為 n 的陣列,下標的範圍是 0 — n-1

c.陣列的大小必須在編譯時確定

d. 陣列可通過值引數,位址指標,引用引數三種方式傳遞給引數

20.有如下**,則各輸入語句中錯誤的是:d

struct studentstd[3],*p=std;
a. scanf("%d",&(*p).age);   

b. scanf("%d",&std[0].gender);

c. scanf("%d",&(p->gender));

d. scanf("%d",&std.name);

21.輸出結果8,8。*(p++)+= 123,先執行 *p += 123,陣列元素變為 ,然後 p++。

int arr = ;

int *p = arr;

*(p++) += 123;

printf("%d,%d", *p, *(++p));//8,8

22.在c語言中,函式的資料型別是指函式返回值的資料型別。

23.輸出的是「abcde」這個常串中字元 c 所在的位址。因為對於s沒有解引用輸出的就是位址。%lu表示長整形無符號數。

char *s = "abcde";

s += 2;

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

C 之練習題5

5.有乙個由按鈕組成的矩陣,其中每 行有6個按鈕,共5行。每個按鈕的位置上有一盞燈。當按下乙個按鈕後,該按鈕以及周圍位 置 上邊 下邊 左邊 右邊 的燈都會改變一次。即,如果燈原來是點亮的,就會被熄滅 如果燈原來是熄滅的,則會被點亮。在矩陣角上的按鈕改變3盞燈的狀態 在矩陣邊上的按鈕改變4盞燈的狀態...

C 之練習題32

1.數根可以通過把乙個數的各個位上的數字加起來得到。如果得到的數是一位數,那麼這個數就是數根。如果結果是兩位數或者包括更多位的數字,那麼再把這些數字加起來。如此進行下去,直到得到是一位數為止。比如,對於24 來說,把2 和4 相加得到6,由於6 是一位數,因此6 是24 的數根。再比如39,把3 和...

C 之練習題41

1.把 m 個同樣的蘋果放在n 個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k 表示 注意 5,1,1 和1,5,1 是同一種分法。輸入資料 第一行是測試資料的數目t 0 t 20 以下每行均包含兩個整數m 和n,以空格分開。1 m,n 10。輸出要求 對輸入的每組資料m 和n,...