最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C 語(yǔ)言基礎(chǔ)之C 語(yǔ)言三大語(yǔ)句注意事項(xiàng)

 更新時(shí)間:2021年09月14日 17:02:45   作者:吞吞吐吐大魔王  
今天講解的內(nèi)容,則是自己對(duì)于這三種語(yǔ)句一些細(xì)節(jié)的簡(jiǎn)單介紹,分支語(yǔ)句:if,switch、循環(huán)語(yǔ)句:while,for,do while、goto語(yǔ)句,感興趣的小伙伴可以參考下面具體的文章內(nèi)容

在今天的內(nèi)容介紹之前我們要知道:C語(yǔ)言中,由一個(gè)分號(hào)( ; )隔開(kāi)的就是一條語(yǔ)句。

很好理解,如:

int a=3;//語(yǔ)句1

printf("請(qǐng)大家多多指教!");//語(yǔ)句2

;//語(yǔ)句3----空語(yǔ)句

今天講解的內(nèi)容,則是自己對(duì)于這三種語(yǔ)句一些細(xì)節(jié)的介紹。(并不是具體講解這些語(yǔ)句)

分支語(yǔ)句:if,switch

循環(huán)語(yǔ)句:while,for,do while

goto語(yǔ)句

補(bǔ)充小知識(shí)(后面如果遇見(jiàn),可在此了解)

  • C語(yǔ)言中:0 表示假--------非0 表示真,如:1,2,-1
  • EOF: EOF是一個(gè)計(jì)算機(jī)術(shù)語(yǔ),為End Of File的縮寫(文件結(jié)束標(biāo)志),其值為-1。通常在文本的最后存在此字符表示資料結(jié)束。
  • getchar():(來(lái)源于MSDN,大家可以自己翻譯一下哦 \(^ ^)/ )
  1. Read a character from a stream (getc, getwc), or get a character from stdin (getchar, getwchar).
  2. Return Value
  3. Each of these functions returns the character read. To indicate an read error or end-of-file condition, getc and getchar return EOF. For getc and getchar, use ferror or feof to check for an error or for end of file.(個(gè)人理解:如果正確讀取,返回的是對(duì)應(yīng)字符的ASCII碼值,如果讀取失敗/結(jié)束/錯(cuò)誤,返回的是EOF)
  • getchar返回類型為int。(因?yàn)樗祷氐目赡苁茿SCII碼值,或者是EOF(-1))
  • scanf()在讀取字符時(shí)會(huì)跳過(guò)空格、制表符和換行符(這里不作詳細(xì)介紹啦,后面會(huì)有專門章節(jié)介紹)
  • system()——執(zhí)行系統(tǒng)命令的一個(gè)函數(shù)——來(lái)自頭文件<stdlib.h>
  • shutdown -s——關(guān)機(jī)命令、shutdown -s -t time——在time秒后自動(dòng)關(guān)機(jī)、shutdown -a——取消關(guān)機(jī)
  • 如果要讓程序?qū)嵭?0s內(nèi)關(guān)機(jī):system("shutdown -s -t 60");
  • strcmp:比較字符串大小的函數(shù)。如果要比較字符串A和B的大小,代碼如下:strcmp(A,B);
  • 如果返回值=0,則兩個(gè)字符串相等;如果返回值>0,則A字符串長(zhǎng)度大于B;如果返回值<0,則A字符串長(zhǎng)度小于B

1、分支語(yǔ)句

分支語(yǔ)句其實(shí)就是一種選擇結(jié)構(gòu)。對(duì)于要先做判斷再選擇的問(wèn)題就要使用分支語(yǔ)句。

比如:如果你喜歡我的文章,可以給我點(diǎn)贊收藏;要是不喜歡的話,可以給我一些改進(jìn)的建議。甚至你 以有其他很多的選擇,這都是分支語(yǔ)句的一部分。

C語(yǔ)言中使用選擇結(jié)構(gòu),就要用到:if、switch

2、if語(yǔ)句

if else 后面如果有多條語(yǔ)句,要加大括號(hào){ }

代碼如下:【期待如果age<=18,輸出未成年;age>18,輸出成年了 可以戀愛(ài)啦!】

int age=24;
if(a>18)
 printf("未成年");
