- C語言程序設計實例教程(第3版)
- 李紅 陸建友主編
- 3037字
- 2021-12-17 17:35:19
3.1 順序結構程序設計
學習目標
1)掌握程序的幾種基本結構。
2)掌握順序結構程序設計的程序模式。
3)掌握字符型輸入輸出函數。
4)掌握常用的格式輸入輸出函數。
5)掌握頭文件在編寫程序時的作用。
6)掌握復合語句和空語句的格式及作用。

實例11
實例11字符型數據的輸入和輸出——輸入與輸出幾個字符
實例任務
輸入幾個字符然后將其輸出。程序運行結果如圖3-1所示。

圖3-1 程序運行結果
程序代碼


相關知識
1.程序的幾種基本結構
C語言中,常用的流程控制結構分為順序結構、選擇結構和循環結構。由這3種結構可組成各種復雜的程序。順序結構是3種結構中最簡單、最常見的程序結構。3種流程控制結構使用特定的流程控制語句,從而實現程序的各種結構方式。C語言中常用的控制語句有if語句、switch語句、do while語句、while語句、for語句、continue語句、break語句等。
2.順序結構的執行過程
所謂“程序結構”,即指程序中語句的執行順序。程序設計者要把事情交給計算機去做,都是寫出一條條語句并順序執行,這是順序結構。本例中的程序運行就是順序執行每條語句。
3.getchar()函數
getchar()函數是一個沒有參數的函數,它從標準輸入(鍵盤)讀取一個字符,返回該字符的編碼值。當使用此函數時,按下的鍵將自動回顯到屏幕上。使用getchar()函數時,任何鍵都是有效的返回值。調用沒有參數的函數時應在函數名后寫一對空括號。下面的代碼演示了getchar()函數的用法:

getchar()函數只能接收單個字符,輸入數字也按字符處理。當輸入多于一個字符時,只接收第一個字符。使用getchar()函數時需要注意這一點。
函數fflush()用于清空輸入緩沖區。stdin是標準的輸入,即鍵盤輸入。分配給鍵盤的緩沖區需要清空,以便存儲新數據。有時,鍵盤緩沖區中保留著舊信息,如果不清空,在接收字符時會將舊信息返回,這樣就可能引發錯誤。
4.putchar()函數
putchar()函數對應于getchar()函數,它把一個字符送到標準輸出。例如:

兩個字符'o'和'k'將被送到標準輸出。標準輸出的默認連接通常是計算機顯示器,因此執行這兩條語句的效果使字符在計算機屏幕上顯示出來。實例中創建了3個變量a、b和c,getchar()函數將用戶輸入的字符存儲在這些變量中。每個getchar()前都使用一個fflush()函數清空緩沖區。在該程序中,如果不使用fflush(),也不會出現問題。隨著每個getchar()函數的執行,輸入的字符就顯示在屏幕上。最后一行輸出結果將顯示前面輸入的所有字符。此輸出結果表明,使用putchar()函數后,所有字符將顯示在同一行上,最后換行(輸出一個換行符),程序隨即結束。
課堂精練
1)從鍵盤輸入3個數,并計算它們的和值。程序運行結果如圖3-2所示。

圖3-2 程序運行結果(1)
根據程序運行結果,請將下面的程序補充完整并調試。

2)從鍵盤輸入2個整數,計算兩數整除所得的余數。程序運行結果如圖3-3所示。

圖3-3 程序運行結果(2)
根據程序運行結果,請將下面的程序補充完整并調試。

3)從鍵盤輸入一個大寫字母,輸出該字母的小寫。程序運行結果如圖3-4所示。

圖3-4 程序運行結果(3)
根據程序運行結果,請將下面的程序補充完整并調試。


實例12
實例12 格式化數據的輸入和輸出——互換兩個變量的值
實例任務
接收兩個整數,分別保存在兩個變量中,通過第三個變量將這兩個變量的值互換。程序運行結果如圖3-5所示。

圖3-5 程序運行結果
程序代碼


相關知識
1.頭文件stdio.h
C語言的格式輸入函數scanf()和格式輸出函數printf()都在頭文件stdio.h里。因此,編程中使用它們時,在程序的開始處應該書寫一條包含命令:

或

2.格式輸出函數printf()
格式輸出函數printf()的功能是按指定的格式將數據在標準設備上進行輸出。其一般格式為:

