最近工作着實是有點忙,拖更了一陣子。其實中間想過放棄這個系列,但是想了一下多少還是要堅持下去,畢竟下了班不打遊戲幹一件有意思的事情還是很有挑戰的。下面進入第七章的學習内容了,這章内容主要是判斷語句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℃以下的溫度并單獨統計相應的天數。其中這個程式看似簡單但也是有些細節要着重強調的:
- while循環的測試條件利用scanf()的傳回值來結束循環,因為scanf()在讀到非數字字元時會傳回0。
- temperature的類型是float而不是int,這樣程式既可以接受溫度低于0度和-3.6這種溫度值。
- 該程式的第十九行中為避免整數除法,該程式示例把計算後的百分比強制轉換為float類型。
if語句在這個程式中的結構和while語句很相似,它們的主要差別是:如果滿足條件可執行的話,if語句隻能測試和執行一次,而while語句可以測試和執行多次。
1.1,if else語句
簡單形式的if語句可以讓程式選擇執行一條語句,或者跳過這條語句。C還提供了if else形式,在兩條語句之間作選擇。
我們用if else形式來舉例上述程式中純if部分:
單純if使用方式
如果程式發現days不等于0,那麼它應該知道另一種情況一定是days等于0。是以如果單純使用if下邊的還需要在判斷測試一次就很沒有必要了。修改如下:
引入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序列中的下兩個字元”。
輸出結果如下:
3,總結
本章主要是學習了if和if else的用法同時又加入了getchar()和putchar()的簡單介紹,由于最近工作實在是有點忙的不可開交(工作部門變動需要交接原部門的工作)。是以拖更了一陣子,下個月還有兩場職稱考試,都與程式設計無關的考試。。。盡量保持不拖更吧。時間精力有限,盡量提升閱讀體驗吧,發現想寫的簡單,但是又覺得寫的簡單了又不好讓讀者讀懂。如有不足或有疑問歡迎各位大佬們指正,同時也希望非IT專業的小白們能感受到C語言的魅力所在。如果對你有幫助的話點贊收藏哦!
[1] 《C Primer Plus》