else
 printf("成年了");
 printf("可以戀愛(ài)啦!")

這段代碼結(jié)果:成年了 可以戀愛(ài)啦!

但是如果讓age=8的話,輸出結(jié)果是:未成年 可以戀愛(ài)啦! 這并不符合我們的需求

所以需要將else后面這兩個(gè)語(yǔ)句用{ }括起來(lái)。

懸空else: else 與離他最近的 未匹配的if 匹配

代碼如下:(大家可以思考一下答案是什么)

int a=0;
int b=2;
if(a==1)
    if(b==2)
        printf("hehe\n");
else
    printf("haha\n");

大家想到了嗎,其實(shí)這道題根本不會(huì)打印結(jié)果。

這道題不僅要我們知道,else與離他最近的if匹配;還要我們注意代碼的書寫風(fēng)格是很重要的

這里推薦一本有關(guān)代碼風(fēng)格的書《高質(zhì)量的C-C++編程》,大家可以找到電子版的進(jìn)行學(xué)習(xí)。

3、switch語(yǔ)句

switch語(yǔ)句常常用于多分支情況

對(duì)于如:

輸入1,輸出周一

輸入2,輸出周二

輸入6,輸出周六

輸入7,輸出周日

如果用if…else if…else if…else的形式則顯得復(fù)雜,這時(shí)用switch是一個(gè)更好的選擇

3.1語(yǔ)句結(jié)構(gòu)

switch(整形表達(dá)式)
{
    case 整形常量表達(dá)式:
        語(yǔ)句;
}

注意:
switch后面是整形表達(dá)式(比如int型,char型)【可以用字符,因?yàn)樽址鋵?shí)是整型的一種,底層存儲(chǔ)的是字符對(duì)應(yīng)的ASCII值】

case后面是整形常量表達(dá)式(比如1,1+2)

但是如果是下面的代碼,可以對(duì)應(yīng)數(shù)字輸出星期幾嗎?大家可以思考一下

int day=0;
scanf("%d",&day);
switch(day)
{
    case 1:
        printf("Mon\n");
    case 2:
        printf("Tue\n");
    case 3:
        printf("Wed\n");
    case 4:
        printf("Thus\n");
    case 5:
        printf("Fri\n");
    case 6:
        printf("Sat\n");
    case 7:
        printf("Sun\n");
}

答案是,如果我輸入1,則會(huì)輸出所有的星期。因?yàn)槲逸斎氲闹凳且粋€(gè)入口,如果我輸入2,則從case2進(jìn)入, 但是好像沒(méi)有出口去使語(yǔ)句停止下來(lái),故會(huì)一直往后輸出,直到switch結(jié)束。

故這個(gè)時(shí)候,搭配break,才能使switch實(shí)現(xiàn)真正的分支。

但是break并不是一定要加的,根據(jù)需求添加,如以下代碼(根據(jù)數(shù)字打印工作日和休息日)

int day=0;
scanf("%d",&day);
switch(day)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\(chéng)n");
        break;
    case 6:
    case 7:
        printf("休息日\(chéng)n");
        break;//可以省略,不過(guò)建議加上
    //default:
      //  printf("輸入錯(cuò)誤");
        //break;
}

再提一下default。如果不加default,如上面的代碼。如果輸出不是1到7的數(shù)字,則不會(huì)打印任何東西就結(jié) 束。但是你可以加一個(gè)default,如果輸入的不符合上面要求,則顯示輸入錯(cuò)誤,可以提醒一下自己。(根據(jù) 需求)

至于default的位置,可以不在最后面,只要其他的需求符合題意,放在其他位置也行。

最后可以通過(guò)一段代碼檢驗(yàn)大家是否好的理解了switch

int n=1;
int m=2;
switch(n)
{
    case 1:m++;
    case 2:n++;
    case 3:
        switch(n)
        {//switch允許嵌套使用
            case 1:
                n++;
            case 2:
                m++;
                n++;
                break;
        }
    case 4:
        m++;
        break;
    default:
        break;
}
printf("m=%d,n=%d\n",m,n);

如果你的答案是 5,3,那表示你理解了。如果不是的話,可以對(duì)照上面關(guān)于switch再好好琢磨一下哦。

4、循環(huán)語(yǔ)句

