在上一节中,我们学习了通过使用while来让计算机做重复的事情,本节我们将揭晓如何指定重复的次数。 我们知道如果while后面()中的关系表达式成立,那么计算机就会运行{}中的内容。如果()括号中的关系表达式永远成立,那么计算机机会“永无止境”的去重复的执行{}中的内容。
假如我们想让计算机打印1000次“wa”,我们我们要解决的是如何让while()中的关系表达式成前1000次是成立,然后在第1001次的时候就不成立了,想一想根据我们之前学的知识,你有没有什么方法?
很显然while后面的()中的关系表达式,像 2>1或者1<=1000等等都不行的,因为像这样用固定的数字组合成的关系表达式,一旦被你写出,那么这个式子是否成立就已经是板上订钉啦,非真即假,而且永远不会改变。例如1<=1000这个关系表达式是永远成立。说到这里,我们创造怎样一个关系表达式,才能有这个式子有时候成立,有时候不成立呢?既然固定的数字组合行不通?那该怎么呢?
我想你已经猜到了!那就是…… 伟大的“变量”。
我们可以尝试一下带有变量的关系表达式,例如a<=1000。因为a是一个变量,a这个小房子里面所装的数是可以变化的。当小房子a中的数是1的时候,此时a<=1000是成立的;当小房子a中的数是1001,那么a<=1000就不成立了,这正好满足了我们对于表达式a<=1000有时候成立有时候不成立的要求。对于a<=1000这个关系表达式是否成立的关键就在于a这个变量的所装的数是多少,也就是说变量a的值。
如果我们想让a<=1000在前1000次成立,在1001次不成立的话。我们只需要变量a中的值从1变化到1001就可以了。那么则呢么让变量a中的值冲1变化到1001呢?我们只需要在最开始的时候将变量a的值赋为1,然后while每循环一次,就将变量a的值再原来的基础上再加1就可以了。当变量a的值加到1001的时候while(a<=1000)就不成立了,就会结束循环。代码如下: [mw_shl_code=c,true]int a;
a=1;
while(a<=1000)
{
printf("wa");
a=a+1;
}[/mw_shl_code]
再来分析一下上面的代码:a=a+1这条语句的作用是把小房子a中的值在原本的基础上增加1(第一章第四节有详细解释,如果还没有搞懂还是回去看看吧)。变量a最开始的时候的值为1,每执行一次while循环后,变量a的值机会在原来的基础上增加1,变为2,然后变成3,4,5,6,7,8,9……1000,1001。直到变量a的值变为1001的时候a<=1000条件不成立退出循环。 完整代码如下: [mw_shl_code=c,true]#include <stdio.h>
int main()
{
int a;
a=1;
while(a<=1000)
{
printf("wa");
a=a+1;
}
sleep(5000);
return 0;
}[/mw_shl_code]
赶快尝试一下吧。如果要输出100个“wa”该怎么办?又或者输出10个 “hello”呢?赶快去尝试一下吧。 接下来一个问题:如果要打印1~100该怎么办? [mw_shl_code=c,true]#include <stdio.h>
int main()
{
int a;
a=1;
while(a<100)
{
printf("wa");
a=a+1;
}
sleep(5000);
return 0;
}[/mw_shl_code]
在这段代码中,我们打印了100个wa,那么打印1~100也很简单,只需要修改printf语句就可以了。那么如何修改printf语句呢。之前的printf语句的作用是输出wa,现在需要输出1~100,正巧变量a的值就是从1一步步增加到100的。我们只需要每次循环的时候把a的值输出就好了。即把printf("wa");改为printf("%d",a);完整代码如下: [mw_shl_code=c,true]#include <stdio.h>
int main()
{
int a;
a=1;
while(a<100)
{
printf("%d",a);
a=a+1;
}
sleep(5000);
return 0;
}[/mw_shl_code] 赶快尝试一下把。
如果我们想倒序输出呢?就是让计算机先输出100再输出99接着98,97,96,95……1。该怎么办? 刚刚我们才学过的“让计算机输出1~100”,就是让变量a从1开始,然后通过while循环每次把变量a的值输出来,并且每次循环的时候将变量a的值增加1。这样就会打印出1~100。而此时的要求是从100打印到1。很显然我们需要让变量a从100开始,然后也是通过while循环每次把变量a的值输出来,不过每次需要递减1,一直递减到1为止。代码如下: [mw_shl_code=c,true]#include <stdio.h>
int main()
{
int a;
a=100; //初始值从100开始
while(a>=1) //请注意这里的循环条件变为>=1
{
printf("%d",a);
a=a-1; //每循环一次将a的值递减1
}
sleep(5000);
return 0;
}[/mw_shl_code]
问题又来啦,那如果希望打印的是1~100之内的偶数呢?想一想吧。 怎么样有没有思路,其实要输出1~100之间的偶数有很多种方法。比如说我们之前变量a是从1开始的,之后每次在原有的基础之上增加1,那么a就会从1到2再到3再到4……一直到101,当变量a的值增加到101的时候,不满足条件a<=100,就会退出while循环。那我么现在可以改变一下思路,让变量a的值从2开始,每次增加2,这样变量a就会从2增加到4再增加到6以此类推……代码如下: [mw_shl_code=c,true]#include <stdio.h>
int main()
{
int a;
a=2;
while(a<=100)
{
printf("%d",a);
a=a+2;
}
sleep(5000);
return 0;
}[/mw_shl_code] 好了又到了尝试的时候了。
我想如何让计算机打印1~100以内3的倍数,你应该也会了,就是先将变量a的初始值赋为3,然后每次增加3。赶快再去尝试一下吧。 上面的写法固然是好,但是却不是万能的,假如我希望的不是输出1~100以内3倍数,而是输出1~100以内除去所有3的倍数的数该怎么办呢?例如1,2,4,5,7,8,10……97,98,100。那又该怎么办呢?不要着急,我们将在第四节彻底解决这个问题。
$ 一起来找茬 1. 下面这段代码是让计算机从100打印到200。其中有3个错误,快来改正吧^_^ [mw_shl_code=c,true]#include <stdio.h>
int main()
{
int a;
a=100;
while(a<200) ;
{
printf("%d",a);
}
sleep(5000);
return 0;
}[/mw_shl_code]
Q 更进一步,动手试一试 1. 让计算机1打印到100再回到1,例如:1 2 3 …… 98 99 100 99 98 …… 3 2 1
|