摘要:目錄循環(huán)循環(huán)語句的語法語句的語法執(zhí)行流程執(zhí)行流程語句的特點語句的特點循環(huán)中的和循環(huán)中的和練習(xí)練習(xí)計算的階乘。多層循環(huán)這種情況使用是達不到目的的。它只能從最內(nèi)層循環(huán)退出到上一層的循環(huán)。
目錄
3.3.4 do while循環(huán)中的break和continue?
3.4.3. 在一個有序數(shù)組中查找具體的某個數(shù)字n。
3.4.4. 編寫代碼,演示多個字符從兩端移動,向中間匯聚。
3.4.5. 編寫代碼實現(xiàn),模擬用戶登錄情景,并且只能登錄三次。(只允許輸入三次密碼,如果密碼正確則 提示登錄成,如果三次均輸入錯誤,則退出程序。
do
? ? ? ? ? 循環(huán)語句;
while(表達式);
循環(huán)至少執(zhí)行一次,使用的場景有限,所以不是經(jīng)常使用。一般常常用在某些項目或者游戲的開始界面,因為無論用戶做出怎樣的選擇,菜單或者游戲的開始頁面至少會顯示一次。
下面代碼給大家展示一下:
#include
int main(){ int i = 10; do { printf("%d/n", i); } while (i < 10); return 0;}
break:同while與for循環(huán),執(zhí)行break后直接跳出循環(huán)。下面給大家代碼展示一下:
#include
int main(){ int i = 0; do { if (5 == i) break; printf("%d/n", i); i++; } while (i < 10); return 0;}
?在i = 0 到4 的時候程序正常執(zhí)行,當(dāng)i = 5的時候,執(zhí)行break語句循環(huán)退出結(jié)束,因此在屏幕上值打印了0 1 2 3 4。
?continue:當(dāng)do while循環(huán)體語句中遇到continue之后,就會跳轉(zhuǎn)到條件判斷語句。
#include
int main(){ int i = 0; do { if (5 == i) continue; printf("%d/n", i); i++; } while (i < 10); return 0;}
?程序在i=5的時候if條件判定成立,執(zhí)行continue語句,跳轉(zhuǎn)到條件判定語句while(i<10)成立,陷入了死循環(huán),此時i的值始終為5。
#include
int main(){ int n = 0; int i = 1; int ret = 1;//ret用來存放階乘的結(jié)果 scanf("%d", &n); for (i = 1; i <= n; i++) { ret *= i; } printf("%d", ret); return 0;}
通過for循環(huán)即可實現(xiàn)求階乘。
#include
int main(){ int n = 10; int i = 1; int ret = 1;//ret用來存放階乘的結(jié)果 int sum = 0; for (i = 1; i <= n; i++) { ret *= i; sum += ret; } printf("%d", sum); return 0;}
求階乘的和時,此處用了一個比較巧妙的方法,即n的階乘等于(n-1)的階乘再乘n即可得出,當(dāng)然,也可以用其它的方法,此處需要注意的是,如果用兩個for循環(huán)求的話不要忘記ret的初始化!
#include
int main(){ int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int left = 0; int right = sizeof(arr) / sizeof(arr[0]) - 1; int key = 7; int mid = 0; while (left <= right) { mid = (left + right) / 2; if (arr[mid] > key) { right = mid - 1; } else if (arr[mid] < key) { left = mid + 1; } else break; } if (left <= right) printf("找到了,下標(biāo)是%d/n", mid); else printf("找不到/n");}
二分查找法主要是弄明白原理,只要原理弄清楚了就能很容易的寫出代碼,其原理為:定義首元素下標(biāo)記為left,尾元素下標(biāo)記為right,中間元素下標(biāo)記為mid,拿我們向要查找的元素即mid下標(biāo)對應(yīng)的元素進行比較,如果比中間元素小,就將mid元素的前一個元素的下標(biāo)記為right,反之,就將mid的后一個元素的下標(biāo)記為left,重復(fù)這個過程即可,即構(gòu)成一個循環(huán),另外,需要記住這個循環(huán)終止的條件,當(dāng)left>right時就表明中間已經(jīng)沒有中間元素供我們進行查找,在退出循環(huán)之后,如果left仍然小于right,就說明已經(jīng)找到了我們想要查找的元素,即mid下標(biāo)所對應(yīng)的元素,mid即為其對應(yīng)的下標(biāo)。
#include
#include #include int main(){ char arr1[] = "welcome to bit"; char arr2[] = "##############"; int left = 0; int right = strlen(arr1) - 1; printf("%s/n", arr2); //while循環(huán)實現(xiàn) while (left <= right) { Sleep(1000); arr2[left] = arr1[left]; arr2[right] = arr1[right]; left++; right--; printf("%s/n", arr2); } return 0;}
這段代碼并不復(fù)雜,就是將我們給出的字符串的左右元素逐個賦值到新建的字符串中即可,同樣的,需要注意的是循環(huán)終止的條件,因為每次賦值完后,left下標(biāo)+1,right下標(biāo)-1,當(dāng)left下標(biāo)大于right下標(biāo)即停止,此時中間已經(jīng)沒有元素了,就無法從兩端向中間移動了。
#include
#include int main(){ char psw[10] = ""; int i = 0; int j = 0; for (i = 0; i < 3; ++i) { printf("please input:"); scanf("%s", psw); if (strcmp(psw, "password") == 0) break; } if (i == 3) printf("exit/n"); else printf("log in/n");}
這個題中需要注意的是兩個字符串不能直接進行比較,只能利用string.h庫函數(shù)中的strcmp()進行比較,當(dāng)兩個字符串的每一個元素都相等的時候,給函數(shù)的返回值為0,即可進行判斷。
#include
#include #include void menu(){ printf("**********************************/n"); printf("*********** 1.play **********/n"); printf("*********** 0.exit **********/n"); printf("**********************************/n");}void game(){ int random_num = rand() % 100 + 1; int input = 0; while (1) { printf("請輸入猜的數(shù)字>:"); scanf("%d", &input); if (input > random_num) { printf("猜大了/n"); } else if (input < random_num) { printf("猜小了/n"); } else { printf("恭喜你,猜對了/n"); break; } }}int main(){ int input = 0; srand((unsigned)time(NULL)); do { menu(); printf("請選擇>:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: break; default: printf("選擇錯誤,請重新輸入!/n"); break; } } while (input); return 0;}
猜數(shù)字游戲并不復(fù)雜,但運用了函數(shù)模塊化的思想,其中生成隨機數(shù)用到了rand()函數(shù)和時間戳進行搭配,需要注意的是,時間戳只需要在主函數(shù)中聲明或者運行一次即可,不需要在每次生成隨機數(shù)時都進行聲明。
?C語言中提供了可以隨意濫用的 goto語句和標(biāo)記跳轉(zhuǎn)的標(biāo)號。
從理論上 goto語句是沒有必要的,實踐中沒有g(shù)oto語句也可以很容易的寫出代碼。 但是某些場合下goto語句還是用得著的,最常見的用法就是終止程序在某些深度嵌套的結(jié)構(gòu)的處理過程。
例如:一次跳出兩層或多層循環(huán)。 多層循環(huán)這種情況使用break是達不到目的的。它只能從最內(nèi)層循環(huán)退出到上一層的循環(huán)。當(dāng)然,利用多個break也可以跳出循環(huán),不過要加很多條件進行限制,代碼會變得過于冗長,且容易出錯。
goto語言真正適合的場景如下:
for (...){ for (...) { if (disaster) goto error; }}error : if (disaster) //處理錯誤情況
下面是使用goto語句的一個例子,然后使用循環(huán)的實現(xiàn)方式替換goto語句:
#include
int main(){ char input[10] = { 0 }; system("shutdown -s -t 60");again: printf("電腦將在1分鐘內(nèi)關(guān)機,如果輸入:我是豬,就取消關(guān)機!/n請輸入:>"); scanf("%s", input); if (0 == strcmp(input, "我是豬")) { system("shutdown -a"); } else { goto again; } return 0;}
而如果不想用goto語句,則可以使用循環(huán):
#include
#include int main(){ char input[10] = { 0 }; system("shutdown -s -t 60"); while (1) { printf("電腦將在1分鐘內(nèi)關(guān)機,如果輸入:我是豬,就取消關(guān)機!/n請輸入:>"); scanf("%s", input); if (0 == strcmp(input, "我是豬")) { system("shutdown -a"); break; } } return 0;}
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/123507.html
摘要:表達式表達式為調(diào)整部分,用于循環(huán)條件的調(diào)整。語句的循環(huán)控制變量建議不可在循環(huán)體內(nèi)修改循環(huán)變量,防止循環(huán)失去控制。建議語句的循環(huán)控制變量的取值采用前閉后開區(qū)間寫法。注意當(dāng)條件初始化條件判斷條件更新都省略后,程序?qū)⑦M入死循環(huán)。 目錄 3.2 for循環(huán) 3.2.1?語法 3.2.2 break與...
摘要:無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。形式參數(shù)當(dāng)函數(shù)調(diào)用完成之后就自動銷毀了。函數(shù)的調(diào)用傳值調(diào)用函數(shù)的形參和實參分別占有不同內(nèi)存塊,對形參的修改不會影響實參。沒有找到找到了下標(biāo)為 目錄 1.? 函數(shù)是什么? 2.??C語言中函數(shù)的分類: 2...
摘要:前陣子,我們分享了中的基本數(shù)據(jù)類型轉(zhuǎn)換這篇文章,對許多粉絲還是有帶來幫助的,今天講一下包裝類的的由來,及自動裝箱拆箱的概念和原理。下面是基本數(shù)據(jù)類型與對應(yīng)的包裝類型。 showImg(https://segmentfault.com/img/remote/1460000016537706); 前陣子,我們分享了《Java中的基本數(shù)據(jù)類型轉(zhuǎn)換》這篇文章,對許多粉絲還是有帶來幫助的,今天講...
摘要:判斷目標(biāo)線程是否被中斷,會清除中斷標(biāo)記。技術(shù)棧線程休眠被中斷,程序退出。示例全部信息輸出并正常退出,只是在方法被中斷并清除標(biāo)記后手動重新中斷當(dāng)前線程,然后程序接收中斷信號返回退出。通過以上個中斷示例,相信對線程中斷的概念有了全面的了解。 在之前的一文《如何優(yōu)雅地終止一個線程》中詳細說明了 stop 終止線程的壞處及如何優(yōu)雅地終止線程,那么還有別的可以終止線程的方法嗎?答案是肯定的,它就...
閱讀 2084·2021-11-16 11:45
閱讀 581·2021-11-04 16:12
閱讀 1385·2021-10-08 10:22
閱讀 860·2021-09-23 11:52
閱讀 4146·2021-09-22 15:47
閱讀 3523·2021-09-22 15:07
閱讀 494·2021-09-03 10:28
閱讀 1742·2021-09-02 15:21