循環(huán)結構程序小結.ppt_第1頁
循環(huán)結構程序小結.ppt_第2頁
循環(huán)結構程序小結.ppt_第3頁
循環(huán)結構程序小結.ppt_第4頁
循環(huán)結構程序小結.ppt_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

自增、自減運算符,自增、自減運算符的作用是使變量的值增1或減1 自增運算符:+ i+ 等價于 i = i + 1 或 i += 1 +i 等價于 i = i + 1 或 i += 1 自減運算符:-,6,4,自增、自減運算符的使用,自增、自減運算符的使用 例如:若i的值為1 表達式“j = +i”的值是什么? 表達式“j = i+”的值是什么?,自增、自減運算符的使用,a+ * b 得 6,3,a,自增、自減運算符的使用 例如:int a=3,b=2,c; 執(zhí)行“c = +a * b”之后a、b、c的值? 執(zhí)行“c = a+ * b”之后a、b、c的值?,2,b,c,+a * b 得 8,自增、自減運算符的副作用,表達式中過度使用自增、自減運算符會帶來副作用,容易產(chǎn)生歧義 例如:若i的值為1,j的值為2,表達式“i+j”的值是什么? 例如:若i的初值為1,i+i+i+等于多少?,處理循環(huán)計算需要明確的三個問題: 循環(huán)體:哪些運算(動作)是需要重復進行的。 循環(huán)條件:重復這些運算的條件是什么,即在什么情況下終止/繼續(xù)這個重復的過程。 循環(huán)準備:在進行重復的運算處理之前,需要進行的初始處理是什么。 剩下的問題就是選用合適的語句表達一個循環(huán)計算過程了,循環(huán)計算過程的要點,閱讀程序,加密:將消息中每個字母變成其后的第四個字母,即A變成E,a變成e,最后的W變成A,X變成B。,#include main( ) char c; while ( (c = getchar( ) != n ) if ( (c = a ,閱讀程序1,#include #include int main( ) int i, n = 1; for( i = 1; i=20; i+ ) n = n * i; printf(“%dn”,n); system(“pause”); return 0; ,閱讀程序2,#include #include main() float a, x1, x2; printf(“input value for a:“); scanf(“%f“, ,TC2.0,百錢百雞問題,中國古代數(shù)學家張丘建在他的算經(jīng)中曾提出著名的“百錢百雞問題”,其題目如下: 雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一;百錢買百雞,翁、母、雛各幾何?,百錢百雞問題,解:設i、j、k分別代表公雞、母雞、小雞的數(shù)量,根據(jù)題意列方程:,根據(jù)題意可知,i、j、k的范圍一定是0到100的正整數(shù),那么,最簡單的解題方法是:窮舉i、j、k每一種可能的取值組合,直接代入方程組,若滿足該方程組則是一組解。這樣即可得到問題的全部解。,百錢百雞問題,i 0,i 20?,買母雞和 小雞,開始,結束,i i + 1,i = 0; while (i 20 ) i+; , int i, j, k; /*i、j、k分別表示公雞、母雞和小雞的數(shù)目*/ ,j = 0; while (j 34) j+; ,k = 0; while ( k 100) if ( i + j + k = 100 ,百錢百雞問題-1,for(i = 0; i 20; i+ ) /*設定公雞的數(shù)目*/ ,int main( ) int i, j, k; /*i、j、k分別表示公雞、母雞和小雞的數(shù)目*/ return 0; ,for(j = 0; j 34; j+) /*設定母雞的數(shù)目*/ ,for(k = 0; k 100; k+) /*設定小雞的數(shù)目*/ if ( i + j + k = 100 ,百錢百雞問題(for),for(i = 0; i 20; i+ ) /*設定公雞的數(shù)目*/ ,int main( ) int i, j, k; /*i、j、k分別表示公雞、母雞和小雞的數(shù)目*/ return 0; ,for(j = 0; j 34; j+) /*設定母雞的數(shù)目*/ ,k = 100 i j ; if (i*15 + j*9 + k = 300) printf(“%d %d %dn“, i, j, k);,百錢百雞問題(for續(xù)),整數(shù)的位數(shù),給一個不多于五位數(shù)的正整數(shù),要求: 求出它是幾位數(shù) 分別打印出每一位數(shù) 按逆序打印出各位數(shù)字,整數(shù)的位數(shù)(續(xù)),用if語句求整數(shù)x的位數(shù),if ( x 9999) digits = 5; else if ( x 999 ) digits = 4; else if ( x 99 ) digits = 3; else if ( x 9 ) digits = 2; else digits = 1;,整數(shù)的位數(shù)(續(xù)),求整數(shù)x的各位數(shù)字,one = x % 10; /*求x的個位數(shù)字*/ ten = (x / 10) % 10; /*求x的十位數(shù)字*/ hund = (x / 100) % 10; /*求x的百位數(shù)字*/ thou = ( x / 1000) % 10; /*求x的千位數(shù)字*/ ten_thou = (x / 10000) % 10; /*求x的萬位數(shù)字*/,整數(shù)的位數(shù)(循環(huán)語句),用循環(huán)語句求正整數(shù)x的位數(shù),k = 0; /*k用于記錄x的位數(shù)*/ do x = x / 10; +k; while (x 0);,注意: 當循環(huán)結束的時候,x的值等于0。,k = 1; /*k用于記錄x的位數(shù)*/ while (x 9) x = x / 10; +k; ,整數(shù)逆序輸出,逆序輸出正整數(shù)x的各位數(shù)字,k = 0; /* k用于記錄x的位數(shù)*/ do printf(“%d“, x % 10); x = x / 10; +k; while (x 0);,k = 0; /* k用于記錄x的位數(shù)*/ y = 0; /*用于保存x的逆置值*/ do y = y * 10 + x % 10; x = x / 10; +k; while (x 0); printf(“%d“,y);,另一個例子,若有下述計算關系,試編寫程序求數(shù)字A、B、C、D的值。,int A=1, B, C, D; for(B=0; B=9; B+) for(C=0; C=9; C+) for(D=0; D=9;D+) if (A*1000+B*100+C*10+D)*9 = (D*1000+C*100+B*10+A) printf(“%d%d%d%d”,A,B,C,D);,十進制整數(shù)轉換為二進制整數(shù),給定一個十進制整數(shù)n,編寫程序計算其二進制表示形式并輸出。,(43)10 ?,被除數(shù),除數(shù),商,余數(shù),43,2,21,1,被除數(shù),除數(shù),商,余數(shù),21,43,2,21,1,2,10,1,被除數(shù),除數(shù),商,余數(shù),21,43,2,21,1,2,10,1,10,2,5,0,被除數(shù),除數(shù),商,余數(shù),21,43,2,21,1,2,10,1,10,2,5,0,5,2,2,1,被除數(shù),除數(shù),商,余數(shù),21,43,2,21,1,2,10,1,10,2,5,0,5,2,2,1,2,2,1,0,被除數(shù),除數(shù),商,余數(shù),21,43,2,21,1,2,10,1,10,2,5,0,5,2,2,1,2,2,1,0,1,2,0,1,被除數(shù),除數(shù),商,余數(shù),21,43,2,21,1,2,10,1,10,2,5,0,5,2,2,1,2,2,1,0,1,2,0,1,0,被除數(shù),除數(shù),商,余數(shù),21,43,2,21,1,2,10,1,10,2,5,0,5,2,2,1,2,2,1,0,1,2,0,1,0,十進制整數(shù)轉換為二進制整數(shù),給定一個十進制整數(shù)n,編寫程序計算其二進制表示形式并輸出。,(43)10 (101011)2,/*十進制數(shù)n轉換為二進制數(shù)輸出*/ while (n != 0) printf(“%d“, n % 2); n = n / 2; ,換零錢,已知有10元、5元、2元、1元等零幣,現(xiàn)需將一張100元大鈔換零,問: 有幾種換法? 如何換?,換零錢(續(xù)),解:設i、j、k、l分別代表100元零鈔中10元、5元、2元、1元幣的數(shù)量,根據(jù)題意列方程:,根據(jù)題意可知,i、j、k、l的范圍分別為:010、020、050、0100,那么,最簡單的解題方法是:窮舉i、j、k、l每一種可能的取值組合,直接代入方程,若滿足該方程則是一個解。這樣即可得到問題的全部解。,for(i = 0; i = 10; i+ ) ,main( ) int i, j, k, l; /*i、j、k、l分別表示10元、5元、2元、1元幣的數(shù)目*/ ,for(j = 0; j = 20; j+) ,for(k = 0; k = 50; k+) ,換零錢(續(xù)),for(l = 0; l = 100; l+) if ( 10*i + 5*j +2*k + l = 100) printf(“%d %d %d %dn“,i, j, k, l); ,for(i = 0; i = 10; i+ ),main( ) int i, j, k, l; long count = 0; ,for(j = 0; j = 20; j+),for(k = 0; k = 50; k+),換零錢(續(xù)),for(l = 0; l = 100; l+) if ( 10*i + 5*j +2*k + l = 100) printf(“%d %d %d %dn“,i, j, k, l); count+; ,完數(shù),一個數(shù)如果恰好等于它的因子之和,則稱其為完數(shù)。編寫程序找出1000之內的所有完數(shù)。例如,6是完數(shù)(6 = 1 + 2 + 3)。,對21000內的每個整數(shù)n,找出其所有因子(不包括自身),并求其因子之和。,查找正整數(shù)n的所有因子之和,for(n = 2; n 1000; n+ ) ,/*計算正整數(shù)n的所有因子之和*/ s = 0; for(k = 1; k = n / 2 ; k+) if ( n % k = 0) s += k;,if ( s = n) printf(“%d is a perfect number.n“,n);,重新查找正整數(shù)n的所有因子,for(n = 2; n 1000; n+ ) ,s = 0; /*計算正整數(shù)n的所有因子之和*/ for(k = 1; k = n / 2 ; k+) if ( n % k = 0) s += k;,if ( s = n) printf(“%d Its factors are “,n); for(k = 1; k = n /2; k+) /*輸出n的所有因子*/ if (n % k = 0) printf(“%d,“, k); printf(“%c n“, 8); ,從鍵盤輸入一個字符序列,若其中包含有數(shù)字,則將其按照權位降低的次序轉換為數(shù)值輸出。例如,從輸入的串 dsf6%2?0d.43s 中提取出數(shù)值62043。,練習1:從字符序列中取數(shù),62043 = 6*104 + 2*103 + 0*102 + 4*101 + 3 = (0*10 + 6 )*10 + 2)*10 + 0)*10 + 4)*10 + 3,從字符序列中取數(shù),double k; char ch;,k = 0; ch = getchar(); while (ch != n) if ( ch = 0 ,從字符序列中取數(shù),double k; char ch; printf(“input characters:n“); k = 0; ch = getchar(); while (ch != n) if ( ch = 0 ,while (ch = getchar() != n) if ( ch = 0 /*end of if */ /*end of while */,練習2:求自然對數(shù)底的近似值,求自然對數(shù)底的近似值,當 時,把等號右端的和作為e的近似值,其公式為:,編制程序,利用下式計算ucosx的近似值,直到最后一項的絕對值小于10-6.,練習3:求余弦函數(shù),double u, x, cosx; int n; printf(“input value for x(double):“); scanf(“%lf“,cosx = 1; n = 1; u = 1; while (fabs(u)1.0e-6) u = u*x*x / (2*n*(2*n-1); u = -u; cosx = cosx + u; printf(“%5d%30.10lf%20.10lfn“,n,u,cosx); n = n + 1; printf(“n“); printf(“user:cos%.4lf=%.10lfn“, x, cosx); printf(“ sys:cos(%.4lf)=%.10lfn“, x, cos(x);,x1 = x; x = x

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論