欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

史上最強(qiáng)C語(yǔ)言分支和循環(huán)教程詳解

 更新時(shí)間:2021年11月15日 09:53:41   作者:鹿九丸  
這篇文章主要介紹了史上最強(qiáng)C語(yǔ)言分支和循環(huán)教程詳解,本文通過(guò)代碼演示給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

3.3 do...while()循環(huán)

3.3.1 do語(yǔ)句的語(yǔ)法:

do

          循環(huán)語(yǔ)句;

while(表達(dá)式);

3.3.2 執(zhí)行流程

3.3.3 do語(yǔ)句的特點(diǎn)

循環(huán)至少執(zhí)行一次,使用的場(chǎng)景有限,所以不是經(jīng)常使用。一般常常用在某些項(xiàng)目或者游戲的開(kāi)始界面,因?yàn)闊o(wú)論用戶做出怎樣的選擇,菜單或者游戲的開(kāi)始頁(yè)面至少會(huì)顯示一次。

下面代碼給大家展示一下:

#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 的時(shí)候程序正常執(zhí)行,當(dāng)i = 5的時(shí)候,執(zhí)行break語(yǔ)句循環(huán)退出結(jié)束,因此在屏幕上值打印了0 1 2 3 4。

 continue:當(dāng)do while循環(huán)體語(yǔ)句中遇到continue之后,就會(huì)跳轉(zhuǎn)到條件判斷語(yǔ)句。

#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的時(shí)候if條件判定成立,執(zhí)行continue語(yǔ)句,跳轉(zhuǎn)到條件判定語(yǔ)句while(i<10)成立,陷入了死循環(huán),此時(shí)i的值始終為5。

3.4 練習(xí)

3.4.1. 計(jì)算 n的階乘。

#include<stdio.h>
int main()
{
 int n = 0;
 int i = 1;
 int ret = 1;//ret用來(lái)存放階乘的結(jié)果
 scanf("%d", &n);
 for (i = 1; i <= n; i++)
 {
  ret *= i;
 }
 printf("%d", ret);
 return 0;
}

通過(guò)for循環(huán)即可實(shí)現(xiàn)求階乘。

3.4.2. 計(jì)算 1!+2!+3!+……+10!

#include<stdio.h>
int main()
{
 int n = 10;
 int i = 1;
 int ret = 1;//ret用來(lái)存放階乘的結(jié)果
 int sum = 0;
 for (i = 1; i <= n; i++)
 {
  ret *= i;
  sum += ret;
  
 }
 printf("%d", sum);
 return 0;
}

求階乘的和時(shí),此處用了一個(gè)比較巧妙的方法,即n的階乘等于(n-1)的階乘再乘n即可得出,當(dāng)然,也可以用其它的方法,此處需要注意的是,如果用兩個(gè)for循環(huán)求的話不要忘記ret的初始化!

3.4.3. 在一個(gè)有序數(shù)組中查找具體的某個(gè)數(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("找到了,下標(biāo)是%d\n", mid);
 else
  printf("找不到\n");
}

二分查找法主要是弄明白原理,只要原理弄清楚了就能很容易的寫(xiě)出代碼,其原理為:定義首元素下標(biāo)記為left,尾元素下標(biāo)記為right,中間元素下標(biāo)記為mid,拿我們向要查找的元素即mid下標(biāo)對(duì)應(yīng)的元素進(jìn)行比較,如果比中間元素小,就將mid元素的前一個(gè)元素的下標(biāo)記為right,反之,就將mid的后一個(gè)元素的下標(biāo)記為left,重復(fù)這個(gè)過(guò)程即可,即構(gòu)成一個(gè)循環(huán),另外,需要記住這個(gè)循環(huán)終止的條件,當(dāng)left>right時(shí)就表明中間已經(jīng)沒(méi)有中間元素供我們進(jìn)行查找,在退出循環(huán)之后,如果left仍然小于right,就說(shuō)明已經(jīng)找到了我們想要查找的元素,即mid下標(biāo)所對(duì)應(yīng)的元素,mid即為其對(duì)應(yīng)的下標(biāo)。

