C语言流程控制之循环(二)

循环

定义: 某些代码会被重复执行
分类: 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. 先执行1,在执行2,若2成立,则进入下一个循环,否则直接执行B
  2. 进入下一个循环后,先执行4,再执行5,若5成立,则执行A,再执行6,。再执行4,再执行5,若5不成立,则退出这个循环,进入上层循环
  3. 进入上层循环之后,执行3,再执行2,再重复上面的步骤。

运算符

  • 自增[自减]
    • 前自增 ++i
    • 后自增 i++
    • 相同点:最终i的值都加一
    • 不同点:前自增,先加后用;后自增,先用后加
    • 为什么有自增:代码更精炼;自增的速度更快;
  • 三目运算符
    条件 ?语句A :语句B ===》 if© 语句A;else 语句B;
  • 逗号表达式
    A,B,C,D
    功能:从左到右执行;最终表达式的值是最后一项的值。

while循环

  1. 格式
    while (表达式)语句;
  2. 与for的相互转换
	for(1;2;3)
			A;
			等价于
		1;
		while(2)
		{
			 A;
			 3;
		}
  1. 从键盘输入一个数字,如果该数字是回文数,则返回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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值