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,...