在日常生活中或是在程序处理的问题中常常遇到需要重复处理的问题。如
- 要想计算机输入全班50个学生的成绩
- 分别统计全班50个学生的平均成绩
- 求30个整数之和
- 教师检查30个学生的成绩是否及格
大多数的应用程序都会包含循环结构。循环结构和顺序结构、选择结构是结构化程序设计的三种基本结构,它们是各种复杂程序的基本构造单元。
一、while循环语句
(一)为什么要用循环
1.用选择结构求整数数位
人vs计算机
相比人类文字能力强,计算机对数字的计算能力强,可重复执行相同操作。比如369是3位,人眼睛一看就知道了。而计算机本质是没有生命的物体,没有人类给予指令它什么也做不了,无法像人一眼看出是几位数。那怎么让计算机来判断数位呢?
人的方式:眼睛一看就知道了。
计算机的方式:判断数的范围来决定它位数。
369属于区间[100,999],所以369是3位。
例1:运用上一章选择结构,判断4位数及以下正整数的数位。
问题分析:判断4位数以下正整数的数位,运用选择结构进行判断。判断输入的一个4位数及以下的正整数是1位、2位、3位还是4位?
模式识别:1位数属于区间[0,9],2位数属于区间[10,99],3位数属于区间[100,999],4位数属于区间[1000,9999]。用if语句嵌套结构进行判断。
模型归纳:定义整型变量x,n分别用于存储待判断的整数和整数的位数。通过if选择嵌套,判断x为几位数。
程序实现:
#include<stdio.h>
Int main(){
Int x;
Int n=1;
Scanf('%d',&c);
If(x>999){
n=4;
}else if(x>99){
n=3;}else if(x>9){
n=2;
}else if(x>0){
n=1;
}
Printf('%d\n',n);
Return 0;
}
如此可以判断5位数、6位数、7位数、8位数…分别要用到4、5、6、7个else if.细细分析,数值越大,if选择结构越臃肿。那有没有其他的方案呢?
(二)运用循环求整数数位
当整数非常大如12394958394382938503285时,通过数数来确定位数。
人的方式:从左往右数,一次划掉一个数字。
计算机的方式:从右边开始划,去掉最右边的数,不断地划,直到没数可以划,每划一次计数加1。这是一个重复执行的过程,运用到循环结构。
注意计算机自己不会划划数,但是可以按照人的指令来操作。运用数学知识知,将整数整除10便可减少一位,并且是减少右边的一位。
试试代码:
Int x;
Int n=0;//计数器,表示整数的位数
Scanf('%d',&x);
n
x/1=10;
If(x>0){
n ;
x/10;
If(x>0){
n ;
x/10;
If(x>0){
n ;
x/10;
If(x>0){
n ;
x/10;
if
…)}
}
Printf('%d\n',n);
用前面学习的语法和算法知识试试这代码,相同代码重复出现,每划掉一位数,就执行相同的整除代码。针对这种特点,用循环结构写成代码为:
int x;
Int n=0;//计数器,表示整数的位数
Scanf('%d',&x);
n
x/1=10;
while(x>0){
n ;
x/10;
}
Printf('%d\n',n);
分析代码结构:
1.用户输入x;
2.初始化n为0;
3.x=x/10,去掉个位;
4.n ;
5.如果x>0,回到3;
6.否则n就是结果。
用while语句可实现这个循环结构。
(三)while语句
while语句一般形式如下:
while(表达式)语句
其中“语句”就是循环体。循环体可以是一个语句,还可以是复合语句。
“表达式”也称为循环条件表达式。当表达式值为“真”时,就执行循环体育局;为“假”时就不执行循环体语句。
while语句可简单的几位:只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。
通过下面的例子,来看怎样利用while语句进行循环设计
例求1 2 3 … 100
问题分析:累加求和并输出。
模式识别:从左往右求和,每一次求和为下一次的一个加数,另一个加数规律变化,这里是每次加1。
模式归纳:定义整型变量sum、i分别表示和和一个加数,初始化为sum=0,i=1
Sum=sum I
i=i 1
运用循环控制结构,i<=100,输出sum即为累加和。
程序实现:
#include <stdio.h>
int main()
{
int i=1,sum=0;
while (i<=100)
{ sum=sum i;
i ;
}
printf('sum=%d\n',sum);
return 0;
}
其中i 不能丢,否则循环永不结束。
运行结果:
注意:while语句中要有是循环结束的语句。
二、do…while语句
do---while语句的特点:先无条件地执行循环体,然后判断循环条件是否成立
do---while语句的一般形式为:
do
语句
while (表达式);
注意do…while();后面的分号要加上,否则语法错误。
其流程图为:
用do…while语句改写上例代码为:
#include <stdio.h>
int main()
{ int i=1,sum=0;
do
{
sum=sum i;
i ;
}while(i<=100);
printf('sum=%d\n',sum);
return 0;
}
while与do...while的区别
Do…while语句不论表达式是否成立均要先执行一次。相比while语句只有当表达式为真才执行,否则一次也不执行。