C语言之while循环

  • 格式:pdf
  • 大小:135.85 KB
  • 文档页数:6

C语⾔之while循环

while循环能做什么

先来个概念格式,while循环的⼀般形式为:

while(表达式){

语句块

}

意思是,先计算“表达式”的值,当值为真(⾮0)时, 执⾏“语句块”;执⾏完“语句块”,再次计算表达式的值,如果为真,继续执

⾏“语句块”……这个过程会⼀直重复,直到表达式的值为假(0),就退出循环,执⾏ while 后⾯的代码。

看这段话你可能会有很多疑问,不过不重要,只要记住那个格式就⾏,因为上⾯那段话是官⽅阐述。通常将“表达式”称为循环条

件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执⾏循环体代码的过程。其实就是符合条件就进⾏⼤括

号⾥的内容,不符合条件,⽆视它就好。

看个例⼦,⽤ while 循环计算1加到100的值:

#include

int main(){

int i=1, sum=0;

while(i<=100){

sum+=i;

i++;

}

printf("%d\n",sum);

return 0;

}

运⾏结果:

5050

代码分析:

1. 程序运⾏到 while 时,因为 i=1,i<=100 成⽴,所以会执⾏循环体;执⾏结束后 i 的值变为 2,sum 的值变为 1。

2. 接下来会继续判断 i<=100是否成⽴,因为此时 i=2,i<=100 成⽴,所以继续执⾏循环体;执⾏结束后 i 的值变为 3,sum 的值变为3。

3. 重复执⾏步骤 2)。

4. 当循环进⾏到第100次,i 的值变为 101,sum 的值变为5050;因为此时 i<=100 不再成⽴,所以就退出循环,不再执⾏循环体,转⽽

执⾏while循环后⾯的代码。

while 循环的整体思路是这样的:设置⼀个带有变量的循环条件,也即⼀个带有变量的表达式;在循环体中额外添加⼀条语句,

让它能够改变循环条件中变量的值。这样,随着循环的不断执⾏,循环条件中变量的值也会不断变化,终有⼀个时刻,循环条件

不再成⽴,整个循环就结束了。

如果循环条件中不包含变量,会发⽣什么情况呢?

1. 循环条件成⽴时的话,while 循环会⼀直执⾏下去,永不结束,成为“死循环”。例如:

#include

int main(){ while(1){

printf("1");

}

return 0;

}

运⾏程序,会不停地输出“1”,直到⽤户强制关闭。

2. 循环条件不成⽴的话,while 循环就⼀次也不会执⾏。例如:

#include

int main(){ while(0){

printf("1");

}

return 0;

}

运⾏程序,什么也不会输出。

下⾯来练习⼀下如果要打印1~100该咋办?这个问题可能很简单。

#include

#include

int main()

{

system("color 0a");//输出的背景为⿊底绿字,可删

int i=1;

while(i<=100){

printf("%d\n",i);

i=i+1;

}

return 0;}

如果要到着输出100到1呢?

#include

#include

int main()

{

system("color 0a");

int i=100;

while(i>0){

printf("%d\n",i);

i=i-1;

}

return 0;}

如果要输出1~100的偶数呢?

#include

#include

int main()

{

system("color 0a");

int i=2;

while(i<=100){

printf("%d\n",i);

i=i+2;

}

return 0;}

再来个难的,输出1~100后再从100输到1。

#include

#include

int main()

{

system("color 0a");

int i=1;

while(i<100){

printf("%d\n",i);

i=i+1;

}

while(i>0){

printf("%d\n",i);

i=i-1;

}

return 0;

}

所以,循环(Loop),就是重复地执⾏同⼀段代码,例如要计算 1+2+3+……+99+100 的值,就要重复进⾏99次加法运算。

通过上述对while有个基本了解,但如何⽤计算机输出1~100中所有不能被3整除的数,例如1,2,4,5……,97,98,100。

通过上述,其实可以让a从开始每次增加1就可以。如果想每次遇到3的倍数就不打印,只需每次对a进⾏判断就好,即当a为3或3的倍数就不

输出,否则就输出。

那具体该如何做?

我们只需要通过if语句来判断变量a的值除以3的余数是否为0就可以了。如果余数不为0,说明变量a中的值不是3的倍数,就将变

