当前课程知识点:高级语言程序设计 >  循环结构程序设计 >  4.2 用while语句实现循环 >  用while语句实现循环

返回《高级语言程序设计》慕课在线视频课程列表

用while语句实现循环在线视频

用while语句实现循环

下一节: 用do-while语句实现循环

返回《高级语言程序设计》慕课在线视频列表

用while语句实现循环课程教案、知识点、字幕

同学们好

今天我们一起来学习

用while语句实现循环结构

在这一节里面

我们先要介绍while语句的语法形式

然后再用while语句计算高斯求和

计算n的阶乘这两个问题

好我们先看while语句的一般形式

它的一般形式是这样的

就是while

然后后面跟着括号

括号里面是一个表达式

下面就是语句

那么在这个括号里面的表达式

圆括号的表达式

它是一个循环条件

它可以是一个任意的表达

它的值可以为真或者为假

那么下面这个语句

它是循环体

那么这个while语句

它执行的一个过程是这样的

我们进循环体的时候

首先要判断这个表达式

如果表达式为真

则执行循环语句

然后继续判断表达式

如果表达式为真

继续执行语句

这样不停的循环下去

那么直到某一次这个表达式为假

它的值为0了

它就跳出循环

好下面呢

我们用while语句

来解决高斯求和的问题

我们先看流程图

再写代码

最后和大家一起来分析

每次循环执行的这样一个状态

好 那么1+2+3加到100

要重复100次加运算

我们可以看到流程图

给每次加的这个加数

设为变量i

每次求的和

设为变量sum

那么变量i的初值为1

变量sum的初值为0

接着进循环体

这个时候我们要注意了

循环条件一定要满足

也就是i必须要小于等于100

那条件满足了

就要执行循环体的语句

把i的值赋给sum

加完之后i自身加1

这样循环的执行下去

每次大家注意

每次都要判断循环条件

条件为真

就执行循环体

那么直到这个i大于100

i不断的++

i大于100

循环条件为假

也就是i的值为101

它才跳出这个循环体

对于这样一个问题

我们的C程序是这样写的

我们编写了一个主函数

主函数里面定义了i sum变量

接着写while语句

那么循环条件i小于等于100

这个式子要放在while后面圆括号里面

作为条件表达式

那么执行的语句呢

我们要放在while下面的这个大括号里面

作为复合语句

当这个循环跳出

最后要输出的和

也就是sum变量的值

由程序我们可以了解

这个循环执行的这样一个情况

循环执行的过程中

每一次循环的这样一个状态

我们这里用一个表格画出来

帮助大家来分析

表格里我们看到有3列

分别是

执行第i次循环之前i的值

第二列是执行第i次循环之前sum的值

第三列是执行第i次循环之后sum的值

它们可以记录

每次在进循环之前的状态

和循环执行之后的这个状态

那我们一起来看一下

当i的初值为1的时候

sum的初值为0的时候

开始进循环

这个时候第一次循环

要判断i小于等于100条件为真

第1次循环结束之后

sum的值为1

接着i的值自身要加1

i的值变为2

所以表格的第2行分别是1 0 1

好 继续

再判断i小于等于100这个条件为真

再次进循环体

第2次循环结束之后

sum的值变为了3

接着i的值自身再加1

i的值也变为了3

所以表格的第3行分别是2 1 3

好 继续

i小于等于100

条件又为真

再进循环体

第3次循环结束之后

sum的值为6

接着i的值自身加1

i的值为4

所以表格的第3行分别是3 3 6

这样不停地循环下去

直到什么时候

直到当i的值为100的时候

还是可以进循环体的

那么这个时候还是可以加的

只是它做了最后一次加运算

那么这个时候的sum呢

在最后一次加之前

sum的值是4950

那么加了100之后

sum的值就变成了5050

那么i的值马上自身又要加1

i的值变成了101

还能不能做呢

很显然最后一次

还能不能做加运算

i的值变成了101

这个时候循环的条件应该为假

所以表格的最后一行显示的状态

是循环结束了

这就是我们用while循环语句

来实现高斯求和运算的这个问题

好下面我们再来举一个例子

这个例子它要求n的阶乘

当然这个n

需要从键盘输入

其实这个问题

我们也知道

它就是反复的做乘运算

我们也可以设计循环控制语句

那么这个时候

我们来设两个变量

和刚才那个问题类似的

这两个变量呢

一个是乘数

它为变量i

还要设一个变量

就是乘积S

然后对i和S两个变量设初值

i初值为1

s初值也为1

因为我们将要做乘法运算

每次进循环体

S都要乘以i

乘完之后

这个乘数i就要++

就要自身加1

那么到什么时候

做最后一次乘运算呢

直到i的值为N的时候

才进行最后一次乘运算

因为执行循环语句

一定要满足循环条件为真

保证i的值小于等于N才行

那么循环体做乘法运算

乘完之后最后的结果是多少呢

我们下面来编写程序来看一下

定义了i s n变量

i s变量赋初值

n的值呢

n的值没有初始化

它要从键盘输入

那么下面我们看while循环

下面的这个while循环的这段代码

循环条件是i小于等于n

循环体里面的复合语句

是s乘以i赋给s

然后i再加加

当循环执行完毕之后

最后输出结果

得到n的阶乘这个值

下面我们还来看一下程序运行的结果

马上我要输入n的值

我输入n的值为16

我得到一个正确的结果

接下来再一次运行程序

我输入n的值为17

大家这个时候看

我会得到一个负数

那为什么17的阶乘

这个结果会是一个负数呢

这也是大家要注意的

因为我们的循环结构

它反复地做这个运算

会导致这个运算的结果越来越大

而我们这一个循环语句

它反复的执行这个乘法运算

所以它的乘积会越来越大

大到什么程度呢

大家看一下

大到这个数据

它超出了我们定义的这个类型的

所能表示的数的这个上界

发生了溢出

所以这个时候

这个结果就出现了错误

因为C语言

它提供的各种各样的数据类型

各种类型的数据

它所占用的这个存储单元

都是有固定的大小的

比如说C语言里

规定了int类型

整型的数据它占有4个字节

它的这个取值是有范围的

它的取值范围

可能是-2147483648~2147483647

那么我们运算的这个结果

如果超出了这个类型所表示的数的上界

导致这个进位

到达了最前面的符号位

或者是更多的进位的丢失

它就发生了溢出

所以计算17的阶乘

运算的结果超出了整型所能表示的数的上界

那么这个时候怎么办呢

我们要把17的阶乘的这个结果

能够正确的运算出来

这个时候其实我们可以将s和n变量

定义为float或者double类型

因为这两个类型它表示的这个范围更大

可以确保17的阶乘的结果

能够准确的显示出来

由此可见

我们预先来估算

运算结果的可能的取值范围

采取取值范围更大的这个类型来定义变量

对于防止类型溢出是十分必要的

好今天的这一节课就到这里

谢谢大家

高级语言程序设计课程列表:

程序设计和C语言

-1.1 计算机程序和计算机语言

--计算机程序和计算机语言

--致敬先辈:伟大的C语言之父——丹尼斯·里奇 程序员

-1.2 C程序的构成

--C程序的构成

--当前主流程序设计语言各自都有什么优势?

-1.3 C语言编辑、编译、运行(VC++2010学习版)

--C语言编辑、编译、运行(VC++2010学习版)

-练习题

顺序结构程序设计

-2.1 变量的定义和使用

--变量的定义和使用

-2.2 数据类型

--数据类型简介

--整型数据

--实型数据

-2.3 格式输出和格式输入

--格式输出printf函数

--格式输入scanf函数

--单个字符的输入输出

-2.4 运算符和表达式

--运算符和表达式

-2.5 结构化程序设计入门

--结构化程序设计入门

-练习题

选择结构程序设计

-3.1 为什么要用选择结构解决问题

--为什么要用选择结构解决问题

-3.2 如何正确表示选择结构中的条件

--如何正确表示选择结构中的条件

-3.3 用if语句及if语句嵌套实现选择结构

--用if语句及if语句嵌套实现选择结构

-3.4 用switch语句实现选择结构

--用switch语句实现选择结构

-练习

循环结构程序设计

-4.1 循环的引入

-- 为什么要用循环结构解决问题

-4.1 循环的引入--作业

-4.2 用while语句实现循环

--用while语句实现循环

-4.3 用do-while语句实现循环

-- 用do-while语句实现循环

-4.4 用for语句实现循环

-- 用for语句实现循环

-4.4 用for语句实现循环--作业

-4.5 何时需要用循环的嵌套

--何时需要用循环的嵌套

-4.6 如何提前终止循环和提前结束本次循环

--如何提前终止循环和提前结束本次循环

-习题--作业

数组

-5.1 数组类型的引入

--数组类型的引入

-5.2 一维数组的定义和初始化

--一维数组的定义和初始化

-5.3 一维数组的使用

--一维数组的使用

-5.4 二维数组的定义和初始化

--二维数组的定义和初始化

-5.5 二维数组的使用

--二维数组的使用

-习题--作业

指针

-6.1 什么是指针

--什么是指针

-6.2 指针类型及相关概念

--指针类型及相关概念

-6.3 指针变量的定义、赋值与使用

--指针变量的定义、赋值与使用

-6.4 指针的运算

--指针的运算

-6.5 指针与一维数组

--指针与一维数组

-6.6 指针的指针

--指针的指针

-6.7 指针与二维数组

--指针与二维数组

-习题--作业

函数

-7.1 为什么要自定义函数

--为什么要自定义函数

-7.2 函数的定义

--函数的定义

-7.3 函数的调用

--函数的调用

-7.4 函数参数的传递

--函数参数的传递

-7.5 函数的嵌套调用和递归调用

--函数的嵌套调用和递归调用

-7.6 变量的作用域和存储类型

--变量的作用域和存储类型

-习题--作业

字符串

-8.1 字符串的存储及输入输出

--字符串的存储及输入输出

-8.2 系统字符串处理函数

--系统字符串处理函数

-8.3 自定义字符串处理函数

--自定义字符串处理函数

-习题--作业

结构体和共用体

-9.1 结构体类型的定义

--结构体类型的定义

-9.2 结构体变量及指针变量的定义及使用

--结构体类型变量和指针变量的定义和使用

-9.3 结构体变量和指针变量作函数的参数

--用结构体变量和指向结构体的指针作函数参数

-9.4 结构体数组的定义和使用

--结构体数组的定义和使用

-9.5 共用体类型和枚举类型

--共用体和枚举类型

-习题--作业

动态内存分配

-动态内存分配--习题

文件

-习题--作业

用while语句实现循环笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。