int a[101];
for(i=1;i<=100;i++) a[i]=i;
a[1]=0; // 1 不是質數
for(i=2;i
a[i]=0 標記合數,非零即質數。i < sqrt(100) 即 i <= 10,因合數最小質因子不超過 √n。i+1 開始遍歷,非標準篩法 (標準從 i*i 步長 i),但對 n=100 正確。n 控制換行。輸入循環 for(i=0;i<=10;i++) 寫入 a[0]..a[10] (11 個),輸出循環 for(i=1;i<=10;i++) 讀取 a[1]..a[10],**丟失 a[0]**,且 a[10] 未初始化 (垃圾值)。
// 輸入 10 個數存 a[0]..a[9]
for(i=0; i<10; i++) scanf("%d", &a[i]);
// 選擇排序:每輪選最小放前面
for(i=0; i<9; i++) {
int minIdx = i;
for(j=i+1; j<10; j++)
if(a[j] < a[minIdx]) minIdx = j;
if(minIdx != i) { int t=a[i]; a[i]=a[minIdx]; a[minIdx]=t; }
}
// 輸出 a[0]..a[9]
for(i=0; i<10; i++) printf("%d ", a[i]);
number > a[9] 直接放 a[10]。a[i] > number,將 a[i..9] 依次後移一位 (用 temp1 滾動交換),插入 number。break 退出循環,避免重複移動。int i = 9;
while (i >= 0 && a[i] > number) {
a[i+1] = a[i];
i--;
}
a[i+1] = number; // 插入位置
c = max(a,b); 在 main 中調用,但 max 定義在 main 之後,C89 標準隱式聲明假設返回 int,若實際返回 int 碰巧能跑,但不規範。現代編譯器會警告 implicit declaration。
// 方法一:函數原型聲明在 main 前
int max(int x, int y);
int main() { ... }
int max(int x, int y) { return x>y?x:y; }
// 方法二:直接把函數定義移到 main 前
int max(int x, int y) { return x>y?x:y; }
int main() { ... }
0..n-1。< vs <=)。sqrt(n),內層步長優化。但小數據量邏輯正確即可。