• /  90
  • 下載費用: 10.00積分  

C語言程序設計教程課件1C語言第5章循環結構程序設計.ppt

'C語言程序設計教程課件1C語言第5章循環結構程序設計.ppt'
第五章 循環結構程序設計§5.1 概述 前面已介紹了順序結構,選擇結構,本章介紹循環結構。如: sum=1+2+3+…+100;實際問題: 一組重復執行的語句。?則用循環結構解決。C語言用四種形式循環2. do-while 語句 3. For 語句4. break、continue和goto語句1. While 語句§5.2 while語句 while語句在C語言中用得比較多,它是通過判斷循環控制條件是否滿足來決定是否繼續循環,又稱“當型”循環 。形式: while (表達式)  循環體語句2. 執行過程: 先判斷表達式的值。若?0.則執行其后面的語句,否則while執行完畢。專門的當型循環語句––while語句3. 流程圖:表達式語句?0=0下一語句將上述例子用while語句寫出 while (i<=100) { sum+ =i; i++; }? 語句中應有使表達式=0的語句。 否則會出現無限循環–––"死"循環。注: ? while后面的語句一般為復合語句, 即:加{ } 我們來看下面的例子 例5.1  寫一個程序,輸入一個班學生的成績,求全班的平均成績。 分析:輸入成績、計算平均成績都是一個重復性過程,因此可以用循環語句來實現。在這里,我們并不知有多少個學生,也就是說不知循環到底有多少次,但考慮到成績沒有負數,這樣就可以把循環條件定為:每當輸入的分數大于等于0時就繼續輸入成績;輸入的分數小于0時就停止輸入。 解題步驟如下: (1)輸入一個分數 (2)當“分數>=0”時,做下列工作: ①累計總分; ②人數加一; ③輸入下一分數; (3)重復第(2)步,直到“分數<0”。 程序: #include main() { float score, average=0; /*average存放平均成績,初值為0*/int n=0; /*n用來存放學生數,初值為0*/scanf(″%f″,&score); /*輸入第一個學生的分數*/while(score>=0) { average+=score; /*average先用來放總分*/n++; /*學生數增一*/scanf(″%f″,&score); /*輸入下一個學生的分數*/ }if (n!=0) average=average/n; /*求平均成績,average*/printf(″%6.2f″,average); /*輸出平均成績average,保留兩位小數*/} 在使用while語句的時候,我們要注意以下兩個問題:(1)循環體如果包含一個以上的語句,應該用花括號括起來,以復合語句的形式出現。如果不加花括號,則while語句的范圍只到while后面的第一個分號處。比如上例中,while語句中如無花括號,則while語句范圍只到“average+=score;”。(2)在循環體中應有使循環趨向于結束的語句。比如上例中,循環結束的條件是“score>=0”,那么當我們把這個班的成績全部輸入完后,一定要輸入一個負數,才能使程序往下執行。(3)循環體語句有可能一次也不執行。比如說上例中,當第一次輸入的分數就為負數時,則循環體一次也不執行?!?.3 do …while語句do-while語句的特點是: 先執行循環體中的語句,再通過判斷表達式的值來決定是否繼續循環,循環條件的測試是在循環的尾部進行的。它是一種專門的“ 直到型” 循環語句。它的一般形式為: do 循環體語句 while(表達式);語句表達式?0=03. 流程:對于例5.1用do-while語句編寫程序如下:#include main(){ float score,average=0;int n=0;do { /*不進行判斷,先進入循環*/ scanf(″%f″,&score); /*輸入學生的分數*/ if (score>=0) { average+=score; n++; }}while (score>=0);  /*表達式為非0,則繼續*/if(n!=0) average/=n;        /*求平均成績,average*/printf(″%6.2f″,average);        /*輸出平均成績average,保留             兩位小數*/} 例5.2  編程序求1+3+5+7+9+…這樣的數之和。如果累加數大于750時, 則程序終止并輸出結果。 main(){ int i=1,sum=0; while(sum<=750) { sum=sum+i; i=i+2; } printf("\n%d",sum); } 例5.3 用do-while語句求1至1000之間滿足“用3除余2,用5除余3,用7除余2”的數,且一行只打印五個數。 分析:判斷一個數被另一個數除,用取模運算%。三個條件是“與”的關系。一行打印五個數,可以通過計數到5再回車換行。 程序代碼如下: #include main() { int i=1,j=0; do {if (i%3==2&&i%5==3&&i%7==2){printf(″%4d″,i); j=j+1;if(j%5==0) printf(″\n″);}i=i+1;}while(i<1000);}注意: 1、do-while語句的循環體語句至少要被執行一次,因為它是進入循環后再判別表達式。而while語句卻是首先判別表達式,如果表達式值為0,則一次循環也不執行。2、循環控制變量必須在循環體內有所改變,才能使while和do-while語句的循環控制條件表達式的值不斷改變,直至循環結束。否則會造成死循環。例如: i=1; while(i<=100) putchar(′*′); i++; 這個循環永遠不會結束,因為“i++;”語句不屬于循環體中的語句,循環控制變量i沒有在循環體內被改變。程序應該作如下改變: i=1; while(i<=100) { putchar(′*′); i++; } 這條循環語句執行的結果是輸出100個“*”。還可以將它改成do-while語句: i=1; do{ putchar(′*′); i++; } while(i<=100); 大家可以看到,對于同一個問題,既可以用while語句處理,也可以用do-while語句處理。那么,它們到底有什么區別呢? while語句與do…while語句的區別: 當第一次執行時。省略部分。中,不允許出現內外層循環體交叉的情況。如圖5.5所.圖5.5 循環交叉為非法結構 在do-while循環體內開始while()循環,但是do-while循環結束在while()循環體內,它們互相交叉,這是非法結構。圖5.5 循環交叉為非法結構 do { while (); { … } while(); }§5.6 程序舉例 實際問題是復雜的,解決實際問題的程序需要多種結構復合。復合結構指的是在循環體包含選擇結構,或在選擇結構中含有循環結構,含有復合結構的程序稱為復合結構程序。復合結構程序必須做到嵌套層次清楚,嵌套層次之間不能相互交叉。 例5.13 下面的程序計算100至1000之間有多少個數其各位數字之和是5。程序: #include main() { int i,s,k,count=0; for(i=100;i=0) /*循環結構*/{switch(score/10) /*循環體嵌套選擇結構*/{case 10:case 9: printf(″%d:A\n″, score); break;case 8: case 7: printf(″%d:B\n″,score); break;case 6: printf(″%d:C\n″,score); break;default: printf(″%d:D\n″,score);}scanf(″%d″,&score); /*輸入下一個學生的成績*/} } 例5.15 找出3~1000中的全部素數。 分析: (1)素數是除1和它本身之外不能被任何—個整數所整除的自然數(1除外)。如2,3,5,7是素數。1,4,6,8,10不是素數。 (2)判斷某數i是否為素數的一個簡單辦法是用2,3,4,…,i-1這些數據逐個去除i,只要被其中的一個數整除了,則i就不是素數。數學上已證明,對于自然數i只需用2,3,4,…,i1/2測試。 (3)外層循環控制。 for(i=3; i<=1000; i++) (4)用j=2,…,i1/2測試i。如果i能被這些數中的某一個整除,i就不是素數;否則i就是素數。測試過程如下: flag=0; /*設標志*/; for(j=2;j<=sqrt(i);j++) { if(i%j==0) /*被j整除,i不是素數*/ { flag=1; break; /*標志設為1,停止測試*/ } } /*內循環*/程序流程圖如圖5.6。圖5.6 例5.15 程序流程圖 #include main() { unsigned int i, j, count, flag; /*用flag作標志*/ count=0; /*計數器清0*/ for(i=3; i<=1000 ; i++) { flag=0; for(j=2;j<=sqrt(i); j++) { if(i%j==0) /*能整除,不是素數,標志設為1*/ {flag=l; break; } }/*內循環結束*/ if(flag==0) /*若flag為0,i是素數*/ { printf(″%4d″, i); count++; if(count%8==0)printf(″\n″); /*每行輸出8個素數*/ } } /*外循環*/ ) 例5.16 用公式,求π的近似值,直到最后一項的絕對值小于10-6為止。圖5.7 例5.16程序流程圖 圖5.7 例5.16程序流程圖 圖5.7 例5.16程序流程圖 分析:這是一個累加求和問題,顯然可用循環語句來實現。在這里由于循環的次數首先并不確定,所以我們可以用while循環語句。 定義變量pi存放結果。最初pi=0; 定義變量t存放當前項。最初t=1; 循環控制:while(fabs(t)>1e-6) 循環累加:pi=pi+t; t由分子和分母兩部分組成。 分子用f表示,f的初值為1,每次符號交替f=-f;分母用v表示,初值為1,每次v的值增加2。即v+=2。 程序流程圖如圖5.7所示 圖5.7 例5.16程序流程圖 程序代碼: #include void main() { int f=1; float pi=0, t=1, v=1; while(fabs(t)>1e-6) { pi=pi+t; v+=2; /*準備下一個累加的數據*/ f=-f; t=f/v; } pi*=4; printf(″\n pi=%10.8f″, pi); } 例5.17 電文加密問題。已知電文加密規律為:將字母變成其后面的第4個字母,其他字符保持不變。例如,a→e,A→E,W→A。編寫一個程序,輸入—行字符,要求轉換成加密電文輸出。 分析: 輸入字符ch,如果ch是字母,則進行加密處理ch+=4; 判斷加密后ch是否超出字母的范圍,如果超過,則ch-=26; 循環控制條件: ch!=′\n′。 程序流程圖如圖5.8所示。 圖5.8 例5.17程序流程圖 程序: #include void main() { char ch; while((ch=getchar())!=′\n′) { if((ch>=′a′&& ch=′A ′ && ch′Z′&&ch′z′)) /* ch在加密后越界*/ ch-=26; } printf(″%c″, ch); /*輸出電文*/ } } 運行時,輸入:student123↙ 輸出結果:wxyhirx123
關 鍵 詞:
程序設計 1c 語言 循環 教程 結構 c語言
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:C語言程序設計教程課件1C語言第5章循環結構程序設計.ppt
鏈接地址: http://www.476824.live/p-51617247.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.476824.live 網站版權所有

粵ICP備19057495號 

收起
展開
球探网即时蓝球比分 安徽十一选五预测推荐 上海11选5走势图表 基金配资平台 江西快三活动 吉林11选五前三直遗漏走势图 德国赛车网站 河北体彩十一选五玩法 场地赛车和拉力赛车 甘肃快3开奖直播 300797股票行情