嗯, 今天的程式不難...
但是牽扯到的問題很多, 就不解釋了.
尤其是第二題...
一開始題目有錯, 照理是寫不出來的(白癡 VC 竟然給過. )
這裡頭有兩個問題...
按助教原先預設的答案.
是違反了 ++ 的運算法則(只能作用在 lvalue 上).
此外, 還關聯到 "order of evaluation".
"order of evaluation" 算是相當進階的 C common error.
很常見, 但是成因頗為複雜...
所以就... 算了. @_@
E1) 請使用者輸入兩個數字, 利用條件運算子判斷兩數的大小,
取較大值並將結果顯示在螢幕上.
# include <stdio.h>
# include <stdlib.h>
int main()
{
double x1, x2;
printf("Enter 2 numbers:\n");
if (scanf("%lf %lf", &x1, &x2) < 2)
exit(1);
printf("The larger one is %.3f.\n", x1 > x2 ? x1 : x2);
return 0;
}
E2) 請給定 2 整數, i = 2, k = 4, 利用五個 '+' 和 i, k 構成一敘述,
如: +++i++k, 輸出一整數 7, 且運算後 i = 3, k = 5.
[註] 這一題很特別, 底下的 printf() 絕對不可以合成一行.
# include <stdio.h>
int main()
{
int i = 2, k = 4;
printf("i = %d, k = %d\n", i, k);
printf("expression = %d\n", i++ + ++k);
printf("i = %d, k = %d\n", i, k);
return 0;
}
E3) 定義: 321 為 123 之 reverse. 請使用者輸入任意三位數整數,
利用餘數運算子 '%', 經運算輸出其 reverse.
[註] 這題是常見的好題目. 應長毛的好奇心, 我寫三個, 越來越難.
# include <stdio.h>
# include <stdlib.h>
int main()
{
int d, nd;
printf("Enter a positive integer:\n");
if (scanf("%d", &d) < 1)
exit(1);
nd = d - (d / 100) * 99 + (d % 10) * 99;
printf("original = %d, reversed = %d\n", d, nd);
return 0;
}
/* -------------------------------------------------------- */
# include <stdio.h>
# include <stdlib.h>
int main()
{
int d, nd;
printf("Enter a positive integer:\n");
if (scanf("%d", &d) < 1)
exit(1);
printf("original = %d\n", d);
for (nd = 0; d; d /= 10)
nd = nd * 10 + d % 10;
printf("reversed = %d\n", nd);
return 0;
}
/* -------------------------------------------------------- */
# include <stdio.h>
# include <stdlib.h>
int reverse(int, int);
int main()
{
int d;
printf("Enter a positive integer:\n");
if (scanf("%d", &d) < 1)
exit(1);
printf("original = %d, reversed = %d\n", d, reverse(d, 0));
return 0;
}
int reverse(int d1, int d2)
{
return d1 ? reverse(d1 / 10, d2 * 10 + d1 % 10) : d2;
}
/* -------------------------------------------------------- */
--
新詩練習:新鮮。踩破初春裡的狗大便;不經意的滄桑,滿溢著嫩黃的喜悅。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.160.49
※ 編輯: Muscovy 來自: 61.224.160.49 (03/27 15:22)