第7讲综合结构程序设计 ·请大家及时到我的个人主页htp://cs. cqupt. edu.cn/xejb 或公共邮箱htp:/ stu cqupt. edu.cn中查看作业回复及下 载课件自学 因课堂时间有限,不能把所有例题都讲到,请大家课下 定多看相关例题
第7讲 综合结构程序设计 •请大家及时到我的个人主页http://cs.cqupt.edu.cn/xiejb 或公共邮箱http://stu.cqupt.edu.cn中查看作业回复及下 载课件自学 •因课堂时间有限,不能把所有例题都讲到,请大家课下一 定多看相关例题
如何读程序? 写程序:任务(自然语言)→C语言程序 读程序:← 如何读? 先用大脑按照程序执行顺序读,给出程序的功 能和程序的输出结果 再到计算机上运行该程序,看结果是否与分析 结果一样 相当于阅读理解
2 如何读程序? ▪ 写程序:任务(自然语言)→C语言程序 ▪ 读程序: ▪ 如何读? ▪ 先用大脑按照程序执行顺序读,给出程序的功 能和程序的输出结果 ▪ 再到计算机上运行该程序,看结果是否与分析 结果一样 ▪ 相当于阅读理解
作业答案 breaki和 continue的含义 例题4-29: 输入一串字符,以ESC结束输入,输出这 串字符,并统计该串字符中有多少行 (每回车一次计作一行) 例题4-30 输入一串字符,以回车结束输入,除字符 串中的“ESC外全部输出
3 作业答案 ▪ 例题4-29: ▪ 输入一串字符,以ESC结束输入,输出这 一串字符,并统计该串字符中有多少行 (每回车一次计作一行)。 ▪ 例题4-30 ▪ 输入一串字符,以回车结束输入,除字符 串中的‘ESC’外全部输出。 break和 continue的含义
多个循环控制变量的三种情况-1 i=1i=1 for(i=1;:i<=9:i++) 2 for(j=1:j<=9:j+) j=3 printf( i=961d j=%61d\n",i, j): i=i j=9 i=2j=1 =2 输出语句执行了99=81次 =3 两个for语句是嵌套关系。 i=2j=9 外层循环控制变量不变的时候, 内层循环控制变量按顺序自加 i=9j=1 23 i=9 9
4 多个循环控制变量的三种情况-1 for (i=1; i<=9; i++) for (j=1; j<=9; j++) printf(" i=%1d j=%1d\n",i,j); i=1 j=1 j=2 j=3 ... i=1 j=9 i=2 j=1 j=2 j=3 ... i=2 j=9 ... i=9 j=1 j=2 j=3 ... i=9 j=9 ▪输出语句执行了9*9=81次。 ▪两个for语句是嵌套关系。 ▪外层循环控制变量不变的时候, 内层循环控制变量按顺序自加
多个循环控制变量的三种情况-2 for(i=1,j=1:i<=9:i++,j printf( i=%1d j=71d\n,i,j); J= 输出语句执行了9次 i=2i=2 两个循环控制变量共同自加 9i=9
5 多个循环控制变量的三种情况-2 for (i=1, j=1; i<=9; i++, j++) printf(" i=%1d j=%1d\n",i,j); i=1 j=1 i=2 j=2 ... i=9 j=9 ▪输出语句执行了9次 ▪两个循环控制变量共同自加
多个循环控制变量的三种情况-3 for(i=1:i<=9:i++) printf( i=y2d\n",i: for〔j=1:j<=9:j*+) prnf("i=‰2dj=‰2dn"i〕);i=3 m每个输出语句各执行了9次, 共9+9=81次 i=10j=1 两个循环控制变量各自分 i=10j=2 别控制各自的循环语句的执 1=10j=3 行次数,互不干涉。 10ⅰ=9
6 多个循环控制变量的三种情况-3 for (i=1; i<=9; i++) printf(" i=%2d\n",i); for (j=1; j<=9; j++) printf(" i=%2d j=%2d\n",i,j); i=1 i=2 i=3 ... i=9 i=10 j=1 i=10 j=2 i=10 j=3 ... i=10 j=9 ▪每个输出语句各执行了9次, 共9+9=81次 ▪两个循环控制变量各自分 别控制各自的循环语句的执 行次数,互不干涉
例4-27 for(i=1:i<2:i++):° 再加个分 for〔j=1:j<2:j+) 再加个分 号呢 for〔j=1:j<2:j*+)° printf(" %d, %d, %d\n", i,j, k) 000 00120 01020 011 0101 220 221 222 0021 101 10 111 !!加分号与不加分号不同。 7
7 例4-27 for (i=1; i<2; i++) for (j=1; j<2; j++) for (j=1; j<2; j++) printf(" %d,%d,%d\n",i,j,k); •结果为? ; ; •加个分号 会怎样? 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 2 0 0 2 0 1 2 1 0 2 1 1 •再加个分 号又会怎样? 2 2 0 2 2 1 ; •再加个分 号呢? 2 2 2 !!加分号与不加分号不同
记住:编程的步骤!!! 分析问题 逐步求精地写算法(请记住P77页图4-2) 写程序(请严格按照附录C的语法格式书写) 调试程序
8 记住:编程的步骤!!! ▪ 分析问题 ▪ 逐步求精地写算法(请记住P77页图4-2) ▪ 写程序(请严格按照附录C的语法格式书写) ▪ 调试程序
作业讲评 判断0-100之间有多少个完数。 完数: 所有因子的和等于它本身 例如:1+2+3=6 整体思路?? for(i=1:<=100;i++) 如果是完数,输出“i是完数”,并将计数器加1 输出完数的个数
9 作业讲评 ▪ 判断0-100之间有多少个完数。 ▪ 完数: ▪ 所有因子的和等于它本身 ▪ 例如:1+2+3=6 ▪ 整体思路?? for(i=1;i<=100;i++) {如果i是完数,输出“i是完数”,并将计数器加1 } 输出完数的个数
厂 counter=O,i=1 分析过程:逐步求精 SU= 判断是否为的因子, 是的话累加,j N Y 判断与sum是否相等,是的话 输出i同时 counter加1;i++ Y i<=100? 输出 counter 10
10 Y N i<=100? 输出counter counter=0,i=1 如果 i是完数,输出 “ i是完数 ” , 并将计数器加1 i++ 判断 i 与sum是否相等 ,是的话 输出i,同时counter 加1;i++ 求 i的因子之和sum Y N sum=0,j=1 判断 j是否为 i的因子, 是的话累加,j++ j<=i? 分析过程:逐步求精