一、 循环
1.1 定义
在程序中,某些代码会被一直重复循环的执行,直到满足一些条件时,就会退出,这部分的代码就包含在循环结构中。
1.2 循环分类
在C语言中,循环主要有三种,for循环、while循环和do…while()循环。下面会详细介绍。
1、for()循环
2、while()循环
3、do...while()循环
1.3 真假判断
在介绍循环之前,先说明在C语言中对真假的判断。循环是在满足条件为真时,就会退出循环,所以知道对真假的判断就十分重要。在C语言中:
1、非零即真
2、0为假
1.3.1 C语言中真假的示例
#include <stdio.h>
int main(){
int num1 = 5;
int num2 = 0;
int num3 = num1 && num2;
int num4 = num1 || num2;
printf("%d\n", num3);
printf("%d", num4);
return 0;
}
二、for()循环
2.1 语法
for(exp1; exp2; exp3){
statement
}
for循环后面的圆括号中有3个表达式,分别用分号隔开。其中:
1、表达式1是初始化,只会在for循环开始时执行一次。
2、表达式2是测试条件,在执行循环之前对表达式求值。如果表达式为假,则循环结束。
3、表达式3是执行更新,在每次循环结束时求值。
2.2 示例程序
2.2.1 for循环求和1-10
# include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 10; i++)
sum = sum + i;
printf("sum = %d", sum);
return 0;
}
2.2.2 for循环求1-10的奇数和
# include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 10; i+=2)
sum = sum + i;
printf("sum = %d", sum);
return 0;
}
2.2.3 for循环求1-100之间能被3整除数的和
# include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 100; ++i)
if (i % 3 == 0)
sum = sum + i;
printf("sum = %d\n", sum);
return 0;
}
2.2.4 for循环求1-100之间的奇数之和,奇数的个数,奇数的平均值
#include <stdio.h>
int main(void)
{
int i, j = 0, sum_j = 0;
float aver_j;
for (i = 1; i <= 100; ++i)
if (i % 2 != 0)
{
sum_j = sum_j + i;
j++;
aver_j = sum_j / j;
}
printf("奇数个数为:%d 奇数之和为:%d 平均值为:%f\n", j, sum_j, aver_j);
}
2.2.2 for循环求1+1/2+…+1/100
#include <stdio.h>
int main(void)
{
int i;
float sum = 0;
for (i = 1; i <= 100; ++i)
{
sum = sum + 1 / (float)(i);
}
printf("%f\n", sum);
return 0;
}
2.3 for循环嵌套
for循环里面在套一层for循环,就构成了for循环嵌套。 结构示例:
for (int i = 0; i < count; i++)
{
for (int j = 0; j < count; j++)
{
}
}
2.3.1for循环嵌套打印乘法表
#include <stdio.h>
int main(){
int i, j;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i ; j++)
{
printf("%d * %d = %d\t", i, j, i*j);
}
printf("\n");
}
return 0;
}
三、while()循环
3.1 语法
while ( expression){
statement
}
1、statement部分可以是分号结尾的简单语句,也可以是花括号括起来的符合语句
2、如果expression为真,执行statement部分一次,然后再次判断expression。在expression为假之前,循环的判断和执行一直重复执行。每一次的循环称为一次迭代
3、while循环有一点非常重要:在构建while循环时,必须让测试表达式有所变化,表达式最终为假,否则,循环就不会终止。
3.2 示例程序
3.2.1 while循环求和1-100和
#include <stdio.h>
int main(void)
{
int i = 1;
int sum = 0;
while (i < 101)
{
sum = sum + i;
++i;
}
printf("sum = %d", sum);
return 0;
}
3.3 for与while互相转换
for(exp1; exp2; exp3){
statement
}
等价于:
exp1;
while(exp2){
statement;
exp3;
}
while和for可以相互转化,但for的逻辑性更强,更不容易出错,推荐多使用for。
四、do…while()循环
for循环和while循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C语言还有出口条件循环,即在循环的每次迭代之后检查测试条件,这就保证了至少执行循环体中的内容一次。这种循环称为do…while循环。
4.1 语法
do
{
statement;
}while(expression);
4.2 示例程序
4.2.1 检查输入数字是否正确
#include <stdio.h>
int main(){
const int secret_code = 11;
int enter_code;
do
{
printf("please enter secret code:");
scanf("%d", &enter_code);
} while (secret_code != enter_code);
printf("Congulation!");
return 0;
}
do…while并不等价于for,也不等价于while。
五、 break和continue
一般而言,程序进入循环后,在下一次循环测试之前会执行完循环体中的所有语句。continue和break可以根据循环体中的测试结果来忽略一部分循环内容,甚至结束循环。
5.1 break
程序执行到循环中的break语句时,会终止包含它的循环,并执行下一阶段的程序。
5.1.1 示例程序
#include <stdio.h>
int main(){
int ret = 3;
for(int i = 0; i < 5; i++){
if (i == ret)
{
break;
}
printf("hello world\n");
}
return 0;
}
5.1.2 注意事项
1、break如果用于循环是用来终止循环。
2、break如果用于switch,则是用来终止switch。
3、break不能直接用于if,除非if属于循环内部的一个子句。
4、在多层循环嵌套中,break只能终止距离它最近的循环。
5.2 continue
3种循环都可以使用continue语句。执行到该语句时,会跳过本次迭代的剩余部分,并开始下一轮迭代。如果continue语句嵌套在循环内,则只会影响包含该语句的内层循环。
5.2.1 for示例程序
#include <stdio.h>
int main(){
for(int i = 0; i <= 5; i++){
if (i == 3)
{
continue;
}
printf("i=%d hello world\n", i);
}
return 0;
}
5.2.2 while示例程序
#include <stdio.h>
int main(){
int i = 0;
while (i < 5)
{
if (i == 3){
i++;
continue;
}
printf("i=%d Hello world\n", i);
i++;
}
return 0;
}
|