量a中的值打印出来;否则就说明变量a中的值是3的倍数,不能打印。

那么,怎么判断变量a中的值除以3的余数是否为0呢,需要使⽤“%”这个运算符。在第3章中我们介绍过,“%”读作mod,也可以称

之为“取模”,作⽤就是获取余数。另外说⼀下“%”这个运算符的左右两边必须为整数。⽽“/”这个符号表⽰除号,作⽤是获取

商,“/”这个运算符的左右两边既可以是整数也可以是⼩数。代码如下:

#include

#include

int main()

{

int a=1;

while(a<=100){

if(a%3!=0){

printf("%d\n",a);

}

a++;

}

return 0;}

如果要输出1~100中能被3整除但是不能被5整除的所有数,⼜该怎么办?

#include

#include

int main()

{

int a=1;

while(a<=100){

if(a%3==0 && a%5!=0){

printf("%d\n",a);

}

a++;

}

return 0;}

更复杂的来了!现在我想知道1~100中有多少这样的数,请你写这样⼀个程序,输出1~100中所有7的倍数和末尾含7的数。

很简单,我们先参照以往的程序,利⽤while循环,让变量a从1递增到100,不过我们每次在输出变量a的值之前需要对变量a进⾏判

断。根据题⽬的要求,如果变量a的值是7的倍数或者末尾含有7就打印出来。判断⼀个变量是否为7的倍数我们已经很熟悉了,只需要

判断变量a除以7的余数是否为0就可以,即如果a%7==0这个关系表达式成⽴就输出。那怎么判断变量a的值末尾是否含7呢?我们仔细

想⼀想就会发现末尾含7的数其实就是这个数的个位为7,也就是这个数除以10的余数为7。发现这个规律就好办了,即在a%10==7这个关系表达式成⽴时输出就可以啦。

好了,现在有两个关系表达式a%7==0和a%10==7,分别表⽰这个数是否为7的倍数以及末尾是否含7。这两个式⼦是“或者”的关系,只要

有⼀个成⽴,就将这个数输出。这⾥的逻辑关系“或者”在C语⾔中的表⽰⽅法⽤“||”表⽰,

所以,代码如下:

#include

#include

int main()

{

int a=1;

while(a<=100){

if(a%7==0 || a%10==7){

printf("%d\n",a);

}

a++;

}

return 0;

}那如何求和呢?

可能你会说,⼀直加就好,⽐如在求1~100的和之前,我们先来解决如何求1+2+3的值。

没错,你可以这样写:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int a;

a = 1+2+3;

printf("%d", a);

system("pause");

return 0;}

但如果是1~100的话,这样不会很⿇烦吗?可以换⼀种⽅式,⽐如:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int a;

a = 0; //想⼀想为什么a的初始值要为0呢? a = a+1;

a = a+2;

a = a+3;

printf("%d", a);

return 0;

}

你可能会说这样写岂不是更⿇烦……但是我们发现在上⾯的这段代码中,a=a+1; a=a+2;a=a+3;这三句话,基本思想是相同的,

第⼀次加1,第⼆次加2,第三次加3。我们可以把这三个语句⽤a=a+i;来表⽰。然后让变量i从1到3循环就可以了。

代码如下:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int a, i;

a = 0;

i = 1;

while(i< = 3)

{

a = a+i;

i = i+1;

}

printf("%d", a);

return 0;}

如果需要计算1~100的和,我们只需将上⾯代码中i<=3修改为i<=100就可以了,代码如下:

#include <stdio.h>

#include <stdlib.h>

int main()

{

int a, i;

a = 0;

i = 1;

while(i< = 100)

{

a = a+i;

i = i+1;

}

printf("%d", a);

return 0;}

如果求1~100中所有7的倍数或者末尾含7的数的总和,⼜该怎么办呢?其实是⼀样的:

#include

#include

int main()

{

int a, i;

a = 0;

i = 1;

while(i<= 100)

{

if(i%7 == 0 || i%10 == 7) {

a = a+i;

}

i = i+1;

}

printf("%d", a);

return 0;}

求1~100所有偶数的和

#include

#include

int main(){

system("color 0a");

int i=0,a=0;

while(i<100){

a=a+i;

i=i+2;

}

printf("%d",a);

return 0;}

输⼊⼀个整数n,求n的阶乘