c 語言,while迴圈問題。裡面的變數change把我搞糊塗了,它起到了什麼作用

2022-03-22 07:15:58 字數 5725 閱讀 7929

1樓:匿名使用者

change 是用來控制迴圈的,整個while迴圈是將當前已經輸入的n的資料全部從小到大的排序。只有每次在迴圈裡面的有發生資料的交換,change才會被值為1,如果change為0說明陣列已經有序了,你是的只需要while(n<0)這樣程式也是正確的,但是會增加很多不需要的比較,比如輸入的a[j+1]就是最大的數了,沒有change的情況下還會執行(n-1)(n-2)/2次比較。

這個演算法之中,因為j變數是從小到大開始迴圈的,當a[j+1] < a[j] 的時候會交換,但是如果a[j+1]同時有小於a[j-1]的,由於j是從小往到的增長,一個for迴圈之中,無法再講a[j+1] (將換後已經移到了a[j]的位置)和a[j-1]驚醒交換, 所以需要多次。

如下面的例子:

已有的資料為: 1 2 4 5

然後輸入了 3, 在進入while迴圈之前陣列中的資料為:

1 2 4 5 3

第一次進入while: n = 4

j = 0 時, a[j] = 1 < a[j+1] = 2, 不交換: 1 2 4 5 3

j = 1 時, a[j] = 2 < a[j+1] = 4, 不交換: 1 2 4 5 3

j = 2 時, a[j] = 4 < a[j+1] = 5, 不交換: 1 2 4 5 3

j = 3 時, a[j] = 5 > a[j+1] = 3, 交換: 1 2 4 3 5(change 置為1)

第一交換完,整個陣列還不是有序的,需要繼續的執行。

第二次進入while:

j = 0 時, a[j] = 1 < a[j+1] = 2, 不交換: 1 2 4 3 5

j = 1 時, a[j] = 2 < a[j+1] = 4, 不交換: 1 2 4 3 5

j = 2 時, a[j] = 4 > a[j+1] = 3, 交換: 1 2 3 4 5(change 置為1)

j = 3 時, a[j] = 4 < a[j+1] = 5, 不交換: 1 2 4 3 5

整個while之後, change為1, 主要再次的進入執行, 檢查。

這次由於所以的數已經有排序了

j = 0 時, a[j] = 1 < a[j+1] = 2, 不交換: 1 2 3 4 5

j = 1 時, a[j] = 2 < a[j+1] = 3, 不交換: 1 2 3 4 5

j = 2 時, a[j] = 3 < a[j+1] = 4, 不交換: 1 2 3 4 5

j = 3 時, a[j] = 4 < a[j+1] = 5, 不交換: 1 2 3 4 5

這次完了之後change=0; 不用在繼續執行while了。

這樣有了change變數控制之後,迴圈的次數就少多了。

2樓:匿名使用者

#include

void main ()

}n--;}}

for (i=0;i<=9;i++)

printf ("\n");}

3樓:匿名使用者

change的作用是進行條件判斷,以減少程式執行時間,也就是說的當發現迴圈結束後,沒有任何資料進行了交換,排序就完成了,不需要再進行n--後的迴圈操作了。

4樓:

首先明確,這是從鍵盤上輸入十個數,然後按冒泡法排序輸出。n為迴圈次數,change為每次大迴圈中有沒有資料交換的情況,有則有繼續下一能迴圈,否則可以提前退出(已經排好序了)。

5樓:匿名使用者

條件語句 for()迴圈語句在括號內的條件下進行迴圈 根據條件 迴圈 ..當然這個是c#裡面的語句,在c語言中也是一樣的啊。比如說 int i=0;int

6樓:手機使用者

change 是個判斷量 ,while (n>0&&change==1) 這裡是判斷 如果change 為1 不退出迴圈,因為找到前面一個大於後面一個則交換,但並不知道還有前面一個大於後面一個的,所以將change賦值為1繼續檢查,直到沒有前面一個大於後面一個則while (n>0&&change==1) change=0;這裡將使迴圈退出

c++中程式執行到cin語句需要由鍵盤連續輸入多個資料怎麼理解?

7樓:匿名使用者

1、cin是c++程式語言互換流中的標準輸入流,是istream類的物件,是計算機輸入的一種手段,它需要iostream.h支援。cin從標準輸入裝置(鍵盤)獲取資料,程式中的變數通過流提取符">>"從流中提取資料。

流提取符">>"從流中提取資料時跳過輸入流中的空格、tab鍵、換行符等空白字元。注意:只有在輸入完資料再按回車鍵後,該行資料才被送入鍵盤快取區,形成輸入流,提取運算子">>"才能從中提取資料。

它的使用需要包含標頭檔案#include 以及 using namespace std;

2、例項:

#include

using namespace std;

int main() {

char str[8];

cin.getline(str, 5);

cout<

8樓:匿名使用者

用一個while迴圈搞定吧!輸入一個判讀一次是不是結束符就行了!

9樓:匿名使用者

可以用迴圈,也可以這樣 cin >> a >> b >> c; 這樣依次輸入資料,輸入的第一個資料給a,第二個給b,第三個就給了c

10樓:誰讓我揩油

cin>>a1>>a2>>…>>an;你想要幾個就寫幾個

c語言,while語句中,當輸入字串exit時,退出程式。語句怎麼寫?

11樓:黃山

char szbuffer[1024] = ;

while (判斷資訊)

//迴圈中要加入的處理語句}

12樓:匿名使用者

#inlcude

int main()

returrn 0;}

