




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、4.3 循環(huán)結構4.3.1 for語句4.3.2 while語句4.3.3 do-while語句4.3.1 for語句例4-9:輸入2個整數(shù)lower和 upper,輸出一張華氏攝氏溫度轉換表,華氏溫度的取值范圍是lower, upper,每次增加1F。例如 輸出:fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7輸入:30 35一、 程序解析-溫度轉換表#include int main(void) int fahr, lower, upper; double celsius; printf(“輸入最低值:); scanf(%d,
2、 &lower); printf(“輸入最高值:); scanf(%d, &upper); printf(fahr celsiusn);/ 溫度重復轉換:華氏溫度從lower開始,到upper結束,每次增加1F for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32); printf(%d %6.1fn, fahr, celsius); return 0; fahr = fahr+1Enter lower: 30Enter upper: 35fahr celsius 30 -1.1
3、31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7例4-9中for語句的流程for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32); printf(%d %6.1fn, fahr, celsius); Enter lower: 30Enter upper: 35fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7到VC 中看看執(zhí)行過程for(表達式1;表達式2;表達式3) 循環(huán)體語句實現(xiàn)C語句的重復執(zhí)行二、 for語句
4、循環(huán)語句3個表達式、循環(huán)體語句個表達式、循環(huán)體語句!書寫順序和執(zhí)行順序不同書寫順序和執(zhí)行順序不同!表達式表達式1只執(zhí)行一次只執(zhí)行一次循環(huán)(控制)變量:for語句中,通過改變或判斷某個變量的值來控制循環(huán)的執(zhí)行for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); for語句中的循環(huán)變量賦初值賦初值判斷其值判斷其值改變其值改變其值for (fahr = lower; fahr = upper; fahr +) celsius =
5、 (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); 表達式1:給循環(huán)變量賦初值,指定循環(huán)的起點。fahr = lower表達式2:給出循環(huán)的條件,決定循環(huán)的繼續(xù)或結束。fahr = upper表達式3:設置循環(huán)的步長,改變循環(huán)變量的值,從而可改變表達式2的真假性。fahr+語句:被反復執(zhí)行的語句,一條語句。for語句的說明for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fa
6、hr, celsius); for (fahr = lower ; fahr = upper; fahr = fahr + 1) celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); 注意復合語句 和空語句 ;for (fahr = lower ; fahr = upper; fahr = fahr + 1); celsius = (5.0 / 9.0) * (fahr - 32.0); printf(%d %6.1fn, fahr, celsius); !不要在!不要在for語句中隨意加分號語句中隨意
7、加分號例4-10 求 1+2+100抽取具有共性的算式:sum = sum + i sum初值為0,該算式重復100次,i從1變到100設i為循環(huán)變量,則:指定循環(huán)起點的表達式1:i = 1給出循環(huán)條件的表達式2:i = 100設置循環(huán)步長的表達式3:i+循環(huán)體語句:sum = sum + i;for(i=1; i=100; i+)sum =sum+i;三、 指定次數(shù)的循環(huán)程序設計/* 計算1 + 2 + 3 + + 100 */#include int main() int i, sum; sum = 0; /* 置累加和sum的初值為0 */ for ( i = 1; i = 100; i
8、+ ) /* 循環(huán)重復100次 */ sum = sum + i; /* 反復累加 */ printf( “sum = %dn”, sum); /* 輸出累加和 */ return 0;源程序求 1+2+100for(i=1; i=100; i+) sum=0; sum=sum+i; 結果如何?結果如何?sum=5050/* 計算1 + 2 + 3 + + 100 */#include int main() int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); retu
9、rn 0;模仿練習:求 1+1/2+1/3+ 1/100for(i=1; i=100; i+) sum=sum+1.0/i;int i;double sum;printf( “sum = %fn”, sum);在上例基礎上改寫:一般包含四個部分:l初始化:指定循環(huán)起點l給循環(huán)變量賦初值,如i = 1;l進入循環(huán)之前,設置相關變量的初值,如sum = 0。l條件控制:l只要i 100,循環(huán)結束。指定次數(shù)的循環(huán)程序設計輸入一個正整數(shù)n,求前n項和,即循環(huán)n次/* 計算1 + 2 + 3 + + 100 */#include int main(void) int i, sum; sum = 0; f
10、or ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0;例4-11 求 1+2+3+n for(i=1; i=n; i+) sum=sum+i;printf(“Enter n:); scanf(%d, &n); Enter n: 100Sum = 5050/* 計算1 + 2 + 3 + + n */#include int main() int i, sum; printf(“Enter n: ); scanf(%d, &n); sum = 0; for ( i = 1; i =
11、 n; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0;模仿練習: 求1+1/2+1/3+ 1/n /*求1+1/2+1/3+ 1/n*/#include int main() int i, n; double sum; printf(“Enter n: ); scanf(%d, &n); sum = 0; for ( i = 1; i = n; i+ ) sum = sum + 1.0/i; printf( “sum = %fn”, sum); return 0;求前n項和,即循環(huán)n次,每次累加1項。for (i = 1
12、; i = n ; i+) sum = sum + item (第i項)問題是第i項item如何計算(考慮與i的關系): item = 1.0 / (2 * i - 1)例4-12 求 1+1/3+1/5+ 的前n項和for (i = 1; i = n ; i+) item = 1.0 / (2 * i - 1);/* 計算第i項的值 */ sum = sum + item;/* 累加第i項的值 */思路一:求前n項和,即循環(huán)n次,每次累加1項。for (i = 1; i = n ; i+) sum = sum + item (第i項)問題是第i項item如何計算:分母總是比前一項大2 求 1
13、+1/3+1/5+ 的前n項和思路二deno=1;for (i = 1; i = n ; i+) item=1.0/deno; /*計算第i項的值 */ sum = sum + item;/* 累加第i項的值 */ deno=deno+2; /*計算下一項的分母 */#include int main(void) int i, n; double item, sum; printf(“Enter n: ); scanf (%d, &n);sum = 0 ; for ( i = 1; i = n; i+ ) item = 1.0 / (2 * i - 1); /* 計算第i項的值 */
14、sum = sum + item ; /* 累加第i項的值 */ printf ( sum = %fn, sum); return 0;源程序求 1+1/3+1/5+的前n項和模仿練習:1、求 的前n項和,結果保留3位小數(shù)2、求的前n項和,結果保留3位小數(shù)3、求的前n項和,結果保留3位小數(shù).116957453321.16113110171411.111917151311求前n項和,即循環(huán)n次,每次累加1項。for (i = 1; i = n ; i+) sum = sum + item (第i項)關鍵是第i項item的計算: 符號和前一項相反,分母比前一項大2 deno= deno + 2 f
15、lag = -flag item = flag * 1.0 / deno 求 1-1/3+1/5- 的前n項和方法1:deno=1;flag=1;for (i = 1; i = n ; i+) item=flag*1.0/deno; /*計算第i項的值 */ sum = sum + item;/* 累加第i項的值 */ deno=deno+2; /*計算下一項的分母 */ flag=-flag; /計算下一項的符號方法2:flag=1;for (i = 1; i = n ; i+) item=flag*1.0/(2*i-1); /*計算第i項的值 */ sum = sum + item;/*
16、累加第i項的值 */ flag=-flag; /計算下一項的符號#include int main() int deno, flag, i, n; double item, sum; printf(“Enter n: ); scanf (%d, &n); flag=1; deno =1;sum = 0 ; for ( i = 1; i = n; i+ ) item = flag * 1.0/ deno; /* 計算第i項的值 */ sum = sum + item ; /* 累加第i項的值 */ flag = -flag; /* 準備下一次循環(huán) */ deno = deno +2; p
17、rintf ( sum = %fn, sum); return 0;模仿練習 源程序例4-13 階乘表product=1;for (i = 1; i = n ; i+) 計算i的階乘;(前一項結果*i) 輸出結果輸入一個整數(shù)n,輸出1-n的階乘表:1 12 23 64 245.product=product * i;printf(“%d %dn”,product);#include int main(void) int i, n, product; printf(input n: n); scanf (%d, &n) ; product=1; /* 置階乘product的初值為1 */
18、 for ( i = 1; i = n; i+ ) /* 循環(huán)重復n次*/ product = product * i ; /遞推計算i的階乘printf ( %d %dn, i, product ); return 0;例4-13 源程序1:結果用int型13以前的能正確計算,從14開始結果出錯!超出int型的表達范圍!#include int main(void) int i, n; double product; printf(input n: n); scanf (%d, &n) ; product=1; /* 置階乘product的初值為1 */ for ( i = 1; i
19、 = n; i+ ) /* 循環(huán)重復n次,計算n! */ product = product * i ; /遞推計算i的階乘 printf ( %d %.0f n, i, product ); return 0;例4-13 源程序2:結果用double型21以前的可以正確計算,22以后都是近似結果!double型也不是萬能的,只有16位有效數(shù)字!例4-14 n個數(shù)求和從鍵盤輸入一個整數(shù)n和n個整數(shù),輸出這n個整數(shù)的和思路分析:(1)定義、初始化變量;讀入整數(shù)n;(2)控制循環(huán)進行n次,循環(huán)內容: 讀入一個整數(shù)a; 把a累加到sum上; (3)輸出sum的值l#include lint main
20、()l l int i,n,a,sum;l scanf(%d,&n);l sum=0;l for(i=1;i=n;i+)l l scanf(%d,&a);l sum=sum+a;l l printf(%dn, sum);l return 0;l例4-15 n個數(shù)求和 源程序循環(huán)變量不一定要在循環(huán)體內參與運算,本例中,循環(huán)變量i只起到控制循環(huán)次數(shù)的作用模仿練習:1、輸入n,然后輸入n個整數(shù),輸出這n個整數(shù)的最大值。思路分析(1) scanf(“%d”,&n);(2) scanf(“%d”,&a); max=a; /用第一個數(shù)作為max的初始值(3)控制循環(huán)再進行n
21、-1次for(i=1;imax) max=a; /若當前整數(shù)a比max大,則更新max(4)輸出max例4-15 數(shù)列和l計算 的前20項和。357sin( ).3!5!7!xxxxx先找規(guī)律:后一項與前一項相比:符號如何變?分子如何變?分母如何變?解題思路(1)定義相關變量i, num(分子)、demo(分母),flag(符號),sum(累加和)(2)讀入x(3)初始化: flag=1; num=x; demo=1; sum=0;(4)計算前20項for(i=1;i=20;i+) sum=sum+flag*num/demo; /計算當前項并累加 /為下一項做準備 flag=-flag; /符
22、號取反 num=num*x*x; /計算下一項的分子 demo=demo*(2*i)*(2*i+1) ; /計算下一項分母(5)輸出結果l#include lint main()l l int i,flag;l double x,num, demo,sum;l scanf(%lf,&x);l /初始化初始化l flag=1; num=x; demo=1;l sum=0;l for(i=1;i=20;i+)l l sum=sum+flag*num/demo; /計算當前項并累加計算當前項并累加l /為下一項做準備為下一項做準備l flag=-flag; /符號取反符號取反l num=nu
23、m*x*x; /計算下一項的分子計算下一項的分子l demo=demo*(2*i)*(2*i+1) ; /計算下一項分母計算下一項分母l l printf(%.3fn, sum);l return 0;l例4-14 數(shù)列和 程序模仿練習:1、求1! + 2! + . + 100!2、輸入n和a,求a+aa+aaa+aaa(n個a),如當n=3,a=2時,2+22+222的結果為246提示 1:for (i = 1; i = 100; i+) 求出第i項item sum = sum + item;先找規(guī)律:后一項與前一項相比:求1! + 2! + . + 100!由i的階乘如何求出i+1的階乘?
24、 提示2:輸入n和a,求a+aa+aaa+aaa(n個a)(1) 首先初始化sum=0, term=0;(2) 每次循環(huán):(i從1到n) 前一項乘10加a,得到當前項: term=term*10+a 累加當前項:sum=sum+term;例4-16: 統(tǒng)計輸入的一批字符中各類字符的數(shù)量編程:輸入10個字符,統(tǒng)計其中英文字母、數(shù)字字符和其他字符的個數(shù)。 思路分析:(1)定義相關變量i, letter, digit, other, ch,并初始化(2)控制循環(huán)進行10次 for(i = 1; i = 10; i+) (1)讀入一個字符 (2)if(該字符是字母) letter增1 else if(
25、該字符是數(shù)字) digit增1 else other增1 (3)輸出letter, digit, other#include int main(void) int digit, i, letter, other; char ch; digit = letter = other = 0; printf(“Enter 10 characters: ); for(i = 1; i = a & ch = A & ch = 0 & ch = 9) /* 如果ch是數(shù)字字符 */ digit +; else other +; printf(letter=%d,digit=%d,ot
26、her=%dn,letter,digit,other); return 0;input 10 characters: Reold 123?letter=5, digit=3, other=2 多層縮進的書寫格式多層縮進的書寫格式使程序層次分明使程序層次分明 程序解析例4-17 查詢自動售貨機中商品的價格 假設自動售貨機出售4種商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可樂(cola),售價分別是每份3.0、2.5、4.0和3.5元。在屏幕上顯示以下菜單,用戶可以連續(xù)查詢商品的價格,當查詢次數(shù)超過5次時,自動退出查詢;不到5次時,用戶可以選擇退出。當用戶
27、輸入編號14,顯示相應商品的價格;輸入0,退出查詢;輸入其他編號,顯示價格為0。1 Select crisps2 Select popcorn 3 Select chocolate4 Select cola 0 Exit思路分析:(1)定義相關變量choice, i, price;(2)控制循環(huán)執(zhí)行5次for( i = 1; i = 5; i+) (1)用多個printf顯示菜單 (2) 讀入用戶的選擇choice (3)如果用戶選擇0,則用break終止循環(huán) (4)用swtich語句根據(jù)用戶的不同選擇把不同的價格值賦給變量price (5)輸出price#include int main()
28、 int choice, i; double price; for( i = 1; i = 5; i+) printf(1 Select crisps n); printf(2 Select popcorn n); printf(3 Select chocolate n); printf(4 Select cola n); printf(0 exit n); printf(Enter choice: ); scanf(%d, &choice); if(choice = 0) break; switch (choice) case 1: price=3.0; break; case 2:
29、 price=2.5; break; case 3: price=4.0; break; case 4: price=3.5; break; default: price=0.0; break; printf(price = %.1fn, price); /for結束 printf(Thanks n); 此break用來終止for循環(huán)運行結果:1 Select crisps2 Select popcorn 3 Select chocolate4 Select cola 0 ExitEnter choice: 1price = 3.01 Select crisps2 Select popcorn
30、 3 Select chocolate4 Select cola 0 ExitEnter choice: 7price = 0.01 Select crisps2 Select popcorn 3 Select chocolate4 Select cola 0 ExitEnter choice: 0Thanks上機作業(yè)l1、輸入n,輸出1+2+3+n的結果l2、輸入n(n10),輸出1*2*3*n的結果l3、輸入n,輸出1+1/2+1/3+1/n的結果,結果保留2位小數(shù)l4、輸入n,輸出1+1/3+1/5+1/n的結果,結果保留2位小數(shù)l5、輸入n,輸出1-1/3+1/5-1/n的結果,結果保
31、留2位小數(shù)l6、輸入n,然后輸入n個整數(shù),輸出n個整數(shù)的和7、輸入n,然后輸入n個整數(shù),輸出n個整數(shù)的最大值8、輸出1-100的自然對數(shù)表,對數(shù)保留4位小數(shù) n n的對數(shù) 1 0.0000 2 0.6931 .9、輸入10個字符,統(tǒng)計其中數(shù)字字符(0-9)個數(shù)。10、四則運算,要求能實現(xiàn)多次計算,但最多不超過5次。程序運行后首先提示輸入兩個實數(shù),然后顯示菜單: 1、相加2、相減3、相乘4、相除5、退出然后讀入用戶的選擇,根據(jù)用戶選擇輸出相應的結果4.3.2 while語句例4-18:使用格里高利公式求的近似值,要求精確到最后一項的絕對值小于104。11114357不知道循環(huán)次數(shù)!循環(huán)結束的條件
32、是:最后一項的絕對值小于104#include int main(void) int deno, flag; double item, pi; flag = 1; deno = 1 ; item = 1.0; pi = 0; while(fabs (item) = 0.0001) item = flag * 1.0 / deno; pi = pi + item; flag = -flag; deno = deno+2; pi = pi * 4; printf ( “pi = %fn”, pi); return 0;一、 程序解析求的近似值pi = 3.141613 item=0.0 ?fabs
33、(item) 0.0001二、 while 語句while (條件) 循環(huán)體語句; 真真假假while下一條語句下一條語句表達式表達式循環(huán)體語句循環(huán)體語句循環(huán)條件循環(huán)條件循環(huán)體循環(huán)體一條語句一條語句課堂練習:以下程序段的運行結果?l(1)l i=0;lwhile(i5)ll printf(i=%dn,i);l i+;li=0i=1i=2i=3i=4請用請用for循環(huán)改寫這個程序段循環(huán)改寫這個程序段:for( i=0; i5; i+) printf(i=%dn,i);課堂練習:以下程序段的運行結果?l(2)li=k=1;lwhile(i5)llk+=i;lprintf(i=%d,k=%dn,i,
34、k);li=1,k=2i=1,k=3i=1,k=4i=1,k=5i=1,k=6死循環(huán)!死循環(huán)!i5永真永真課堂練習:以下程序段的運行結果?l(3)li=0;lwhile(i=4)ll printf(*n);l i+=2;l*死循環(huán)!死循環(huán)!無論無論i值在循環(huán)體中如何變化,值在循環(huán)體中如何變化,i=4 為永真為永真是死循環(huán)。是死循環(huán)。課堂練習:以下程序段的運行結果?l(4)li=0;lwhile(i=4)ll printf(i=%dni);l i+=2;l無輸出無輸出進入循環(huán)時首先測試進入循環(huán)時首先測試 i=4 的值為假,結束循環(huán)。的值為假,結束循環(huán)。循環(huán)體一次也不執(zhí)行,無輸出。循環(huán)體一次也不執(zhí)
35、行,無輸出。while 語句和for語句都是在循環(huán)前先判斷條件while 語句說明表達式表達式1;while (表達式表達式2) for的循環(huán)體語句的循環(huán)體語句; 表達式表達式3;把把for語句改寫成語句改寫成while語句語句for(表達式表達式1; 表達式表達式2; 表達式表達式3) 循環(huán)體語句循環(huán)體語句while 和 for 的比較for (i = 1; i = 10; i+) sum = sum + i; i = 1; 循環(huán)變量賦初值循環(huán)變量賦初值while (i = 10) 循環(huán)條件循環(huán)條件 sum = sum + i; i+; 循環(huán)變量的改變循環(huán)變量的改變循環(huán)體循環(huán)體小練習:思路分
36、析:(1)累加變量sum初始化為0 循環(huán)變量i初始化為1(2)while(i=n),做 把i累加到sum上; i自增1 (3)輸出suml用while語句實現(xiàn): 求1+2+.+n關于for語句的三個表達式for(表達式表達式1; 表達式表達式2; 表達式表達式3) 循環(huán)體語句循環(huán)體語句中的三個表達式都可缺省,但兩個分號不能缺省。for (i = 1; i = n; i+) sum = sum + i; i = 1;for ( ; i = n; i+) sum = sum + i; i = 1;for ( ; i n)break; 退化為相當于while語句循環(huán)條件為永真,相當于while(1)
37、需要在循環(huán)體中設置出口例4-19 從鍵盤輸入一批學生的成績,計算平均分。輸入負數(shù)表示輸入結束。分析:l求累加和l確定循環(huán)條件l不知道輸入數(shù)據(jù)的個數(shù),無法事先確定循環(huán)次數(shù)l用一個特殊的數(shù)據(jù)作為正常輸入數(shù)據(jù)的結束標志,比如選用一個負數(shù)作為結束標志。三、用while語句進行程序設計思路分析: (1)定義變量i, num(計數(shù)),score, total; (2)讀入一個成績score; (3)while(score大于0),做 把成績累加到total上; 人數(shù)num增1; 讀下一個學生成績; (4)if(人數(shù)num大于0) 輸出平均成績total /num else 輸出平均成績?yōu)?#include
38、 Int main(void) int num; double score, total; num = 0; total = 0;printf(“Enter score: n); scanf(%lf, &score); /* 輸入第1個數(shù)*/while (score = 0) /* 輸入負數(shù),循環(huán)結束 */ total = total + score; num+; scanf (“%lf”, &score);if(num != 0) printf(“Average is %.2fn, total /num);else printf( Average is 0n); return
39、 0;Enter grades: 67 88 73 54 82 -1Grade average is 72.80Enter grades: -1 67 88 73 54 82Grade average mark is模仿練習:從鍵盤輸入一批學生的成績,輸出最高分。輸入負數(shù)表示輸入結束。4.3.3 do - while 語句do 循環(huán)體語句 while (表達式)先執(zhí)行一次循環(huán)先執(zhí)行一次循環(huán)后判斷后判斷真真假假表達表達式式循環(huán)體語句循環(huán)體語句do-while的下一條語句的下一條語句l while 是先判別條件,再決定是否循環(huán);l do-while 是先至少循環(huán)一次,然后再根據(jù)循環(huán)的結果決定是否繼
40、續(xù)循環(huán)。while 和 do-while 的比較真真假假表達式表達式循環(huán)體語句循環(huán)體語句do-while的下一條語句的下一條語句真真假假while的下一條語句的下一條語句表達式表達式循環(huán)體語句循環(huán)體語句循環(huán)語句的選擇如果循環(huán)次數(shù)已知 使用for語句如果 循環(huán)次數(shù)未知 如果循環(huán)條件在進入循環(huán)時明確使用while語句 如果循環(huán)條件需要在循環(huán)體中明確 使用do-while語句例4-20 輾轉相處法求最大公約數(shù)輾轉相除法求m和n的最大公約數(shù)gcd(m,n)例:求24和15的最大公約數(shù),過程如下:m n 余數(shù)r24 15 915 9 69 6 36 3 0當余數(shù)為0時,n=3就是最大公約數(shù)例:求54和3
41、6的最大公約數(shù),過程如下:m n 余數(shù)r54 36 1836 18 0當余數(shù)為0時,n=18就是最大公約數(shù)解題思路(1)假定mn(如果mn,則二者互換)(2) 求余數(shù)r=m%n(3)用(n, r)代替(m, n) (把n賦給m, 把r賦給n)(4)若r不為0,則返回第(2)步 若r為0,m即所求 do(2) 求余數(shù)r=m%n (3)用(n, r)代替(m, n) (把n賦給m, 把r賦給n)while(r!=0)m即所求在這一步,若r為0,n即所求在這一步,把n賦給m了所以,m即所求l#include lint main()l lint m,n,r,temp;lscanf(%d%d,&
42、m,&n);l if (mn) /如果mn:while(n != 0) r = m % n; m = n ; n=r; 循環(huán)結束時,m即最大公約數(shù) 小練習:l用do_while語句求1+2+n 4.3.4 流程轉向語句l1.break語句語句利用break語句能夠強制結束循環(huán),轉到后續(xù)語句執(zhí)行。l2.continue語句語句中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚未執(zhí)行的語句),立即開始執(zhí)行下一次循環(huán)。l3.return語句語句 return語句的用途是結束本函數(shù),將控制返回到它的調用處。例4-21 判斷素數(shù)l輸入一個正整數(shù)m,判斷它是否為素數(shù)。定義:除了1和m,不能被其它數(shù)整除。例如:
43、 判斷13769是否是素數(shù)如何判斷?嘗試用2、3、4、5、13738去除有兩種可能情況:(1)嘗試完所有數(shù),均不能整除m,則m是素數(shù)(2)嘗試到某一個數(shù)i,能整除m,可得出結論m不是素數(shù),不用再往下嘗試分析:編程實現(xiàn):逐個嘗試2, m-1,看能不能整除m。設 i 取值 2, m-1 l如果m不能被該區(qū)間上的任何一個數(shù)整除,即對每個i,m%i 都不為0,則m是素數(shù)l只要找到一個i,使m%i為0,則m肯定不是素數(shù)分析、縮小范圍:m不可能被大于 m/2 的數(shù)整除 i 取值 2, m/2 再進一步分析:m 若不是素數(shù),必有一個因數(shù)在2, 即若m不能被 2, 的數(shù)整除,m必為素數(shù)mm實現(xiàn)思路:(1)fl
44、ag=1; /是否為素數(shù)的標志,1代表素數(shù),0代表非素數(shù) k=sqrt(m);(2)嘗試2.k for(i = 2; i = k; i+) if(m是i的倍數(shù)) 則m不是素數(shù),flag=0; break; 否則,做下一次循環(huán),嘗試下一個整數(shù) (3)若flag=1,則m是素數(shù),否則,m不是素數(shù)只要有一個i能整除m,就可以得到m不是素數(shù)的結論,提前結束循環(huán)主要代碼:k=sqrt(m);flag=1; /1代表素數(shù),0代表非素數(shù)for(i = 2; i = k; i+) if(m % i = 0) flag=0; break; if(flag=1) printf(yesn)else printf(n
45、on”);Break語句用于提前結束循環(huán)continue與與breakl例子:輸出1-999,遇到7的倍數(shù)則跳過lfor(i=1;i=999;i+)lif(i%7=0) continue; printf(“%d ”,i);遇到7的倍數(shù),立即執(zhí)行下一次循環(huán)輸出:1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 if(i%7!=0)printf(“%d ”,i);continue與與breakfor(i=1;i100 | score0) printf(“輸入錯誤”); return 0; g=score/10; switch(g) . return 0;4.3.5 多
46、重循環(huán) 后一項似乎不能有前一項遞推得到!每一項的值都需要用循環(huán)計算!解題思路:(1)輸入n,累加變量sum初始化為0;(2)控制循環(huán)進行n次 for(i=1;i=n;i+) (3)計算第i項的值item,即ii (4)sum=sum+item; (5)輸出sum item需要用循環(huán)計算,即把i累乘i次:item=1; /累乘變量初始化for(j=1; j=i; j+) item=item*i;#includeint main() int i, j, n, sum,item; /* item 存放階乘 */scanf(%d,&n);for (sum=0, i=1; i=n; +i) it
47、em=1; /* 每次都初始化為1 */ for(j=1; j=i; j+) /* 內層循環(huán)算出 item = ii */ item=item*i;sum=sum+item;printf(sum=%dn,sum);return 0;逗號表達式for (sum=0, i=1; i=n; +i)這里是一個逗號表達式,其中的各表達式按順序執(zhí)行,逗號表達式也有值,其值是最后一個表達式的值a=3;b=(a=2*a, a*a)則b的值為:36執(zhí)行過程如下:先執(zhí)行賦值表達式:把6賦給a,再計算a*a即36作為逗號表達式的值a=3;b=(2*a, a*a)則b的值為:9執(zhí)行過程如下:先計算第一個表達式:值為6
48、再計算a*a即9 作為逗號表達式的值到vc中試試for (sum=0, i=1; i=n; +i) item=1; for(j=1; j=i; j+) item=item*i;sum=sum+item;注意內層循環(huán)的初始化item=1; for (sum=0, i=1; i=n; +i) for(j=1; j=i; j+) item=item*i;sum=sum+item;右邊的程序會有什么問題?分析一下,到VC中試試【例例4.23】用如下的格式輸出乘法九九表1234567891 123456789246810121416193912151821242741620242832365555035
49、4045636624854749566386472981每個整數(shù)占4列:%4d解題思路(1)輸出表頭行: 1 2 3 4 5. 用循環(huán)實現(xiàn): printf(“*”); for(i=1; i=9; i+)printf(“%4d”,i); 輸出一個回車 (2)控制循環(huán)進行9次,輸出9行 for(i=1;i=9;i+) (3)輸出一個i值; (4)空i-1個位置,即4*(i-1)個空格,用循環(huán)實現(xiàn) (5)輸出i*i, (i+1)*i, (i+2)*i的值,用循環(huán)實現(xiàn) for(j=1; j=4*(i-1); j+) printf(“ “);for(j=i; j=9; j+) printf(“%4d“,
50、i*j );l#include lint main()l lint i,j;lprintf(“%4c”,*); / printf(“ *);lfor (i=1;i=9;i+)l printf(%4d,i);lprintf(n);lfor (i=1;i=9;+i) /輸出19行l(wèi) /輸出第i行l(wèi) printf(“%4d”,i); /每行第一列的i值lfor (j=1; j=4*(i-1); j+) /輸出i-1個空位置l printf( );lfor (j=i; j=9; j+) /輸出i+19與i的乘積l printf(%4d,i*j);lprintf(“n”); /每行一個回車ll例例4.23 源程序源程序輸出第一行另一種寫法:for (i=1;i=9;+i)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年考大連銀行面試題及答案
- 鋼架廠房吊頂施工方案
- 燈罩的檢測標準
- 4個月嬰幼兒體重身高標準
- 基坑鋼管支撐施工方案
- 2025年硅湖職業(yè)技術學院單招職業(yè)技能測試題庫1套
- 2025年江西司法警官職業(yè)學院單招職業(yè)適應性測試題庫審定版
- 陜西省榆林市2025屆高三下學期第三次模擬考試生物試題(原卷版+解析版)
- 三農村電商打造區(qū)域特色品牌方案
- 三農村居民耕地質量保護方案
- 2025年湖南水利水電職業(yè)技術學院單招職業(yè)技能測試題庫附答案
- 2025年河南建筑職業(yè)技術學院單招職業(yè)技能測試題庫審定版
- 2025年湖南食品藥品職業(yè)學院單招職業(yè)傾向性測試題庫參考答案
- 2025年湖南水利水電職業(yè)技術學院單招職業(yè)適應性測試題庫1套
- 2025年家政服務策劃免責聲明協(xié)議
- 2025新人教版語文七年級下冊《第四單元》大單元整體教學設計2022課標
- 2024年非高危行業(yè)生產經(jīng)營單位主要負責人及安全管理人員安全生產知識和管理能力試題庫附答案
- 2024人工智能大模型技術財務應用藍皮書
- DB51T 2572-2019 干旱河谷造林技術規(guī)程
- 2025新外研社版英語七年級下單詞默寫表
- 2024解析:第十二章滑輪-基礎練(解析版)
評論
0/150
提交評論