循環(huán)語(yǔ)句:一組被重復(fù)執(zhí)行的語(yǔ)句稱之為循環(huán)體,能否繼續(xù)重復(fù),決定循環(huán)的終止條件。循環(huán)結(jié)構(gòu)是在 一定條件下反復(fù)執(zhí)行某段程序的流程結(jié)構(gòu),被反復(fù)執(zhí)行的程序被稱為循環(huán)體。循環(huán)語(yǔ)句是由 循環(huán)體及循環(huán)的終止條件兩部分組成的。

C語(yǔ)言中使用循環(huán)結(jié)構(gòu)就要用到:while、for、do while

4.1 while循環(huán)(do while類似)

在while循環(huán)中,break用于永久的終止循環(huán)(for,do while都適用)

代碼如下:

int i=1;
while(i<=10)
{
    if(i==5)
        break;
    printf("%d ",i);
    i++;
}

結(jié)果輸出:1 2 3 4

while循環(huán)中,continue是跳過(guò)本次循環(huán)continue后面的代碼,直接去判斷部分

(for,do while都適用)

大家可以思考一下,下面的代碼輸出什么:

int i=1;
while(i<=10)
{
    if(i==5)
        continue;
    printf("%d ",i);
    i++;
}

結(jié)果輸出:1 2 3 4 后面死循環(huán),因?yàn)楫?dāng)i=5時(shí),就跳過(guò)了continue后面的語(yǔ)句,i不能自增,但是會(huì)再次進(jìn)入 循環(huán)判斷。

while( ( ch = getchar( ) ) != EOF )

(在鍵盤上按住Ctrl+z其實(shí)就是讓getchar()讀到了EOF,讀取就結(jié)束)

大家可以自己先調(diào)試運(yùn)行一下下面的代碼:

int ch=0;
while((ch=getchar())!=EOF)
{
    putchar(ch);//輸出字符
}

結(jié)果就是,如果你輸入A回車,界面就會(huì)打印A,然后換行顯示輸入光標(biāo),當(dāng)你在輸入其他字符時(shí)回車后,也 是打印字符,回車,直到你Ctrl+z回車后,該循環(huán)才結(jié)束。

但是你知道getchar是怎么讀入數(shù)據(jù)的嗎?

了解getchar()是如何讀取東西:(getchar和鍵盤之間有個(gè)緩沖區(qū),并不是直接從鍵盤拿數(shù)據(jù))

  • getchar是讀取一個(gè)字符
  • 輸入前緩沖區(qū)是空的,getchar就等待輸入
  • 如果你輸入 A回車,即將A\n放入緩沖區(qū)中,getchar先讀到A,A就進(jìn)入ch中,然后打印,再次循環(huán)時(shí)再讀到\n,\n進(jìn)入ch中,進(jìn)行回車。故后面再輸入時(shí),就換了一行。

了解了getchar的讀入原理后,下面有一段代碼,其實(shí)有個(gè)錯(cuò)誤,大家可以想想怎樣修改:

char password[20] = { 0 };
printf("請(qǐng)輸入密碼>:");
scanf("%s", password);
printf("請(qǐng)確認(rèn)密碼(Y/N)>:");
int ch = getchar();
if ('Y' == ch)
{
 printf("確認(rèn)成功\n");
}
else
{
 printf("確認(rèn)失敗\n");
}

假設(shè)密碼是123456,當(dāng)我們回車后。首先scanf讀入123456,但是剩下的\n就被getchar接收了。

解決方案1:可以在這之前加一個(gè)getchar(),接收\(chéng)n,以清理緩沖區(qū)。

但是如果這樣做后,我們?nèi)绻斎朊艽a為12345 abcde,依舊會(huì)產(chǎn)生問(wèn)題。

所以怎么辦呢?增加getchar()的數(shù)量嗎,那我們是不是可以用一個(gè)循環(huán),直到getchar讀入的為\n為止結(jié)束。 當(dāng)我們?cè)僮龃_認(rèn)的時(shí)候,ch就可以成功接收字符。代碼如下:

char password[20] = { 0 };
printf("請(qǐng)輸入密碼>:");
scanf("%s", password);
printf("請(qǐng)確認(rèn)密碼(Y/N)>:");
int tmp = 0;
while ((tmp = getchar()) != '\n')
{
 ;
}
int ch = getchar();
if ('Y' == ch)
{
 printf("確認(rèn)成功\n");
}
else
{
 printf("確認(rèn)失敗\n");
}

