1 / 26

# 上週上機課： - PowerPoint PPT Presentation

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about '上週上機課：' - suchi

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

• 讓使用者輸入五個整數，

while

(or for)

if

#include <stdio.h>

int main()

{

int s,l,input,k=0;

printf("請輸入五個整數\n");

printf("第1個是：");

scanf("%d", &input);

s=l=input;

while(++k <= 4){

printf("第%d個是：", k+1);

scanf("%d", &input);

if(input <= s)

s = input;

if(input >= l)

l = input;

}

printf("最大的是%d，最小的是%d\n",l,s );

return 0;

}

int s,l,input,k=0, j;

printf("請問您想輸入幾個整數\n");

scanf("%d",&j);

printf("第1個是：");

scanf("%d", &input);

s=l=input;

while(++k <= j-1){

printf("第%d個是：", k+1);

scanf("%d", &input);

if(input <= s)

s = input;

if(input >= l)

l = input;

}

*

**

***

****

*****

******

*******

********

*********

**********

（1）用A迴圈10圈來印10列

（2）第i列就印i個*

  （印i個就是跑i圈：

（3）印完一列後要換列

想想要怎麼辦得到？

（當然請用迴圈的方式）

#include <stdio.h>

int main()

{

int k, j=0;

while(++j <= 10){

k=0;

while(++k <= j){

printf("*");

}

printf("\n");

}

return 0;

}

int k, j;

for(j=1; j <= 10; j++){

for(k=1; k <= j; k++){

printf("*");

}

printf("\n");

}

4.7 switch 多重選擇敘述式
• switch
• 需要檢驗一個可能很多情況的變數或運算式時
• 通式：
• 由一串的 case標籤與 default狀況（不一定有）組成

switch ( value ){

case '1':

actions

case '2':

actions

default:

actions

}

• break：立即結束敘述式

#include <stdio.h>

int main()

