C语言中的while循环语句

日常生活中除了选择之外,还有很多循环做的事情,比如说三点一线的生活,日复一日的工作,每天都在重复着一样的事情,这就是循环,那么C语言中的循环语句是什么样的呢,开始今天的分享。

while循环

基本语法格式

while(表达式)
{
    语句;
}

还是使用一个代码来解释while循环的执行过程:

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

通过代码可以看到,表达式i<=10在i==1的情况下判断为真,所以循环体中的语句执行,最后打印出1-10,那么我们可以知道,当表达式为真时,while循环才会执行,当表达式为假,循环则不会执行。那么如果表达式是一个非0的数,循环会不会一直执行呢?

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	while (1)
	{
		printf("a");
	}
	return 0;
}

通过运行结果可以看到,当表达式为1时,while循环会一直执行循环体,也就变成了一个死循环。

while循环中的break;

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int i = 1;
	while (i<=10)
	{
		printf("%d\n", i);
		if (i==5)
		{
			break;
		}
		i++;
	}
	return 0;
}

通过前面的代码我们知道这个代码是用于打印1-10,那么如果在i==5的时候加入break,会发生什么呢?

 可以看到当加入了break之后,当执行到i==5时,后面的循环并没有执行,那么可以理解为break语句的意思是终止循环。

while循环中的continue语句

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int i = 1;
	while (i<=10)
	{
		if (i == 5)
		{
			continue;
		}
		printf("%d\n", i);
		
		i++;
	}
	return 0;
}

 上面我们知道了break的作用,那么continue和break有什么区别呢,通过运行结果可以看到,当输出到4时,代码进入了一个死循环,而不是像break一样终止,这是为什么呢?我来解释一下,continue的意思为继续,当代码执行到continue时,会跳过本次循环而继续下一次,从代码中看到,当i==5时,循环跳过,那么i++不会执行,i的值就不会改变,那么i==5回到表达式判断5<10,进入循环,那么这个时候i==5就又会触发continue,然后i++又不能执行,就造成i的值一直为5,一直跳过,就成了一个死循环。

那么while循环的基本信息我们知道了,我们来实现一下下面两个问题。

第一:用户输入一个数字,求该数字所拥有的位数之和。

那么从题目中可以知道,一个数可能会有很多位数,所以只计算一次是不行的,就需要循环计算,并且,求位数之和就需要将数字每个位数分开进行相加,知道了这些,那我们来具体实现一下。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int numb;//定义一个int类型的整数
	int sum = 0;//定义一个int类型的变量用于接受位数之和
	printf("Please input\n");//让用户输入
	scanf("%d", &numb);//接受用户输入的整数
	while (numb!=0) 
	{
		sum += numb % 10;//将整数的位数分离并加在sum中
		numb /= 10;//将已经计算过的位数去除

	}
	printf("该数的位数之和为%d\n", sum);//输出sum的值
	return 0;
}

写这种代码之前呢我们需要举例进去算一下,那么我就以123为例子,当输入的numb为123时,要计算1+2+3,要将每一位数分离,那么先将个位数分离,那么123/10的余数便是个位数3,这时我们就得到了个位数3,将3加进sum里面,那么3已经加完了,就要将3去掉,那么123/10的商为12便将3去掉,重复执行这个结果,当最后只剩1时,1/10为0,所以循环结束,那么如果位数不止为3位呢,即使这个数为n位,将最高位/10也一定为0,那么当计算到最高位时,相加已经完成,所以最高位/10为0便是循环条件,如果分离出来的数值/10不为0,说明至少有两位以上的数值没有分开,所以循环条件为numb==0。

 第二个,这个代码非常的好玩并且有意思,要输出下面的图片

 那么这个代码要怎么写呢,我们可以看到,最开始输出*号,然后每一次输出用一个字符代替*号,最后输出一个I  Love  You。那么我们可以将*好和字符串各自定义为一个字符类型的数组,每一次输出时将数组1的最左值用数组2的最左值替换,同样最右边也是一样。那么数组中的值通过下标调用,下标从0开始,每替换一次下标要加1,知道了这些,我们就可以实现代码。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char arr1[] = "I  Love  You";
	char arr2[] = "************";
	int left = 0;
	//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;//[a,b,c,\0]
	int right = strlen(arr2)-1;//右下标
	printf("%s\n", arr2);
	printf("\n");
	while (left<right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		left++;
		right--;
		printf("%s\n", arr2);
		printf("\n");
	}
	return 0;
}

那么每次替换数值时,左标都会加1,右标都会减1,总会有一次两者相等,那便是最后一个字符替换,所以循环条件为left<right。

以上就是今天的所有内容,那么屏幕前的你们对while循环是否也有一定的理解了呢。

猜你喜欢

转载自blog.csdn.net/qq_53086187/article/details/123970000