到這里大家應(yīng)該已經(jīng)清楚getchar的讀入了,至于以上的密碼接收有點(diǎn)問(wèn)題,這里只是形象的舉個(gè)例子,大家要是想的太多了,不用去糾結(jié)的。

4.2 do while循環(huán)

這里我有時(shí)老出現(xiàn)一個(gè)錯(cuò)誤,故自己提出來(lái)。先大家先看以下的一段代碼:(感覺(jué)一下是否有問(wèn)題)

do
{
 int input=0;
 printf("請(qǐng)選擇:>");
 scanf("%d", &input);
 switch (input)
 {
 case 0:
  break;
 case 1:
  break;
 default:
  break;
 }
} while (input);

我第一次寫出這種代碼時(shí),編譯就顯示有錯(cuò)誤,但我自己感覺(jué)很合理。因?yàn)楸疽馐窍胼斎?,就退出循環(huán);輸入其他的數(shù)字,就可以循環(huán)下去。
如果細(xì)心的話,大家就會(huì)發(fā)現(xiàn),input的定義其實(shí)應(yīng)該在do-while循環(huán)的外面。我當(dāng)時(shí)就費(fèi)解了一會(huì),但是聯(lián)想到while循環(huán),就感覺(jué)這一切都說(shuō)的通了。

像我這種情況,判斷定義的變量,應(yīng)該與循環(huán)在一個(gè)等級(jí),就是在循環(huán)語(yǔ)句之外,就定義好。

4.3 for循環(huán)

語(yǔ)法結(jié)構(gòu):

for(表達(dá)式1;表達(dá)式2;表示式3)

​ 循環(huán)體

注意:

圓括號(hào)內(nèi)的三個(gè)表達(dá)式在語(yǔ)法上都可以省,但兩個(gè)分號(hào)“ ;”不可以省。for( ; ; )可以表示無(wú)限循環(huán)。

因?yàn)檎Z(yǔ)法規(guī)定,判斷部分省略表示真。

5、goto語(yǔ)句

goto語(yǔ)句:也稱為無(wú)條件轉(zhuǎn)移語(yǔ)句。其一般格式如:goto 語(yǔ)句標(biāo)號(hào); 其中語(yǔ)句標(biāo)號(hào)是按[標(biāo)識(shí)符]規(guī)定書 寫的符號(hào), 放在某一語(yǔ)句行的前面,標(biāo)號(hào)后加[半角冒號(hào)]“:”。語(yǔ)句標(biāo)號(hào)起標(biāo)識(shí)語(yǔ)句的作用, 與 goto 語(yǔ)句配合使用。

用法: goto 語(yǔ)句通常與條件語(yǔ)句配合使用??捎脕?lái)實(shí)現(xiàn)條件轉(zhuǎn)移, 構(gòu)成循環(huán),跳出循環(huán)體等功能。

注意: 1. 使用goto語(yǔ)句只能goto到同一函數(shù)內(nèi),而不能從一個(gè)函數(shù)里goto到另外一個(gè)函數(shù)里。2.在結(jié)構(gòu)化程序設(shè)計(jì)
中一般不主張使用 goto 語(yǔ)句, 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。

語(yǔ)句格式:

goto 語(yǔ)句標(biāo)號(hào):
...
語(yǔ)句標(biāo)號(hào):語(yǔ)句//----語(yǔ)句標(biāo)號(hào)也可以在goto語(yǔ)句之前
   

可以通過(guò)下面兩段代碼比較,幫你理解:

int i=5;
if(i==5)
{
    goto start:
}
//代碼1
start:
printf("A\n");
printf("B\n");
printf("C\n");
//代碼2
printf("A\n");
printf("B\n");
start:
printf("C\n");

代碼1輸出A B C,而代碼2,直接跳過(guò)A B,只輸出C。

goto語(yǔ)句可以用于跳出多層循環(huán),代碼如下:

for()
{
 for()
 {
  for()
  {
   goto start;
  }
 }
}
start:
表達(dá)式

故goto最常見(jiàn)的用法是:終止程序在某些深度嵌套的結(jié)構(gòu)的處理過(guò)程。

