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

C語言經典程式設計實例集錦(一):排列組合、獎金計算、完全平方數、日期運算與圖形輸出

     編輯:關於C語言

前言

本系列首輯精選第 1 至 10 號經典範例,涵蓋窮舉法排列組合、分段函數獎金計算、數論完全平方數搜尋、日期累積天數計算、三數排序、字元圖形繪製、九九乘法表、國際象棋棋盤與樓梯圖案。這些範例以最基礎的語法構建核心演算法思維,是 C 語言入門的黃金教材。

範例 1:1~4 組成互不相同的三位數

窮舉與剪枝

for (i=1; i<5; i++)
  for (j=1; j<5; j++)
    for (k=1; k<5; k++)
      if (i!=j && i!=k && j!=k)
        printf("%d%d%d\n", i, j, k);

總共 4×3×2 = 24 組。延伸:若改用遞迴回溯,可輕鬆擴展至 N 個數字取 M 位排列。

範例 2:企業利潤分級提成獎金

分段函數建模

利潤區間與提成率對應表:

利潤區間(萬)提成率累積獎金基數
0~1010%bonus1 = 10
10~207.5%bonus2 = 10 + 10×0.75 = 17.5
20~405%bonus4 = 17.5 + 20×0.5 = 27.5
40~603%bonus6 = 27.5 + 20×0.3 = 33.5
60~1001.5%bonus10 = 33.5 + 40×0.15 = 39.5
>1001%bonus10 + (I-100)×0.01

關鍵程式碼

long I; int bonus;
scanf("%ld", &I);
if (I <= 100000) bonus = I * 0.1;
else if (I <= 200000) bonus = 10000 + (I-100000)*0.075;
else if (I <= 400000) bonus = 17500 + (I-200000)*0.05;
else if (I <= 600000) bonus = 27500 + (I-400000)*0.03;
else if (I <= 1000000) bonus = 33500 + (I-600000)*0.015;
else bonus = 39500 + (I-1000000)*0.01;
printf("bonus=%d", bonus);

注意:原碼 bonus2=bonus1+100000*0.75 應為 0.075,此處已修正。

範例 3:尋找滿足條件的整數

數學模型

找 x 使 x+100 = a² 且 x+268 = b²(a,b 為整數)。
兩式相減:b² - a² = 168 → (b-a)(b+a) = 168。
枚舉 168 的因數對,解聯立方程組即得 x=21、x=156、x=1581 等解。程式採暴力搜尋 1~100000,驗證 sqrt 整數性。

範例 4:日期轉年度第幾天

累積天數表法

int month_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int sum = day;
for (int m = 0; m < month-1; m++) sum += month_day[m];
if (leap && month > 2) sum++;

閏年判斷:(year%400==0) || (year%4==0 && year%100!=0)。此法比 switch-case 更易維護擴充。

範例 5:三整數由小到大排序

三兩兩交換法:先確保 x 最小,再確保 y <= z。邏輯清晰,無需陣列與迴圈,適合固定三數場景。

範例 6:星號繪製字母 C

硬編碼列印:
****
*
*
****
啟發式思維:先在紙上畫網格標註座標,再轉為 printf 序列。

範例 7:特殊字元繪製鑽石圖案

利用 ASCII 176 (░) 與 219 (█) 組合,雙重迴圈列印 5×5 矩陣。現代終端機建議使用 Unicode 方塊字元 (U+2588, U+2591) 跨平台顯示。

範例 8:九九乘法表

雙重迴圈 i=1..9, j=1..9,格式 %d*%d=%-3d 左對齊佔 3 寬,每行結束換行。經典巢狀迴圈教學範本。

範例 9:國際象棋棋盤

(i+j)%2==0 判斷黑白格,列印兩個 ASCII 219 (█) 組成方塊,否則列印兩空格。展示座標 parity 判斷幾何圖形的通用技巧。

範例 10:樓梯與笑臉

外層迴圈控制行數 i=1..10,內層列印 i 個方塊。開頭 printf("\1\1\n") 輸出兩個笑臉 (☺),為 DOS 控制台特有字元。

教學總結與遷移指南

傳統寫法現代 C (C99/C11)C++ STL 替代
三層 for 窮舉遞迴回溯 + 位元遮罩std::next_permutation
switch-case 日期累加陣列查表 + 閏年函式std::chrono::year_month_day
手動三數排序qsort + 比較函式std::array + std::sort
ASCII 圖形硬編碼參數化繪圖函式SFML/SDL 文字渲染

延伸挑戰

  1. 將範例 2 改為資料驅動:用結構體陣列儲存區間門檻與稅率,迴圈計算,易於維護稅制變更。
  2. 範例 3 改用因數分解法 O(√N) 取代暴力 O(N),並輸出所有解。
  3. 設計通用函式 void print_pattern(int rows, char filled, char empty) 統一範例 6~10 的圖形輸出。
  4. 嘗試用位元運算優化範例 9 棋盤判斷:((i^j)&1)==0。

下一集將進入函式設計、遞迴經典、字串處理與結構體綜合應用,敬請期待。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved