今天主要学习了for、while、do-while三种循环结构的使用和break和continue控制语句的区别,下面将我今天所写代码分享给大家
1. for循环
打印1到10的数字
int main()
{
int a = 1;
for (a = 1; !(a > 10); ++a) //for循环接三个表达式,分别是初始化、条件判断和迭代
printf("%d\n", a);
return 0;
}
for循环(三部分):初始化(a=1)、条件判断(!(a>10))和迭代(++a)。
2. while循环基础
打印1~10
int main()
{
int a = 1;
while (a <= 10)
{
printf("%d\n", a);
a++;
}
return 0;
}
while循环在条件为真时持续执行。循环体内须有改变循环条件的语句(如本题中a++),否则会导致无限循环。
3. for循环中的条件判断
int main()
{
int a = 0;
for (a = 1; (a<=100) && (a % 3 == 0); a++)
{
printf("%d\n", a);
}
return 0;
}
这个循环是错误的,第一次运行时条件为假(1%3不等于0),所以整个循环都不会执行。
4. 计算1-100内3的倍数之和
int main()
{
int a = 0;
int sum = 0;
for (a = 1; a <= 100; a++)
{
if (a % 3 == 0)
sum += a;
}
printf("%d", sum);
return 0;
}
优化版本:
int main()
{
int a = 0;
int sum = 0;
for (a = 3; a <= 100; a += 3)
{
sum += a;
}
printf("%d\n", sum);
return 0;
}
第二个算法效率更高,因为它直接遍历3的倍数,减少了条件判断的次数
5. do-while循环
int main()
{
int a = 0;
do
{
printf("%d\n", a);
++a;
} //无论条件是否满足,do-while循环至少执行一次
while (a >= 1 && a <= 10);
return 0;
}
do-while循环先执行循环体,再判断条件,所以至少会执行一次。
6. 计算数字位数
int main()
{
int a = 0;
int cnt = 0;
scanf("%d",&a);
do
{
a = a / 10;
cnt++;
}
while (a > 0);
printf("%d", cnt);
return 0;
循环控制语
7. break语句
int main()
{
int a = 0;
scanf("%d", &a);
while (a <= 10)
{
printf("%d", a);
a++;
if (a > 5)
break; //当a大于5时,跳出循环
}
return 0;
}
break用于立即终止当前循环。
8. continue语句
int main()
{
int a = 0;
scanf("%d", &a);
while (a <= 10)
{
if (a == 5)
continue; //当a等于5时,跳过本次循环
printf("%d", a);
a++;
}
return 0;
}
continue导致a无法递增,当a=5时会陷入无限循环
如果想得到5后面的数应该写成:
int main()
{
int a = 1;
while (a <= 10)
{
a++;
if (a == 5)
continue;
printf("%d\n", a);
}
return 0;
}
或者用for循环:
int main()
{
int a = 0;
for (a = 1; a <= 10; a++)
{
if (a == 5)
continue;
printf("%d", a);
}
}
用a++会踩的坑
9. 前置递增与后置递增
int main()
{
int a = 1;
while (a <= 10)
{
printf("%d\n", a);
a++;
}
return 0;
}
和
int main()
{
int a = 1;
while (a <= 10)
{
a++; //注意a++在前还是在后
printf("%d\n", a);
}
return 0;
}
第一个循环打印1-10,第二个循环打印2-11,因为a++的位置不同。