13樓:匿名使用者

while(i=exit)

14樓:匿名使用者

char str[101] = ;

while(strcmp(str, "exit") != 0)

c/c++語言中,在不確定使用者輸入資料個數的情況下來控制迴圈結束?

15樓:四舍**入

int main()

int a[100],i=0,ch=0;

printf("請輸入一組整形資料(不超過100個):");

dowhile(ch!='\n');

for(ch=0;chprintf("%d\n" , a[ch]);

16樓:真的無奈啊

while(scanf(......)!=eof)

return 0;}

17樓:

是的,每輸入一個資料就判斷一下,比如設定使用者輸入end表示結束,當程式獲取到這個字串後就跳出迴圈。

18樓:匿名使用者

先申明一個整數,作為要輸入的資料的個數n,要求使用者輸入。

再根據使用者輸入的數n來確定陣列的大小a[n],,

就可以用for迴圈來控制

19樓:匿名使用者

int main()

while(ch!='\n');

for(ch=0;ch

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

20樓:

我分析一下:

如果是控制檯程式的話,按回車時,開始輸入。

使用者只輸入一次回車嗎?

、、、如果不是1次回車,比如我輸入1,然後回車,等明天我再來輸入2,然後回車,肯定不行啊。

。。。。。。。。。。

如果只是一次回車,那也就是說只有1行輸入。那就用getline(cin,sting)

把資料都讀進來,如string ==「1 2 3 1 45 78」,然後通過空格,一個一個把數字分解出來

21樓:四川新聞直播

for(int i =1 ;i<100;i++)

printf("請輸入一組整形資料(不超過100個)");

}是不是這個意思?

22樓:匿名使用者

#include

using namespace std;

void main(void)

,i=0;

printf("請輸入一組整形資料:\n");

while(cin>>a[i++]);

cout<<"輸出陣列"<

i=0;

while(i<100)

cout<

system("pause");

}輸入數字意外的字元(不包含回車,製表符等)即結束。但要保證輸入的整數不溢位。

令外:使用cin 需要包含的標頭檔案是iostream

有c語言基礎,學c++了,是直接學習c++primer好呢,還是先學習c++primer plus然後再學習c++ primer好呢?

23樓:匿名使用者

我也是過來人,我覺得c++primer不適合你,我現在有兩本一本是c++ primer plus 一本是primer,相對而言c++ primer plus 是比較適合剛轉入c++的,不能太急進,而且要看最新版的,語言標準近些年變化好大。

24樓:執劍映藍光

c語言基礎對於c++有一定作用,但c++是物件導向的,和c的差距很大。學習還是抱著從零開始的心態比較合適。

c++primer更詳細,涵蓋c++的所有知識。c++primerplus更適合新手。

建議學習c++primerplus並結合做專案

25樓:吾嘯

學c++一定要看c++ primer ,c primer plus 可看可不看.

經典啊.

學就學好的,不然還不如不學.

c++ primer還好學點.

c++程式設計語言是c++之父寫的,更難,所以學c++ primer .

26樓:匿名使用者

我有《c++ primer 》要發給你麼。?看過你就知道先看哪本好了

27樓:曾哥那才是爺們

c++跟c相比多了些,面像物件的概念,看c++primer吧,

計算機二級c++到底考什麼

28樓:迷蟲仔

到書店買本書就好了,你只需要買你對應考試的書就好了,書分兩本,一本上機,一本筆試,現在計算機考試難度已經很低了,基本上都是命中原題達95%以上,所以你只需要好好背就好了,基本是個體力+運氣的活。

29樓:匿名使用者

2012-8-1 2:45:34吹餚感離計算機二級c++到底考什麼

30樓:匿名使用者

我考了c++二級

還考軟體工程基礎,資料庫基礎等。只要把c++程式設計基礎和c++物件導向學好就沒什麼問題的。

C 的while迴圈的問題

cin其實是一個例項,可以理解為一個系統自己的變數然後cin這個例項的定義的類的一個基類過載過operator bool 這個過載可以把例項轉換為int型別 while cin a 就相當於先進行cin a,然後判斷cin.good cin的operator bool 就是返回cin.good 當輸...

c語言while迴圈程式設計輸出1到100這數的和

int i,sum i 1,sum 0 while i 100 int cou 0 int num 0 while num 100 main printf d n sum 用c語言for迴圈求1到100之和 sum sum i 這一句寫在了for迴圈的外面,意思就是先作for迴圈至i 101,最後執...

C語言問題。那個for迴圈裡面我想用if當剪掉兩個比較,輸出大的那個,但是因為一次只輸

我沒聽懂你的意思,你的意思是做一個兩個數的比較那個數大?再說冒泡演算法是兩個for好不好,最重要的是一個數一個數的比,把最大的數放上面,如果不想換數字,也可以換指標的。include int main for i 1 i 11 i printf 5d,a i printf n 您好,這個題跟氣泡排序...