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 欄位址:
連續輸出無換行 → abc + bc + c = abcbcc。
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)。
char c; int n=100; float f=10; double x;
x = f *= n /= (c = 50);
由右至左結合:
輸出:2 20.000000(`n` 為 int,`x` 為 double)。
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。
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]` 重複加兩次。
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。實際執行:
結果 m=0。原始碼縮排誤導,建議永遠加大括號。
m=1;
switch(m) {
case 1: m++;
case 2: m--;
case 3: m++;
}
無 `break`,從 `case 1` 穿透執行至結束:`m` 1→2→1→2。輸出 2。
n=2;
if (n++ % 3) printf("*"); // n=2, 2%3=2(真) → 印 *,n 變 3
else printf("#");
原答案稱印 `#` **錯誤**。正確應印 `*`。`n++` 先取值 2 參與運算,再遞增。
10 9 8 7 6 5 4 3 2 1。