C语言入门篇(四)

前言
  有的时候,我们可能需要多次执行同一块代码。
  一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
  编程语言提供了更为复杂执行路径的多种控制结构。
  循环语句则允许我们多次执行一个语句或语句组。

1. for循环

1.1 语法

for(表达式1;表达式2;表达式3)
	循环语句;

表达式1为初始化部分,用于初始化循环变量的。
表达式2为条件判断部分,用于判断循环时候终止。
表达式3为调整部分,用于循环条件的调整。

如果判断部分省略,意味着判断恒真。

实例:使用for循环在屏幕上打印1-10的数字

#include<stdio.h>
int main()
{
    
    
	int i;
	for (i = 1; i <= 10; i++)
	{
    
    
		printf("%d ", i);
	}
	return 0;
}

for循环的执行流程图:
       在这里插入图片描述
for语句只控制一条语句,控制多条语句要加{}。

1.2 break和continue在for循环中

//break 代码实例
#include<stdio.h>
int main()
{
    
    
	int i;
	for (i = 1; i <= 10; i++)
	{
    
    
		if (i == 9)
			break;
		printf("%d ", i);
	}
	return 0;
}

输出结果:
在这里插入图片描述
为什么到8就结束了?

break在for循环中的作用:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:for中的break是用于永久终止循环的。

//continue 代码示例
#include<stdio.h>
int main()
{
    
    
	int i;
	for (i = 1; i <= 10; i++)
	{
    
    
		if (i == 9)
			continue;
		printf("%d ", i);
	}
	return 0;
}

这段代码的输出结果又会是什么?
在这里插入图片描述
continue在for循环中的作用:

continue是用于终止本次循坏的,也就是本次循环中continue后边的优码不会再执行,
而是直接跳转到for语句的判断部分。进行下一次循环的入口判断。

1.3 for语句的循环控制变量

//前闭后开
int i=0;
for(i=1;i<11;i++)
{
    
    }
//两边都是闭区间
int i=0;
for(i=1;i<=10;i++)
{
    
    }

1.不可在for循环体内修改循环变量,防止for循环失去控制;
2.建议for语句的循环控制变量的取值采用”前闭后开区间写法。

1.4 一些for循环的变种

//代码1
for(;;)
{
    
    
	printf("hh\n");//无限循环打印hh
}
//for循环中的初始化部分、判断部分、调整部分可以省略。
//初始化和调整部分的省略就是啥都不做
//判断部分省略了,意味着判断是恒为真的
//建议不要随便省略

//代码2
int i=0;
int j=0;
for(i=0;i<10;i++)
{
    
    
	for(j=0;j<10;j++);
	{
    
    
		printf("hh\n");//打印10个hh
	}
}

//代码3
int i=0;
int j=0;
for(;i<10;i++)
{
    
    
	for(;j<10;j++)
	{
    
    
		printf("hh\n");//同代码2
	}
}

//代码4-使用多于一个变量控制循环
int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
    
    
		printf("hh\n");//打印两个hh
	}

下面这段代码会打印多少个hh?

#include<stdio.h>
int main()
{
    
    
	int i = 0;
	int j = 0;
	//i=0 1 
	for (i=0; i < 4; i++)
	{
    
    
		for (j=0; j < 4; j++)
		{
    
    
			printf("hehe\n");
		}
	}
	return 0;
}

1.5 练习

请问循环要循环多少次?

#include<stdio.h>
int main()
{
    
    
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
	{
    
    
		k++;
		printf("hh");
	}
	return 0;
}

for循环可以嵌套使用:
在这里插入图片描述

2. while循环

2.1 语法

while(表达式)
	循环结构;

while语句执行的流程:
        在这里插入图片描述
        
实例:使用while循环在屏幕上打印1-10的数字

#include<stdio.h>
int main()
{
    
    
	int i = 1;//初始化
	while (i <= 10)//判断
	{
    
    
		printf("%d ", i);
		i++;//调整
	}
	return 0;
}

2.2 break介绍

