文章目錄
🍁引言
🍁一、語句格式
🍁二、語句執行過程
🍁三、格式舉例
🍁四、例題
👉【例1】
💎【示例代碼】
👉【例2】
🚀【方法1】:
💎【示例代碼】
🚀【方法2】:
💎【示例代碼】
👉【例3】
🚀【分析】
💎【示例代碼】1
💎【示例代碼】2
👉【例4】
💎【示例代碼】
💎【優化示例代碼】
👉【例5】
💎【示例代碼】1
💎【示例代碼】2
🍁總結?
🍁備注
🚀歡迎互三👉:程序猿方梓燚?💎💎
🚀所屬專欄:C++教程💎🚀關注博主,后期持續更新系列文章
🚀如果有錯誤感謝請大家批評指出,及時修改
🚀感謝大家點贊👍收藏?評論??
🍁引言
于 C++編程之廣袤天地間,while 之語乃循環架構之樞要,熠熠生輝。其依特定之條件以判是否行循環之體,此式靈動便捷、別具一格,能妥處循環之數未明之務。譬如欲求一至百之和,可設初值為零,變數自一始,以變數小于等于百為條件,于每次循環中累加變數,變數自增一,直至條件不滿足而止。又若需持續讀取用戶輸入直至特定字符,亦能以 while 達成。無論模擬實時之系統運轉、處用戶之持續輸入,抑或操持動態數據之處理,while 之語皆顯事半功倍、游刃有余之卓異。深悟而善用 while 之語,利于如虎添翼增編程之能,為構獨具匠心、出類拔萃之 C++程式固其礎石。值此之際,吾等攜手共揭 while 之語之神秘紗幕,探其無窮無盡、廣袤無垠之可能。
🍁一、語句格式
格式1
說明:語句1是while循環語句的循環體,它將在滿足條件的情況下被重復執行。
格式2
說明:循環體部分由多個語句構成,應由一對花括號括起來,構成一個語句塊的形式。 程序風格提示:寫while循環語句時,循環體的語句相對于while縮進兩格。
🍁二、語句執行過程
(1)計算作為循環控制條件表達式的值,得到邏輯真或假,假定用M表示。
(2)若M為真,則執行了一遍循環體,否則離開循環,結束整個while語句的執行。
(3)循環體的所有語句執行結束后,自動轉向第(1)步執行。
🍁三、格式舉例
(1)
#include<bits/stdc++.h> using namespace std; int main(){int i=0;while (i<10)++i; }
功能:當i的值小于10,重復執行++i語句
(2)
while(cin>>x,x<0) /*相當于 cin>>x; while(x<0)cin>>x; */
功能:當輸入的數據小于0時,重復讀數據。
🍁四、例題
👉【例1】
求s=1 +2 +3……+n,當加到第幾項時,s的值會超過1000?
💎【示例代碼】
#include <iostream> using namespace std; int main () {int n = 0, s = 0;while (s <= 1000) {++n;s += n;}cout << n;return 0; }
👉【例2】
求兩個正整數m,n的最大公約數。
🚀【方法1】:
求任意兩個自然數m和n的最大公約數,可以想到其最大的可能就是兩個數中的較小者min,最小可能是1。所以,可以設最大公約數gcd從min開始進行判斷,若gcd>1并且沒有同時整除m和n,那么就gcd-1,重復判斷是否整除。
💎【示例代碼】
#include<iostream> using namespace std; int main() {int m, n, gcd;cin >> m >> n;gcd = m > n ? n : m; //注意此處的特殊寫法while (gcd > 1 && (m % gcd != 0 || n % gcd != 0))gcd--; //每次減1尋找最大公約數cout << gcd << endl; //輸出最大公約數return 0; }
🚀【方法2】:
求兩個整數的最大公約數可以采用輾轉相除法即歐幾里德算法。對于任意兩個自然數m和n,用m,n,r分別表示被除數、除數、余數,那么m和n的最大公約數等于n和r的最大公約數。以下是輾轉相除法的算法: ? ?
1)求m除以n的余數r; ? ?
2)當r!=0,執行第3)步;若r==0,則n為最大公約數,算法結束。 ? ?
3)將n的值賦給m,將r的值賦給n;再求m除以n的余數r。 ? ?
4)轉到第2)步
💎【示例代碼】
#include<iostream> using namespace std; int main() {int m, n;cin >> m >> n;int r = m % n;while (r != 0) { //也可以使用 while (r),c++中 非0即真m = n;n = r;r = m % n;}cout << n;return 0; }
👉【例3】
編一程序求滿足不等式1+ 1/2 + 1/3 …+1/n >=5的最小n值。
🚀【分析】
此題不等式的左邊是一個求和的算式,該和式中的數據項個數是未知的,也正是要求出的。對于和式中的每個數據項,對應的通式為1/i,i=1,2,…n。 所以可采用循環累加的方法來計算出它的值。設循環變量為i,它應從1開始取值,每次增加1,直到和式的值不小于5為止,此時的i值就是所求的n。設累加變量為s,在循環體內把1/i的值累加到s上。
根據以上分
析,采用while循環編寫出程序如下:
💎【示例代碼】1
#include <iostream> using namespace std; int main () {int i = 0;float s = 0;while (s < 5) { //當s的值還未超過5時++i;s += 1.0 / i;}cout << i;return 0; }
若采用for循環來寫,則如下所示:
💎【示例代碼】2
#include <iostream> using namespace std; int main () {int i;float s = 0;for (i = 1; s < 5; ++i)s += 1.0 / i;cout << i - 1;return 0; }
👉【例4】
輸入一些整數,求出它們的最小值、最大值和平均值(保留3位小數)。輸入保證這些數都是不超過1000的整數。
樣例輸入:2 8 3 5 1 7 3 6
樣例輸出:1 8 4.375
💎【示例代碼】
#include<cstdio> int main() {int x, n = 0, min, max, s = 0;while (scanf("%d", &x) == 1) {s += x;if (x < min) min = x;if (x > max) max = x;++n;}printf("%d %d %.3lf\n", min, max, (double)s / n);return 0; }
💎【優化示例代碼】
#include<cstdio> #define INF 100000000 int main() {int x, n = 0, min = INF, max = -INF, s = 0;while (scanf("%d", &x) == 1)//scanf("%d",&x)!=EOF,如果沒數據可讀,scanf返回EOF{s += x;if (x < min) min = x;if (x > max) max = x;++n;}printf("%d %d %.3lf\n", min, max, (double)s / n);return 0; }
👉【例5】
輸入若干對整數,輸出每對之和。假設每個整數不超過10^9,一共不超過10^6個數對。
💎【示例代碼】1
#include<cstdio> int main() {int a, b;while (scanf("%d%d", &a, &b) == 2)printf("%d\n", a + b);return 0; }
💎【示例代碼】2
#include<iostream> using namespace std; int main() {int a, b;while (cin >> a >> b )cout << a + b << endl;return 0; }
🍁總結?
有不懂的地方可以si我,和我一起學習C++吧。
🍁備注
還沒有下載DEV-C++的小伙伴們可以私我拿到免費安裝包