其中輸出項表列由各輸出項組成,各輸出項之間用逗號分隔開。輸出項可以是合法的變量、常量或表達式。
格式控制參數是由雙引號括起來的字符串,它是由格式描述符和普通字符組成的。普通字符將被原樣輸出。格式描述符以%開頭,以一個格式字符結束,作用是將輸出數據按指定的格式輸出。常用的格式描述符包括以下幾種類型。
● %d:以十進制形式輸出帶符號的整數。
● %o:以八進制無符號形式輸出整數。
● %x:以十六進制無符號形式輸出整數。
● %c:用于輸出單個字符。
● %f:以十進制形式輸出實型數據。
● %s:用于輸出字符串。
在printf()函數中的一個格式描述符對應一個輸出數據,也就是說,必須在輸出項表列中有一個變量與之相對應,且類型要前后一致。
說明:
1)在%與格式字符間插入整數來指定輸出寬度。
● %md:表明所輸出的數據占m個字符的寬度,如果實際輸出數據的字符數大于m,則按實際的位數輸出,否則在輸出數據的左端補空格。
● %mc:表明輸出的字符占m個字符的寬度,如果m大于1,則左端補空格。
● %ms:表明輸出m個字符的字符串。如果實際長度大于m,則按原樣輸出字符串,否則左端補空格。
● %m.nf:表明輸出數據的總寬度為m(包括整數位數、小數點和小數位數),n為小數位數。如果輸出的數據的總長度小于m,則在輸出數據的左端補空格。對于小數部分,若n小于實際輸出的小數位數,則對第n+1位進行四舍五入。
格式控制符與輸出結果之間的關系如表3-1所示(其中Ц表示空格)。
表3-1 格式控制符與輸出結果之間的關系

2)若需在輸出的數值型數據前帶正負號,可以通過在%與格式字符間加一個“+”來實現。例如:

語句的輸出結果為:+1,-1。
3)如需在輸出數據前加前導0,可以通過在%與指定輸出寬度的整數間加一個“0”來實現。例如:

則輸出結果為:00122。
4)在格式控制字符串中,如果兩個%連用,則輸出一個%。例如:

語句的輸出結果為:%10。
3.格式輸入函數scanf()
格式輸入函數scanf ()的功能是按指定的格式從鍵盤上輸入數據。其一般格式為:

其中,地址項表列是由接收數據的變量的地址組成,求地址運算符為&,如&a,&b,&c。
格式控制參數是由雙引號括起來的字符串,里邊有格式描述符和輸入數據分隔符。常用的格式描述符與printf ()函數的格式描述符相同。
在scanf ()函數中的一個格式描述符對應一個輸入數據,也就是說,必須在地址項表列中有一個變量與之相對應,且類型要前后一致。
1)如果輸入數值型數據,數據間要用空格、〈Tab〉鍵或〈Enter〉鍵(即回車鍵)分隔。例如:

對應此語句,可輸入13 789↙(↙表示回車)。
2)如果在各格式描述符間有分隔符,則在輸入數據時,要輸入相同的字符作為分隔符。例如:

對應此語句,要求輸入數據間要用“,”分隔。可輸入:13,789↙。
3)如果要輸入多個字符數據,則不需要在各字符間輸入分隔符。例如:

對應此語句,可輸入:AB↙。則對應a輸入字符A,對應b輸入字符B。
4)當交叉輸入數值數據和字符數據時,如果字符數據在前,則字符數據和數值數據間要有空格;如果數值數據在前,則數值數據和字符數據間不要有空格。例如:

對應此語句,必須輸入:20A 30B↙。

對應此語句,可以輸入:A 20B 30↙。
4.復合語句
在C語言程序中,可以用一對花括號把若干條語句括起來使其形成一個整體,這個整體就被稱為復合語句。從語法上講,復合語句相當于一條語句。復合語句的一般格式是:

要注意,復合語句中可以出現變量說明,復合語句中的最后一條語句的語句結束符(分號)不能省略,否則會造成語法錯誤。另外,標識復合語句結束的右花括號的后面不能有語句結束符(分號)。
5.空語句
在C語言中,稱僅由一個分號組成的語句為空語句,即:

編譯程序在遇到空語句時,不會為其產生任何指令代碼。這就是說,空語句不執行任何操作。因此,空語句只是C語言語法上的一個概念,它起到一個語句的作用,僅此而已。
課堂精練
1)輸入圓的半徑,求其周長和面積。程序運行結果如圖3-6所示。

圖3-6 程序運行結果(1)
根據程序運行結果,請將下面的程序補充完整并調試。

2)復合語句和空語句的使用。程序運行結果如圖3-7所示。

圖3-7 程序運行結果(2)
根據程序運行結果,請將下面的程序補充完整并調試。

