
C语言提供了三个循环语句供程序员们使用,它们分别是:while语句,for语句和do...while语句。
while语句的格式如下:
#include <stdio.h>
int main()
{
while(1)
{
printf("死循环啦\n");
}
return 0;
}因此,我们看上面的例子,while旁边的小括号的值始终为1,那么这个循环就永远不会结束,即死循环。

可以看到,当运行这段代码,程序将持续不断地打印“死循环啦” ,永不停止。
参考代码:
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}运行结果:

输入⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输入:1234,输出:4 3 2 1
输入:521,输出:1 2 5
参考代码:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
while(num)
{
printf("%d ", num % 10);
num /= 10;
}
return 0;
}解析:
要想得到一个整数(多位数)的最后一位数,可以使用“%”操作符——取余操作:
如1234 % 10,得到的就是 4。
当我们想要倒数第二位数,就可以先除以10(将最后一位数除掉),再进行取余操作:
如1234 / 10,得到123;123 % 10 得到 3。
运行结果:

for语句的格式如下:
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}for的小括号中有三个表达式,它们的作用分别是:
如上述代码中,第一个表达式(i = 1)表示将循环变量再初始化为1;第二个表达式(i <= 10)表示判断循环变量 i 是否满足 i <= 10:若满足,继续循环;若不满足,结束循环。最后一个表达式(i++)是对循环变量 i 的调整,每一次调用花括号中的语句后都会调整一次循环变量。
运行结果:

参考代码:
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}运行结果:

#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i = 1; i <= 100; i++)
{
if(i % 3 == 0)
sum += i;
}
printf("%d\n", sum);
return 0;
}运行结果:

小优化:如果能直接产生3的倍数的数字就省去了多余的循环和判断
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for (i = 3; i <= 100; i += 3)
{
if (i % 3 == 0)
sum += i;
}
printf("%d\n", sum);
return 0;
}do...while语句的格式如下:
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
}while(i <= 10);
return 0;
}与while语句和for语句不同的是:do...while语句是先执行花括号中的循环语句,再判断循环条件。
运行结果:

输入一个正整数,判断这个整数是几位数?
例如:
输入:1234 输出:4
输入:12 输出:2
参考代码:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
int count = 0;
do
{
count++;
num /= 10;
}while(num);
printf("%d\n", count);
return 0;
}运行结果:


这里并非必须使用 do... while 语句,但是这个代码就比较适合使用 do... while 循环,因为n即使是
0,也是1位数,要统计位数的。
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。
C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的:
参考代码:
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1; //1代表是素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0; //0代表不是素数
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}解析:
运行结果:

完~