最后給大家寫一個(gè)《關(guān)機(jī)程序》來(lái)幫大家理解goto語(yǔ)句,希望大家喜歡啦\(^ ^)/

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

到此這篇關(guān)于C 語(yǔ)言基礎(chǔ)之C 語(yǔ)言三大語(yǔ)句注意事項(xiàng)的文章就介紹到這了,更多相關(guān)C 語(yǔ)言三大語(yǔ)句注意事項(xiàng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中指針指向二維數(shù)組實(shí)例詳解

    C++中指針指向二維數(shù)組實(shí)例詳解

    這篇文章主要介紹了C++中指針指向二維數(shù)組實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C++類的定義和對(duì)象的創(chuàng)建詳解

    C++類的定義和對(duì)象的創(chuàng)建詳解

    本篇文章重點(diǎn)講解了兩種創(chuàng)建對(duì)象的方式:一種是在棧上創(chuàng)建,形式和定義普通變量類似;另外一種是在堆上使用 new 關(guān)鍵字創(chuàng)建,必須要用一個(gè)指針指向它,下面和小編一起來(lái)學(xué)習(xí)下面為文章的內(nèi)容
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)窗口抖動(dòng)

    C語(yǔ)言實(shí)現(xiàn)窗口抖動(dòng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)窗口抖動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++中如何使用引用避免內(nèi)存復(fù)制

    C++中如何使用引用避免內(nèi)存復(fù)制

    C++引用是一種強(qiáng)大的工具,可以避免在函數(shù)調(diào)用過(guò)程中發(fā)生的常見(jiàn)內(nèi)存復(fù)制問(wèn)題,本文主要介紹了C++中如何使用引用避免內(nèi)存復(fù)制,感興趣的可以了解一下
    2023-10-10
  • c++中#include &lt;&gt;與#include""的區(qū)別詳細(xì)解析

    c++中#include &lt;&gt;與#include""的區(qū)別詳細(xì)解析

    <>先去系統(tǒng)目錄中找頭文件,如果沒(méi)有在到當(dāng)前目錄下找。所以像標(biāo)準(zhǔn)的頭文件 stdio.h、stdlib.h等用這個(gè)方法
    2013-10-10
  • c++中ref的作用示例解析

    c++中ref的作用示例解析

    這篇文章主要為大家介紹了c++中ref的作用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 關(guān)于C++讀入數(shù)字按位取出與進(jìn)制轉(zhuǎn)換問(wèn)題(典型問(wèn)題)

    關(guān)于C++讀入數(shù)字按位取出與進(jìn)制轉(zhuǎn)換問(wèn)題(典型問(wèn)題)

    這篇文章主要介紹了關(guān)于C++讀入數(shù)字按位取出與進(jìn)制轉(zhuǎn)換問(wèn)題,是一個(gè)非常典型的問(wèn)題,本文通過(guò)實(shí)例舉例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-02-02
  • C++ 實(shí)現(xiàn)帶監(jiān)視哨的順序查找算法

    C++ 實(shí)現(xiàn)帶監(jiān)視哨的順序查找算法

    這篇文章主要介紹了C++ 實(shí)現(xiàn)帶監(jiān)視哨的順序查找算法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • C語(yǔ)言時(shí)間函數(shù)之strftime()詳解

    C語(yǔ)言時(shí)間函數(shù)之strftime()詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言時(shí)間函數(shù)之strftime(),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C/C++字符串查找函數(shù)全面了解

    C/C++字符串查找函數(shù)全面了解

    下面小編就為大家?guī)?lái)一篇C/C++字符串查找函數(shù)全面了解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09

最新評(píng)論

凤翔县| 石景山区| 潍坊市| 苍南县| 新蔡县| 海丰县| 永年县| 宁陕县| 海伦市| 界首市| 丁青县| 沭阳县| 京山县| 社旗县| 习水县| 象州县| 新乡市| 六安市| 孝义市| 赤城县| 白水县| 呈贡县| 防城港市| 临湘市| 临泉县| 陕西省| 大方县| 兴安盟| 郁南县| 阿图什市| 分宜县| 出国| 罗田县| 朝阳区| 三亚市| 沙湾县| 曲阳县| 密山市| 青岛市| 兴仁县| 涪陵区|