本文記錄《C 語言及程序設計》實踐項目 11 的五個經典練習,聚焦整數拆分、浮點數分離、分級優惠計算、統計運算、極坐標轉換五大場景,通過代碼實戰強化運算符優先級、類型轉換、數學庫調用等核心技能。
輸入三位整數 x,輸出百位、十位、個位,空格分隔。
x / 100(整數除法截斷)(x % 100) / 10(先取后兩位,再取十位)x % 10(模 10 取余)#include <stdio.h>
int main() {
int x, a, b, c;
printf("請輸入一個三位數:");
scanf("%d", &x);
a = x / 100;
c = x % 10;
b = (x % 100) / 10;
printf("%d %d %d", a, b, c);
return 0;
}
/ 與 % 組合實現位權分解。注意輸出格式題目要求空格,原代碼用逗號需調整。
輸入小數點後三位的浮點數,分別輸出整數部分與小數部分(作為整數)。
(int)(x) 或 x / 1 截斷小數(int)(x * 1000) % 1000 — 先放大 1000 倍轉整數,再取模 1000 保留後三位#include <stdio.h>
int main() {
float x;
int integer_part, decimal_part;
printf("請輸入一個浮點數:");
scanf("%f", &x);
integer_part = (int)x;
decimal_part = (int)(x * 1000) % 1000;
printf("%d %d", integer_part, decimal_part);
return 0;
}
浮點數精度陷阱:3.14 * 1000 可能得 3139.999...,轉 int 變 3139。工程上應加 0.5 四捨五入或用 round(),或改用字符串解析避免精度損失。
紅玫瑰 5 元/枝,買 5 送 1,買 20 送 5。給定金額 n (n>10),求最大可得花枝數。
原代碼分支過多,實際可統一公式:
base = money / 5gift20 = (base / 20) * 5gift5 = ((base % 20) / 5) * 1total = base + gift20 + gift5#include <stdio.h>
int main() {
int money, base, total;
printf("請輸入金額:");
scanf("%d", &money);
base = money / 5;
total = base + (base / 20) * 5 + ((base % 20) / 5);
printf("最多可買 %d 枝", total);
return 0;
}
數學建模優於條件分支:將離散優惠規則轉化為整除/取模組合,代碼更簡潔、擴展性更強(如新增滿 50 送 15 只需加一項)。
輸入三個雙精度實數,輸出和、平均值、平方和、平方和開方。
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c;
printf("請輸入三個實數:");
scanf("%lf %lf %lf", &a, &b, &c);
double sum = a + b + c;
double avg = sum / 3.0;
double sq_sum = a*a + b*b + c*c;
double root = sqrt(sq_sum);
printf("和:%.2f\n平均值:%.2f\n平方和:%.2f\n平方和開方:%.2f\n",
sum, avg, sq_sum, root);
return 0;
}
%lf 掃描 double,printf 中 %f 通用math.h 提供 sqrt(),編譯需鏈接 -lm (Linux/GCC)double 替代 float 提高精度輸入極坐標 (r, θ)(角度制),輸出直角坐標 (x, y)。
x = r * cos(θ * π / 180), y = r * sin(θ * π / 180)
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
int main() {
double r, degree;
printf("請輸入極坐標 r 和角度(度):");
scanf("%lf %lf", &r, °ree);
double rad = degree * PI / 180.0;
double x = r * cos(rad);
double y = r * sin(rad);
printf("直角坐標:(%.4f, %.4f)", x, y);
return 0;
}
int,導致 degree/180 整除得 0 — 浮點運算變量必須聲明為浮點類型#define PI 使用更高精度常量cos/sin 參數為弧度,必須角度轉弧度| 場景 | 核心技法 | 易錯點 | 優化方向 |
|---|---|---|---|
| 整數位拆解 | / 與 % 組合 | 負數取模語義 | 斷言輸入範圍 |
| 浮點部分分離 | 縮放 + 取模 | 二進制精度誤差 | 字符串解析或 round() |
| 分級優惠計算 | 整除/取模建模 | 條件分支爆炸 | 統一數學公式 |
| 統計特徵值 | 單遍歷累加 | float 精度不足 | 用 double + Kahan 求和 |
| 坐標系統轉換 | 三角函數 + 角度轉弧度 | 整型變量截斷 | 強類型聲明 + 常量精度 |
這五個任務雖屬基礎,卻涵蓋了 C 語言數值計算的精髓:**類型系統、運算符語義、數學建模、庫函數調用、精度控制**。建議讀者嘗試擴展:任務 1 支持任意位數輸出;任務 2 處理科學計數法輸入;任務 3 實現通用優惠規則引擎;任務 4 增加方差/標準差;任務 5 支持批量轉換與文件 IO。