#include<stdio.h>
int main()
{
    
    
	int i = 1;
	while (i <= 10)
	{
    
    
		if (i == 5)
			break;//(跳出)终止循环
		printf("%d ", i);
		i = i + 1;//i++;
	}
	return 0;
}

在这里插入图片描述

2.3 continue介绍

#include<stdio.h>
int main()
{
    
    
	int i = 1;
	while (i <= 10)
	{
    
    
		i = i + 1;
		if (i == 5)
			continue;//跳过本次循环continue后边的代码,直接去while循环的判断部分		printf("%d ", n);

		printf("%d ", i);
	}
	return 0;
}

在这里插入图片描述

我们发现在while循环中也可以出现break和continue,他们的意义和在for循环中是一样的。
但是还是有一些差异。

2.4 练习

用while循环打印1-100以内的奇数

int main()
{
    
    
	int i = 1;
	while (i <= 100)
	{
    
    
		if(i % 2 == 1)//判断i是奇数的话,就打印i
			printf("%d ", i);
		++i;
	}
	return 0;
}
//打印数字字符,跳过其他字符
#include <stdio.h>
int main()
{
    
    
	char ch = '\0';
	while ((ch = getchar()) != EOF)
	{
    
    
		if (ch < '0' || ch > '9')
			continue;
		putchar(ch);
	}
	return 0;
}

补充:

while ((ch = getchar()) != EOF)
	{
    
    
		putchar(ch);
	}
//getchar()--接收字符
//putchar()--打印字符
//EOF -- end of file 文件结束标志
//在函数读取失败的时候返回了EOF
//scanf函数读取成功,返回的是读取到的数据的个数,读取失败返回EOF
//而getchar 读取成功返回字符的ASCII码值,读取失败返回EOF

3. do…while循环

3.1 do语句的语法

do
	循环语句;
while(表达式);

do…while语句执行的流程:
         在这里插入图片描述

3.2 do语句的特点

实例:使用do…while循环在屏幕上打印1-10的数字

#include<stdio.h>
int main()
{
    
    
	int i = 1;//初始化
	do
	{
    
    
		printf("%d ", i);
		i++;//调整
	} while (i<=10);//判断

	return 0;
}

循环至少执行一次,使用场景有限,所以不经常使用。

3.3 do…while循环中的break和continue

//break
#include<stdio.h>
int main()
{
    
    
	int i = 1;
	do
	{
    
    
		if (5 == i)
			break;
		printf("%d ", i);//1 2 3 4
		i++;
	} while (i<=10);
	return 0;
}

在这里插入图片描述

//continue
#include<stdio.h>
int main()
{
    
    
	int i = 1;
	do
	{
    
    
		if (5 == i)
			continue;
		printf("%d ", i);//1 2 3 4 _
		i++;
	} while (i<=10);
	return 0;
}

在这里插入图片描述

4. 练习

1.计算n的阶乘
2.计算1!+2!+…+10!

第一题:

//for循环
//5!=5*4*3*2*1
//4!=4*3*2*1
//3!=3*2*1
#include<stdio.h>
int main()
{
    
    
	int n;
	int i;
	int temp = 1;
	scanf("%d", &n);//输入
	for (i = 1; i <= n; i++)
	{
    
    
		temp = temp * i;
	}
	printf("%d\n", temp);
	return 0;
}
//while循环
#include<stdio.h>
int main()
{
    
    
	int n;
	int i=1;
	int temp=1;
	scanf("%d", &n);//输入
	while (i <= n)
	{
    
    
		temp = temp * i;
		i++;
	}
	printf("%d\n", temp);
	return 0;
}

第二题:

#include<stdio.h>
int main()
{
    
    
	int i;
	int temp = 1;
	int sum = 0;
	for (i = 1; i <= 10; i++)
	{
    
    
		temp *= i;//求每个数字的阶乘
		sum += temp;//求和,相当于:sum=sum+temp;
	}
	printf("%d\n", sum);
	return 0;
}

结束语

循环语句到这里就结束啦!想要完全的掌握,还需要不断地练习。
  积土而为山,积水而为海。
  我们下一篇文章再见。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/iLoyo_/article/details/131475443
今日推荐