{

int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0;

printf( “輸入成績的等級\n" );

printf( “結束輸入時按Ctrl＋z\n" );

while ( ( grade = getchar() ) != EOF ) {

switch ( grade ) { /* 在 while裡用switch */

case ‘A’: case ‘a’: /* 如果輸入為大寫 A or 小寫 a */

++aCount;

break;

case ‘B’: case ‘b’: /* 如果輸入為大寫 B or 小寫 b */

++bCount;

break;

case ‘C’: case ‘c’: /* 如果輸入為大寫 C or 小寫 c */

++cCount;

break;

case ‘D’: case ‘d’: /* 如果輸入為大寫 D or 小寫 d */

++dCount;

break;

case ‘F’: case ‘f’: /* 如果輸入為大寫 F or 小寫 f */

++fCount;

break;

case ‘\n’: case‘ ’:   /* 忽略這個輸入 */

break;

default: /* 輸入其他字元時 */

printf( “錯誤輸入" );

printf( “請再輸入一次\n" );

break;

}

}

printf( "\nTotals for each letter grade are:\n" );

printf( "A: %d\n", aCount );

printf( "B: %d\n", bCount );

printf( "C: %d\n", cCount );

printf( "D: %d\n", dCount );

printf( "F: %d\n", fCount );

return 0;

}

printf(“The character (%c) has the value %d.”, ‘a’, ‘a’ );

• The character (a) has the value 97.
• 在 ACII 字元集中，97代表了小寫 ‘a’ 。
• getchar() : 從鍵盤讀進一個字元，我們可以視需要將一個字元視為一個整數或一個字元。
• a=b=c=0 : 程式讀取數個等號的順序為：

 c=0=> b=c=0=>a=b=0。

• EOF : “end of file” 在 <stdio.h>裡的定義一般為 (-1)，或是 windows 系統裡按 (ctrl-z)。

4.8 do…while重複敘述式

• do…while 重複敘述式
• 跟while 敘述式有點像
• 迴圈本體執行後才檢驗
• 所以，迴圈至少會執行一次
• 通式
• do {
• statement;
• } while ( condition );

4.8 do…while重複敘述式

• 舉例來看 (令 counter = 1):
• do {
• printf( "%d ", counter );
• } while (++counter <= 10);
• 從 1 印到 10

#include <stdio.h>

int main()

{

int k, j=0;

while(++j <= 10){

k=0;

while(++k <= j){

printf("*");

}

printf("\n");

}

return 0;

}

int k, j=0;

do{ k=0;

do{ printf("*");

}

while(++k <= j);

printf("\n");

}

while(++j <= 10);

4.9 break和continue敘述式
• break
• 可以在 while，for，do…while，switch 中立即跳出敘述式來。
• 程式接著由跳出後的第一個敘述式接下去
• break 通常都用在
• 可以早點跳出一個迴圈
• 跳過switch敘述式剩下的部分

#include <stdio.h>

int main()

{

int x;

for ( x = 1; x <= 10; x++ ) {

if ( x == 5 )

break; /* break 當 x == 5 */

printf( "%d ", x );

}

printf( "\nBroke out of loop at x == %d\n", x );

return 0;

}

4.9 break和continue敘述式
• continue
• 在while，for 或 do…while敘述式執行時，跳過剩下的動作直接執行下一次迴圈
• 在while和 do…while時
• 迴圈繼續條件會在 continue之後立刻檢驗。
• 在for時
• 會先執行遞增動作，然後才檢驗繼續條件。

#include <stdio.h>

int main()

{

int x;

for ( x = 1; x <= 10; x++ ) {

if ( x == 5 )

continue;

printf( "%d ", x );

}

printf( "\nUsed continue to skip printing the value 5\n" );

return 0;

}

4.10 邏輯運算子
• && ( 邏輯 AND )
• 兩者皆真才為真
• || ( 邏輯 OR )
• 一者為真即為真
• ! ( 邏輯 NOT or 邏輯否定)
• 反轉真偽的情況
• 一元運算子，非二元運算子
• 於多重檢驗的情況下很有用

!偽 真

• Dangerous error
• 不會出現語法錯誤
• 可以產生值的任何運算式都可以使用在任何敘述式的判斷裡；非零為真，零則偽。
• 舉例說明，使用 ==時：

if ( payCode == 4 )

printf( "You get a bonus!\n" );

• 這程式的意思是：檢驗paycode，如果等於4就可以得到bonus。
• 例子中的 == 如果換成了 =：

if ( payCode = 4 )

printf( "You get a bonus!\n" );

• 這樣會定義 paycode 等於 4
• 因為 4 非零，所以運算式為真，也就表示無論paycode原來是多少，都會有bonus
• 這是邏輯上的錯誤（得不到想要的答案），但是語法上也沒錯。
• lvalues（左邊數值）
• 可以被放在左邊
• 左邊放的都是可以改變數值的數，即變數
• x = 4;
• rvalues（右邊數值）
• 只能出現在一個等式的右邊
• 就好像一個常數
• 不能寫成 4 = x 而必須寫成 x = 4
• 左邊數值可以當作右邊數值，但是反之不然
• y = x;
4.12 結構化程式設計總整理
• 結構化的程式
• 比較容易被瞭解，除錯與修改
• 結構化程式的規則
• 由程式的格式與特性導出的規則
• 只使用 單一入口/單一出口 的零件
• 規則：
• 從最簡單的流程圖著手
• 任何矩形（動作）都可以用兩個連續的矩形（動作）來取代
• 任何矩形（動作）可由任何的控制敘述式取代 (循序， if，if/else，switch，while，do/while or for)
• 規則 2 與 3 可以隨你喜歡運用
4.12 結構化程式設計總整理
• 任何程式都可以被分解成三種控制格式：
• 循序
• 選擇 –if，if/else或 switch
• 重複 –while，do…while或 for
• 只能用兩種方法來結合他們
• 巢式 (規則 3)
• 堆疊式 (規則 2)
• 任何選擇格式其實都可以用 if 敘述式來取代，而任何 重複格式都可以用 while 敘述式來取代。
3/23 上機課

#include <stdio.h>

int main()

{

int k, j;

for(j=1; j <= 10; j++){

for(k=1; k <= j; k++){

printf("*");

}

printf("\n");

}

return 0;

}

*

**

***

****

*****

******

*******

********

*********

**********

**********

*********

********

*******

******

*****

****

***

**

*

(B)

**********

*********

********

*******

******

*****

****

***

**

*

(C)

*

**

***

****

*****

******

*******

********

*********

**********

(D)