3.4.4. 編寫(xiě)代碼,演示多個(gè)字符從兩端移動(dòng),向中間匯聚。

#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)實(shí)現(xiàn)
    while (left <= right)
    {
        Sleep(1000);
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        left++;
        right--;
        printf("%s\n", arr2);
    }
    return 0;
}

這段代碼并不復(fù)雜,就是將我們給出的字符串的左右元素逐個(gè)賦值到新建的字符串中即可,同樣的,需要注意的是循環(huán)終止的條件,因?yàn)槊看钨x值完后,left下標(biāo)+1,right下標(biāo)-1,當(dāng)left下標(biāo)大于right下標(biāo)即停止,此時(shí)中間已經(jīng)沒(méi)有元素了,就無(wú)法從兩端向中間移動(dòng)了。

3.4.5. 編寫(xiě)代碼實(shí)現(xiàn),模擬用戶登錄情景,并且只能登錄三次。

(只允許輸入三次密碼,如果密碼正確則 提示登錄成,如果三次均輸入錯(cuò)誤,則退出程序。

#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");
}

這個(gè)題中需要注意的是兩個(gè)字符串不能直接進(jìn)行比較,只能利用string.h庫(kù)函數(shù)中的strcmp()進(jìn)行比較,當(dāng)兩個(gè)字符串的每一個(gè)元素都相等的時(shí)候,給函數(shù)的返回值為0,即可進(jìn)行判斷。

3.4.6.猜數(shù)字游戲?qū)崿F(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("請(qǐng)輸入猜的數(shù)字>:");
  scanf("%d", &input);
  if (input > random_num)
  {
   printf("猜大了\n");
  }
  else if (input < random_num)
  {
   printf("猜小了\n");
  }
  else
  {
   printf("恭喜你,猜對(duì)了\n");
   break;
  }
 }
}
int main()
{
 int input = 0;
 srand((unsigned)time(NULL));
 do
 {
  menu();
  printf("請(qǐng)選擇>:");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
   game();
   break;
  case 0:
   break;
  default:
   printf("選擇錯(cuò)誤,請(qǐng)重新輸入!\n");
   break;
  }
 } while (input);
 return 0;
}

猜數(shù)字游戲并不復(fù)雜,但運(yùn)用了函數(shù)模塊化的思想,其中生成隨機(jī)數(shù)用到了rand()函數(shù)和時(shí)間戳進(jìn)行搭配,需要注意的是,時(shí)間戳只需要在主函數(shù)中聲明或者運(yùn)行一次即可,不需要在每次生成隨機(jī)數(shù)時(shí)都進(jìn)行聲明。

4.goto語(yǔ)句

 C語(yǔ)言中提供了可以隨意濫用的 goto語(yǔ)句和標(biāo)記跳轉(zhuǎn)的標(biāo)號(hào)。

從理論上 goto語(yǔ)句是沒(méi)有必要的,實(shí)踐中沒(méi)有g(shù)oto語(yǔ)句也可以很容易的寫(xiě)出代碼。 但是某些場(chǎng)合下goto語(yǔ)句還是用得著的,最常見(jiàn)的用法就是終止程序在某些深度嵌套的結(jié)構(gòu)的處理過(guò)程。

例如:一次跳出兩層或多層循環(huán)。 多層循環(huán)這種情況使用break是達(dá)不到目的的。它只能從最內(nèi)層循環(huán)退出到上一層的循環(huán)。當(dāng)然,利用多個(gè)break也可以跳出循環(huán),不過(guò)要加很多條件進(jìn)行限制,代碼會(huì)變得過(guò)于冗長(zhǎng),且容易出錯(cuò)。

goto語(yǔ)言真正適合的場(chǎng)景如下:

for (...)
{
    for (...)
    {
        if (disaster)
            goto error;
    }
}
error :
     if (disaster)
         //處理錯(cuò)誤情況

下面是使用goto語(yǔ)句的一個(gè)例子,然后使用循環(huán)的實(shí)現(xiàn)方式替換goto語(yǔ)句:

一個(gè)關(guān)機(jī)程序

