史上最強C語言分支和循環(huán)教程詳解
3.3 do...while()循環(huán)
3.3.1 do語句的語法:
do
循環(huán)語句;
while(表達式);
3.3.2 執(zhí)行流程

3.3.3 do語句的特點
循環(huán)至少執(zhí)行一次,使用的場景有限,所以不是經常使用。一般常常用在某些項目或者游戲的開始界面,因為無論用戶做出怎樣的選擇,菜單或者游戲的開始頁面至少會顯示一次。
下面代碼給大家展示一下:
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
} while (i < 10);
return 0;
}

3.3.4 do while循環(huán)中的break和continue
break:同while與for循環(huán),執(zhí)行break后直接跳出循環(huán)。下面給大家代碼展示一下:
#include <stdio.h>
int main()
{
int i = 0;
do
{
if (5 == i)
break;
printf("%d\n", i);
i++;
} while (i < 10);
return 0;
}

在i = 0 到4 的時候程序正常執(zhí)行,當i = 5的時候,執(zhí)行break語句循環(huán)退出結束,因此在屏幕上值打印了0 1 2 3 4。
continue:當do while循環(huán)體語句中遇到continue之后,就會跳轉到條件判斷語句。
#include <stdio.h>
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語句,跳轉到條件判定語句while(i<10)成立,陷入了死循環(huán),此時i的值始終為5。
3.4 練習
3.4.1. 計算 n的階乘。
#include<stdio.h>
int main()
{
int n = 0;
int i = 1;
int ret = 1;//ret用來存放階乘的結果
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
ret *= i;
}
printf("%d", ret);
return 0;
}
通過for循環(huán)即可實現(xiàn)求階乘。
3.4.2. 計算 1!+2!+3!+……+10!
#include<stdio.h>
int main()
{
int n = 10;
int i = 1;
int ret = 1;//ret用來存放階乘的結果
int sum = 0;
for (i = 1; i <= n; i++)
{
ret *= i;
sum += ret;
}
printf("%d", sum);
return 0;
}
求階乘的和時,此處用了一個比較巧妙的方法,即n的階乘等于(n-1)的階乘再乘n即可得出,當然,也可以用其它的方法,此處需要注意的是,如果用兩個for循環(huán)求的話不要忘記ret的初始化!
3.4.3. 在一個有序數(shù)組中查找具體的某個數(shù)字n。
#include<stdio.h>
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("找到了,下標是%d\n", mid);
else
printf("找不到\n");
}
二分查找法主要是弄明白原理,只要原理弄清楚了就能很容易的寫出代碼,其原理為:定義首元素下標記為left,尾元素下標記為right,中間元素下標記為mid,拿我們向要查找的元素即mid下標對應的元素進行比較,如果比中間元素小,就將mid元素的前一個元素的下標記為right,反之,就將mid的后一個元素的下標記為left,重復這個過程即可,即構成一個循環(huán),另外,需要記住這個循環(huán)終止的條件,當left>right時就表明中間已經沒有中間元素供我們進行查找,在退出循環(huán)之后,如果left仍然小于right,就說明已經找到了我們想要查找的元素,即mid下標所對應的元素,mid即為其對應的下標。
3.4.4. 編寫代碼,演示多個字符從兩端移動,向中間匯聚。
#include <stdio.h>
#include<string.h>
#include<windows.h>
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;
}
這段代碼并不復雜,就是將我們給出的字符串的左右元素逐個賦值到新建的字符串中即可,同樣的,需要注意的是循環(huán)終止的條件,因為每次賦值完后,left下標+1,right下標-1,當left下標大于right下標即停止,此時中間已經沒有元素了,就無法從兩端向中間移動了。
3.4.5. 編寫代碼實現(xiàn),模擬用戶登錄情景,并且只能登錄三次。
(只允許輸入三次密碼,如果密碼正確則 提示登錄成,如果三次均輸入錯誤,則退出程序。
#include<stdio.h>
#include<string.h>
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()進行比較,當兩個字符串的每一個元素都相等的時候,給函數(shù)的返回值為0,即可進行判斷。
3.4.6.猜數(shù)字游戲實現(xiàn)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
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ù)字游戲并不復雜,但運用了函數(shù)模塊化的思想,其中生成隨機數(shù)用到了rand()函數(shù)和時間戳進行搭配,需要注意的是,時間戳只需要在主函數(shù)中聲明或者運行一次即可,不需要在每次生成隨機數(shù)時都進行聲明。
4.goto語句
C語言中提供了可以隨意濫用的 goto語句和標記跳轉的標號。
從理論上 goto語句是沒有必要的,實踐中沒有goto語句也可以很容易的寫出代碼。 但是某些場合下goto語句還是用得著的,最常見的用法就是終止程序在某些深度嵌套的結構的處理過程。
例如:一次跳出兩層或多層循環(huán)。 多層循環(huán)這種情況使用break是達不到目的的。它只能從最內層循環(huán)退出到上一層的循環(huán)。當然,利用多個break也可以跳出循環(huán),不過要加很多條件進行限制,代碼會變得過于冗長,且容易出錯。
goto語言真正適合的場景如下:
for (...)
{
for (...)
{
if (disaster)
goto error;
}
}
error :
if (disaster)
//處理錯誤情況
下面是使用goto語句的一個例子,然后使用循環(huán)的實現(xiàn)方式替換goto語句:
一個關機程序
#include <stdio.h>
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 60");
again:
printf("電腦將在1分鐘內關機,如果輸入:我是豬,就取消關機!\n請輸入:>");
scanf("%s", input);
if (0 == strcmp(input, "我是豬"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
而如果不想用goto語句,則可以使用循環(huán):
#include <stdio.h>
#include <stdlib.h>
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 60");
while (1)
{
printf("電腦將在1分鐘內關機,如果輸入:我是豬,就取消關機!\n請輸入:>");
scanf("%s", input);
if (0 == strcmp(input, "我是豬"))
{
system("shutdown -a");
break;
}
}
return 0;
}
到此這篇關于史上最強C語言分支和循環(huán)教程詳解的文章就介紹到這了,更多相關C語言分支和循環(huán)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
c實現(xiàn)linux下的數(shù)據(jù)庫備份
本文給大家簡單介紹下c實現(xiàn)linux下的數(shù)據(jù)庫備份的方法和具體的源碼,十分的實用,有需要的小伙伴可以參考下。2015-07-07
Qt Design Studio創(chuàng)建工程的實現(xiàn)方法
Qt Design Studio它允許設計人員和開發(fā)人員使用通用的設計、開發(fā)、分析和調試工具在不同的開發(fā)平臺上共享一個項目,本文主要介紹了Qt Design Studio創(chuàng)建工程的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下2022-05-05

