目录
日常生活中除了选择之外,还有很多循环做的事情,比如说三点一线的生活,日复一日的工作,每天都在重复着一样的事情,这就是循环,那么C语言中的循环语句是什么样的呢,开始今天的分享。
while循环
基本语法格式
while(表达式) { 语句; }
还是使用一个代码来解释while循环的执行过程:
switch(表达式) { case 常量1:语句1 case 常量2:语句2 default:语句n break; }
通过代码可以看到,表达式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循环是否也有一定的理解了呢。