[零基础学软件开发14]while循环
来源:互联网 发布:美工刀具磨刀生产设备 编辑:程序博客网 时间:2024/06/02 10:08
声明:我写这一系列文章在讲述过程中可能用了一些大白话,也可能有的地方墨迹了一些,但旨在把一些没有基础但很想学软件开发的一些人领进门来,另外该文章我同时也在百度经验发表。
上节我们学习的goto个人认为是初学者最好理解的循环语句,使用起来也很方便,goto语句使用起来非常灵活,但是就是因为太灵活了所以许多有编程经验的人都觉得goto往往会使程序难于阅读造成逻辑混乱,有的时候写代码多了一会跳转到这一会跳转到那往往会把编程者自己都搞糊涂了更别说别人了,还有一点就是在c基础上发展起来的c#和java编程语言里不支持goto,所以我们还是要学习能够替代goto的其它循环的写法,这节我们来学习while循环,while循环有两种形式下面分别作介绍。
while循环的第一种形式:
上节goto的例子如果用while写就是这样。
int main()
{
int i=0;
printf("一个循环语句的例子\n");
do
{
printf("*");
i=i+1;
}while(i<10);//注意这里必须写分号
printf("hello\n");
}
对比上节的goto我们可以这样认为:
1>do相当于原来的标记,用来表示循环开始的地方,只不过这个是c语言里的关键字不能自己随便起了只能用do,另外do后面也不要加冒号。
2>while(i<10);是循环的判断,相当于goto里的if判断,如果条件为真转到do的位置重复执行,条件为假则循环终止。
3>用大括号括起来的部分是要重复执行的代码,这个大括号不能省略。为了叙述方便以后我们管这部分代码就叫循环体。
4>while(i<10);必须加分号,来表示语句结束。当你看到while的第二种写法时你就会知道如果不加分号那while(i<10) printf("hello\n");也能构成一个循环,所以为了避免歧义要求第一种写法的循环条件后必须加分号。
我们可以看到对比goto,这样写更简洁明了,结构清晰。
while循环的第二种形式:
此种形式是在第一种形式的基础上进一步简化,省略了do,上面的例子用这种形式写法如下:
int main()
{
int i=0;
printf("一个循环语句的例子\n");
while(i<10)
{
printf("*");
i=i+1;
}
printf("hello\n");
}
要点解析:
1>此种写法就跟if语句的写法类似,大括号可以省略,如果不写大括号那循环体就是while后面的第一条语句,你如果在while(i<10)后面直接加分号也可以,那样循环体就为空。
2>while(i<10)不是判断一次就拉倒,而是循环重复判断,每次判断只要条件为真就执行一次循环体。什么时候判断为假了while语句就结束,循环终止。像这个例子循环体被重复执行了10次而i<10这个条件却判断了11次,正是因为第11次判断结果为假循环才终止了。
while的这两种写法是有区别的
第一种写法是:先执行一遍循环体,然后再判断
第二种写法是:先判断,条件不符合则直接退出,循环体可能一次都不被执行
用第一种写法写的程序都能修改成第二种写法的形式。
通过下面的两个例子来讲解下
例题1:不停地从键盘输入字符直到输入q结束。
char ch;//用来存储每次从键盘输入的字符
scanf("%c",&ch);//重复执行这句话能够实现“不停地从键盘输入字符”的要求,而第一个字符总是要输入的,也就是说这句话至少要执行一遍,适合do while
int main()
{
char ch;
do
{
scanf("%c",&ch);
}while(ch!='q'); //只要输入的不是q就循环,重复执行 scanf("%c",&ch);
}
运行这个例子当你从键盘输入字符的时候最好输入一个一回车,如下图。
如果用第二种写法改写,我们就可以给ch一个初始值让第一次循环判断肯定成立,这样 scanf("%c",&ch);就至少会执行一次
int main()
{
char ch='a';
while(ch!='q')
{
scanf("%c",&ch);
}
}
第一次判断ch!='q'肯定为真,因为ch里初始存放的是'a'这个字符,所以 scanf("%c",&ch);得到执行,ch里的值变成了运行程序的人从键盘上输入的一个字符
第二次判断ch!='q' 结果就不一定了,因为我们也不知道ch里存储的是什么,这要看运行程序的人从键盘输入了什么字符。
很显然这种改写的方式没有第一种写法好懂,而且写起来还费事。
例题2:从键盘输入一个自然数,输入几就输出几个星号。
分析下问题,如果我们输入的是0,那一个星号都不输出,所以我们需要先判断,这种情况就适合用第二种写法。
int main()
{
int i=0;
int n;//表示从键盘输入的整数
printf("请输入一个自然数:");
scanf("%d",&n);
while(i<n)//n是几下面的循环体就执行几次
{
printf("*");
i=i+1;
}
printf("\n");
}
- [零基础学软件开发14]while循环
- 零基础学python-12.1 while循环
- [零基础学软件开发13]循环语句介绍goto
- [零基础学软件开发15]for循环语句
- [零基础学软件开发16]退出循环break
- [零基础学python]用while来循环
- 零基础学python-2.12 循环while语句
- [零基础学软件开发3]第一行c代码
- [零基础学软件开发5]c语言数据类型初探
- [零基础学软件开发17]几个单循环题目
- [零基础学软件开发18]数组初探
- [零基础学软件开发19]字符串初探
- Java新手如何零基础学软件开发
- 零基础学嵌入式开发
- 零基础学iOS开发
- 零基础学python-12.3 for循环
- 零基础学软件测试V2.0
- 零基础如何学软件测试
- to_number不了字段-ORA-01722 无效数字
- AsyncTask引发的问题
- 从零开始-边学边做-塔防游戏-七彩三国(八)--强制横屏
- 《Effective C++》学习笔记条款30 透彻了解inlining的里里外外
- 2013年12月30日星期一(继续流水线--局部坐标->世界坐标)
- [零基础学软件开发14]while循环
- excel2003如何删除重复的行
- 黑马程序员 知识点总结-Java集合框架(Map)
- Xcode中查看方法的调用者列表
- [DBNETLIB][ConnectionOpen(Invalid Instance())] 无效的连接 的解决办法
- guide
- C1083: Cannot open include file: ‘stddef.h’: No such file or directory
- org.apache.commons.dbcp.BasicDataSource连接池配备属性
- JSTL的核心标签