版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計循環(huán)結構while循環(huán)結構while(條件表達式){}循環(huán)條件循環(huán)體含義:只要表達式結果為"真",就執(zhí)行循環(huán)體內(nèi)的語句。執(zhí)行完循環(huán)體的語句后,再算一次表達式的值,只要結果為"真",就繼續(xù)執(zhí)行循環(huán)體語句。直至條件不滿足為止。if(條件表達式){}含義:只要表達式結果為"真",就執(zhí)行復合語句體。執(zhí)行完后結束if語句,執(zhí)行后面的內(nèi)容。
可能執(zhí)行很多次只執(zhí)行一次如何設定循環(huán)條件是保證while結構正常工作的關鍵。#include<stdio.h>main(){
inti,sum;sum=0;i=1;while(i<=100){sum=sum+i;i=i+1;}
printf("Sum=%d",sum);}例:求1~100之和,即循環(huán)變量設定循環(huán)條件循環(huán)體開始定義變量i,sumi=1sum=0sum=sum+1用printf輸出sum結束i≤100?YNi++循環(huán)結構條件表達式中的變量在循環(huán)體前設定初值,并在循環(huán)體內(nèi)發(fā)生改變,是循環(huán)有始有終的前提。注意事項:如果循環(huán)體內(nèi)只有一條語句,則可以不用大括號{};語法上并沒有要求一定要存在循環(huán)初始條件的設定,也沒有要求循環(huán)條件中的變量必須在循環(huán)體內(nèi)改變,但邏輯上要求有,否則將成為無效循環(huán)或死循環(huán)。循環(huán)變量在循環(huán)體內(nèi)的改變應該有使循環(huán)條件不滿足的趨勢。例:讀程序,說明程序的功能。#include<stdio.h>main(){
intk,s,n;
scanf("%d",&n); s=1;k=1; while(k<=n/2) { s=s*(2*k-1); k++; } printf("%d\n",s);}n以內(nèi)所以奇數(shù)的乘積#include<stdio.h>main(){
intk,s,n1,n2
; scanf("%d,%d",&n1,&n2); s=0;i=n1; while(i<=n2) { if(i%2==0)s=s+i; i++; } printf("%d\n",s);}n1至n2間所有偶數(shù)之和例:計算兩個數(shù)的最大公約數(shù)和最小公倍數(shù)。#include<stdio.h>main(){
inti,max,min;
scanf("%d,%d",&max,&min); i=min; while(i>0) { if(max%i==0&&min%i==0)break; i--; }
printf("%d和%d的最大公約數(shù)是:%d\n",max,min,i); i=1; while(1) { if(min*i%max==0)break; i++; }
printf("%d和%d的最小共倍數(shù)是:%d\n",max,min,min*i);}分析:用試驗的方法計算最大公約數(shù):
用1~min分別除max和min,看其余數(shù)是否同時為零;計算最小公倍數(shù):
用1~?分別乘以max和min,看其乘積是否相等。問題:計算最大公約數(shù)時如何設計循環(huán)的初始值和循環(huán)條件?計算最小公倍數(shù)時如何設定循環(huán)條件?do…while循環(huán)結構do{
循環(huán)體}while(條件表達式)含義:執(zhí)行循環(huán)體內(nèi)的語句,只要表達式結果為"真",就反復執(zhí)行,直到條件不滿足為止。比較:
1.
do…while循環(huán)至少執(zhí)行一次循環(huán)體。2.while可能一次也不執(zhí)行循環(huán)體。3.兩者之間可以通過初始條件的設定相互轉化。while(條件表達式){}循環(huán)體例:判斷某個數(shù)是否是質(zhì)數(shù)。方法:根據(jù)定義,一個數(shù)如果只能被1和自身整除,則為質(zhì)數(shù)。#include<stdio.h>main(){
int
i,num; i=2;
scanf("%d",&num); do{ if(num%i==0)break; i++; }while(i<num); if(i<num)
printf("It'snotaprimenumber!"); else
printf("It'saprimenumber!");}開始輸入數(shù)字numi=2不是質(zhì)數(shù)結束i<numNYnum能被i整除i++YNi<numNY是質(zhì)數(shù)例:找出所有的水仙花數(shù)。
水仙花數(shù):153=13+53+33分析:窮舉搜索法對每個可能的數(shù)字進行分解和計算,看其是否滿足水仙花數(shù)的條件。搜索范圍:100~999開始i=100分解i結束i<1000YY是水仙花?輸出NN#include<stdio.h>intmain(){ intn1,n2,n3,i; i=100; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; if(n1*n1*n1+n2*n2*n2+n3*n3*n3==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i++; }while(i<1000);}for循環(huán)結構for(初值表達式;循環(huán)條件;增量表達式){
循環(huán)體}含義:計算"初值表達式",作為循環(huán)變量的初始值設定;"循環(huán)條件"是否滿足?若滿足轉向步驟"3",否則轉向步驟"6";執(zhí)行循環(huán)體;計算"增量表達式",使循環(huán)變量變化,以趨于不滿足循環(huán)條件;執(zhí)行步驟"2";結束循環(huán),執(zhí)行后面的語句。初值表達式;while(循環(huán)條件){
增量表達式;}相當于例:計算#include<stdio.h>main(){
int
i,n,sign; floate,pi;
scanf("%d",&n); pi=0.0;sign=1; for(i=1;i<n;i=i+1) { e=1.0/(2*i-1); pi=pi+sign*e; sign=-sign; }
printf("pi=%f\n",pi*4);}例:計算Fibonacci數(shù)列。
Fibonacci數(shù)列:1,1,2,3,5,8,13,21…開始輸入數(shù)列長度:n循環(huán)初值:3循環(huán)條件:<n循環(huán)增量:1結束前兩個值:f1=1;f2=1;temp=f1+f2;f1=f2;f2=temp;輸出temp值循環(huán)體分析:1.初始值為1,1;2.后面的數(shù)字是前兩個數(shù)之和。#include<stdio.h>main(){
intf1,f2,temp,i,n;
scanf("%d",&n); f1=1;f2=1; printf("%d,%d",f1,f2);
for(i=3;i<=n;i++) { temp=f1+f2; f1=f2; f2=temp;
printf(",%d",temp); }}for循環(huán)的特點同時設定初值、循環(huán)條件、循環(huán)增量??梢詫崿F(xiàn)while結構和do…while結構。三種循環(huán)可以相互替代。作業(yè):P129,6.7P129,6.8for循環(huán)的不同形式標準for循環(huán):
for(初值表達式;條件表達式;增量表達式)省略初值表達式:主要用于無初始值設定或復雜初始化的情況。
for(;條件表達式;增量表達式)省略條件表達式:在循環(huán)體內(nèi)控制結束條件,主要用于多條件情況。
for(初值表達式;;增量表達式)省略增量表達式:主要用于不確定循環(huán)增量的情況。
for(初值表達式;條件表達式;)以上各種省略情況可以組合出現(xiàn)。例如:
for(初值表達式;;)
for(;條件表達式;)
for(;;)不同類型for循環(huán)應用舉例省略增量表達式:for(i=1;i<100;){……if(x>0)i=i+2;elsei=i+1;……}省略條件表達式:for(i=1;;i++){……if(x>0)break;……if(m<3&&y>0break;……}省略初值表達式:f1=1;f2=1;for(;f2<100;){……}注意:for循環(huán)應用很靈活,是否需要省略某個表達式,完全根據(jù)題目的要求和解題的思路確定,沒有硬性規(guī)定。省略前兩個表達式的時候,分號不能省略。例:找出大于300的最小的水仙花數(shù)。 水仙花數(shù):153=13+53+33#include<stdio.h>intmain(){ intn1,n2,n3,i; for(
) { n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; if(n1*n1*n1+n2*n2*n2+n3*n3*n3==i){ printf("%d=%d+%d+%d\n",i,n1,n2,n3); break; } }}分析:循環(huán)初始值i=300;循環(huán)終值?結束條件?循環(huán)增量?i=300;;i++while(){ …… while() {……} ……}do(){ …… while() {……} ……}while()while(){ …… for() {……} ……}for(){ …… while() {……} ……}for(){ …… do {……}while() ……}do{ …… for() {……} ……}while()循環(huán)的嵌套一個循環(huán)體內(nèi)包含另一個完整的循環(huán),稱為循環(huán)的嵌套。循環(huán)的嵌套說明:1.三種不同類型的循環(huán)可以任意嵌套;2.循環(huán)嵌套必須層次分明,不允許交叉嵌套。3.循環(huán)嵌套的層數(shù)沒有限制;4.為保證層次分明,建議按標準格式書寫程序。for(){ …… while() { …… for() { …… } } ……}多重循環(huán)的執(zhí)行次數(shù)sum=0;for(i=1;i<100;i++){for(j=1;j<50;j++){sum=sum+1;}}sum=0;for(i=1;i<100;i++){for(j=1;j<i;j++){sum=sum+1;}}sum=0;for(i=1;i<100;i++){for(j=1;j<50;j++){if(j%2==0)continue;sum=sum+1;}if(sum>500)break;}循環(huán)執(zhí)行次數(shù):99*49=4851循環(huán)執(zhí)行次數(shù):0+1+2+3+…99=4950循環(huán)執(zhí)行次數(shù):難以確定#include<stdio.h>main(){
int
col,line,num;
scanf("%d",&num); for(line=1;line<=num;line++) { for(col=1;col<=num-line;col++)
printf(""); for(col=1;col<=2*line-1;col++)
printf("*");
printf("\n"); }}例:打印三角形****************分析:屏幕顯示原則:只能在當前光標位置顯示。光標不能向左回退,不能向上回退。逐行打印,每行打印若干空格和若干星號。打印若干行。計算:行數(shù):鍵盤輸入n。每行空格數(shù):
1→3 2→2 3→1
每行星號數(shù):
1→1 2→3 3→5
回車,右邊的空格不考慮。y=n-行號y=行號*2-1作業(yè):書上P130,6.14例題:用二分法求方程的根。
方程:r1r2xyy1<0y2>0r*=(r2+r1)/2y*>0r*=(r2+r1)/2y*<0#include<stdio.h>#include<math.h>intmain(){ floatr1,r2,rt,f1,f2,ft; do{
printf("Enterx1&x2:"); scanf("%f,%f",&r1,&r2); f1=2*r1*r1*r1-4*r1*r1+3*r1-6; f2=2*r2*r2*r2-4*r2*r2+3*r2-6; }while(f1*f2>0); do{ f1=2*r1*r1*r1-4*r1*r1+3*r1-6; f2=2*r2*r2*r2-4*r2*r2+3*r2-6;
rt=(r1+r2)/2; ft=2*rt*rt*rt-4*rt*rt+3*rt-6; if(ft*f1<0.0)r2=rt; elser1=rt; }while(fabs(ft)>1.0e-5);
printf("x=%6.2f\n",rt);}無限循環(huán),直至輸入的猜測區(qū)間內(nèi)有根存在。do{
rt=(r1+r2)/2; ft=2*rt*rt*rt-4*rt*rt+3*rt-6; if(ft*f1<0.0){r2=rt;f2=ft;} else{r1=rt;f1=ft;}}while(fabs(ft)>1.0e-5);continue和break語句continue
無條件結束本次循環(huán),跳到循環(huán)起始語句,開始下一次循環(huán)。break
無條件跳出循環(huán),執(zhí)行循環(huán)后面的語句。for(){ …… continue; ……}while(){ …… break; ……}注意:break語句只能跳出它所在的那層循環(huán),不存在跳出所有循環(huán)的break。例:用continue語句改寫尋找水仙花數(shù)的程序。#include<stdio.h>intmain(){ intn1,n2,n3,i,t; i=100; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; t=n1*n1*n1+n2*n2*n2+n3*n3*n3; if(t==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i++; }while(i<1000);}if(t!=i){i++;continue;}printf(……);#include<stdio.h>intmain(){ intn1,n2,n3,i,t; i=999; do{ n1=i/100; n2=(i-n1*100)/10; n3=i-i/10*10; t=n1*n1*n1+n2*n2*n2+n3*n3*n3; if(t==i) printf("%d=%d+%d+%d\n",i,n1,n2,n3); i--; }while(i>100);}例:找出最大的水仙花數(shù)。if(t==i){
printf(……);
break;}i--;程序的調(diào)試方法與技巧構建(build)
編譯系統(tǒng)進行基本的語法檢查,并報告error和warning,只有消除語法錯誤的程序才可能運行。斷點設置
在程序的某行設置斷點后,程序運行到該行時會暫停,可以查看變量的當前值,也可以修改變量值。沒有語法錯誤的程序不一定能正常執(zhí)行,也不一定能實現(xiàn)正確的功能,可能存在大量的邏輯錯誤,軟件調(diào)試工作占到軟件編制工作的80%。VC開發(fā)環(huán)境提供了“斷點設置”和“單步跟蹤”功能,為軟件的調(diào)試提供了方便的工具。在光標所在行設置斷點??梢愿鶕?jù)需要設置多個斷點。斷點標記在調(diào)試狀態(tài)下執(zhí)行程序彈出執(zhí)行窗口,等待鍵入數(shù)據(jù)箭頭表明當前程序暫停的位置(即將要執(zhí)行的語句)。變量(Variables)窗口中顯示程序用到的變量及其當前值。再次按F5,程序執(zhí)行到新的斷點,并再次暫停。變量值發(fā)生了變化,并用紅色顯著地標識出來。再次按F5,程序隨著循環(huán)的執(zhí)行再次停到了第一個斷點的位置。變量窗口不但可以顯示變量值,還可以動態(tài)地修改。當不再需要斷點時,可隨時將光標放在斷點行,按F9取消斷點。當找到錯誤的原因時,可按shift+F5中斷程序的調(diào)試,返回到源程序窗口進行修改。程序的調(diào)試方法與技巧單步跟蹤
“單步跟蹤”可以逐行執(zhí)行程序,每執(zhí)行一條語句后都會暫停,相當于在每條語句上都設置了斷點。將光標
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學生處工作計劃
- 幼兒園保教工作計劃大全
- 買賣合同范文七篇
- 幼兒教育工作計劃集合七篇
- 中國卡座連接器項目投資可行性研究報告
- 棉花姑娘教案四篇
- 網(wǎng)絡對戰(zhàn)小游戲課程設計
- 產(chǎn)科護士一天的工作計劃
- 全新大一軍訓心得筆記10篇
- 畢業(yè)生自我介紹(15篇)
- 避雷針、線保護范圍計算表
- 10KV變配電室交接班管理制度
- 風機振動正常范圍國標標準
- 江蘇省南京市外國語學校2022-2023學年七年級上學期第一次段考英語試卷
- 針對土石方運輸重難點解決措施
- 多工步組合機床的plc控制系統(tǒng)設計
- 三年級下冊英語說課稿-《Lesson 11 What Do They Eat》|冀教版(三起)
- 商品和服務稅收分類編碼(開票指引)
- 智能嬰兒床的設計與實現(xiàn)
- 中國天眼之父南仁東
- 《膽囊結石的護理》PPT
評論
0/150
提交評論