![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=1738888853-9UMAoiC1SfvlZEdrs2MsOJGTnAqdkzSp-0-a02fe3d5a689830c431b15e6fb3ebc79)
实例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=1738888853-Z7rk37FiFvuI6IEWnuT6sS90ftkUDdZW-0-7a9621337f2dae1c8895366f226298ae)
图3-14 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/55_04.jpg?sign=1738888853-jg3Ug26ZfCsmJNcNH8gZXV9ffOovp8U5-0-6e0c3abe8403903690f10a68abf513f2)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_01.jpg?sign=1738888853-R4AOFDPGlD9VwRFDxx2oeOEwl2NA5P5f-0-5e6dd4347769e3a89a264f9f7d1b7ebe)
相关知识
1.循环结构程序设计
循环结构是结构程序的3种基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。循环结构的特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言的循环体语句有while语句、do-while语句、for语句。
2.while语句
while语句用于实现“当”型循环结构。其一般形式如下:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_02.jpg?sign=1738888853-5D7YeM4ma0SIExS4UF8NjCx3RC4J0IeP-0-5098fb0e3811edca3cd71163cacf534d)
其执行过程是当表达式为非0值时,执行循环体。循环体内语句可以是空语句,可以是一条语句,可以是多条语句。如果为空语句或一条语句,可略去{}。
循环执行过程中,如果参与表达式判断的变量值不能改变,则循环不会结束,称为死循环。
课堂精练
1)统计从键盘输入的一系列字符的个数。程序运行结果如图3-15所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_03.jpg?sign=1738888853-RvrjClzUPPnAGyuaRgP5NzkFxGEZR34c-0-6e58f011e37dcc3f0059311af379bded)
图3-15 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/56_04.jpg?sign=1738888853-T07dPgjUz3jhuCORTCvo4MMjh36TSPad-0-92123572f20731a2f0743753c08bf53a)
2)求n!的值。程序运行结果如图3-16所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_01.jpg?sign=1738888853-Yp06wfF2wx943PB4g7aCp2qOzBZuCa7h-0-b77f9bea2203f182d4deba5055c3bc9e)
图3-16 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_02.jpg?sign=1738888853-WKX5LUdMClPt1qEApjunnZ42q1onEn0M-0-03c7267927c0c9f041d3eb72b5188076)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_03.jpg?sign=1738888853-F1RPQHKdIzB4VYkDemdSiNrt8qtidd9B-0-566b9f307e7477af05185281f66358cc)
实例16
实例16 for循环语句——统计大写字母和小写字母的个数
实例任务
编写一个程序,用于接收用户输入的10个字符,统计其中大写字母和小写字母的个数,并比较大写字母与小写字母的个数,显示相应的消息。程序运行结果如图3-17所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_04.jpg?sign=1738888853-68iFUn3xtojXESapEzgw0lxCkNrnlnei-0-c4091a008df1b27d31d60e6695763a7a)
图3-17 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/57_05.jpg?sign=1738888853-8dfR6AuuHCkItccIPduipQFycHpmfpnb-0-748bfadc1fc6317d0f2b7d633a4b277c)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/58_01.jpg?sign=1738888853-HIjYR7cnCyTQIYdIq2i2MwyqxmEDCvTP-0-5d3d9e539d4624f7eaceac7cf30cbb6d)
相关知识
1.for语句
for语句是C语言中最灵活、功能最强的循环语句。它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。for语句完全可以代替while语句。for语句的一般形式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/58_02.jpg?sign=1738888853-QvY7pue1uZZaDRxfJ57uk55rEMCJIbFm-0-5137ef7cf3b491b9dbd4771a8f373f48)
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=1738888853-dUhabSklfkTi2hmCUSc0RS8vYvBBTSUO-0-9314f5af43d7eed7dbbbaeb26c65dc05)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/59_01.jpg?sign=1738888853-UQiUtrv34JnVC68FLkumdpMXx7LdnnEP-0-4eb1f1039c61beeeed25f7c263f1a6b8)
3.for语句中的逗号表达式
逗号运算符的主要应用就在for语句中。表达式1和表达式3常为逗号表达式,求解它们时可完成多个表达式(往往为赋值表达式、自增自减表达式)的一次求值。如下列表示方式:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/59_02.jpg?sign=1738888853-TjCyxsc2o9lGEYWQaMFokcXyNrX3lj4j-0-e747944b475adbaa1eaf9a56195170db)
从上面几种表达方式可以看出,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=1738888853-lUk9oWV9q20jmJRvvsEN4icmmR5GLemm-0-63e2ece37b2503e00348474c5772e5cf)
图3-18 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/59_04.jpg?sign=1738888853-ivp5hL4v5bWyszChR2AEKFAldYoTtOpT-0-713dbffc0a610d0c87ebd5f4fd6538a1)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_01.jpg?sign=1738888853-jSojNUUNEbCj7ybvDmCM7v0T36Zi4qDw-0-860f2cf6ac767ba7de5fe62158f4f33b)
2)判断一个整数是否为素数(素数是指只能被1和它本身整除的数)。判断方法是看m能否被之间的整数整除,即如果m不能被
中的任何一个整数整除,则m是素数;只要m能被
中的某一个整数整除,则m为非素数。程序运行结果如图3-19所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_05.jpg?sign=1738888853-iDlImhEZnApjNecbsW5WGG8kwKQ2gvwD-0-ef43782731967b78bd54cc456536c306)
图3-19 程序运行结果(2)
根据程序的运行结果,请将下面程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_06.jpg?sign=1738888853-g16gg1ts5vCt2CkBAvPyNTGngE4eU2XU-0-cbb38e064f63906da14d069511488adb)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_07.jpg?sign=1738888853-WC5ePRnv06ik2RtOFosMwAcVStPeJLi5-0-4ef83fdb1c314d8d06c34f88be75565f)
实例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=1738888853-1SQFdeHR7AM65RpGW4AE1S31VZOLXSwl-0-a4471956b40f49cb432ec4abea6d33f0)
图3-20 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/60_09.jpg?sign=1738888853-eJSZaqaLMx68j8a4kNdWdeR4ijDpNFzI-0-e682663874675da7354ddcf9bf32eb76)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/61_01.jpg?sign=1738888853-yoquWwAHNniyQXGfWNSxJEnRFDtEjsSd-0-16639b808f98b93b9d898d262452c980)
相关知识
1.do-while语句
do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/61_02.jpg?sign=1738888853-GlhsGHwKL4Z6WobyTwbTnXfGaoRw26xR-0-bd08718746864945fceab62a227dbeee)
其执行过程是先执行一次指定的循环体语句,然后进行条件判断,也就是先计算表达式的值,当表达式的值为非零(“真”)时,返回重新执行循环体语句。如此反复,直到表达式的值等于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=1738888853-tgPjrE3fp1rpcSW5fHL2XgXsmorXNd7y-0-d3066bdc85c37b58d6a03c006980533b)
continue语句用于结束本次循环,即跳过循环体中在continue语句后面的尚未执行的其他语句,而执行下一次循环,它的一般形式是:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/61_04.jpg?sign=1738888853-G6mUHN2LjvCiM0lZnafTQ52sQRpAFtlo-0-d3e3de7d10e8fb934365ccc3edd9fbcc)
课堂精练
1)求s=1+2+3+…+100的值。程序运行结果如图3-21所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_01.jpg?sign=1738888853-hOkbPsbzwWKGKCiA3bMkLGe4A1xvhDMx-0-018a0088691de4866cc489f82479dda2)
图3-21 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_02.jpg?sign=1738888853-oLv8hkMJoFcNb2lShziC47NRMFX1DCLr-0-97c0eb0a27ee053bee227a82d8c6b476)
2)求s=1+1/2+1/4+…+1/50的值。程序运行结果如图3-22所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_03.jpg?sign=1738888853-jGYwj0IB3WpVovddZtbKg6ZUUhnFoizQ-0-57fe7e5434e75708e3a297df32d4bb0d)
图3-22 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_04.jpg?sign=1738888853-W9mzY7tRuhBPZoFRIZChlK8lCacanwWJ-0-85a4928ae5efa58dddfa1c6a581fe90d)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_05.jpg?sign=1738888853-sCU9mAuEitgjhZGGywGLuwb3WFe4eDsB-0-13eddc055b6f449656798a5cbe12c514)
实例18
实例18 循环的嵌套结构——百钱买百鸡问题
实例任务
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?编写程序解决此问题,程序运行结果如图3-23所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/62_06.jpg?sign=1738888853-hBCASdQudAoexZTmaZ6ULGx3VfEpET7r-0-4de5f2b54c796f400d0c4a33fdab5b9e)
图3-23 程序运行结果
程序代码
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/63_01.jpg?sign=1738888853-TQG8gHb9pvhADxyZtjoF4aJQfg78NbFT-0-17b1528e2b25a2f67c8dd2c3de2d1614)
相关知识
1.循环嵌套
在一个循环体内又完整地包含了另一个循环,称为循环嵌套。前面介绍的3种类型的循环都可以互相嵌套,循环的嵌套可以是多层的,但每一层循环在逻辑上必须是完整的。在编写程序时,循环嵌套的书写要采用缩进的形式,如本实例程序中所示,内循环中的语句应该比外循环中的语句有规律地向右缩进2~4列,这样编写的程序层次分明,易于阅读。
2.百钱买百鸡问题解析
百钱买百鸡是一道用C语言程序解决数学方程运算问题的典型试题,用到了程序中的典型方法——穷举法。假设x、y、z分别为鸡翁、鸡母、鸡雏的只数,依题意可得出联立方程组如下:
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/63_02.jpg?sign=1738888853-OJAkkUhpPe0NZMdgaJJ0gS9q0J0bcAJx-0-950acbbe3fc9604a49a68669621d2258)
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=1738888853-acu1Qcu3NGTTggkdy1rDt6CpWCQiDYLa-0-ddede6536f4884ffc83a98f565c9fd4c)
图3-24 程序运行结果(1)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/63_04.jpg?sign=1738888853-3v2iao6De76Yfn0LQXblLbq3oUJf99oc-0-794413f0fa323a02aba246d3a12b9363)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/64_01.jpg?sign=1738888853-y6fTX8EcDLQ8zRrdTIgboxJZPNNVWj9i-0-b97820568808b84adf7a14d779589609)
2)输出九九乘法表,程序运行结果如图3-25所示。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/64_02.jpg?sign=1738888853-MYJRfYYL6FFRFJqkIWZxNKb1Dygn9x9I-0-872288f1bd9d20adf54b8ed3f5064833)
图3-25 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/64_03.jpg?sign=1738888853-hwPbe2ZNrxT7MVftHesLSQVpNNsvB2tV-0-7bc7a9baa869bfa4751d7a8fd0ee4ad5)
![](https://epubservercos.yuewen.com/337DC8/21889224301191506/epubprivate/OEBPS/Images/65_01.jpg?sign=1738888853-99dWK3Z5W1haxn9Rn0mOz5yZSd7W5BUD-0-fa944bd5befe19c911b53972f39e5c0c)