第五章 循环程序设计 重庆工学院 计算机科学与工程学院 基础余
重庆工学院 计算机科学与工程学院 5 基础系 第五章 循环程序设计
第五章循环程序设计 在C语言中可用以下语句构成循环: if goto while do ... while for 其中i…goto是通过编程技巧(i语句和goto语句组 合构成循环功能。而且0o句将影响样序流程的 模块化,使程序可读性变差,所以结构化程序设计主 张限制goto语句的使用。 其他三种语句是C语言提供的循环结构专用语句。 重庆工学院计算机学院基础系 2021年2月20日星期六
第五章 循环程序设计 2 重庆工学院计算机学院 基础系 2021年2月20日星期六 在C语言中可用以下语句构成循环: • if … goto • while • do … while • for 其中if … goto是通过编程技巧(if语句和goto语句组 合)构成循环功能。而且goto语句将影响程序流程的 模块化,使程序可读性变差,所以结构化程序设计主 张限制goto语句的使用。 其他三种语句是C语言提供的循环结构专用语句
第五 名词解释 序设计 环结构两人无限环 死循环 循环条件p 1丨 结束循环的条件表达式 真 循环体A 循环执行的 名词解释 设置循环条 空循环 循环变量的初 当p为真时 循环变量的终值 循环变量的变化规律 当型循环 直到型循环 3重庆工学院计算机学院基础系202年2月20日星期六 ≤D<
第五章 循环程序设计 3 重庆工学院计算机学院 基础系 2021年2月20日星期六 • 循环结构两大要素: •循环条件 p • 结束循环的条件表达式 •循环体 A • 循环执行的语句或语句组 •设置循环条件要特别注意确定: •循环变量的初值 •循环变量的终值 •循环变量的变化规律 名词解释 无限循环 死循环 名词解释 空循环
第五章循环程席设 n=0. sumO 【例一】 当sum未超过10000时 maino SUIsun 型 n=n+1 int n=0.sum=0: 输出n值 loop: sum+n ++n 【例二】 if(sum=10000 n=0 goto end sumt=n sUm=suman 直 ++n 到 goto loop, 型 当sum未超过10000时 end: printf("n=%dn”,n) 输出n值 4重庆工学院计算机学院基础系2021年2月20日星期六 回
第五章 循环程序设计 4 重庆工学院计算机学院 基础系 2021年2月20日星期六 【例二】 main() { int n=0,sum=0; loop: if (sum>=10000) goto end; sum+=n; ++n; goto loop; end: printf(“n = %d\n”,n); } 直 到 型 当 型 1【 、例一if 】… goto语句循环结构 main() { int n=0,sum=0; loop: sum+=n; ++n; if (sum<=10000) goto loop; printf(“n = %d\n”,n); }
第五章循环秆 n=0, sumO 当sum未超过1000时 2、 while语句循环结构 sUSuman 型 般形式 输出n值 while(条件表达式)循环体; 用于构成当型循环:先判【例三】 断后执行条件为真继续循 maino 环,直到条件为假时结 int n=0.sum=0 循环 while(sum<=10000) 【注意】条件表达式或循 环体内应有改变条件使循 sumt=n ++n; 环结束的语句,否则可能 陷入“死循环 printf("n=%din, n) 重庆工学院计算机学院基础系 2021年2月20日星期六 返回
第五章 循环程序设计 5 重庆工学院计算机学院 基础系 2021年2月20日星期六 2、while语句循环结构 【例三】 main() { int n=0,sum=0; while (sum<=10000) { sum+=n; ++n; } printf(“n = %d\n”,n); } 当 型 • 一般形式 while (条件表达式) 循环体; • 用于构成当型循环:先判 断后执行/条件为真继续循 环,直到条件为假时结束 循环。 • 【注意】条件表达式或循 环体内应有改变条件使循 环结束的语句,否则可能 陷入“死循环
第五章循环 【例四】 maino 3、do… while语句循环结 一般形式 int n=0, sum=0 do i do i sumt=n 循环语句(组) ++n; } while(条件表达式) I while(sum<=10000) 用于构成烈 printf(n=%dn”,n); 执行后直到sUm超过 循环,直1000为止 束循环。 n=0. sum=0 【注意】条件表达式或循 SUTEswmtn 直 n=n+1 环体内同样应有改变条件到 当sum未超过1000时 使循环结束的语句,否则型 输出n值 可能陷入“死循环”。 重庆工学院计算机学院基础系 2021年2月20日星期六
第五章 循环程序设计 6 重庆工学院计算机学院 基础系 2021年2月20日星期六 3、do…while语句循环结构 【例四】 main() { int n=0,sum=0; do { sum+=n; ++n; } while (sum<=10000) printf(“n = %d\n”,n); } • 一般形式 do { 循环语句(组) } while (条件表达式); • 用于构成直到型循环:先 执行后判断/条件为真继续 循环,直到条件为假时结 束循环。 • 【注意】条件表达式或循 环体内同样应有改变条件 使循环结束的语句,否则 可能陷入“死循环”。 直 到 型 直到sum超过 10000为止
第五章循环程序设计 3、do… while语句循环结构示例 main( 【例五】从键盘输入一个整数 12456,分析以下程序运行结果 int num. C: 结果: printi(“请输入一个整数:); 65421 scanf(%d, &num) 将各位数字反序显示出来 do i c=num%10 /取得num的个位数 printf( %d, c) /输出num的个位数* I while((num/=10)>0) /直到num/10为0 printf("In); 7重庆工学院计算机学院基础系2021年2月20日星期六
第五章 循环程序设计 7 重庆工学院计算机学院 基础系 2021年2月20日星期六 【例五】从键盘输入一个整数 12456,分析以下程序运行结果。 main() { int num,c; printf(“请输入一个整数:“); scanf(“%d”,&num); do { c=num%10; printf(“%d”,c); } while((num/=10)>0); printf(“\n”); } /*取得num的个位数*/ /*输出num的个位数*/ /*直到num/10为0*/ 结果: 65421 将各位数字反序显示出来 3、do…while语句循环结构 示例
第五章循环程序设计 4、for语句循环结构 例六】 般形式 求∑i=1+2+3+4…+99+100 f(表达式:条件表达式:表达式3)|(=1-100 循环语句(组); 用于构成计数型当型循环:先判断后 执行条件为真继续循环,直到条件为|man0 假时结束循环。 表达式1整个循环中只执行1次,常用inti,s=0; 来对循环变量设置初值 条件表达式(表达式2):其值为真 for(=1<=100;++) (非0)时继续执行循环语句(组), s=StI 否则结束循环 表达式3:常用于循环变量值的更新(循 环体的一部分每次循环语句组执行完 printf(esum=%dn”,s); 后执行一次) 重庆工学院计算机学院基础系 2021年2月20日星期六 返回
第五章 循环程序设计 8 重庆工学院计算机学院 基础系 2021年2月20日星期六 4、for语句循环结构 • 一般形式 – for (表达式1;条件表达式;表达式3) – 循环语句(组); • 用于构成计数型当型循环:先判断后 执行/条件为真继续循环,直到条件为 假时结束循环。 • 表达式1: 整个循环中只执行1次,常用 来对循环变量设置初值 • 条件表达式(表达式2): 其值为真 (非0)时继续执行循环语句(组), 否则结束循环 • 表达式3: 常用于循环变量值的更新(循 环体的一部分每次循环语句组执行完 后执行一次) 【例六】 求∑i =1+2+3+4…+99+100 (i=1~100) main() { int i , s=0; for (i=1;i<=100;i++) s=s+i; printf(“Sum=%d\n”,s); }
第五章循邛 5、其他循环控制结构 a,y, a=10,y=0; break结束循环 do 在swch中退出swch结构 a+=2y/+=a; if(y≈50) break; 在循环中结束循环。 I while(a=14) continue结束本次循环 printf("a=%d, y=%dn, a, y) 循环“短路”(跳过循环体后} 的语句,开始下一轮循环) 变量跟踪 变量跟踪 °goto跳转 a 跳到循环你指定达 0 【注意】 12+2 12+14=26 goto语句只能从循环内向外跳 14+2 16+26=42 转,反之不可!基础系 16+216+42=5 9重庆工学院计算机学院基础系2021年2月20日星期六 回
第五章 循环程序设计 9 重庆工学院计算机学院 基础系 2021年2月20日星期六 5、其他循环控制结构 main( ) { int a,y; a=10,y=0; do { a+=2;y+=a; if (y>50) break; } while (a=14); printf("a=%d,y=%d\n",a,y); } 结果:a=16,y=60 变量跟踪 a y 10 0 12 12 12+2 12+14=26 14+2 16+26=42 16+2 16+42=5 变量跟踪 分析法 • break 结束循环 – 在switch中退出switch结构; – 在循环中结束循环。 • continue 结束本次循环 – 循环“短路”(跳过循环体后面 的语句,开始下一轮循环)。 • goto 跳转 – 跳到循环体外指定标号处。 • 【注意】 – goto 语句只能从循环内向外跳 转 ,反之不可!基础系
求以下程序段执行后x和i的值。 第五章循邛 int iX for(i=1,X=1;=10) break if(X%2=1) break结束循环 {X+=5; 在 switch中退出 switch结构; continue 在循环中结束循环 continue结束本次循环 X=3; 循环“短路”(跳过循环体后 的语句,开始下一轮循环)。 变量跟踪 goto跳转 X 跳到循环体外指定标号处 1-6 6→3 【注意】 3→8 goto语句只能从循环内向外跳 转,反之不可!基础系 23456 5→10 重庆工学院计算机学院基础系 2021年2月20日星期六 回
第五章 循环程序设计 10 重庆工学院计算机学院 基础系 2021年2月20日星期六 5、其他循环控制结构 • break 结束循环 – 在switch中退出switch结构; – 在循环中结束循环。 • continue 结束本次循环 – 循环“短路”(跳过循环体后面 的语句,开始下一轮循环)。 • goto 跳转 – 跳到循环体外指定标号处。 【注意】 – goto 语句只能从循环内向外跳 转 ,反之不可!基础系 求以下程序段执行后x和i的值。 int i,x; for ( i=1,x=1;i=10) break; if (x%2==1) { x+=5; continue; } x-=3; } 结果:x的值为10,i的值为6 变量跟踪 i x 1 1→6 2 6→3 3 3→8 4 8→5 5 5→10 6