初识循环
内容概要:
循环结构的基本原理
学会使用while循环和do-while循环
while循环的基本语法:
while(循环条件)
{
循环操作语句;
}
循环变量的三要素:
1.初值
2.判断
3.更新
一个实现while循环的简单案例:
将一句古诗:七月七日长生殿,夜半无人私语时。重复打印1000遍。
用我们原来打印方式1000遍显然太多。所以这里我们利用循环来编写这个程序。
int i = 1; //循环变量的初值
while(i <= 1000) //循环变量的判断
{
printf("七月七日长生殿,夜半无人私语时。第%d遍",i);
i++; //循环变量的更新
}
程序解析:首先我们定义一个整型变量 i ,然后把1赋值给它。
当i <= 1000时,我们打印一次古诗词
打印一次之后我们将i的值自增一次(i++)
解析完后不难发现,i = 1时它满足小于1000,程序开始打印第一遍古诗,打印完之后i还要自增一次(i++)变成2,while会继续识别 i 是否满足条件,不难发现2也是满足 <=1000的条件,所以程序继续打印古诗,只是这次的 i 被赋的值是2,所以程序古诗的打印次数变为了第2次,这样的循环过程一直到第1000次的时候,它是最后一个满足条件的数字,打印完成之后 i 自增变为了1001不满足条件,程序结束,这句古诗刚好被成功打印了1000次。while循环是先判断条件,条件满足再去执行结果。
while循环的进阶案例:
1.使用循环计算1-1000的累加和,最后打印输出结果。
思考:根据循环的三要素写出大致框架,这里需要定义的变量有什么?
int i = 1; //1-1000,循环变量的初值不难看出是1,最直白的由小到大,当然也可以是1000。
int sum = 0; //不难看出是要定义1-1000的累加和变量,但是为什么要给它赋值。(?)
while( i <=1000 ) //循环变量的判断,如果初值我们定为1000,那么这里就可以写成 i > 0或者i >= 1。(?)
{
i++; //循环变量的更新,i++每次自身加上1,思考一下如果初值和判断按照上边的另一种写法,这里应该如何更新。(?)
sum = sum + i; //如何理解这里的表达式?
}
printf("1到1000的累加和为:%d\n",sum);
程序解析:定义变量,判断初值赋值给它,根据题意还需要定义一个累加总和的变量。为什么要给它赋值?
根据题意制定判断条件,这个不难看出来
循环变量的更新,i++保证了我们将1-1000之间的每个整数提取了出来,需要考虑的是怎么累加取得结果?
所以我们必须要把总和sum也参与进循环中,每经过一次循环, i 和 sum 的值都会发生变化(理解这里)由此实现1-1000的累加。
现在需要理解为什么要给 sum 赋值,它参与了循环,所以初值必不可少,并且0是不影响最终结果的初值(循环的三要素)
while循环需要注意的点:
1.while循环是入口条件循环,程序在进入循环体之前必须获取循环初值并判断书否符合循环条件,如果不满足则不会执行循环体。
2.循环体部分可以是以分号结束的简单语句,也可以是用花括号括起来的复合语句。
3.构建while循环时,必须要让测试表达的值有变化,且最终要为假,循环才会终止,如果判断条件一直为真,循环就不会终止(陷入死循环)。如下所示:
int sum = 1;
while(sum < 5)
{
printf("早上好!\n");
}
这里测试表达值没有任何变化(循环变量的更新),所以这个程序将会无限次打印“早上好!”(死循环)。
处理循环问题需要注意:
在不熟悉的条件下,背好循环变量的三要素,拿到一个题,我们首先审题确认什么可以拿来做循环变量(满足循环三要素的变量就可以拿来做循环变量)。熟悉之后再灵活运用,不需要硬套。如下题:
例:某交易网站2015年双十一的交易额为800亿,每年递增25%,问按此速度哪年的交易额能达到2000亿?用循环解决这个问题。
思考:我们在这里需要审题,题中的变量有哪些?,什么可以拿来做循环变量?
不难看出 , 我们需要声明的变量有年份和交易额。
哪个变量可以拿来做循环变量呢?套用循环变量的三要素一比对很容易看出,交易额是比较满足的,它有初值(800亿),有判断(上限2000亿),还有更新(每年递增25%),相对之下 年份就不满足三要素的条件。所以根据它的三要素我们很容易写出相应的程序。如下:
int year = 2015; //声明年份
int num = 800; //声明交易额
while(num < 2000) //判断
{
num = num * 1.25 //交易额小于2000则递增25% 也可以写成num *= 1.25;也是num的更新
year++; //每年都比之前多一年一年, 所以是year++。一直加到满足交易额到2000亿就退出循环。
}
printf("按此速度,到%d年交易额到2000亿。\n",year);
return 0;
需要多练习。一定要多练!多写!一言不合就写就对了!看都能看懂,主要是要会写!
再做一个题:用循环设计一个题,让用户输入整型数字,如果输入的数据类型正确,则重复提示输入,当用户输入的数字不是整型时。退出循环,并计算之前所输入的值的累加和。
思考:循环变量的三要素先找出来,明确初值在哪?(用户来输入),判断(不为整型),更新(如果满足条件则让用户重复输入,否则跳出循环),确认好后我们开始写:
int sum; //定义初值
int num = 0; //定义累加和,思考一下这里的赋值,之前有这样的例子
printf("请输入一个数字:");
int rum; //为用户赋的初值定义一个变量,因为每次的初值都是不同的
rum = scanf("%d",&sum); //让用户赋初值(思考一下如果不给赋值会怎么样?)
while(sum == 1) //考虑一下这里的判断条件为何要这么写(sum的值恒为真,为何恒为真?我们定义好了sum是整型,只要是整型我们就继续执行循环体)
{
printf("请输入下一个数字:");
rum = scanf("%d",&sum); //若满足循环条件,那我们继续执行循环体,继续让用户赋值
num = num + sum; //累加一次
}
printf("用户输入数据的累加和为:%d",num); //打印结果
return 0;
do-while循环的基本语法:
do{
循环操作
}while(循环条件);
do-while循环的特点:
先执行循环操作,然后看是否符合循环条件,符合就继续执行,否则循环退出。
它和while循环的区别就是,不管结果如何do-while都会先至少执行一次循环操作。而while会先判断条件再执行
例1:分析下面的代码:
例2:利用do-while结构打印菜单,如果你是一位君王,对于身旁的伴侣你希望?(这是个比较简单的练习,帮助我们加深理解这个循环结构。)
1.只要一个
2.两位以上的爱人
3.三千佳丽
如果输入1-3之外的整数,则提示只能选择1-3之间的数字。
如果输入1-3之间的数,则做出相应的提示
[size=14] int num; [/size]
//定义用户的选择
printf("性格测试:\n");
printf("如果你是一位君王,对于你身旁的伴侣你希望:\n");
printf("1.只要一个\n2.两位以上\n3.三千佳丽\n");
do{ //如果输入错误会一直执行循环,多理解这里的原理。
printf("请选择:");
scanf("%d",&num);
if(num < 1 || num > 3)
{
printf("只能输入1-3之间的数字,请重新输入。");
}
}while(num < 1 || num > 3); //理解为什么while取这个条件才执行循环
switch(num)
{
case 1:
printf("你真专一。\n");
break;
case 2:
printf("这样好吗?\n");
break;
case 3:
printf("死渣男,滚!\n");
break;
}
return 0;
本章小结:
循环的三要素:初值,判断和更新。while循环和do-while循环的使用:前者先判断条件真假再执行循环体,后者不管条件真假至少会先执行一次循环体。
循环的经典案例:重复打印,累加求和等要熟悉掌握。
问题总结:
本章对逻辑思维有一定要求,理论语法比较简单。但是循环的用途很广,所以还是要多做练习熟悉它的各种用法。 一串数字如何用循环把每个数单独提出来?
多写,多写,多写。一定要多写。