4.循环结构程序设计
4.0 编写循环程序要解决的3个问题
- 1.循环变量赋初值
- 2.循环条件
- 3.循环变量值的调整
- 目的在于让循环条件在某时变为假,结束循环
4.1 while循环:“当型”循环
- 1.一般形式
while(表达式) { // 表达式可以是任意类型的表达式
语句序列;
}
-
2.执行逻辑
- 2.1 计算表达式的值,若结果为真(非0),则进入2.2,开始一次循环周期;否则进入2.3
- 2.2 执行“{}”内的语句序列(循环体)
- 2.3 结束循环,执行while循环后方(“}”之后)语句
-
3.注意
- 避免出现“死循环”,会破解死循环
- 当第一次判断表达式的值为假(0)时,循环体执行0次
- 当循环体中只有一条语句时可省略“{}”,但不建议这么做。养成加“{}”的习惯
-
4.while死循环案例
- 1.不带变量的死循环
#include <stdio.h> #include <windows.h> int main() { while(3) { printf("2022级网络技术班!\n"); Sleep(1000); } return 0; }
- 2.带变量的死循环
#include <stdio.h> int main() { int i = 3; while(i) { printf("2022级网络技术班!\n "); } return 0; }
- 3.带变量并破解死循环
#include <stdio.h> int main() { int i = 3; while(i) { printf("2022级网络技术班!\n "); i --; // -- i也可以 } return 0; }
- 4.带变量、破解死循环代码量缩减
#include <stdio.h> int main() { int i = 3; while(i --) { printf("2021级卓越3班!\n"); } return 0; }
-
5.while循环案例
- 1.编程求1+2+3+4+5之和。
// 分析:1.选择基本结构。题目需求一直在重复一个动作——做加法,很容易想到用循环结构!此处选择while循环(其他类型的循环也可以完成)。 // 2.如何通过变量来控制循环开始或结束? // 2.1 在程序中给定一个变量,这个变量通常用于控制循环的开始和结束,称其为“循环变量”(如案例中的int i;); // 2.2 该循环变量通常写在“表达式”中,定义时会给定一个初值(可随意),且能确定让循环结束(如a = ?; a = 1; a=100; a=9999); // 2.3 该循环变量有一定的范围(> >= < <=),循环执行过程中循环变量的值会改变(++ -- =),当其超出范围后循环结束(如while(a <= ?) a ++;)。 // 3.仅仅有了循环变量还不能得到最终的结果呢?“循环变量”i的值遍历了1、2、3、4、5这5个数;定义一个用于存储加和的变量sum,每当 // i增加了1,就把i累加到sum中。即 sum = sum + i; sum初值为0,不影响对i累加的值。当循环结束时,sum中存储的大概率就是求得的和。 #include <stdio.h> int main( ){ int sum, i; sum = 0; // 累加器sum置0 i = 1; // 循环变量i赋初值1 while (i <= 5) { sum = sum + i; // 将i值累加到sum中 i = i +1; // 改变循环变量i的值 } printf("1+2+3+4+5 = %d", sum ); return 0; }
- 2.编写循环程序求1+2+3+4+5+…+100之和。
// 分析:本题思路与上题一致,只将循环范围修改即可 int main( ){ int sum, i; sum = 0; i = 1; while (i <= 100) { sum = sum + i; i = i +1; } printf("1+2+3+...+100 = %d", sum ); return 0; }
- 3.编写循环程序求1-2+3-4+5-6+7-8的值。
// 分析:该程序与上例的最大区别在于公式中有加法也有减法,需要用代码完成题目中加减号的变换。怎样完成呢?把“1-2+3-4+5-6+7-8”这 // 个式子改头换面。“一会加一会减”的程序不容易写,但“一直加”的我们学过了。 // 1-2+3-4+5-6+7-8=1+(-2)+3+(-4)+5+(-6)+7+(-8)这样不够明显 // 1+2*(-1)+3+4 *(-1) +5+6 *(-1)+7+8 *(-1) 这样还不够明显 // 1*1+2*(-1)+3 *1 +4 *(-1) +5*1 +6 *(-1)+7 *1 +8 *(-1) // 运算逻辑为1-8看作循环变量 i,每循环一次就把1的值乘1或-1后累加到sum中。 #include <stdio.h> int main() { int i = 1, sum = 0; int t = 1; while(i <= 8) { sum = sum + i * t; i ++; t = -t; } printf("%d", sum); return 0; }
- 4.编程计算1+1/2+1/4+1/8+1/16+…的值,直到最后一项值小于0.0001。
//分析:1.此程序累加式中的规律:从首项1开始,依次乘以1/2就是下一项,但注意C程序中的1/2值为0; //2.定义循环变量i,初值为1.0,循环条件为i >= 0.0001; //3.定义累加变量sum,初值为0.0,每经历一次循环就将i累加到sum中,同时i的值自动减半。 #include <stdio.h> int main(){ float t = 1.0; double sum = 0; while(t >= 0.0001) { sum = sum + t; t = t / 2; } printf(“sum=%f\n”, sum); return 0; }