while 循环
C语⾔提供了3种循环语句,while就是其中⼀种,接下来就介绍⼀while语句。
while语句的语法结构和if语句⾮常相似。
//代码1
#include <stdio.h>
int main()
{
if(1)
printf("hehe\n"); //if后边条件满⾜,打印⼀次hehe
return 0;
}
//代码2
#include <stdio.h>
int main()
{
while(1)
printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe
return 0;
}
所以,while可以实现循环效果。
练习:输入一个正整数,逆序打印这个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
while (n)
{
printf("%d ", n % 10);
n /= 10;
}
return 0;
}
- 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
- 要想去掉n的最低位,找出倒数第⼆位,则使⽤n=n/10 操作就可去掉最低位的,如:n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
- 循环1和2两个步骤,在n变成0之前,就能到所有的位。
for 循环
for 循环是三种循环中使⽤最多的,for 循环的语法形式如下:
#include <stdio.h>
//for 循环打印1-10的值
int main()
{
int n = 0;
for (n = 1; n <= 10; n++)
{
printf("%d ", n);
}
return 0;
}
首先执行的是表达式1初始化变量,然后判断符不符合表达式二,符合就执行下面的语句,结合之后,在走表达式3,进行变量调整。
for循环和while循环的对比
练习:计算1-100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;//总数和
for (i = 1; i < 100; i++)
{
if (0 == i % 3)
sum += i;
}
printf("%d\n", sum);
return 0;
}
//⼩⼩的优化
//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
int main()
{
int i = 0;
int sum = 0;
for (i = 3; i < 100; i += 3)
sum += i;
printf("%d\n", sum);
return 0;
}
do…while循环
所以在do…while语句中循环体是至少执行一次的,这是它特殊的地方。
#include <stdio.h>
//使用do...while打印1-10的值
int main()
{
int i = 1;
do
{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
//输入一个正整数,计算这个整数是几位数
int main()
{
int i = 0;
scanf("%d", &i);
int count = 0;
do
{
i /= 10;
count++;
} while (i);
printf("%d\n", count);
return 0;
}
这⾥并⾮必须使⽤do while 循环,但是这个代码就⽐较适合使⽤,因为n即使是0,也是1位数,要统计位数的。
break和continue语句
在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中提供了continue 和break两个关键字,就是应⽤到循环中的。
- break的作⽤是⽤于永久的终⽌循环,只要break 被执⾏,直接就会跳出循环,继续往后执行
- continue的作用是跳过本次循环continue后面的代码
循环的嵌套
前⾯学习了三种循环while,for,do while ,这三种循环往往会嵌套在⼀起才能更好的解决问题,就是我们所说的:循环嵌套,这⾥我们就看⼀个例⼦
练习:
找出100~200之间的素数,并打印在屏幕上。
注:素数⼜称质数,只能被1和本⾝整除的数字。
- 要从100-200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。
- 假设要判断i是否为素数,需要拿2-i - 1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤
循环解决。 - 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。
#include <stdio.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
//找出素数
int j = 0;
int flag = 1;
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
goto语句
C语⾔提供了⼀种⾮常特别的语法,goto 语句和跳转标号就是内跳转到设置好的标号处。,goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha\n");
return 0;
}
goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤
我们可以用goto 语句写一个关机程序。
//用system执行系统命令
#include <Windows.h>
#include <string.h>
int main()
{
char ch[20] = { 0 };
system("shutdown -s -t 60");
again :
printf("请注意,你的电脑将在一分钟后关机,请输入:我是猪,取消关机\n");
printf("请输入:>");
scanf("%s", ch);
//strcmp用来比较俩个字符串,相同返回0,这边不用简单用==表示相同
if (0 == strcmp(ch, "我是猪"))
system("shutdown -a");
break;
else
goto again;
return 0;
}