《《循環(huán)結(jié)構(gòu)程序設(shè)計(jì)》PPT課件.pptx》由會員分享,可在線閱讀,更多相關(guān)《《循環(huán)結(jié)構(gòu)程序設(shè)計(jì)》PPT課件.pptx(35頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第 3講 循 環(huán) 結(jié) 構(gòu) 程 序 設(shè) 計(jì) 循 環(huán) 的 定 義p反 復(fù) 執(zhí) 行 相 同 的 語 句 序 列 條件A真假條件A真假 while循 環(huán)p格 式 :while(表 達(dá) 式 ) 語 句 序 列表達(dá)式 語句序列非0 0p語 句 序 列 稱 為 循 環(huán) 體 , 當(dāng) 為 一 條 語 句 時(shí) , 表 示 復(fù) 合 語 句 的 可 以 省 略 。p表 達(dá) 式 可 以 為 任 何 類 型p先 判 斷 , 后 執(zhí) 行 , 若 條 件 不 成 立 , 有 可 能 一 次 也 不 執(zhí) 行 。p語 句 序 列 中 必 須 有 改 變 while后 面 括 號 的 表 達(dá) 式 值 的 語 句 , 否 則 有 可
2、 能 死 循 環(huán)。 p 問 題 描 述 :笑 笑 作 為 數(shù) 學(xué) 課 代 表 , 每 次 考 試 后 , 數(shù) 學(xué) 老 師 都 會 讓 他 統(tǒng)計(jì) 成 績 , 老 師 并 不 關(guān) 心 具 體 某 個(gè) 人 的 成 績 , 而 只 關(guān) 心 參 加 考 試 的 人 數(shù) 、平 均 成 績 、 最 低 分 和 最 高 分 。p 輸 入 要 求 :第 1 行 輸 入 T, 表 示 組 數(shù) , 第 二 行 輸 入 一 些 整 數(shù) ,表 示 學(xué) 生 的成 績 ,每 個(gè) 數(shù) 之 間 用 一 個(gè) 空 格 分 開 , -1 表 示 輸 入 結(jié) 束 。p 輸 出 要 求 :占 4 行 ,第 一 行 表 示 學(xué) 生 人 數(shù)
3、 n,第 二 行 表 示 最 高 分 , 第 三 行 表示 最 低 分 , 第 四 行 表 示 平 均 分 , 其 中 只 有 平 均 分 是 小 數(shù) ( 只 保 留 一 位小 數(shù) ) , 其 余 為 整 數(shù) p 輸 入 實(shí) 例 : 1p 5 0 9 0 8 7 6 7 8 4 9 9 5 6 7 4 8 2 9 4 -1p 輸 出 實(shí) 例 : 1 0 1 0 0 5 0 7 8 .3 回 文 數(shù)p問 題 描 述 : 輸 入 一 個(gè) 整 數(shù) , 判 斷 一 個(gè) 該 數(shù) 是 否 為 回 文 數(shù) 。p輸 入 要 求 : 輸 入 一 系 列 的 整 數(shù) n, n1 0 0 0 0 0 0 0 0p輸
4、 出 要 求 : 如 果 是 回 文 數(shù) 輸 出 Yes, 如 果 不 是 回 文 數(shù) 輸 出Nop輸 入 樣 例 : 1 2 3 4 1 2 1 -1 2 3 2 1 1 0 0p輸 出 樣 例 : No Yes Yes No 素 數(shù) 因 子p問 題 描 述 : 輸 入 一 個(gè) 整 數(shù) , 輸 出 它 的 所 有 素 數(shù) 因 子p輸 入 要 求 : 輸 入 一 系 列 的 整 數(shù) ( 0 , 1 , -1 除 外 ) , 每 行 一 個(gè)p輸 出 要 求 : 輸 出 所 有 的 素 數(shù) 因 子 , 每 個(gè) 因 子 之 間 用 1 個(gè) 空 格 分開 , 最 后 一 個(gè) 因 子 后 面 沒 有 空
5、 格p輸 入 樣 例 : 8 3 0 1 2 5p輸 出 樣 例 : 2 2 2 2 3 5 5 5 5 #includeusing namespace std;int main()int m,k=2;cinm;if(m0)cout-;m=-m;while(km)if(m%k=0) coutk ;m=m/k;elsek+;coutmendl;return 0; 6 1 7 4 數(shù) 字 黑 洞p問 題 描 述 : 任 意 一 個(gè) 每 位 數(shù) 字 不 完 全 相 同 的 4 位 正 整 數(shù) ,將 各 位 上 數(shù) 字 重 新 組 合 成 一 個(gè) 最 大 數(shù) 和 一 個(gè) 最 小 數(shù) 相 減 ,重 復(fù)
6、這 個(gè) 過 程 , 必 定 得 到 6 1 7 4 。p輸 入 要 求 : 輸 入 一 系 列 的 4 位 正 整 數(shù) , 占 一 行 。p輸 出 要 求 : 占 一 行 , 最 終 得 到 6 1 7 4 的 變 換 次 數(shù) 。p輸 入 樣 例 : 1 2 3 4p 1 0 0 0p 6 1 7 4p輸 出 樣 例 : 3p 5p 0 p愛 因 斯 坦 走 樓 梯 : 有 一 條 長 階 梯 , 若 每 步跨 2 階 , 則 最 后 剩 1 階 ; 若 每 步 跨 3 階 , 則 最后 剩 2 階 ; 若 每 步 跨 5 階 , 則 最 后 剩 4 階 ; 若每 步 跨 6 階 , 則 最
7、后 剩 5 階 ; 若 每 步 跨 7 階 ,則 最 后 正 好 一 階 不 剩 ; 問 該 樓 梯 最 少 有 多少 階 ? #includeusing namespace std;int main() int n=7 ;while(n%2 !=1 )|(n%3 !=2 )|(n%5 !=4 )|(n%6 !=5 ) n=n+7 ;coutnendl;return 0 ; #includeusing namespace std;int main() int n=7 ;while(!(n%2 =1 )coutnendl;return 0 ; do while 循 環(huán) 語 句p格 式 :do 語
8、 句 序 列 while(表 達(dá) 式 ); 表達(dá)式語句序列非0 0 最 大 公 約 數(shù) 和 最 小 公 倍 數(shù)p 問 題 描 述 : 從 鍵 盤 上 輸 入 兩 個(gè) 整 數(shù) , 求 它 們 的 最 大 公 約 數(shù) 和 最 小公 倍 數(shù) 。p 輸 入 要 求 : 每 行 輸 入 兩 個(gè) 整 數(shù) , 每 個(gè) 整 數(shù) 之 間 用 一 個(gè) 空 格 分 開 。p 輸 出 要 求 : 第 一 行 輸 出 最 大 公 約 數(shù) , 第 二 行 輸 出 最 小 公 倍 數(shù)p 輸 入 樣 例 : 3 6 2 4 1 3p 輸 出 樣 例 : 3 6 1 3 1 2 開始輸入a,br=a%b a=bb=r r!=0
9、輸出a結(jié)束非0 0 p問 題 描 述 : 計(jì) 算 與 正 整 數(shù) n相 等 的 二 進(jìn) 制 代 碼 中 有 1 和 0 的個(gè) 數(shù) 。p輸 入 要 求 : 輸 入 一 些 正 整 數(shù) , 每 個(gè) 占 一 行p輸 出 要 求 : 占 兩 行 , 第 一 行 是 1 的 個(gè) 數(shù) , 第 二 行 是 0 的 個(gè) 數(shù) 。p輸 入 樣 例 : 8 9 3p輸 出 樣 例 : 1 3 5 2 Cantor表問題描述:現(xiàn)代數(shù)學(xué)的著名證明之一是Georg Cantor證明了有理數(shù)是可以枚舉的。他利用下面一張表來證明這一命題:1 /1 1 /2 1 /3 1 /4 1 /5 2 /1 2 /2 2 /3 2 /4
10、 3 /1 3 /2 3 /3 4 /1 4 /2 5 /1 我們以Z字型給上表每一項(xiàng)編號 。第1項(xiàng)是1 /1 ,然后第2項(xiàng)是1 /2,2 /1,3 /1,2 /2 .輸入描述:整數(shù)N(1 N1 0 0 0 0 0 0 0)輸出描述:表中的第N項(xiàng) 樣例輸入:7樣例輸出: 1 /4 #includeusing namespace std;int main() int n,i,j;cinn;i=0 ;/斜線序號j=n;/第n項(xiàng)在某行的位置do i+;j=j-i;while(j0 );j=j+i;if(i%2 =0 ) coutj/i+1 -jendl; else couti+1 -j/jendl;
11、return 0 ; 角 谷 猜 想p問 題 描 述 : 定 義 這 樣 一 個(gè) 整 數(shù) 函 數(shù) f(n), 當(dāng) n是 偶 數(shù) 時(shí) ,f(n)=n/2 ; 當(dāng) n是 奇 數(shù) 時(shí) , f(n)=(3 n+1 )/2 。 這 個(gè) 猜 想 是 說 :對 于 任 意 的 整 數(shù) n, 計(jì) 算 f(n),f(f(n),f(f(f(n),., 若 干 步之 后 , 總 會 得 到 1 。 對 于 給 定 的 n, 求 出 數(shù) 字 序 列 中 第 一 次出 現(xiàn) 1 的 步 數(shù) 。p輸 入 要 求 : 輸 入 一 些 正 整 數(shù) n, 每 個(gè) 正 整 數(shù) 占 一 行 。p輸 出 要 求 : 占 一 行 , 輸
12、 出 對 應(yīng) n得 到 1 的 步 數(shù) 。p輸 入 樣 例 : 5p 1 0p輸 出 樣 例 : 4p 5 pwhile語 句 和 dowhile語 句 比 較n while語 句 是 先 判 斷 后 執(zhí) 行 , 只 要 不 滿 足 條 件 , 循 環(huán) 體 語句 根 本 不 會 執(zhí) 行 n dowhile語 句 是 先 執(zhí) 行 后 判 斷 , 不 管 條 件 是 否 滿 足 , 循環(huán) 體 語 句 總 會 執(zhí) 行 一 次 #include using namespace std;int main() int i,sum=0; cini; while(i=10) sum+=i; i+; couts
13、umendl; return 0;#include using namespace std;int main() int i,sum=0; cini; do sum+=i; i+; while(i=10); coutsumendl; return 0; for循 環(huán) 語 句p格 式 :for (; ; ) 語 句 序 列表達(dá)式2表達(dá)式1 非0 0表達(dá)式3語句序列p語 句 序 列 稱 為 循 環(huán) 體 。p當(dāng) 語 句 序 列 只 有 單 條 語 句 , 表 示 復(fù) 合 語 句 的 可 以 省 略 。p表 達(dá) 式 1一 般 為 賦 值 表 達(dá) 式 , 給 控 制 變 量 賦 初 值 ; 如 果 省
14、略 表 達(dá) 式 1, 這 時(shí) for語 句 為 如p表 達(dá) 式 2一 般 為 關(guān) 系 表 達(dá) 式 或 邏 輯 表 達(dá) 式 , 稱 為 循 環(huán) 控 制 條 件p表 達(dá) 式 3一 般 為 賦 值 表 達(dá) 式 , 給 控 制 變 量 增 量 或 減 量pfor( ; ; ) 。 轉(zhuǎn) 移 語 句pcontinue語 句n形 式 : continue;n功 能 : 結(jié) 束 本 次 循 環(huán) , 開 始 下 一 次 循 環(huán)ncontinue只 能 用 在 循 環(huán) 結(jié) 構(gòu) 中 , 而 不 能 用 于 其它 控 制 結(jié) 構(gòu) 表達(dá)式1 表達(dá)式2 語句序列1語句序列2 后續(xù)語句 非0非00 0 continue #
15、includeusing namespace std;int main() int k; for(k=1 0 0 ;k=2 0 0 ;k+) if(k%3 =0 ) continue;coutk“ “; return 0 ; pbreak語 句 n格 式 : break;n功 能 : 跳 出 switch結(jié) 構(gòu) 或 結(jié) 束 本 層 循 環(huán) 。n說 明 : break語 句 只 能 用 于 switch或 循 環(huán) 結(jié) 構(gòu) 中 表達(dá)式1 表達(dá)式2 語句序列1語句序列2 后續(xù)語句 非0非00 0 break #includeusing namespace std;#define PI 3 .1 4
16、1 5 9 2 6int main() int r; double area; for(r=1 ;r1 0 0 .0 ) break;coutareaendl; return 0 ; 階 乘 之 和問 題 描 述 : 求 非 負(fù) 整 數(shù) 的 階 乘 之 和輸 入 要 求 : 輸 入 一 個(gè) 非 負(fù) 整 數(shù) n(n13), 占 一 行輸 出 要 求 : 占 一 行 , 階 乘 的 和輸 入 樣 例 : 0 5 12輸 出 樣 例 : 1 154 522956314 #include#includeusing namespace std;int main() int i,sum,p,n; whil
17、e(cinn) sum=0 ; p=1 ; if(n0 ) exit(0 ); for(i=1 ;i=n;i+) p=p*i;sum=sum+p; coutsum+1 endl; return 0 ; 分 數(shù) 數(shù) 列p問 題 描 述 : 已 知 分 數(shù) 數(shù) 列 2 /1 , -3 /2 , 5 /3 , -8 /5 , 對 于 輸 入 的 正 整 數(shù) n, 輸 出 對 應(yīng) 項(xiàng) 的 分 數(shù) 。p輸 入 要 求 : 輸 入 一 些 正 整 數(shù) n(n5 0 ), 分 別 占 一 行 。p輸 出 要 求 : 占 一 行 , 表 示 分 數(shù) 數(shù) 列 中 的 對 應(yīng) 項(xiàng) 。p輸 入 樣 例 : 3 2
18、6p輸 出 樣 例 : 5 /3 -3 1 7 8 1 1 /1 9 6 4 1 8 #includeusing namespace std;int main() int a=2 ,b=1 ,i;int n;cinn;for(i=2 ;i=n;i+) a=a+b;b=a-b;if(n%2 =0 ) cout-1 *a/bendl;else couta/b4 ), 每 個(gè) 數(shù) 占 一 行 。p輸 出 要 求 : 占 一 行 , 兩 個(gè) 素 數(shù) 的 和 。p輸 入 樣 例 : 4 2 0p輸 出 樣 例 : 2 +2 3 +1 7 開始輸入np=1p=p+1 q=n-pp是素?cái)?shù) q是素?cái)?shù)p_fla
19、g=1 p_flag=0q_flag=1 q_flag=0p_flag*q_flag=0 輸出p和q結(jié)束 非0 0非0 0 非0 0 #include#include#includeusing namespace std;int main() int i,p,q,n,p_flag,q_flag;while(cinn)if(n%2 =1 )|n4 ) /cout數(shù)據(jù)輸入出錯(cuò)n”; exit(0 );p=1 ;do p=p+1 ;q=n-p;p_flag=1 ;for(i=2 ;i=sqrt(p);i+) if(p%i=0 ) p_flag=0 ;break; q_flag=1 ; if(p_fl
20、ag=1 )for(i=2 ;i=sqrt(q);i+) if(q%i=0 ) q_flag=0 ; break; while(p_flag*q_flag=0 );coutp+qendl;return 0 ; 絕 對 素 數(shù)p問 題 描 述 : 如 果 一 個(gè) 正 整 數(shù) 是 素 數(shù) , 它 的 反 位 數(shù) 也 是 素?cái)?shù) , 這 稱 這 樣 的 數(shù) 為 絕 對 素 數(shù) 。p輸 入 要 求 : 輸 入 一 些 正 整 數(shù) n, 每 個(gè) 占 一 行p輸 出 要 求 : 占 一 行 , 輸 出 1 到 n之 間 名 絕 對 素 數(shù) 的 個(gè) 數(shù) 。p輸 入 樣 例 : 1 0p 2 0p輸 出 樣 例
21、 :p 4p 7 #include#includeusing namespace std;int main() int i,j,k,m,flag1 =0 ,flag2 =0 ,ans=0 ,n,p; cinn; for(i=2 ;i=n;i+) m=sqrt(i); for(j=2 ;jm) flag1 =1 ; if(flag1 =1 ) p=i; k=0 ; while(p) k=k*1 0 +p%1 0 ; p=p/1 0 ; m=sqrt(k); for(j=2 ;jm) flag2 =1 ; if(flag1 *flag2 =1 ) ans+; coutansendl; return 0 ;