學好 C 語言沒有捷徑,核心在於 「多寫代碼、多看代碼、多調試」。建議採取以下步驟:
題目要求:設計函數 void yanghui(int a[][], int n, char mode),n 控制行數,mode 控制格式('a' 直角三角,'b' 等腰三角)。
#include <stdio.h>
#include <stdlib.h>
void yanghui(int **arr, int n, char mode) {
// 生成楊輝三角數據
for (int i = 0; i < n; i++) {
arr[i][0] = arr[i][i] = 1;
for (int j = 1; j < i; j++) {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
// 打印邏輯
if (mode == 'a') { // 直角三角
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
printf("%-4d", arr[i][j]);
}
printf("\n");
}
} else if (mode == 'b') { // 等腰三角
for (int i = 0; i < n; i++) {
// 打印前導空格
for (int s = 0; s < n - i - 1; s++) printf(" ");
for (int j = 0; j <= i; j++) {
printf("%-6d", arr[i][j]);
}
printf("\n");
}
}
}
int main() {
int n; char mode;
printf("請輸入行數(1-10)與模式(a/b): ");
scanf("%d %c", &n, &mode);
// 動態分配二維數組
int **arr = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++) arr[i] = (int *)calloc(n, sizeof(int));
yanghui(arr, n, mode);
// 釋放內存
for (int i = 0; i < n; i++) free(arr[i]);
free(arr);
return 0;
}
malloc/calloc 分配連續行指針,每行再分配列內存,靈活適應不同行數。%-4d 左對齊固定寬度,配合空格實現等腰對齊。free,避免洩漏。int a[10][10] 限制最大行數,動態分配更通用。scanf("%d %c", ...) 中間空格會跳過換行符,否則 %c 讀到殘留的 \n。(n - i - 1) * 每個數字佔寬。通過楊輝三角這一經典例題,涵蓋了 數組操作、函數封裝、動態內存、格式化輸出、邏輯分支 等 C 語言核心技能。建議將代碼敲三遍:第一遍照著敲,第二遍嘗試修改格式,第三遍從頭寫出。堅持每天一題,三個月質變。