#include <stdio.h>
int main()
{
    char input[10] = { 0 };
    system("shutdown -s -t 60");
again:
    printf("電腦將在1分鐘內(nèi)關(guān)機(jī),如果輸入:我是豬,就取消關(guān)機(jī)!\n請(qǐng)輸入:>");
    scanf("%s", input);
    if (0 == strcmp(input, "我是豬"))
    {
        system("shutdown -a");
    }
    else
    {
        goto again;
    }
    return 0;
}

而如果不想用goto語(yǔ)句,則可以使用循環(huán):

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char input[10] = { 0 };
    system("shutdown -s -t 60");
    while (1)
    {
        printf("電腦將在1分鐘內(nèi)關(guān)機(jī),如果輸入:我是豬,就取消關(guān)機(jī)!\n請(qǐng)輸入:>");
        scanf("%s", input);
        if (0 == strcmp(input, "我是豬"))
        {
            system("shutdown -a");
            break;
        }
    }
    return 0;
}

到此這篇關(guān)于史上最強(qiáng)C語(yǔ)言分支和循環(huán)教程詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言分支和循環(huán)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c實(shí)現(xiàn)linux下的數(shù)據(jù)庫(kù)備份

    c實(shí)現(xiàn)linux下的數(shù)據(jù)庫(kù)備份

    本文給大家簡(jiǎn)單介紹下c實(shí)現(xiàn)linux下的數(shù)據(jù)庫(kù)備份的方法和具體的源碼,十分的實(shí)用,有需要的小伙伴可以參考下。
    2015-07-07
  • 解析C/C++?Capstone?引擎源碼編譯問(wèn)題

    解析C/C++?Capstone?引擎源碼編譯問(wèn)題

    Capstone的編譯非常簡(jiǎn)單只需要一步即可輕松得到對(duì)應(yīng)的Lib庫(kù)文件,如下將介紹該引擎如何被編譯,以及簡(jiǎn)單的測(cè)試編譯,這篇文章主要介紹了C/C++?Capstone?引擎源碼編譯,需要的朋友可以參考下
    2022-09-09
  • C++讀寫(xiě)INI配置文件的類(lèi)實(shí)例

    C++讀寫(xiě)INI配置文件的類(lèi)實(shí)例

    這篇文章主要介紹了C++讀寫(xiě)INI配置文件的類(lèi),實(shí)例分析了C++操作ini配置文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • ACE反應(yīng)器(Reactor)模式的深入分析

    ACE反應(yīng)器(Reactor)模式的深入分析

    本篇文章是對(duì)ACE反應(yīng)器(Reactor)模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字小游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • c語(yǔ)言?指針零基礎(chǔ)講解

    c語(yǔ)言?指針零基礎(chǔ)講解

    指針是指向另一個(gè)變量的變量。意思是一個(gè)指針保存的是另一個(gè)變量的內(nèi)存地址。換句話說(shuō),指針保存的并不是普通意義上的數(shù)值,而是另一個(gè)變量的地址值。一個(gè)指針保存了另一個(gè)變量的地址值,就說(shuō)這個(gè)指針“指向”了那個(gè)變量
    2022-02-02
  • C語(yǔ)言頭文件<string.h>函數(shù)詳解

    C語(yǔ)言頭文件<string.h>函數(shù)詳解

    本文主要介紹了C語(yǔ)言頭文件<string.h>函數(shù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 純C語(yǔ)言:折半查找源碼分享

    純C語(yǔ)言:折半查找源碼分享

    這篇文章主要介紹了純C語(yǔ)言:折半查找源碼,有需要的朋友可以參考一下
    2014-01-01
  • C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序

    C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序

    這篇文章主要介紹了C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Qt Design Studio創(chuàng)建工程的實(shí)現(xiàn)方法

    Qt Design Studio創(chuàng)建工程的實(shí)現(xiàn)方法

    Qt Design Studio它允許設(shè)計(jì)人員和開(kāi)發(fā)人員使用通用的設(shè)計(jì)、開(kāi)發(fā)、分析和調(diào)試工具在不同的開(kāi)發(fā)平臺(tái)上共享一個(gè)項(xiàng)目,本文主要介紹了Qt Design Studio創(chuàng)建工程的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2022-05-05

最新評(píng)論