![C语言程序设计实例教程(第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/105/41865105/b_41865105.jpg)
3.3 循环结构程序设计
学习目标
1)掌握循环结构的内涵。
2)掌握while循环语句的结构和应用。
3)掌握循环结构程序中break和continue语句的用法。
4)掌握for循环语句结构的内涵。
5)掌握for循环语句的结构和执行过程。
6)掌握do-while循环语句结构的内涵。
7)掌握do-while循环语句的结构和执行过程。
8)掌握循环结构程序中break和continue语句的用法。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/55_02.jpg?sign=1739301207-wb38QWfLugJnIhZCMbssrCZ3rJjnA88E-0-2b27496508d84624f7eaa0a08e09e687)
实例15
实例15 while循环语句——求1+2+…+100的值
实例任务
用while语句求1+2+3+…+100的值。程序运行结果如图3-14所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/55_03.jpg?sign=1739301207-F61vERFaIlYBZEsH8k6JtWs0hvoYQIqP-0-f22f01f9f1cb435f5d73af74d4d19b5f)
图3-14 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/55_04.jpg?sign=1739301207-A3ehqkHvjbTml52ocftaAMNo0TTDA41X-0-3dfb9852dcf1215058f44f7ec4107682)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_01.jpg?sign=1739301207-FCJiqM0xvWatZf1EuLNreQursN56aWxp-0-d382f9f53461e03240cb8e3b1e09758e)
相关知识
1.循环结构程序设计
循环结构是结构程序的3种基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。循环结构的特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言的循环体语句有while语句、do-while语句、for语句。
2.while语句
while语句用于实现“当”型循环结构。其一般形式如下:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_02.jpg?sign=1739301207-ck2gRnaUVD3OK3Mz58o0xJlxwh1Sttw4-0-b34a2f321c24fac31cfc7794c5d0f8f5)
其执行过程是当表达式为非0值时,执行循环体。循环体内语句可以是空语句,可以是一条语句,可以是多条语句。如果为空语句或一条语句,可略去{}。
循环执行过程中,如果参与表达式判断的变量值不能改变,则循环不会结束,称为死循环。
课堂精练
1)统计从键盘输入的一系列字符的个数。程序运行结果如图3-15所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_03.jpg?sign=1739301207-R8gAZ4Wo16v87o0wjLVyJDQVe6BQtGVV-0-6ce69163c2f19d21e6220db0b8fd2e04)
图3-15 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_04.jpg?sign=1739301207-TurafoIvTKRf55sBxpE1hkIQBihTCF6k-0-0d626ed83004a592fe38715daa806597)
2)求n!的值。程序运行结果如图3-16所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_01.jpg?sign=1739301207-rQdYJ2K0DW3G7IuSwye6Uh3BlmbvBCxe-0-44e92b75f47d78a31d9b1f0667536312)
图3-16 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_02.jpg?sign=1739301207-La4UN9KkznABWKXCGHHFkg9m3PjehyE1-0-3b49b880e7adb9817aec3802e6e6ee6c)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_03.jpg?sign=1739301207-15dmOLuEc0ZjI8KI6ISqeiVX1JhW03MM-0-228117e76adf787b813be3cfae28eef8)
实例16
实例16 for循环语句——统计大写字母和小写字母的个数
实例任务
编写一个程序,用于接收用户输入的10个字符,统计其中大写字母和小写字母的个数,并比较大写字母与小写字母的个数,显示相应的消息。程序运行结果如图3-17所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_04.jpg?sign=1739301207-vn3Eb7bG9ZLDWjFnP1POyV4u1wCoh3yk-0-5cedf264e8c3b7b3db71fe0270a1363c)
图3-17 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_05.jpg?sign=1739301207-9JZ5KALyvjtLpFZwMihstlX8oZ7fK8mh-0-083bd67ca6d13c8e8d32da2051481a31)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/58_01.jpg?sign=1739301207-VOrjpBsiCNnkvVGWLzuXztwP0OVRhQHr-0-248838cedd5a2caddda9746d5b9f79be)
相关知识
1.for语句
for语句是C语言中最灵活、功能最强的循环语句。它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。for语句完全可以代替while语句。for语句的一般形式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/58_02.jpg?sign=1739301207-0P6m4MEwCvwBFyHi4QsK5u76w8NruqlK-0-82cb8c3dda04463af7e034976f00463c)
for语句的执行过程是:运行之初先求解表达式1,然后进行表达式2的条件判断,如果条件成立,则执行循环体,如果条件不成立,则退出循环。在执行循环体后,再计算表达式3,之后转去执行表达式2的条件判断,如果成立,继续执行循环体,否则退出循环。首次执行循环体后,按计算表达式3、判断表达式2的顺序循环执行,直到条件不成立为止,结束循环。
2.表达式说明
表达式1通常用来给循环变量赋初值,一般是赋值表达式。也可以在for语句外给循环变量赋初值,此时可以省略该表达式。表达式1在整个循环过程中只执行一次。
表达式2通常是循环条件,一般为关系表达式或逻辑表达式。
表达式3通常可以用来修改循环变量的值,一般是赋值语句。如果想省略表达式3,可以把相应语句放到循环体中完成。
这3个表达式都可以是逗号表达式,即每个表达式都可以由多个表达式组成。3个表达式都是任选项,都可以省略。但要注意,在省略表达式的同时,两个分号必须保留,因为语句要求用两个分号将3个表达式分开。如以下语句:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/58_03.jpg?sign=1739301207-p1pqM53auWVRQaofefuYlZnlcdRuEH7F-0-f73701a2cee7e50d0b1d6a168fd5187e)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/59_01.jpg?sign=1739301207-xEQCF3NwZpLfTUyYwyVRUQ3k7ZwquwbW-0-a41d440fc3fe0d193d232bf276fd99c6)
3.for语句中的逗号表达式
逗号运算符的主要应用就在for语句中。表达式1和表达式3常为逗号表达式,求解它们时可完成多个表达式(往往为赋值表达式、自增自减表达式)的一次求值。如下列表示方式:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/59_02.jpg?sign=1739301207-EvUFu5ObeMRyhFexKKsV33fNeG9cG7Tx-0-b157919e0b54281aa7c1207115738d43)
从上面几种表达方式可以看出,C语言中的for语句功能强大。可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样程序可以短小简洁。但过分地利用这一特点会使for语句显得杂乱,可读性降低,建议不要把与循环控制无关的内容放到for语句中。
课堂精练
1)把100~200之间的整数中不能被3整除的数输出,要求每行输出5个,最后1行除外。程序运行结果如图3-18所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/59_03.jpg?sign=1739301207-dGtFMdrswmT2RmEwtvwDVg8SkfAbsloK-0-db83fe22fd15cc58f531a73333e10881)
图3-18 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/59_04.jpg?sign=1739301207-Z2MsuAewCFrJ2bodVxgJZwPVqXCnd3UC-0-6a145466f100ce49db1881aaf9453494)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_01.jpg?sign=1739301207-phfeKF1CCwg2ejoKiFzPVDgnoOR9pe3p-0-c0685b9b83d5714b5ac4ae3c5cc4463f)
2)判断一个整数是否为素数(素数是指只能被1和它本身整除的数)。判断方法是看m能否被之间的整数整除,即如果m不能被
中的任何一个整数整除,则m是素数;只要m能被
中的某一个整数整除,则m为非素数。程序运行结果如图3-19所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_05.jpg?sign=1739301207-WgmSFSIho4DpF8WtEn838ZbX9hLTIH44-0-9f2a1c1b149ec6fe61eeecae293e4443)
图3-19 程序运行结果(2)
根据程序的运行结果,请将下面程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_06.jpg?sign=1739301207-RW6WpIN4qbsAwUiamSWLQA6N4HXlyKkP-0-ba685f150e07efe37792e8d6699d5c7b)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_07.jpg?sign=1739301207-e9d1VUKGN530r3aXTiX8AHlUqGAPNL2s-0-3bfb884ab2a133182e9f956214691eb2)
实例17
实例17 do-while循环语句——求1+2+…+100和12+22+…+302的值
实例任务
用do-while语句求s1=1+2+3+…+100和s2=12+22+32+…+302的值。程序运行结果如图3-20所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_08.jpg?sign=1739301207-Tzxwnm1c1O4cutTIHW9nkyi3NtagE63O-0-7e841822b1990b52c994879cda323235)
图3-20 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_09.jpg?sign=1739301207-7YQf3Foo366OXjAZlhJDKSpjAWrQ44Kq-0-f14b256028d045eec277e4659678d0fb)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/61_01.jpg?sign=1739301207-D3U7QL5t6V0G5imumXfZHJDK254umSx5-0-e117e194f7747068ee2038f8f89ad78c)
相关知识
1.do-while语句
do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/61_02.jpg?sign=1739301207-exL5HbOiIRuMmhaGvPXEK4KA9moNq8hi-0-7254034327f1e9229e7bdf8a58c3e76e)
其执行过程是先执行一次指定的循环体语句,然后进行条件判断,也就是先计算表达式的值,当表达式的值为非零(“真”)时,返回重新执行循环体语句。如此反复,直到表达式的值等于0为止,此时循环结束。
2.while语句和do-while语句的区别
while语句执行时,先进行条件判断,条件成立的情况下才执行循环体。do-while语句是先执行一次循环体,再进行条件判断,直到表达式不成立时终止循环。
3.break语句和continue语句
在switch语句中,可用break语句终止switch语句的执行以跳出该switch语句。同样,在3种循环语句中可用break语句终止该循环语句的执行而跳出,它的一般形式是:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/61_03.jpg?sign=1739301207-k3CduS7JViQYLadkw1eNKQC3OdkxouEd-0-d740d401cbbf842dac82045e833ba6b4)
continue语句用于结束本次循环,即跳过循环体中在continue语句后面的尚未执行的其他语句,而执行下一次循环,它的一般形式是:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/61_04.jpg?sign=1739301207-TZHtVGB7YcyfEu0j639igSCtRkgePcup-0-54ac198495d4900c69854e61d42b62a4)
课堂精练
1)求s=1+2+3+…+100的值。程序运行结果如图3-21所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_01.jpg?sign=1739301207-IkRjEG4ECQpanUHEgOZ7rRgUR3DIPfoD-0-e9ddd50464063d4283413c5ad01b414d)
图3-21 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_02.jpg?sign=1739301207-WMJKOdu5ZmQbXhM21bSRue7ECN1GolrK-0-5bb6b45571f8840df9ea6490ebe84117)
2)求s=1+1/2+1/4+…+1/50的值。程序运行结果如图3-22所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_03.jpg?sign=1739301207-grIh30a0QoqpB03TAviA7ufyTAnJS312-0-fbb08e6627df1460bb76257845b365e1)
图3-22 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_04.jpg?sign=1739301207-3skyIcbCYDTXOsLfNs6zvItWWo7rNgKu-0-1214f38df127e36e393c6685599135e2)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_05.jpg?sign=1739301207-Vc8qQevBB7oWFANkXFxVOMgwIDpiAoJc-0-893d269c5a268654643bdb7b6950fed3)
实例18
实例18 循环的嵌套结构——百钱买百鸡问题
实例任务
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?编写程序解决此问题,程序运行结果如图3-23所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_06.jpg?sign=1739301207-XHTKipvwPc57y9FUVXhGbd6g7U2N96ey-0-2b2eae61a1f35de1389b12a1021ae09b)
图3-23 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/63_01.jpg?sign=1739301207-lsdgcFSEEVEqc770qGJecL71g3KI6KI3-0-222690f5198bea04ecb76b8815648178)
相关知识
1.循环嵌套
在一个循环体内又完整地包含了另一个循环,称为循环嵌套。前面介绍的3种类型的循环都可以互相嵌套,循环的嵌套可以是多层的,但每一层循环在逻辑上必须是完整的。在编写程序时,循环嵌套的书写要采用缩进的形式,如本实例程序中所示,内循环中的语句应该比外循环中的语句有规律地向右缩进2~4列,这样编写的程序层次分明,易于阅读。
2.百钱买百鸡问题解析
百钱买百鸡是一道用C语言程序解决数学方程运算问题的典型试题,用到了程序中的典型方法——穷举法。假设x、y、z分别为鸡翁、鸡母、鸡雏的只数,依题意可得出联立方程组如下:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/63_02.jpg?sign=1739301207-wahAeATj538r9qZ7quPeaTpKHN4mQfk6-0-dbc662b6b03657003a850d819654651e)
3个未知数,只有两个方程式,所以x、y、z可能有多组解,因此,可用“穷举法”列举x、y、z可能满足要求的组合,最后把符合上述两个方程的x、y、z的值输出。
课堂精练
1)输出一个空心菱形图案,程序运行结果如图3-24所示。
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/63_03.jpg?sign=1739301207-ReWoq2zaWuqzSx3Hdb2Ii5MtQgytIECB-0-f310e3d1f2bf46d606d6ac155e5e79b8)
图3-24 程序运行结果(1)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/63_04.jpg?sign=1739301207-BorqxbzCQ8Uvkjz4IKRzCtd6rMhs8aUL-0-dfcae737522569794b265ee3f78007ed)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/64_01.jpg?sign=1739301207-AJInjSsziEs0LdU5TDN2HOqsZDqkJa66-0-b2f2a40b3ee039e9196cca85c84e3cd6)
2)输出九九乘法表,程序运行结果如图3-25所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/64_02.jpg?sign=1739301207-uAGn3H0BAEczqqSA9w2H7HWtObeZom73-0-044f1d60926ca58d1112029be5337ae1)
图3-25 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/64_03.jpg?sign=1739301207-tlTmDzbr1V0cjMU4oTroDnQxEMT6C67h-0-6cbafd3b92ede0dd6c0617d541913d5b)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/65_01.jpg?sign=1739301207-teORrOV6WPtHfUNzArvOVCnfrc5Ratru-0-76cb4ae594fb2833713de54dd56ac542)