循环结构的C程序设计

上传人:san****019 文档编号:22675040 上传时间:2021-05-30 格式:PPT 页数:76 大小:1,000.50KB
收藏 版权申诉 举报 下载
循环结构的C程序设计_第1页
第1页 / 共76页
循环结构的C程序设计_第2页
第2页 / 共76页
循环结构的C程序设计_第3页
第3页 / 共76页
资源描述:

《循环结构的C程序设计》由会员分享,可在线阅读,更多相关《循环结构的C程序设计(76页珍藏版)》请在装配图网上搜索。

1、第 六 章 循 环 结 构 的 C程序 设 计 循 环 的 必 要 性int result1,result2,result3;int result4,result5;result1 = 1 * 10;printf(1 10 %d n,result1);result2 = 2 * 10;printf(2 10 %d n,result2);result3 = 3 * 10;printf(3 10 %d n,result3);result4 = 4 * 10;printf(4 10 %d n,result4);result5 = 5 * 10;printf(5 10 %d n,result5); 1

2、 10 102 10 203 10 304 10 405 10 50输 出 结 果 重 复 语 句 6.1 概 述 循 环 的 必 要 性 1 10 = 102 10 = 203 10 = 304 10 = 405 10 = 500 + 11 + 12 + 1上 个 数 字 + 1. 重 复 (上 个 数 字 +1) 10 C 语 言 中 的 各 种 循 环需 要 多 次 重 复 执 行 一 个 或 多 个 任 务 的 问 题 考 虑 使 用 循 环 来 解 决 C语 言 可 实 现 循 环 的 语 句 : 用 goto 和 if 构 成 循 环 while 语 句 do while 语 句

3、for 语 句循 环 型 程 序 设 计 6.2 while语 句v一 般 形 式 : while(表 达 式 ) 循 环 体 语 句 ;v执 行 流 程 : 计 算 表 达 式 的 值 , 当 值 为 真(非 0)时 , 执 行 循 环 体 语 句 ,一 旦 条 件 为 假 , 就 停 止 执 行循 环 体 。 如 果 条 件 在 开 始 时就 为 假 , 那 么 不 执 行 循 环 体语 句 直 接 退 出 循 环 。 工 作 原 理表 达 式循 环 体 假 (0)真 (非 0)开 始说 明 : 语 句 部 分 可 以 是 简 单 语 句 也 可 以 是 复 合 语 句 。 不 成 立表

4、达 式 ?执 行 语 句成 立执 行 while循 环 之 后 的 语 句 循 环 体 例 用 while循 环 求 1001n n#include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循 环 初 值 循 环 终 值循 环 变 量 增 值 循 环 条 件 循 环 体 i1; sum0i=100sumsum+1i+输 出 sum v说 明 :l循 环 体 有 可 能 一 次 也 不 执 行l循 环 体 可 为 任 意 类 型 语 句 , 一个 以 上 的 语 句 用 括 起 来l下 列 情 况 ,

5、 退 出 while循 环u条 件 表 达 式 不 成 立 ( 为 零 )u循 环 体 内 遇 break,gotol无 限 循 环 : while(1) 循 环 体 ; l 例 : 分 析 程 序 的 运 行 结 果 #include main ( ) int i=1,sum=0;while ( i=100 )printf(“ i=%d,sum=%d” ,i,sum += i);i+;printf(” Sum=%dn” ,sum);结 果 : 程 序 将 不 停 的 打 印 “ i=1,sum=.”。 l 无 法 正 常 终 止 的 程 序 , 称 为 “ 死 循 环 ” 。结 论 : 在

6、while语 句 循 环 体 中 , 一 定 要 有 能 够 对 循 环 控 制 条 件 产 生 影响 的 语 句 。 避 免 出 现 “ 死 循 环 ” 现 象 。 例 显 示 1 10的 平 方#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 运 行 结 果 :1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100 6.3 dowhile语 句v一 般 形 式 : do 循 环 体 语 句 ; while(表 达 式 );v执 行 流 程

7、:循 环 体expr 假 (0)真 (非 0) 它 先 执 行 循 环 体 中 的 语 句 ,然 后 再 判 断 条 件 是 否 为 真 ,如 果 为 真 则 继 续 循 环 ; 如 果为 假 , 则 终 止 循 环 。 工 作 原 理 v特 点 : 先 执 行 循 环 体 , 后 判 断 表 达 式v说 明 :l至 少 执 行 一 次 循 环 体ldowhile可 转 化 成 while结 构分 别 用 do while和 while求 101n nmain() int i,sum=0; i=1; do sum+=i;i+; while(i=10); printf(%d,sum); main

8、() int i,sum=0; i=1; while(i number) printf(太 大 n); else if (guess number) printf(太 小 n); while (guess != number); printf(您 猜 中 了 ! 答 案 为 %dn,number); 猜 一 个 介 于 1 与 10 之 间 的 数请 输 入 您 猜 测 的 数 : 3太 小请 输 入 您 猜 测 的 数 : 5您 猜 中 了 ! 答 案 为 5输 入 数 字 5 后 ,dowhile 循 环 中 的 条件 为 假 , 输 出 结 果 消息 后 , 程 序 终 止 。 比 较

9、while 和 do-while循 环while(循 环 条 件 ) 循 环 体 ; do 循 环 体 ; while( 循 环 条 件 );do-while 循 环 是 先 执 行后 判 断 , 所 以 , 即 使 开始 条 件 为 假 , 循 环 体 也至 少 会 被 执 行 一 次 。while循 环 是 先 判 断 后执 行 , 所 以 , 如 果 条件 为 假 , 则 循 环 体 一次 也 不 会 被 执 行 。q 比 较 while 和 do-while 循 环 的 工 作 原 理编 程 : 辗 转 相 除 法 求 任 意 两 个 整 数 间 的 最 大 公 约 数 : 输 入 一

