C语言流程控制之循环(二)
程序员文章站
2024-03-23 23:07:52
...
循环
定义: 某些代码会被重复执行
分类: for、while、do-while
for循环
格式:for(初始条件;循环条件;循环控制) 循环体;
例子:求1+2+3+…+100的值
# include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 4; ++i)
sum = sum + i;
printf("sum = %d\n", sum); // sum = 10
return 0;
}
解释
上图所示,把循环分为四部分,最开始先执行1,然后执行2,如果2为真则执行4,再执行3,然后循环前面的步骤;如果2为假,则什么都不执行。
列2:求1-10之间的奇数之后
# include <stdio.h>
int main(void)
{
int i;
int sum = 0;
for (i = 1; i <= 10; i++)
{
if (i % 2 != 0)
sum = sum + i;
}
printf("sum = %d", sum); // sum = 25
}
强制类型转换
格式:(数据类型)(表达式)
功能:把表达式的值强制转化为前面所执行的数据类型
例子:(int)(4.5+2.2) 最终结果是 6
(float)(5) 最终值是 5.000000
浮点数的存储所带来的问题:float和double都不能保证可以精确的存储一个小数
求1-100之间的奇数和、偶数和、奇数的个数、奇数的平均值
# include <stdio.h>
int main(void)
{
int i;
int count = 0;
int sum = 0;
int sum2 = 0;
float arg;
for (i = 1; i <= 100; i++)
{
if (i % 2 != 0)
{
sum = sum + i;
count++;
}
else
{
sum2 = sum2 + i;
}
}
arg = 1.0*sum / count;
printf("1-100的奇数和为sum = %d\n", sum); // sum = 2500
printf("1-100的偶数和为sum2 = %d\n", sum2); // sum2 = 2550
printf("1-100之间的奇数的个数count = %d\n", count); //count = 50
printf("1-100之间奇数的平均数arg = %f\n", arg); // arg = 50.0
}
多个for循环嵌套问题
这个执行顺序很重要:记住一个for循环就是一个语句,上面有两个for循环,分别用两个不同颜色的框框起来,
- 先执行1,在执行2,若2成立,则进入下一个循环,否则直接执行B
- 进入下一个循环后,先执行4,再执行5,若5成立,则执行A,再执行6,。再执行4,再执行5,若5不成立,则退出这个循环,进入上层循环
- 进入上层循环之后,执行3,再执行2,再重复上面的步骤。
运算符
- 自增[自减]
- 前自增 ++i
- 后自增 i++
- 相同点:最终i的值都加一
- 不同点:前自增,先加后用;后自增,先用后加
- 为什么有自增:代码更精炼;自增的速度更快;
- 三目运算符
条件 ?语句A :语句B ===》 if© 语句A;else 语句B; - 逗号表达式
A,B,C,D
功能:从左到右执行;最终表达式的值是最后一项的值。
while循环
- 格式
while (表达式)语句; - 与for的相互转换
for(1;2;3)
A;
等价于
1;
while(2)
{
A;
3;
}
- 从键盘输入一个数字,如果该数字是回文数,则返回yes,否则返回no
回文数:正着写和倒着写都一样,比如:121,12321等。
# include <stdio.h>
int main(void)
{
int val;
int sum = 0;
int m;
printf("请你输入需要判断的数字:");
scanf("%d", &val);
m = val;
while(m)
{
sum = sum * 10 + m % 10;
m /= 10;
}
if (sum == val)
printf("Yse!\n");
else
printf("No!\n");
return 0;
}
斐波那契数列
# include <stdio.h>
int main(void)
{
int n, i;
int f1 = 1, f2 = 2, f3;
printf("请输入您需要求的项的序列:");
scanf("%d", &n);
if (1 == n)
{
f3 = 1;
}
else if (2 == n)
{
f3 = 2;
}
else
{
for (i=3; i<=n; ++i)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
}
printf("%d\n", f3);
return 0;
}
上一篇: 二分查找法的递归与非递归
下一篇: Vant—下拉刷新上拉加载