首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言經典考題詳解:字串複製、指標運算、位元操作與流程控制

     編輯:C 語言問答

題目 3:二維字串陣列與指標輸出

char ch[] = "abc", x[3][4];
for (i=0; i<3; i++) strcpy(x[i], ch);
for (i=0; i<3; i++) printf("%s", &x[i][i]);

輸出:abcbcc

解析:`x` 三列皆為 "abc\0"。`&x[i][i]` 取第 i 列第 i 欄位址:

  • i=0: `&x[0][0]` → "abc"
  • i=1: `&x[1][1]` → "bc"
  • i=2: `&x[2][2]` → "c"

連續輸出無換行 → abc + bc + c = abcbcc。

題目 4:if 條件中的賦值運算

int a=1,b=2,c=3;
if (c = a) printf("%d", c);  // 賦值 c=1,非零為真
else printf("%d", b);

輸出:1。`c=a` 是賦值運算式,值為 1(真),執行 `printf` 印出 `c`(已變為 1)。

題目 5:複合賦值與型別轉換

char c; int n=100; float f=10; double x;
x = f *= n /= (c = 50);

由右至左結合:

  1. `c = 50` → `c`=50,值 50
  2. `n /= 50` → `n`=2,值 2(整數除法)
  3. `f *= 2` → `f`=20.0,值 20.0
  4. `x = 20.0` → `x`=20.0

輸出:2 20.000000(`n` 為 int,`x` 為 double)。

題目 6:字元 ASCII 運算

char a,b;
a = 'A' + '5' - '3';  // 65 + 53 - 51 = 67
b = a + '6' - '2';    // 67 + 54 - 50 = 71
printf("%d %c", a, b);

輸出:67 G。`a`=67 對應 'C',但 `%d` 印整數 67;`b`=71 對應 'G',`%c` 印字元 G。

題目 7:二維陣列對角線元素加總

int a[3][3] = {{1,2,9},{3,4,8},{5,6,7}};
s = a[0][0]+a[0][2] + a[1][1]+a[1][1] + a[2][2]+a[2][0]
  = 1+9 + 4+4 + 7+5 = 30;

主對角線 + 副對角線,中心 `a[1][1]` 重複加兩次。

題目 8:break 與 else 關聯誤區


for (a=1; a<=3; a++)
  for (b=1; b<=3; b++)
    if (b%3 != 0) break;
    else m++;

關鍵:`if` 無大括號時,`else` 僅綁定緊接的 `if`。**`break` 屬於內層 `for`**,`else m++` 在 `b%3==0` 時執行(即 `b=3`)。但 `break` 會跳出內層迴圈,`b` 不會跑到 3。實際執行:

  • a=1: b=1 → break;b=2 → break;b=3 不會執行 → m 不增
  • a=2,3 同理

結果 m=0。原始碼縮排誤導,建議永遠加大括號。

題目 9:switch 穿透特性


m=1;
switch(m) {
  case 1: m++;
  case 2: m--;
  case 3: m++;
}

無 `break`,從 `case 1` 穿透執行至結束:`m` 1→2→1→2。輸出 2。

題目 10:後置遞增與模運算


n=2;
if (n++ % 3) printf("*");  // n=2, 2%3=2(真) → 印 *,n 變 3
else printf("#");

原答案稱印 `#` **錯誤**。正確應印 `*`。`n++` 先取值 2 參與運算,再遞增。

題目 11-12:指標基礎

  • 11: `p=&x; *p` 即 `x` 值 90。
  • 12: `p=a; *(p+9-k)` 逆序存取:k=0→`a[9]`=10, k=9→`a[0]`=1。輸出 10 9 8 7 6 5 4 3 2 1。

題目 13-15:字串與指標運算

  • 13: `strlen("get")+strlen("put")+strlen("out")` = 3+3+3 = 9。
  • 14: `p=m+3` 指向 `m[3]`,`p-m` = 3(指標減法得元素個數)。
  • 15: `str+1` 指向 "rogram",`strlen` = 6。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved