C语言-10循环结构-_while_语句

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§10.5
break 语句
break 和 continue 语句是两个非常有用的,与重复 语句有关的语句。我们曾遇到过与 switch 语句有关的 break 语句,该语句的句法如下所示:
break;
break 语句将强制从已过的 switch 和 while 语句, 以及下面将要介绍的 for 在 do-while 语句中立即断开或 退出。 break 语句违背了纯结构化的编程原则,因为它提供了 第二种非标准的退出循环的方式。然而,对于当检测到异常条 件时中断循环,它是非常有用的。break 语句还可以被用来 退出 switch 语句,但这是因为已经检测并处理了所需的情 况。
§10.4.1
交互性 while 循环
将交互式数据输入与 while 语句的重复功能结合起来可 以产生适应性好,功能强大的程序。为了理解涉及的概念,请 考虑程序 ex10_04.c 。其中 while 语句被用来接受并计 算用户同时输入的 4 个数字的和。。
/* */
程序:ex10_04.c 交互式 while 循环
#include <stdio.h> void main() { int i,num;
//包括标准输入输出头文件 //主函数
//定义数字和控制变量
i = 1; //初始化循环控制变量 i while(i<=4) //循环 { printf("请输入数:"); scanf("%d",&num); printf("您输入数:%d\n",num); i++; //将 i 递增 } }
§10.2.2 while 语句执行流程
计算机执行 while 语句的过程如下所示: (1)测试条件。 (2)如果条件具有非0(true)值: ①执行圆括号后的语句; ②回到步骤(1)。 否则 循环 退出 while 语句。
进入while语句 条件赋值 为 false
测试条件 (步骤1)
退出 while 语句
/* */
Βιβλιοθήκη Baidu
程序:ex10_06.c 求 1-100 的和
#include <stdio.h> void main() { //定义变量 int i,total;
//包括标准输入输出头文件 //主函数
total = 0; //初始化和 i = 7; //初始化循环控制变量 i while(i>=1) { total = total + i; //累加 i--; //将 i 递增 } //输出 1到100 的和 printf("1+2+..+100 = %d\n",total);
§作业
一台购买价为 28,000 美元的机器在 7 年内以每年 4000 美元的比率折旧。编写并运行一个 C 程序,计算并显示 7 年的折旧表,该表应该具有如下的形式: 年 ---1 2 3 4 5 6 7 折旧 ---------4000 4000 4000 4000 4000 4000 4000 年终值 ---------24000 20000 16000 12000 8000 4000 0 累计折旧 ---------4000 8000 12000 16000 20000 24000 28000
/* */
程序:ex10_01.c 输出1-10
#include <stdio.h> void main() { int count;
//包括标准输入输出头文件 //主函数
count = 1; //初始化 count while(count<=10) { printf("%4d",count);//输出 count count++; //将 count 递增 } }
在计算机编程中,指出系列数据开始或结束的数据值被称为“始 终标记”(Sentinel)。当然,必须要选择使用始终标记值,以使 它不会与合法的数据值发生冲突。
程序:ex10_07.c 计算成绩(演示始终标记)*/ #include <stdio.h> //包括标准输入输出头文件 #define LOWGRADE -1 //定义“始终标记” void main() { int grade; //定义变量接收用户输入的成绩 long total; //定义成绩总数 grade = 0; //初始化成绩 total = 0; //成绩总和初始化为零 printf("本程序学生成绩的和,输入-1结束。\n"); while( grade != LOWGRADE ) { total = total + grade; //累加成绩 printf("输入成绩:"); scanf(“%d”,&grade); //接收用户输入 } //输出学生成绩的总和 printf("学生成绩和为%ld.\n",total); } /*
条件赋值 为 true 执行圆括号后 的语句 (步骤2a)
回过头来重新为表达式 赋值(步骤 2b)
请注意,步骤(2)中的②将强制把程序的控制转回给步骤(1)。 这种将控制转回 while 语句的开始以重新为条件赋值的方式就是程 序循环的方式。while 语句实际上是在做自身循环,以重新检查条 件,直到它变得不成立,即在循环过程的某些地方必须要更改所测试 的条件的值,这实际上就是情况(case)。
}
§10.4.2
始终标记
到目前为止,我们所创建的都是固定计数循环的示例,其中计数 器被用来控制循环重复的次数。通过使用 while 语句,还可以构 造条件变化的循环。 例如,当输入一些成绩时,我们可以不希望统计输入的成绩个数, 而是希望能够连续地输入这些成绩,并在最后一个键入一个特定的数 据来指出数据输入的结束。
如果在首次条件赋值时,count 的值小于或等于lO,那么将调 用 printf()方法,然后,while 语句将自动回过头来重新测试条 件。因为我们没有更改 count 中存储的值,所以条件仍是成立的, 因此将再次调用 printf(),这个程序将永远继续下去,直到用户终 止运行包含该语句的程序。但是,如果count是从一个大于 10 的值 开始,那么条件将是不成立的,因此根本不会调用 printf()。
§10.3.2 while 语句应用-变量赋初值
我们该如何设置 count 的初始值,来控制在首次为条件赋值时 while 语句所实现的功能呢?回答是在遇到 while 语句之前,为 所测试的条件中的每个变量赋值,例如,下面的指令顺序是有效的:
count = 1; //控制变量赋初值 while( count <= 10 ) printf("%4d",count);
C语言程序设计
第十课 循环结构- while 语句
§10.1 循环(重复)
前面几章介绍的程序在演示 C 程序的正确结构,以及构造 基本的 C 输入、输出、赋值和选择功能方面是非常有用的。 大多数程序的实际功能主要表现在它们多次重复相同的计算 或指令序列的能力上,即每次使用不同的数据,而不必针对每组 新的数据值重新运行程序,本章将介绍实现该功能的 C 语句, 包括 while、for 和 do-while 语句。
§10.2.1 while 语句格式
while 语句是一种最常见的重复语句,它可以用于各种编 程情况下。while 语句的常规格式如下所示:
while(条件) 语句;
圆括号内的“条件”与 if-else 语句中的条件的赋值方 式完全相同,不同的是条件的使用方式。当 if-else 语句中 的条件成立时,将执行一次该条件后的语句。在 while 语句 中,只要条件仍保持成立,就会反复执行条件后的语句,这自 然意味着,在 while 语句的某些地方,必须有一个将测试条 件的值更改为 false 的语句,这实际就是情况(Case)。目前 我们只考虑条件和圆括号后的语句。
/* */
程序:ex10_05.c 交互式 while 循环
#include <stdio.h> void main() { int i,num,sum;
//包括标准输入输出头文件 //主函数 //定义数字及和
sum = 0; //初始化和 i = 1; //初始化循环控制变量 i while(i<=4) { printf("请输入累加的数:"); scanf("%d",&num); sum = sum + num; //累加 printf("和为:%d\n",sum); i++; //将 i 递增 } }
§10.3.1 while 语句应用
为了更清楚一些,请考虑关系条件 count<=lO 和语句 printf(“%4d”,count);,使用它们,我们可以编写下面有效的 while语句:
while( count <= 10 ) printf("%4d",count);
虽然该语句是有效的,但细心的读者将意识到,我们创建了一种 或是一直调用 printf()方法(直到我们终止程序)或是根本不调用 它的情况。
§10.3.4 while 应用-避免死循环
在考虑其他 while 语句的示例之前,先来讲解一下关于程序 ex11_01.c 的两个注意事项。首先,可以使用任何更改 count 值 的语句来替代 count++; 语句,例如,像 count = count + 2; 这样的语句将会显示出间隔为 2 的整数。 其次,程序员有责任确保 count 值的变化最终会导致从 while 循环正常退出,例如,如果我们使用表达式 count--; 代替表达式 count++;,那么 count 的值将永远不会超过 10,从而造成无限循 环。 无限循环(Infinite loop)是指永远不会结束的循环。计算机不 会走到你身边,拍拍你,说:“对不起,你创建的是一个无限循环”, 它只是会持续显示数字,直到你意识到程序没有按照你的预想工作。 对于大多数系统,同时按下 Ctrl 键和 C 键可以中断程序的执行。
/* */
程序:ex10_03.c 打印数字 1-10 及其平方值和立方值表的任务
#include <stdio.h> void main() { int num;
//包括标准输入输出头文件 //主函数
//打印表头 printf("NUMBER SQUARE CUBE\n"); printf("--------------\n"); num = 1; //初始化 num while( num < 11 ){ printf("%6d",num); //输出数字 printf("%9d",num*num); //输出平方 printf("%7d\n",num*num*num);//输出立方 num++; //将num递增 } }
/*
阅读程序:ex10_02.c */ //包括标准输入输出头文件 //主函数
#include <stdio.h> void main() { int i;
i = 10; //初始化 i while(i>=1) { printf("%4d",i); //输出 i i--; //将 i 递减 } }
使用这个指令序列,我们可以确保 count 的初始值为 1。我们 可以在赋值语句为 count 指定任何值——重要的是要指定“某些”值。 实际上,指定的值要取决于应用程序。
§10.3.3 while 应用-更改控制变量的值
我们仍需要更改 count 的值才能最终退出 while 语句,这需要 使用像 count=count+l 这样的条件,在每次执行 while 语句时都 递增 count 的值。事实是,用于重复单个语句的 while 语句不会妨 碍我们使用其他语句来更改 count 的值,我们所要做的就是使用复合 语句来替代单个语句,例如: count = 1; //将 count 初始化 while( count <= 10 ) { printf("%4d",count); count++; //将count递增 } 现在让我们来分析一下这组完整的指令的工作方式。第一个赋值语 句将 count 设置为1。然后,进入 while 语句,条件第一次得到赋 值。因为 count 的值小于 10,所以条件成立,并执行复合语句。复 合语句中第一个语句是调用 printf()方法来显示 count 值。接下来 的语句是将 count 中当前存储的值加上 1,使该值等于 2。现在 while 语句循环回来重新测试条件,因为 count 的值仍小于 10,所 以将再次执行复合语句,该过程将一直持续到 count 的值达到 11。
相关文档
最新文档