目录
1.while 循环
2.do while 循环
3.for 循环
4.逗号运算符及在循环中的使用
5.空语句
1. while 循环
1.1 while 语句格式
while (condition)
{
//语句块;
}
1.2 while 循环流程图
注意: 在有循环语句的程序中,通常循环开始前对循环条件进行初始化;而在循环体语句中要包含修改循环条件的语句,否则循环将不能终止而陷入死循环。
1.3 示例一:显示平方表
#include<stdio.h>
/** while 循环 显示平方表 */
int main()
{
int i = 0, n = 0;
printf("Input number of entries in table: "); //输入平方数
scanf_s("%d", &n);
i = 1;
while (i <= n)
{
printf("%10d%10d\n", i, i * i);
++i;
}
printf("\n");
return 0;
}
运行结果
2. do while 循环
2.1 do while 循环语句格式
do 语句本质上就是 while 语句,只不过其控制表达式是在每次执行完循环体之后再进行判断。
do
{
//语句块;
}while (condition);
2.2 do while 循环流程图
2.3 示例二:计算输入整型数值的位数
#include<stdio.h>
/** do while 循环 计算输入整型数值的位数 */
int main()
{
int digits = 0, n = 0;
printf("Input a nonnegative integer:"); //输入一个非负数值
scanf_s("%d", &n);
do
{ // 计算非负数值的位数
n /= 10; // n = n / 10;
digits++;
} while (n > 0);
printf("The number has %d digit!\n", digits);
return 0;
}
运行结果
3. for 循环
3.1 for 循环语句格式
for(表达式1;表达式2;表达式3)
{
//循环语句;
}
3.2 for 语句流程图
3.3 for 语句的惯用法
对于 “ 向上加 ” (变量自增)或 “ 向下减 ” (变量自减)的循环来说, for 语句通常是最好的选择。
// 从 0 向上加到 n - 1
for(i = 0; i < n; ++i) ...
// 从 1 向上加到 n
for(i = 1; i <= n; ++i) ...
// 从 n - 1 向下减到 0
for(i = n - 1; i >= 0; --i)...
// 从 n 向下减到 1
for(i = n; i > 0; --i)...
3.4 在 for 语句中省略表达式
for 循环中的 “ 表达式 1(初始化条件)”、“ 表达式 2(循环条件)” 和 “ 表达式 3(自增自减)” 都是可选项,都可以省略(但分号 ; 必须保留)。
#include<stdio.h>
/** for 循环 */
int main()
{
int sum = 0;
for (int i = 1; i <= 10; ++i)
{
sum += i;
}
// 等价于
int sum = 0;
int i = 1;
for ( ; i <= 10; ++i)
{
sum += i;
}
return 0;
// 等价于
int sum = 0;
int i = 1;
for (; i <= 10; )
{
sum += i;
++i;
}
return 0;
}
3.5 无限循环的惯用法:
while(1)
{
// 语句块;
}
for(;;)
{
// 语句块;
}
4. 逗号运算符及在循环中的使用
4.1 逗号运算符
①. 逗号运算符作为 C 语言中的运算符级别最低的一员,逗号运算符结合的方向是从左往右。
②. 逗号运算符是指在 C 语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别计算,但整个表达式的值是最后一个表达式的值。
4.2 示例一
#include<stdio.h>
/** 逗号运算符 */
int main()
{
int a = 1, b = 2, c = 3;
int d = 0;
d = a > b, a * b, c += 3; // d = (a > b, a * b, c += 3);
printf("%d \n", c);
return 0;
}
运行结果
4.3 示例二
#include<stdio.h>
/** 逗号运算符 */
int main()
{
int n = 0, sum = 0;
printf("Input numbers of int: \n");
/**
scanf_s("%d", &n);
while (n != 0)
{
sum += n;
scanf_s("%d", &n);
}
*/
// 等价于==>
while (scanf_s("%d", &n), n != 0)
{
sum += n;
}
printf("The sum is:%d \n", sum);
return 0;
}
运行结果
4.4 示例三
#include<stdio.h>
/** 逗号运算符 */
int main()
{
/**
int i = 0, sum = 0;
for (i = 1; i <= 10; ++i)
{
sum += i;
}
*/
// 等价于==>
int i = 0, sum = 0;
// sum += i, ++i 顺序不可变 sum += i, ++i ==> sum = 55; ++i, sum += i ==> sum = 65
for (sum = 0, i = 1; i <= 10; sum += i, ++i)
{
}
printf("The sum is %d \n", sum);
return 0;
}
运行结果
4.5 总结:提供逗号运算符是为了 C 语言要求只能有一个表达式的情况下可以使用两个或多个表达式,换句话说,逗号运算符允许将两个表达式 “ 粘贴 ” 在一起构成一个表达式。
5. 空语句
5.1 空语句
语句可以为空,也就是除了末尾处的分号以外什么符号也没有。空语句(仅由分号组成)不执行任何操作。
int i, j;
i = 0; ; j = 1;
// 含三条语句:
// 一条是给 i 赋值 另一条是空语句 还有一条是给 j 赋值
5.2 空语句所带来的问题
①. 不小心在 if,while 或 for 语句的圆括号后放置分号会创建空语句,从而造成 if,while 或 for 语句提前结束。if 语句中,如果在圆括号后放置分号,无论条件表达式的值是什么,if 语句执行的动作都一样。
#include<stdio.h>
/** 空语句 ; */
int main()
{
int age = 0;
printf("Input your age: ");
scanf_s("%d", &age);
if (age > 18 && age < 28);
{
printf("您已成年!\n");
}
return 0;
}
运行结果
②. while 语句中,如果在圆括号后面放置分号,会产生无限循环;另一种可能是循环终止,但是在循环终止后执行一次循环体语句。
③. for 语句中,如果在圆括号后放置分号,会导致只执行一次循环体语句。