欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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; 
}

解释
C语言流程控制之循环(二)
上图所示,把循环分为四部分,最开始先执行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循环嵌套问题

C语言流程控制之循环(二)
这个执行顺序很重要:记住一个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;
}