10、 个 正 整 数 , 要 求 以 相 反 的 顺 序 输 出 该 数 。 例如 : 输 入 12345, 则 输 出 为 54321。 基 本 思 路 : 可 以 从 个 位 开 始 , 按 位 输 出 整 数 的 每 一 位Input an integer to numberUntil number = 0Output number%10number = number /10 main( ) unsigned int number; printf (Input the number:); scanf (%d, do printf(%d, number%10); number/=10; /*

11、number缩 小 10倍 */ while (number!=0); 思 考 : 使 用 while或 for语 句 , 如 何 实 现 ?两 个 程 序 有 何 区 别 ?前 面 的 程 序 可 以 处 理 数 字 0, 后 面 的 程 序 不 能 处 理1234 5 6.4 for语 句v一 般 形 式 : for(expr1 ; expr2 ; expr3) 循 环 体 语 句 ;v执 行 流 程 : expr2循 环 体 假 (0)真 (非 0)forexpr1 expr3 for( 表 达 式 1 ; 表 达 式 2 ; 表 达 式 3 ) 语 句 ; for 循 环 的 一 般

12、语 法 :for 循 环counter = 0;num = 1;cnt = 100; counter = 10;num 0 counter +;num = num + 1;cnt-分 号 用 于 分 隔 for 循 环 的三 个 表 达 式1、 计 算 表 达 式 1的 值 , 通 常 为 循 环 变 量 赋 初 值 ;2、 计 算 表 达 式 2的 值 , 即 判 断 循 环 条 件 是 否 为 真 , 若 值 为 真 则 执 行循 环 体 一 次 , 否 则 跳 出 循 环 ;3、 计 算 表 达 式 3的 值 , 这 里 通 常 写 更 新 循 环 变 量 的 赋 值 表 达 式 , 然

13、后 转 回 第 2步 重 复 执 行 ; 工 作 原 理1 23 4 语 句 表 达 式 3N 表 达 式 1表 达 式 2表 达 式 1表 达 式 2表 达 式 3语 句 表 达 式表 达 式Y表 达 式for循 环 YN 表 达 式 例 用 for循 环 求 100 1n n#include main() int i,sum=0; for(i=1;i=100;i+) sum+=i; printf(%d,sum); for 循 环 示 例#include void main() int number,i,fac=1; printf(n 请 输 入 任 意 一 个 正 整 数 : ); sca

14、nf(%d, for(i = 1; i=number; i+)fac=fac*i; printf(n %d的 阶 乘 = %dn,number,fac); 请 输 入 任 意 一 个 正 整 数 :5内 存numberifac51121206循 环 执 行 五 次5的 阶 乘 = 120 for 循 环 的 表 达 式l for 循 环 中 有 三 个 表 达 式l for 语 句 中 的 各 个 表 达 式 都 可 以 省 略l 分 号 分 隔 符 不 能 省 略for( ; ; ) ; 可 省 略不 能 省 略 省 略 表 达 式 1int num=0;for(;num 0;a+,n-)

15、printf(%d ,a*2); l 相 当 于 省 去 了 为 循 环 变 量 赋 初 值 , 此 时 应 在 for语 句之 前 给 循 环 变 量 赋 初 值 省 略 表 达 式 2for(num=1;num+) . l 即 不 判 断 循 环 条 件 , 也 就 是 认 为 表 达 式 2始 终 为 真 , 这 时 应 在 循 环 体 内 设 法 结 束 循 环 , 否 则 将 成 为 死 循 环 省 略 表 达 式 3for(i=1;i=100;) sum=sum+1; i+; l 即 省 去 修 改 循 环 变 量 的 值 , 但 此 时 应 在 循 环 体 内 设法 结 束 循

16、环 省 略 三 个 表 达 式for( ; ; ) printf(这 将 一 直 进 行 下 去 ); i = getchar(); if(i = X | i = x)break; l 即 不 为 循 环 变 量 赋 初 值 , 不 设 置 循 环 条 件 (认 为 表 达式 2为 真 值 ), 不 修 改 循 环 变 量 的 值 , 无 终 止 地 执 行循 环 体 。 此 时 应 在 循 环 体 内 设 法 结 束 循 环 , 否 则 会成 为 死 循 环 v说 明 :lexpr1也 可 以 是 给 其 它 变 量 赋 初 值 ; expr1和 expr3也可 以 是 逗 号 表 达 式例

17、 : for(sum=0,i=1;i=100;i+,i+)for(sum=0,i=1;i=100;i=i+2)lfor语 句 可 以 转 换 成 while结 构expr1;while(expr2) 循 环 体 语 句 ;expr3; 例 : #include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); 运 行 结 果 : abcdefghij 例 : #include main( ) int i=0; for(;i10;i+) putchar(a+i); 例 : #include main( ) int i=0; for(;i10;) put

18、char(a+(i+); 例 : #include main( ) inti=0; for( ;i10; putchar(a+i),i+) ; main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); #includemain() char c; for(;(c=getchar()!=n;) printf(%c ,c); 0+100=1001+99=1002+98=100 50+50=100 : 数 列 1、 1、 2、 3、 5、 8、 13、 21、是 著 名 的 菲 波 那奇 数 列 , 其 递

19、推 通 项 公 式 为 :F1 F2 Fn Fn-1 Fn-2 ( n=3)为 求 出 第 N项 的 值 , 请 编 写 程 序 。根 据 递 推 通 项 公 式 , 可 用 递 推 法 编 写 程 序 , 计 算 第 N项 的值 。l 递 推 法 : 由 初 始 的 已 知 条 件 开 始 , 先 计 算 出 第 (N 1)步 的结 果 , 再 利 用 前 面 已 知 的 (N 1)项 结 果 , 按 照 递 推 公 式( 或 遵 照 递 推 规 则 ) , 推 出 第 N步 结 果 。递 推 法 是 程 序 设 计 中 最 常 用 的 方 法 之 一 , 使 用 递 推 法 必 须有 明

20、确 的 递 推 初 始 值 和 递 推 规 则 ( 递 推 公 式 ) 。 6.5 l break语 句v功 能 : 在 循 环 语 句 和 switch语 句 中 ,终 止 并 跳 出 循 环体 或 switchv说 明 : break只 能 终 止 并 跳 出 最 近 一 层 的 结 构 break不 能 用 于 循 环 语 句 和 switch语 句 之 外 的 任何 其 它 语 句 之 中continue语 句v功 能 : 结 束 本 次 循 环 , 跳 过 循 环 体 中 尚 未执 行 的 语 句 , 进 行 下 一 次 是 否 执 行 循 环 体 的判 断v仅 用 于 循 环 语

21、句 中 break 语 句跳 出 for 循 环for( ; ; ) printf(这 将 一 直 进 行 下 去 ); i = getchar(); if(i = X | i = x)break; 跳 出 while 循 环while(1) if(x = 10)break; 跳 出 do-while 循 环do if (x = 10) break;while (x 15); continue 语 句l continue 语 句 的 作 用 是 跳 过 循 环 体 中 剩 余 的 语 句而 执 行 下 一 次 循 环l 对 于 while和 do-while循 环 , continue 语 句

22、 执 行 之后 的 动 作 是 条 件 判 断 ; 对 于 for循 环 , 随 后 的 动 作是 变 量 更 新 v功 能 : 结 束 本 次 循 环 , 跳 过 循 环 体 中 尚 未 执行 的 语 句 , 进 行 下 一 次 是 否 执 行 循 环 体 的 判 断v仅 用 于 循 环 语 句 中 continue 语 句 while() continue; while() break; 跳出整个循环 继续下一次循环 例 6.5 把 100 200之 间 的 不 能 被 3整 除 的 数 输 出main() int n; for(n=100;n 200;n+) if(n%3= =0) co

23、ntinue;printf(%d ,n); main() int n; for(n=100;n 200;n+) if(n%3= =0) break;printf(%d ,n); 100 101 103 104 106 107200 100 101 : 求 555555的 约 数 中 最 大 的 三 位 数 是 多 少 ? main( ) int j; long n=555555;/*所 求 的 约 数 的 可 能 取 值 是 从 999到 100, j从 大 到 小 */ for (j=999; j=100; j-) if ( n%j=0 ) /* 若 能 够 整 除 j, 则 j是 约 数

24、*/ printf(” 3 digits in %ld=%dn” , n, j ); break; /* 控 制 退 出 循 环 */ main ( ) int i, count=0, j, sum=0; for ( i=1; i=10; i+) printf (Input integer:); scanf (%d, if (j=0) /* 若 为 负 数 */ continue; /*则 结 束 本 次 循 环 , 不 进 行 后 续 操 作 */ count +; /* 计 数 器 */ sum += j; /* 求 累 加 和 */ if ( count ) printf(Plus nu

25、mer:%d,average value:%.2f, count, 1.0*sum/count); else printf(Plus numer: 0, average value: 0);: 输 入 10个 整 数 , 求 其 中 正 数 的 个 数 及 平 均 值 , 精确 到 小 数 点 后 两 位 。 goto语 句 及 用 goto构 成 循 环l goto语 句 一 般 格 式 : goto 语 句 标 号 ; .标 号 : 语 句 ; n 功 能 : 使 系 统 转 向 标 号 所 在 的 语 句 行 执 行n 说 明 : 语 句 标 号 用 标 识 符 表 示 , 要 符 合

26、标 识 符命 名 规 则goto loop; goto 255; #include main() int i,sum=0; i=1;loop: if(i=100) sum+=i; i+; goto loop; printf(%d,sum); sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循 环 初 值 循 环 终 值循 环 变 量 增 值 循 环 条 件循 环 体n 用 if 和 goto语 句 构 成 循 环 C不 主 张 使 用goto循 环 从 键 盘 输 入 一 组 数 据 , 以 0结 束 输 入 ,求 数 据 和#include

27、main() int number,sum=0;read_loop: scanf(%d, if(!number) goto print_sum; sum+=number; goto read_loop;print_sum: printf(The total sum is %dn,sum); l C语 言 三 种 循 环 语 句 的 特 点 如 下 :1. for和 while先 判 断 循 环 条 件 后 执 行 循 环 体 , do-while语 句 先 执 行 循 环 体 后 判 断 循 环 条 件 。2. while和 do-while语 句 的 条 件 表 达 式 只 有 一 个 ,

28、for语 句 有 三 个 。3. while、 do-while、 for可 以 相 互 替 换 使 用 。4. while语 句 多 用 于 不 需 要 赋 初 值 的 或 循 环 次 数 不 定 的 情 况 。for语 句 多 用 于 要 赋 初 值 或 循 环 次 数 固 定 的 情 况 。 do-while语 句 多 用 于 至 少 要 运 行 一 次 的 循 环 控 制 。5. 循 环 语 句 可 以 嵌 套 , 循 环 可 以 并 列 , 但 不 能 交 叉 。 l为 了 保 证 循 环 体 正 常 运 行 , 应 该 特 别 注 意 :l 循 环 控 制 条 件l 控 制 条 件

29、 的 初 始 状 态 ( 初 始 值 )l 循 环 体 内 部 对 控 制 条 件 的 影 响以 上 三 个 方 面 相 互 配 合 , 相 互 影 响 , 共 同 完 成 循 环 控 制 6.7 循 环 的 嵌 套v定 义 : 一 个 循 环 体 内 又 包 含 了 另 一 个 完 整 的 循 环 结 构v三 种 循 环 可 互 相 嵌 套 ,层 数 不 限(1) while() while() . (2) do do while( ); . while( ); (3) while() do while( ); . (4) for( ; ;) do while(); while() . 内

30、循 环外 循 环内 循 环 程 序 举 例main() int i,j; for(i=1;i=2;i+) printf(“ni=%dn”,i); for(j=1;j=3;j+) printf(“j=%d,”,j); 程 序 举 例 内 层 循 环 终 止j=234main() int i,j; for(i=1;i=2;i+) printf(“ni=%dn”,i); for(j=1;j=3;j+) printf(“j=%d,”,j); 程 序 举 例 运 行 结 果 :循 环 全 部 终 止i=23main() int i,j; for(i=1;i=2;i+) printf(“ni=%dn”,i

31、); for(j=1;j=3;j+) printf(“j=%d,”,j); v嵌 套 循 环 的 跳 转禁止:l从外层跳入内层l跳入同层的另一循环l向上跳转v三 种 循 环 可 互 相 嵌 套 ,层 数 不 限v外 层 循 环 可 包 含 两 个 以 上 内 循 环 ,但 不 能 相 互 交 叉v嵌 套 循 环 的 执 行 流 程 : 输 出 下 三 角 形 乘 法 九 九 表 。 1 2 3 4 5 6 7 8 9- 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 4

32、8 56 64 9 18 27 36 45 54 63 72 81 假 设 : 行 号 为 i , 列 号 为 j i=6j=5i*j(1=i=9) (1=j=i) 则 : 第 i 行 中 要 输 出 j 个 乘 积输 出 项 aij和 行 (i)、 列 (j)的 关 系 #include main ( ) int i=1, j; /* i:行 计 数 器 j:列 计 数 器 */ while( i= 9 ) /* 控 制 打 印 表 头 */ printf ( %4d, i+); printf (n-n); i=1; while ( i= 9 ) /* 行 控 制 */ j = 1; /*

33、列 计 数 器 置 1 */ while ( j = i ) /* 嵌 套 的 二 重 循 环 。 输 出 第 i行 */ printf (%4d, i*j ); j +; /* 列 计 数 器 +1 */ printf (n); /* 一 行 输 出 结 束 后 , 输 出 n */ i +; /* 行 计 数 器 +1 */ 外 层 循 环 体 执 行 1次 , 内 层 循 环 要 输 出 1行 程 序 设 计 的 一 般 步 骤1.分 析 题 意 ,明 确 问 题 的 性 质 数 值 问 题 / 非 数 值 问 题2.建 立 问 题 的 描 述 模 型 数 学 模 型 / 过 程 模 型

34、3.设 计 /确 定 算 法 数 学 问 题 : 数 值 分 析 非 数 学 问 题 :数 据 结 构 / 算 法 分 析 与 设 计一 般 方 法 : 穷 举 / 递 推 / 递 归 /.4.编 程 调 试5.分 析 运 行 结 果 6-8 程 序 举 例 : 判 断 输 入 的 整 数 是 否 是 素 数l算 法 使 用 穷 举 法 , 从 2开 始 尝 试 能 否 整 除 整 数 m。 #include “ stdio.h” main() int m,i; scanf(“ %d” , for(i=2;i= m) printf(“ %d is a prinme number.n” ,m);

35、 else printf(“ %d is not a prinme number.n” ,m); l程 序 的 优 化 对 于 穷 举 法 来 说 , 为 了 提 高 程 序 的 效 率 , 就 要 减 少 尝 试 次 数 。#include “ math.h”main( ) int m,i,k; scanf(“ %d” , k=sqrt(m); for(i=2;i=k+1) printf(“ %d is a prime number.n” ,m); else printf(“ %d is not a prime number.n” ,m); 15 = 3 * 5;尝 试 15 % 3 以 后

36、 , 没 有 必要 再 尝 试 15 % 5。k是 尝 试 的 终 点 。 : 如 何 判 断 一 个 整 数 是 另 一 个 整 数 的 平 方 从 键 盘 上 任 意 输 入 一 个 正 整 数 , 要 求 判 断 该 正 整 数 是 否 是 另 一 个 整 数的 平 方 。l问 题 分 析 与 算 法 设 计设 : 输 入 的 正 整 数 为 i, 若 i满 足 :i = = m * m ( m为 整 数 0)则 i为 整 数 m的 平 方 。main( ) int i, m; scanf (“ %d” , for( m = 1; m * m i; m + +) ;if( i = = m

37、 * m) printf(“ % d * % d = % d n” , i, i, m); : 抓 交 通 肇 事 犯 一 辆 卡 车 违 犯 交 通 规 则 , 撞 人 后 逃 跑 。 现 场 有 三 人 目 击 事 件 , 但 都 没 有记 住 车 号 , 只 记 下 车 号 的 一 些 特 征 : 甲 说 : 牌 照 的 前 两 位 数 字 是 相 同 的 ;乙 说 : 牌 照 的 后 两 位 数 字 是 相 同 的 , 但 与 前 两 位 不 同 ;丙 是 位 数 学 家 , 说 : 四 位 的 车 号 刚 好 是 一 个 整 数 的 平 方 。 请 根 据 以 上 线 索 求 出 车

38、 号 。l问 题 分 析 与 算 法 设 计 按 照 题 目 的 要 求 造 出 一 个 前 两 位 数 (i)相 同 、 后 两 位 数 (j)相 同 且 相 互 间 又不 同 的 整 数 。 得 到 : ( 1) 0i=9 0=j=31) main( ) int i,j,k,m; for(i=1;i=9;i+) /* i:车 号 前 二 位 的 取 值 */ for(j=0;j=9;j+) /* j:车 号 后 二 位 的 取 值 */ if(i!=j) /* 判 断 两 位 数 字 是 否 相 异 */ k=i*1000+i*100+j*10+j; for(m=31;m*mk;m+) ;

39、 if(m * m = = k) /* 判 断 是 否 为 整 数 的 平 方 */ printf(Lorry_No. is %d.n, k); l 运 行 结 果 : Lorry_No. is 7744. : 百 钱 百 鸡 问 题 中 国 古 代 数 学 家 张 丘 建 在 他 的 算 经 中 提 出 了 著 名 的 “ 百 钱 百 鸡 问题 ” : 鸡 翁 一 , 值 钱 五 ; 鸡 母 一 , 值 钱 三 ; 鸡 雏 三 , 值 钱 一 ; 百 钱 买 百 鸡 ,翁 、 母 、 雏 各 几 何 ?l问 题 分 析 与 算 法 设 计设 : 要 买 x只 公 鸡 , y只 母 鸡 , z

40、只 小 鸡 , 可 得 到 方 程 : x + y + z = 100 5 x + 3 y + z / 3 = 100 取 值 范 围 : 0 = x、 y、 z = 100 可 以 采 用 穷 举 法 求 解 。 main( ) int x,y,z,j=0; for(x=0;x=100;x+) for(y=0;y=100;y+) for(z=0;z=100;z+) if(x+y+z=100 运 行 结 果 : 1: cock= 0 hen=25 chicken=75 2: cock= 3 hen=20 chicken=77 7: cock=12 hen= 4 chicken=84 l 丢 失

41、 重 要 条 件 : z应 该 能 够 被 整 除 。main( ) int x,y,z,j=0; for(x=0;x=100;x+) for(y=0;y=100;y+) for(z=0;z=100;z+) if(z%3= =0l 运 行 程 序 , 正 确 的 结 果 : 1: cock= 0 hen=25 chicken=752: cock= 4 hen=18 chicken=783: cock= 8 hen=11 chicken=814: cock=12 hen= 4 chicken=84 l 优 化 程 序 : main( ) int x, y, z, j=0; for(x=0; x=

42、20; x+) for(y=0; y=33; y+) for(z=0; z=100; z+) if(z%3=0 l 再 优 化 程 序 : for(x=0; x=20; x+) for(y=0; y=(100-5*x)/3; y+) z=100-x-y; if( z%3=0 穷 举 法 的 关 键l 数 学 模 型l适 宜 进 行 穷 举 的 数 学 模 型l决 定 程 序 是 否 正 确l 穷 举 的 范 围l明 确 的 穷 举 终 止 条 件l决 定 穷 举 的 效 率 , 范 围 过 大 , 则 效 率 太 低 。 : 打 印 边 长 为 m的 正 方 型要 求 : 从 键 盘 输 入

43、m值 , 输 出 m行 每 行 m个 *号 。例 : 输 入 m=4, 输 出 的 图 形 如 下 :* * * * * * * * * * * * *l 算 法 分 析 与 设 计 :1. 输 入 m,2. 重 复 打 印 m行 , 每 行 打 印 m个 *; 加 细 : 1. 输 入 m; 2. for ( k=1; k=m; k+) 打 印 一 行 中 的 m 个 * ; l 算 法 分 析 与 设 计 : 加 细 :1. 输 入 m;2. for( k=1; k=m; k+) 打 印 m 个 * ; 换 新 行 ; 加 细 :1. 输 入 m;2. for( k=1; k=m; k+)

44、 for( j=1; j=m; j+) printf (“ *” ); printf(“ n” ) ; #include main ( ) int k, m, j; scanf( “ %d” , for(k=1; k=m; k+) /* 控 制 打 印 m行 */ for(j=1; j=m; j+) /*打 印 一 行 中 的 m个 *号 */ printf (“ *” ); printf(“ n” ) ; l 分 析 方 法 逐 步 求 精 法 。 对 于 复 杂 问 题 , 不 可 能 一 下 得 到 程 序 ,可 以 先 将 简 单 的 部 分 明 确 出 来 , 再 逐 步 对 复 杂

45、 部 分 进 行细 化 , 一 步 一 步 推 出 程 序 。 : 打 印 数 字 魔 方 要 求 : 从 键 盘 输 入 m 值 , 输 出 m 行 的 数 字 方 阵 。例 : 输 入 m=5 , 输 出 的 图 形 如 下 :1 2 3 4 5 2 3 4 5 13 4 5 1 24 5 1 2 35 1 2 3 4 l 分 析 : 1. 重 复 打 印 m行 。 2. 第 j行 的 第 一 个 数 字 为 j, 之 后 依 次 递 增 , 但 以 m为 模 : a ij = ( i + j - 2 ) % m + 1输 出 项 和 行 、 列 的 关 系 #include main (

46、 ) int i, j, m ; printf(Enter M:); scanf(%d, for(i=1;i=m;i+ ) /* 控 制 打 印 m行 */ for(j=1;j=m;j+ ) /* 打 印 一 行 中 的 数 字 */ printf( %d, (i+j-2)%m + 1 ); printf(n); 问 题 描 述 :用 “ *”输 出 一 个 菱 形 图 案 , 图 案 如 下 : * * * * * * * * * * * * * * * * * * *main() int i,j,k; for(i=1;i=4;i+) for(j=1;j=4-i;j+) printf( );

47、 for(k=1;k=2*i-1;k+) printf(*); printf(n); for(i=1;i=3;i+) for(j=1;j=i;j+) printf( ); for(k=1;k=7-2*i;k+) printf(*); printf(n); 嵌 套 循 环 示 例 输 出 : * * * * * * * * * * * * * * * * * * * *控 制 打 印 的 行 数控 制 每 行 打 印 的 空 格 数控 制 每 行 打 印 的 *号 数控 制 打 印 的 行 数控 制 每 行 打 印 的 空 格 数控 制 每 行 打 印 的 *号 数 问 题 描 述 :打 印 输

48、 出 100至 200之 间 的 全 部 素 数 。分 析 : 素 数 是 指 只 能 被 1和 它 本 身 整 除 的 数 。 算 法 比较 简 单 , 先 将 这 个 数 被 2除 , 如 果 能 整 除 , 且 该 数 又不 等 于 2, 则 该 数 不 是 素 数 。 如 果 该 数 不 能 被 2整 除 ,再 看 则 是 否 能 被 3整 除 。 如 果 被 3整 除 , 并 且 该 数 不 等于 3, 则 该 数 不 是 素 数 , 否 则 再 判 断 是 否 被 4整 除 , 依此 类 推 , 该 数 只 要 是 能 被 小 于 本 身 的 某 个 数 整 除 时 ,就 不 是

49、素 数 。 main() int i,j,n; n=0; for(i=100;i=200;i+) j=2; while(i%j!=0) j+; if(i=j) printf(%4d,i); n+; if(n%8=0) printf(n); printf(n); 嵌 套 循 环 示 例 输 出 :从 100到 200之 间 所 有 的 素 数 为 : 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199控 制 每 行 输 出 8个 素 数如 果 第 一 个 能 被 整 除 的 数 等

50、 于该 数 本 身 , 则 说 明 该 数 为 素 数从 2到 i之 间 寻 找 第 一 个 能 被 整 除 的 数 嵌 套 循 环 示 例main() int i,num; char answer; do printf(请 输 入 一 个 数 : );scanf(%d,printf(n);for (i = 1; i = 10; i+) printf(=);printf(n 该 数 是 %d,num);printf(nn 您 是 否 还 要 输 入 其 他 的 数 (y/n)? );fflush(stdin); answer = getchar(); while (answer != n);

51、输 出 :请 输 入 一 个 数 : 58 该 数 是 58您 是 否 还 要 输 入 其 他 的 数 (y/n)? y请 输 入 一 个 数 : 64 该 数 是 64您 是 否 还 要 输 入 其 他 的 数 (y/n)? n 译 密 码例 如 Hello,world!译 成 密 码 : Lipps,asvph! #includemain() char c; while(c=getchar()!=n) if (c=a printf(“%c”,c); 例 6.4求 sn=a+aa+aaa+aaa 其 中 a是 一 个数 字 , n由 键 盘 输 入 。 2+22+222+2222+main(

52、)int a,n,count=1,sn=0,tn=0; scanf(“%d%d”,while(count=n) tn=tn+a; sn=sn+tn; a=a*10; count+;printf(“%dn”,sn); l 1.求 多 项 式 1 1/2 1/3 1/4 1/100 的 值 。l 2.从 键 盘 输 入 一 行 字 符 , 统 计 其 中 各 类 字 符 的 个 数 。l 3.求 两 个 整 数 m, n的 最 大 公 约 数 和 最 小 公 倍 数 。l 4.韩 信 点 兵 又 称 为 中 国 剩 余 定 理 , 相 传 汉 高 祖 刘 邦 问 大 将 军 韩 信 统 御兵 士

53、多 少 , 韩 信 答 说 , 每 3人 一 列 余 1人 、 5人 一 列 余 2人 、 7人 一 列 余 4人 、 13人 一 列 余 6人 。 刘 邦 茫 然 而 不 知 其 数 。 ( 兵 数 范 围 在 1000内 ) l 5.输 出 100-200之 间 凡 是 包 含 数 字 5的 数 。l 6.一 个 数 如 果 恰 好 等 于 它 的 因 子 之 和 , 这 个 数 就 称 为 “ 完 数 ” 。 例 如 ,6的 因 子 为 1、 2、 3, 而 6 1 2 3, 因 此 6是 “ 完 数 ” 。 编 程 序 找 出1000之 内 的 所 有 完 数 , 并 输 出 。 练

54、习 l7.试 编 程 序 , 找 出 10000以 内 的 所 有 同 构 数 。 同 构 数 是 这 样 一 组 数 : 它出 现 在 平 方 数 的 右 边 。 例 如 : 5是 25右 边 的 数 , 25是 625右 边 的 数 , 5和25都 是 同 构 数 。l8.每 个 苹 果 0.8元 , 第 一 天 买 2个 苹 果 , 第 二 天 开 始 , 每 天 买 前 一 天 的 2倍 , 直 到 购 买 的 苹 果 个 数 达 到 不 超 过 100的 最 大 值 , 每 天 平 均 花 多 少 钱 ?l9.两 个 不 同 的 整 数 a,b,如 果 a的 所 有 因 子 之 和 等 于 b, b的 所 有 因 子 之 和等 于 a, 则 a与 b互 称 为 亲 密 数 。 打 印 出 1000以 内 所 有 的 亲 密 数 对 。10.输 出 如 下 图 案 : AB B BC C C C CB B B A 为 止最 后 一 项 的 绝 对 值 小 于 的 近 似 值 , 直 到公 式 求例 用 610.71513114 t=1,pi=0,n=1.0,s=1当 |t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输 出 pi 分 子 : 1, -1, 1, -1分 母 : 1, 3, 5, 7, .

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!