第3章 结构化程序设计12-07(5)

2019-04-10 09:39

博学谷——让IT教学更简单,让IT学习更有效

开始i <= 9假假j <= i真真printf(“i*j=i*j”);

图3-25 九九乘法表流程图

由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下: 第一步,在第4行代码中定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。 第二步,在第5行代码中将i初始化为1,条件i <= 9为真,即一共打印9行。程序将首次进入

外层循环的循环体。

第三步,在第7行代码中将j初始化为1,由于此时i的值为1,条件j <= i为真,程序将首次

进入内层循环的循环体,打印第一行的数值相乘结果:1*1 = 1。

第四步,执行第7行代码中内层循环的操作表达式j++,将j的值自增为2。

第五步,执行第7行代码中的判断条件j<=i,判断结果为假,内层循环结束。执行后面的代码,

打印换行符。

第六步,执行第5行代码中外层循环的操作表达式i++,将i的值自增为2。

第七步,执行第5行代码中的判断条件i<=9,判断结果为真,程序将进入外层循环的循环体,

继续执行内层循环。

第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两列相乘结果:2*1=2 2*2 =4。

在内层循环结束时会打印换行符。

第九步,以此类推,在第3行会打印3列相乘结果,逐行递增,直到i的值为10时,外层循环

的判断条件i <= 9结果为假,外层循环结束,整个程序也就结束了。

除了用for循环来实现乘法表,读者也可以尝试用while和do…while()循环来实现。这里就不再 赘述。

结束3.5.5 跳转语句(break、continue、goto)

跳转语句用于实现循环执行过程中程序流程的跳转,在C语言中,跳转语句有break语句、goto语句和continue语句。接下来分别进行详细地讲解。

1、break语句

在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出当前循环语句,执行后面的代码。接下来通过一个具体的案例来演示break语句如何跳出当前循环,如例3-12所示。

例3-12

1 #include 2 void main() 3 { 4

int x = 1; //定义变量x,初始值为1

21

博学谷——让IT教学更简单,让IT学习更有效

5 6 7 8 9 10 11 12 13 14 }

while (x <= 4) //循环条件 { }

printf(\条件成立,打印x的值 if (x == 3) { }

x++; //x进行自增

break;

运行结果如图3-26所示。

图3-26 运行结果

例3-12中,通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”。需要注意的是,break语句不能用于循环语句和switch语句之外的任何其他语句。

2、continue语句

在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。求1~100之内的奇数之和就可以使用continue语句来实现,如例3-13所示。

例3-13

1 #include 2 void main() 3 { 4 5 6 7 8 9 10 11 12 13 14 }

int sum = 0; //定义变量sum,用于记住和 for (int i = 1; i <= 100; i++) { }

printf(\

if (i % 2 == 0) //如果i是一个偶数,执行if语句中的代码 { }

sum += i; //实现sum和i的累加

continue; //结束本次循环

运行结果如图3-27所示。

图3-27 运行结果

22

博学谷——让IT教学更简单,让IT学习更有效

例3-13使用for循环让变量i的值在1~100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1~100之间所有奇数的和,打印“sum = 2500”。 注意:break与continue的区别

? break终止当前循环,执行循环体外的第一条语句;而continue是终止本次循环,继续执行

下一次循环。

? break语句可以用于switch语句,而continue不可以。 3、goto语句

当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想要跳出外层循环则需要对外层循环添加标记,然后使用goto语句。通过一个案例来演示如何使用goto语句,如例3-14所示。

例3-14

1 #include 2 #include 3 int main() 4 { 5 6 7 8 9 10 11 12 13 14 15 16 17

int i, j; //定义两个循环变量 for (i = 1; i <= 9; i++) //外层循环 { }

for (j = 1; j <= i; j++) //内层循环 { }

printf(\换行

if (i > 4) //判断i的值是否大于4 { }

printf(\输出*

goto end; //跳至标识为end的语句

18 end: system(\让运行结果界面暂停,system()包含在stdlib.h头文件中 19 return 0; 20 }

运行结果如图3-28所示。

图3-28 运行结果

例3-14中,在system()语句前面增加了标记“end”。当i>4时,使用“goto end;”语句跳出外层循环。因此程序只打印了4行“*”。

需要注意的是,结构化程序设计方法主张限制使用goto语句,goto语句可以跳转到指定的任意语句,滥用该语句将使程序流程无规律、可读性差。

23

博学谷——让IT教学更简单,让IT学习更有效

3.6 进阶案例(一)——打印水仙花数

学完了C语言程序设计的流程,接下来通过一个打印水仙花数的案例来加深对C语言流程控制程序的理解。所谓的水仙花数是指一个n位数(n ≥ 3),它的每个位上的数字n次幂之和等于本身。例如,3位数153是水仙花,各位数字的立方和13+53+33=153。

例3-15

1 #include 2 void main() 3 {

4 int num; 5 6 7 8 9 10 11 12 13 14 15 }

int a, b, c;

for (num = 100; num < 1000; num++) { }

a = num % 10; //num的个位数字 b = num / 10 % 10; //num的十位数字 c = num / 100; //num的百位数字

if (num == (a*a*a + b*b*b + c*c*c))

printf(\

运行结果如图3-29所示。

图3-29 运行结果

例3-15中,水仙花数是一个三位数,所以要遍历100-1000之间的数,要求这个三位数的每个数字的立方和,则先要求出其每个位上的数字,第7、8、9行代码分别求出了其个、十、百位上的数字,第11行代码判断三个数字的立方和是否与原来的数相等,相等则打印,不相等则进行下一次循环。

3.7 进阶案例(二)——查找100以内的素数

打印完水仙花后,接下来紧追一步打印出1-100之间的所有素数。所谓素数,是只能被1和它本身整除的数。代码示例如例3-16所示。

例3-16

1 void main() 2 { 3 4

int num = 2; //num从2开始 int i, j = 1;

24

博学谷——让IT教学更简单,让IT学习更有效

5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 24

}

}

if (count % 5 == 0) //每5个换一行

printf(\

if (num == i) //如果跳出内层循环后,num == i成立,即2-num之间的数都不能整除num {

printf(\则num就是一个素数,就打印出来

while (num < 100) //遍历1-100之间的数 {

for (i = 2; i < num; i++) //用2-num之间的所有数去除num { }

if (num % i == 0) //如果模等于0,也就是能被整除 { }

break; //就跳出这层循环,执行num++

18 count++; //记录素数的个数

23 num++; //num++不要忘记

25 printf(\之间的素数一共有%d个\\n\ 26 27 }

system(\让运行结果界面暂停

运行结果如图3-30所示。

图3-30 运行结果

如图3-41所示,1-100之间一共有25个素数。素数只能被1和它本身整除,则在求素数时,要用num与2-num之间的所有数相除,如果没有能整除num的数,则num就是一个素数。

例3-15与例3-16中结合了循环、选择语句之间的嵌套。关于这几种结构语句的使用,读者要多加练习,熟练掌握。

3.8 本章小结

本章首先讲解了程序的运行流程图,然后讲解了C语言中最基本的三种流程控制语句,包括顺序结构语句、选择结构语句和循环语句。通过本章的学习,读者应该能够熟练的运用if判断语句、switch判断语句、while循环语句、do-while循环语句以及for循环语句。掌握本章的内容就能够编写逻辑比较复杂的C语言程序并且有助于后面章节的学习。

25


第3章 结构化程序设计12-07(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:村镇银行发展现状存在问题及对策

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: