一道非常簡單的C語言題

時間 2022-07-22 11:05:03

1樓:

min=(a[i]>a[i-1])?min:a[i];

如果a[i]>a[i - 1],始終比較的是當前元素和上一個元素,這是最根本的錯誤,比如 3 2 4 3

這條語句的執行過程就是,

min = 2

4>2 -> min = 2;

3<4 -> min = 3;

最終結果,min = 3;顯然是不對的。

正確的是要始終跟當前的min比較,而且不要刻意去追求語句簡短,條件運算子並不一定具有更高的效率。

min = (a[i] < min)?a[i]:min;//正確語句

同時,使用if(a[i] < min) min = a[i];也能做到一條語句解決問題。

另外,**還太過冗長,以及效率還太低下,僅僅只是找到最小值的話再輸入的時候就可以處理,這樣能節省o(n)的執行時間,在查詢時記錄i而不是min,這樣最終只要做一次交換就可以,程式始終控制在o(n),而且乘數因子控制在1,保證最高的效率。

核心部分的優化:(加個變數宣告int temp;)

while(scanf("%d",&n) != eof)

t = a[temp];

a[temp] = a[0];

a[0] = t;}

2樓:匿名使用者

for(i=0;i

if(a[i]==min)

j=i;

t=a[0];

a[0]=min;

a[j]=t;

這段**少了大括號把,應該是

for(i=0;i

還有這一段:

for(i=0;i

if(i!=n-1)

printf("%d ",a[i]);

else

printf("%d\n",a[i]);

一樣的問題:

for(i=0;i

3樓:匿名使用者

你的意思是用最小的數跟第一個數相交換吧?那你應該用min表示下標,這樣更簡單的。

#include

#include

#include

void main()

t=a[0];

a[0]=a[min];

a[min]=t;

for(i=0;i

if(i!=n-1)

printf("%d ",a[i]);

else

printf("%d\n",a[i]); } }

4樓:匿名使用者

continue;改為break;

感覺好亂,每行選擇排序遍歷一次就可以了,同意goal000011···

5樓:匿名使用者

min=a[0];

for(i=1;ia[i-1])?min:a[i];

} 有錯!

你比較的只是相鄰的兩個元素,而非尋找最小的元素。

另外,你的思路不夠清晰,**繁瑣冗長。

我寫了一個,僅供參考。

#include

#include

int main()

if (min != 0)

for(i=0;i

printf("%d ",a[i]);

printf("%d\n",a[n-1]);

}system("pause");

return 0;}

6樓:匿名使用者

恩,樓上的幾位都已經指出錯誤了,就是那個min=(a[i]>a[i-1])?min:a[i];

這句應該是min=(a[i]>min)?min:a[i]; 相信你能看的出來為什麼錯。

提醒下,從你的程式來看,還是有一定的基礎的,估計是粗心導致的錯誤。

問題是你的程式不具有可讀性,看起來很吃力,雖然像min=(a[i]>a[i-1])?min:a[i]; 這種語句好像比較能體現程式設計能力,但是可讀性很差,建議以後少用這種語句,語句儘量的簡單易懂較好。

大規模的程式設計中,可讀性是很重要的。

7樓:匿名使用者

while(scanf("%d",&n)!=eof) 中的eof是什麼啊

一道很簡單的C語言題

include include void main sum sum max min score sum n 2 printf 2f n score 太多了,看到就累! sum應在while迴圈中初始化,也就是說每次輸入前sum都必須清0 include include void main sum s...

一道簡單的c語言題目,一道簡單的C語言題目

s 2 是一個指標陣列,指向兩個字串 s 0 s 1 while s 1 0 迴圈,條件為 s 1 0 字串的最後一個值是 0 這裡遍歷s 1 字串,一共會遍歷4次。 寒鐵礦 你定義了一個指標陣列,s 0 指向的是第一個 字串的起始地址,s 1 指向的是第二個 字串的起始地址。while s 1 0...

c語言的一道很簡單的題

while tt 0 在這裡不能直接用 tt 因為你用這個的話,它是判斷之後就加到下一個了,所以這樣的話,第一個字元你是不能判斷的,所以總會少一個啊 應該這樣 while tt 0 程式改寫成 include include void fun char tt,int pp main 我只是改動了你的...