天天看點

C語言學習筆記系列—第七章

作者:正能量IT先生

最近工作着實是有點忙,拖更了一陣子。其實中間想過放棄這個系列,但是想了一下多少還是要堅持下去,畢竟下了班不打遊戲幹一件有意思的事情還是很有挑戰的。下面進入第七章的學習内容了,這章内容主要是判斷語句if和else的使用,中間還會穿插一下跳轉的概念。

學習參考書籍《C Primer Plus》

1,if語句+複習前章内容

單獨從英語的角度來講if就是“如果”的意思,應用到C語言也是如此,先來一個簡單的程式(雖然看着有點長);以下程式都是由之前所需要的知識,大家來簡單學習看一下,運用了聲明變量的整型與浮點型,運用了while循環,以及聲明變量++等;

#include <stdio.h>
#define FREEZING 0  // freezing temperature
int main(void)
{

    float temperature;
    int cold_days = 0; // number of days below freezing
    int days = 0; // number of days entered
    
    printf("Enter the list of daily low temperatures.\n");
    printf("Use Celsius, and enter q to quit.\n");
    while (scanf("%f", &temperature) == 1)  
    { 
        days++;  // count the days
        if (temperature < FREEZING)
            cold_days++;  // count the cold days
    }
    if (days != 0)  // avoid division by zero
        printf("%d days total: %.1f%% were below freezing.\n",days, 100.0 * (float) cold_days / days);  // print the result
    if (days == 0)
        printf("No data entered!\n");
    
    return 0;
}
           

程式中的循環通過scanf()讀入溫度值。while循環每疊代一次,就遞增計數器增加天數,其中的if語句負責判斷0℃以下的溫度并單獨統計相應的天數。其中這個程式看似簡單但也是有些細節要着重強調的:

  1. while循環的測試條件利用scanf()的傳回值來結束循環,因為scanf()在讀到非數字字元時會傳回0。
  2. temperature的類型是float而不是int,這樣程式既可以接受溫度低于0度和-3.6這種溫度值。
  3. 該程式的第十九行中為避免整數除法,該程式示例把計算後的百分比強制轉換為float類型。

if語句在這個程式中的結構和while語句很相似,它們的主要差別是:如果滿足條件可執行的話,if語句隻能測試和執行一次,而while語句可以測試和執行多次。

1.1,if else語句

簡單形式的if語句可以讓程式選擇執行一條語句,或者跳過這條語句。C還提供了if else形式,在兩條語句之間作選擇。

我們用if else形式來舉例上述程式中純if部分:

C語言學習筆記系列—第七章

單純if使用方式

如果程式發現days不等于0,那麼它應該知道另一種情況一定是days等于0。是以如果單純使用if下邊的還需要在判斷測試一次就很沒有必要了。修改如下:

C語言學習筆記系列—第七章

引入if else使用方式

在使用if和else之間執行多條語句,必須用花括号把這些語句括起來成為一個“塊”。下面的代碼結構違反了C文法,因為在if和else之間隻允許有一條語句(簡單語句或複合語句):

if (y > 0)
     printf("y:\n");
     y++;
else        //程式将會報錯
     printf("y <= 0 \n");           

報錯的原因是編譯器把printf()語句視為if語句的一部分,而把x++;看作一條單獨的語句,它不是if語句的一部分,編譯器發現else并沒有所屬的if是以程式就會報錯。

if (y > 0)
{
     printf("y:\n");
     y++;
}
else
     printf("y <= 0 \n");           

2,getchar()和putchar()

之前在第一章學習到的getcher();隻是單純用來點選編譯檔案使得程式可以停留。下面來詳細學習一下使用:

下面的語句讀取下一個字元輸入,并把該字元的值賦給變量cy:

cy = getchar();其實等效為:scanf("%c", &cy);

putchar()函數列印它的參數。

putchar(cy);其實等效為:printf("%c", cy);

由于這些函數隻處理字元,是以它們比更通用的scanf()和printf()函數更快、更簡潔。特别注意getchar()和putchar()不需要轉換說明,因為它們隻處理字元。

下邊我們來學習一個程式看下函數的具體實踐使用:

#include <stdio.h>
#define SPACE ' '             // that's quote-space-quote 
int main(void)
{
    char ch;
    
    ch = getchar();           // read a character         
    while (ch != '\n')        // while not end of line    
    {
        if (ch == SPACE)      // leave the space          
            putchar(ch);      // character unchanged      
        else
            putchar(ch+2);  // change other characters  
        ch = getchar();       // get next character       
    }
    putchar(ch);              // print the newline        
    
    return 0;
}
           

這個程式是把一行輸入重新列印出來,但是每個非空格都被替換成原字元在ASCII序列中的下一個字元,空格不變。這一過程可描述為“如果字元是空白,原樣列印;否則,列印原字元在ASCII序列中的下兩個字元”。

輸出結果如下:

C語言學習筆記系列—第七章

3,總結

本章主要是學習了if和if else的用法同時又加入了getchar()和putchar()的簡單介紹,由于最近工作實在是有點忙的不可開交(工作部門變動需要交接原部門的工作)。是以拖更了一陣子,下個月還有兩場職稱考試,都與程式設計無關的考試。。。盡量保持不拖更吧。時間精力有限,盡量提升閱讀體驗吧,發現想寫的簡單,但是又覺得寫的簡單了又不好讓讀者讀懂。如有不足或有疑問歡迎各位大佬們指正,同時也希望非IT專業的小白們能感受到C語言的魅力所在。如果對你有幫助的話點贊收藏哦!

[1] 《C Primer Plus》

繼續閱讀