用選擇法對10個整數排序。
#include<
stdio.h
>
intmain(
void
)printf("\n
");printf(
"the orginal numbers:\n");
for(i=1
;i<=
10;i++)
printf(
"%5d
",a[i]);
printf("\n
");for(i=1
;i<=9;i
++)printf(
"\nthe sorted numbers:\n");
for(i=1
;i<=
10;i++)
printf(
"%5d
",a[i]);
printf("\n
");return0;
}
這道題目要求對10個整數排序,那麼定義乙個具有10個整數型別元素的陣列來儲存這10個整數就足夠了。可是**中卻出乎尋常地定義了乙個具有11個元素的陣列:
inta[11
];
這種不上路子的寫法在初學者當中很常見。其原因可能有兩種,一種可能是受其他語言(比如basic)的影響,另一種可能是一下子還不能適應或接受c語言陣列元素下標從0開始的特點。這從**中的
for(i=1;i<=
10;i
++)
其實兩種情況都可以歸結為一點:沒學會或不熟悉如何從0開始計數。
然而,c語言的陣列元素的下標就是從0開始的,這一點無法改變。如果要學好c語言,無論感情或能力上是否能接受這一點都必須要接受這條規則。作為c程式設計師不懂得如何從0開始計數是說不過去的,甚至作為一般的it業人員,不懂得從0開始計數也是說不過去的。因為計算機中的計數方式和日常生活常見的計數方式最顯著的差異恰恰就在這裡。
「人們對於不熟悉的東西,都是慣於留有餘地的,這在正常情況都是很好的策略。然而,這裡的問題是這正表明了人們對事情的把握還不精確,對於軟體開發來說,這個就是bug滋生的溫床。」
在寫c**的時候,如果程式需要儲存10個int型別元素的陣列,就應該定義:
int a[10];
和前面樣本**中的11相比,這裡的10寫得有根有據,它表示的就是陣列具有10個元素。如果對陣列進行遍歷(逐個訪問每個元素),常規的寫法是
for( i = 0 ; i < 10 ; i ++ )
因此,前面的題目的**應該這樣寫:
#include int main( void )
printf("\nthe orginal numbers:\n");
for( i = 0 ; i < 10 ; i++ )
printf("%5d",a[i]);
for( i = 0 ; i < 10 ; i++ )
}printf("\nthe sorted numbers:\n");
for( i = 0 ; i < 10 ; i++ )
printf("%5d",a[i]);
putchar('\n');
return 0;
}
此外,樣本中的注釋「//以下3行將a[i+1]~a[10]中最小值與a[i]對換」也是錯誤的,實際上那3行是將a[i]~a[10]中最小值與a[i]對換。
當然,如果能把**中的10用符號常量表示更好,但這屬於另外的問題。
「鋪張浪費」的陣列
用選擇法對10個整數排序。include stdio.h intmain void printf n printf the orginal numbers n for i 1 i 10 i printf 5d a i printf n for i 1 i 9 i printf nthe sorted...
浪費了的7天
自從今年立目標後,我一直很努力,有時每天睡5個小時,但是從2.27 3.4這七天,我沒有投入我的精力,而是在網上搞事情,這是 的一種。今天才找回自己,我很害怕。害怕自己還會浪費7天,最終可能是害怕自己人生被霍霍完而含恨次生。作為32歲的我,沒有10年青春可以繼續浪費,甚至1分鐘都沒資格浪費。今天發了...
如何減少切割材料的浪費
全球資源短缺,國際 和鋼材 持續飛漲,這是我們國家和企業將要長期面臨的國際大環境,也是乙個重大的課題和難題,國家和企業要生存 要發展,就必須倡導和堅持 節約為先,效益為本 的原則。切割與焊接是一對孿生兄弟,要焊接,就必須先切割,要焊接 就必須先切割好 開好焊接坡口。切割過程不可避免地要造成鋼板的各種...