今天学习C语言中的循环语句。
while 循环
语句结构
while(表达式)
语句:
输出 1 2 3 ... 10
int main()
{
int i = 1;
while( i<= 10 )
{
printf("%d ",i);
i++;
}
return 0;
}
执行结果
输入一个正的整数,逆序打印这个整数的每一位
例如:
输入:1234,输出4321
输入:521,输出125
int main()
{
int n = 0;
scanf("%d",&n);
while(n)
{
printf("%d ",n % 10);
n = n / 10;
}
return 0;
}
执行结果
for 循环
for 循环是三种循环中用的最多循环语句。
for(表达式1;表达式2;表达式3)
语句;
- 表达式1:用于循环变量的初始化
- 表达式2:用于循环结束条件的判断
- 表达式3:用于循环变量的调整
在屏幕上打印1 ~ 10
int main()
{
int i = 0;
for(i=1;i<=10;i++)
{
printf("%d ",i);
}
return 0;
}
执行结果
while 和 for 的区别
相比while循环,for循环结构体中三个部分非常集中,便于代码的维护。
计算 1 ~ 100之间3的倍数的数字之和
int main()
{
int i = 0;
int sum = 0;
for(i = 1; i <= 100; i++)
{
if (i % 3 == 0)
{
sum += i;
}
}
printf("%d", sum);
return 0;
}
执行结果
do while 循环
语句结构
do
语句;
while(表达式);
这种结构,至少要被执行一次。
打印1~10
int main()
{
int i = 1;
do
{
printf("%d ",i);
i++;
} while(i<=10);
return 0;
}
执行结果
输入一个正整数,计算这个整数是几位数?
例如:
输入:1234 输出:4
输入:234 输出:3
int main()
{
int n = 0;
scanf("%d",&n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
} while(n);
printf("%d\n",cnt);
return 0;
}
执行结果
break 和 continue
break是终止循环
int main()
{
int i = 1;
while( i<= 10 )
{
if(i==5)
break;
printf("%d ",i);
i++;
}
return 0;
}
执行结果
continue跳过本次循环,直接去判断部分。
int main()
{
int i = 1;
while( i<= 10 )
{
if(i==5)
continue;
printf("%d ",i);
i++;
}
return 0;
}
执行结果
代码死循环。
调整一下代码,将i++放到continue的前面
int main()
{
int i = 1;
while( i<= 10 )
{
i++;
if(i==5)
continue;
printf("%d ",i);
}
return 0;
}
执行结果
for 循环中 break 和 continue
break跳出循环,与while中的效果一样
int main()
{
int i = 0;
for(i=1;i<=10;i++)
{
if(i==5)
break;
printf("%d ",i);
}
return 0;
}
执行结果
continue在for循环中会跳到调整部分,而while则是跳到条件部分
int main()
{
int i = 0;
for(i=1;i<=10;i++)
{
if(i==5)
continue;
printf("%d ",i);
}
return 0;
}
执行结果
区别如下
do while中break和continue
break在三种循环中的效果都一样,直接跳出循环。
continue
int main()
{
int i = 1;
do
{
if(i==5)
continue;
printf("%d ",i);
i++;
} while(i<=10);
return 0;
}
执行结果
打印到4死循环,与while中的效果相似。
循环嵌套
找出 100 ~ 200 之间的素数,并打印到屏幕上。
注:素数又称质数,只能被1和本身整除的数字。
解题思路:
1、使用循环产生100~200之间的数字。
2、判断产生的数字是否是素数
- 比如判断100是不是素数,可以用2~99与100整除,如果其中任何一个数字可以整除,说明100不是素数。
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
//判断 i 是否是素数
//使用2 ~ i-1 / i
//如果 i 被整除了,i就不是素数
int j = 0;
int flag = 1; //假设i为素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}
执行结果
拓展思考
如果存在一个数字 i,可以用如下方式展示 i = a*b
那么a和b中至少有一个数字是<= 根号i
#include <math.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
//判断 i 是否是素数
//使用2 ~ i-1 / i
//如果 i 被整除了,i就不是素数
int j = 0;
int flag = 1; //假设i为素数
for (j = 2; j < sqrt(i); j++) //优化内容
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
}
}
return 0;
}
goto语句
goto语句可以实现在同一个函数内跳转到设置好的标号处。
int main()
{
printf("hehe");
goto end;
printf("haha");
end;
return 0;
}
执行结果
goto可以在多层循环中,直接跳到某个循环中;break只能一层层跳出。