当前课程知识点:C语言程序设计 > 第6章 循环结构程序设计 > 6.1 while语句 > while语句
同学们
大家好
本节我们来学习C语言中的循环语句
while语句
首先
我们来了解一下
为什么需要循环控制
在日常生活中或是在程序所处理的问题中
常常遇到需要重复处理的问题
例如
要向计算机输入 全班有50个学生的成绩
重复50次相同的输入操作
分别统计全班50个学生的平均成绩
重复50次相同的计算操作
求50个计算之和
重复50次相同的加法操作
检查50个学生成绩是否及格
重复50次相同的判别操作
要处理以上问题最原始的操作是
分别编写若干个相同或相似的语句
或程序段进行处理
例如
为了统计全班50个学生的平均成绩
可以先编写求一个学生的平均成绩的程序段
程序段如下
输入一个学生5门课的成绩
求该学生平均成绩
输出该学生平均成绩
然后再重复写49个同样的程序段
这种方法虽然可以实现要求
但是显然是不可取的
因为工作量大
程序冗长
重复
难以阅读和维护
相信每一位同学都会认为这是最笨的办法
实际上
几乎每一种计算机高级语言都提供了循环控制
用来处理需要进行的重复操作
大多数的应用程序都会包含循环结构
循环结构和顺序结构
选择结构是结构化程序设计的3种基本结构
它们是各种复杂程序的基本构成单元
因此熟练掌握选择结构和循环结构的
概念及使用是进行程序设计的最基本的要求
在C语言中
可以用循环语句来处理上面的问题
程序段如下所示
可以看到
用一个循环语句
while语句
就把需要重复执行50次程序段的问题解决了
流程图如图所示
下面我们来看看这个程序段的执行过程
开始时变量i的值为1
while语句首先检查变量i的值是否小于或等于50
如果是
则执行while语句的循环体
在本例中是花括号内的复合语句
在循环体中先输入第1个学生5门课的成绩
然后求出该学生的平均成绩
然后输出此平均成绩
请同学们想一想
最后一行i++
的作用
对
它使i的值加1
i的原值为1
现在变成2了
然后流程返回到while语句的开头
再检查i的值是否小于或等于50
由于i的值2小于50
因此又执行循环体
输入第2个学生5门课的成绩
然后求出第2个学生的平均成绩
并输出此平均成绩
i++又使变量i的值变为3
处理第3个学生的数据
以此类推
直到处理完第50个学生的数据后
i的值变为51
由于它大于50
因此不再执行循环体
while语句的一般形式如下
while(表达式)
语句
其中的语句
就是循环体
循环体只能是一个语句
可以是一个简单的语句
还可以是复合语句
用花括号包起来的若干语句
执行循环体的次数是由循环条件控制的
这个循环条件就是上面一般形式中的
表达式
它也称为循环条件表达式
在执行while语句时
先检查循环条件表达式的值
当为非0值
真时
就执行while语句中的循环体语句
当表达式为0
假时
不执行循环体语句
例如
i<=50
是一个循环条件表达式
它是一个关系表达式
它的值只能是
真或假
while语句可简单地记为
只要当循环条件表达式为真
即给定的条件成立
就执行循环体语句
流程图如下所示
注意
while循环的特点是
先判断条件表达式
后执行循环体语句
下面我们通过具体实例来学习
同样利用while语句
进行循环程序设计
例题
求1+2+3+
+100的和等于多少
解题思路
在处理这个问题时
先分析此题的特点
1
这是一个累加的问题
需要先后将100个数相加
要重复进行100次加法运算
因此可以用循环结构来实现
重复执行循环体100次
每次加一个数
2
分析每次所加的数有无规律
发现每次累加的数是有规律的
后一个数是前一个数加1
因此不需要每次用scanf语句从键盘临时输入数据
只须在加完上一个数i后
使i加1就可得到下一个数
程序传统流程图和N-S结构流程图如图所示
编写程序如图所示
运行结果如图所示
在本程序中
循环体如果包含一个以上的语句
应该用花括号括起来
作为复合语句出现
如果不加花括号
则while语句的范围只到while后面第1个分号处
例如
本例中while语句中如无花括号
则while语句范围只到
sum= sum+ i
请同学们想一想
这时程序运行结果会是什么
为什么
请上机进行验证
2
不要忽略给i和sum赋初值
这是未进行累加前的初始情况
否则它们的值是不可预测的
结果显然不正确
请同学们上机进行验证
3
在循环体中应有使循环趋向于结束的语句
例如
在本例中循环结束的条件是"i> 100"
因此在循环体中应该有
使i增值以最终导致i>100的语句
今用
i++
语句来达到此目的
如果无此语句
则i的值始终不改变
循环永远不结束
请同学们上机进行验证
本节的内容就讲到这里
同学们再见
-计算思维与计算机
--计算思维与计算机
--计算思维与计算机
--计算思维和计算机
-2.1 程序设计语言的发展及其特点和应用
--程序设计语言的特点及发展
- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤
--C语言程序的结构和编制步骤
-3.1 C语言的数据类型
--C语言的数据类型
--C语言的数据类型
-3.2 常量
--常量
--常量
-3.3 什么是变量
--什么是变量
--什么是变量
-3.4 如何进行算术运算
--如何进行算术运算
--如何进行算术运算
-3.5 赋值运算符和逗号运算符
--赋值运算符和逗号运算符
-3.6 数据类型转换
--数据类型转换
--数据类型转换
-4.1 格式化输出printf
--格式化输出
-4.2 格式化输入scanf及字符数据的非格式化输入输出
--格式化输入
-5.1 关系运算符和关系表达式
--关系运算符和关系表达式
-5.2 逻辑运算符和逻辑表达式
--逻辑运算符和逻辑表达式
-5.3 条件运算符和条件表达式
--条件运算符和条件表达式
-5.4 if语句
--if语句
--if语句
-5.5 switch语句
--switch语句
--switch语句
-6.1 while语句
--while语句
--while语句
--do-while语句
-6.2 for语句
--for语句
--for语句
-6.3 循环的嵌套
--循环的嵌套
--循环的嵌套
-6.4 break语句和continue语句
--break和continue语句
-7.1 一维数组的定义和引用
--一维数组的定义和引用
-7.2 一维数组的赋值
--一维数组的赋值
--一维数组的赋值
-7.3 二维数组的定义和引用
--二维数组的定义和引用
-7.4 二维数组的赋值
--二维数组的赋值
--二维数组的赋值
-7.5 字符串的本质
--字符串的本质
--字符串的本质
-7.6 字符串操作的常用函数
--字符串常用函数
-7.7 字符串数组
--字符串数组
--字符串数组
-8.1 函数概述
--函数概述
--函数概述
-8.2 有参函数
--有参函数
--有参函数
-8.3 函数参数的传递方式
--函数参数的传递方式
-8.4 变量的作用域和生存期
--变量的作用域和生存期
-8.5 变量的存储类型
--变量的存储类型
--变量的存储类型
-8.6 函数的嵌套和递归调用
--函数的嵌套和递归调用
-8.7 函数的作用域与封装
--函数的作用域与封装
-9.1 指针变量的概念(上)
--指针变量的概念(上)
-9.2 指针变量的概念(下)
--指针变量的概念(下)
-9.3 指向一维数组的指针变量
--指向一维数组的指针变量
-9.4 指向二维数组的指针变量(上)
--指向二维数组的指针变量(上)
-9.5 指向二维数组的指针变量(下)
--指向二维数组的指针变量(下)
-9.6 动态内存分配
--动态内存分配
--动态内存分配
-10.1 编译预处理
--编译预处理
-11.1 用户自己建立数据类型
--用户自己建立数据类型
-11.2 定义结构体类型变量
--定义结构体类型变量
-11.3 结构体变量的引用与初始化
-11.4 结构体数组
--结构体数组
--结构体数组
-11.5 指向结构体类型数据的指针
--指向结构体类型数据的指针
-12.1 文件的基本概念和文件指针
--文件的基本概念和文件指针
-12,2 文件的打开和关闭
--文件的打开和关闭
--文件的打开和关闭
-12.3 文本文件读写
--文本文件读写
--文本文件读写
-12.4 二进制文件读写
--二进制文件读写
--二进制文件读写