C语言while语句
在C语言中,共有三大常用的程序结构:
- 顺序结构:代码从前往后执行,没有任何“拐弯抹角”;
- 选择结构:也叫分支结构,重点要掌握 if else、switch 以及条件运算符;
- 循环结构:重复执行同一段代码。
前面讲解了顺序结构和选择结构,本节开始讲解循环结构。所谓循环(Loop),就是重复地执行同一段代码,例如要计算 1+2+3+……+99+100 的值,就要重复进行99次加法运算。
while循环
while循环的一般形式为:
while(表达式){
语句块
}
意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。
我们通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。
用 while 循环计算1加到100的值:
- #include <stdio.h>
- 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 <stdio.h>
- int main(){
- while(1){
- printf("1");
- }
- return 0;
- }
运行程序,会不停地输出“1”,直到用户强制关闭。
2) 循环条件不成立的话,while 循环就一次也不会执行。例如:
- #include <stdio.h>
- int main(){
- while(0){
- printf("1");
- }
- return 0;
- }
运行程序,什么也不会输出。
再看一个例子,统计从键盘输入的一行字符的个数:
- #include <stdio.h>
- int main(){
- int n=0;
- printf("Input a string:");
- while(getchar()!='\n') n++;
- printf("Number of characters: %d\n", n);
- return 0;
- }
运行结果:
Input a string:c.biancheng.net↙
Number of characters: 15
本例程序中的循环条件为getchar()!='\n'
,其意义是,只要从键盘输入的字符不是回车就继续循环。循环体n++;
完成对输入字符个数计数。
do-while循环
除了while循环,在C语言中还有一种 do-while 循环。
do-while循环的一般形式为:
do{
语句块
}while(表达式);
do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。
用do-while计算1加到100的值:
- #include <stdio.h>
- int main(){
- int i=1, sum=0;
- do{
- sum+=i;
- i++;
- }while(i<=100);
- printf("%d\n", sum);
- return 0;
- }
运行结果:
5050
注意
while(i<=100);
最后的分号;
,这个必须要有。
while循环和do-while各有特点,大家可以适当选择,实际编程中使用while循环较多。
C语言while语句的更多相关文章
- [SQL]SQL语言入门级教材_SQL语言基本语句介绍(四)
SQL语言基本语句介绍 • 表的建立 关系数据库的主要特点之一就是用表的方式组织数据.表是SQL语言存放数据.查找数据以及更新数据的基本数据结构.在SQL语言中,表有严格的定义,它是一种二维表,对于这 ...
- php入门 数据类型 运算符 语言结构语句 函数 类与面向对象
php PHP-enabled web pages are treated just like regular HTML pages and you can create and edit them ...
- OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)
OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-wh ...
- 零基础逆向工程12_C语言06_switch语句反汇编
12_C语言06_switch语句反汇编 switch语句反汇编 测试环境:VC++6.0 分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表. ...
- R语言Switch语句
R语言Switch语句 switch语句允许一个变量值的列表来平等进行测试.每个值被称为一个条件(情况),变量被接通检查每个条件(情况). 语法 在R语言中创建switch语句的基本语法是: 以下规则 ...
- C语言中语句的跨行支持总结
C语言中语句的跨行支持总结: 预处理一行写不下: 把一个预处理指示写成多行要用""续行,因为根据定义,一条预处理指示只能由一个逻辑代码行组成. 正常程序一行写不下: 把C代码写成多 ...
- go语言循环语句 for
Go语言中的循环语句只支持for关键字,而不支持while和do-while结构. sum := 0 for i := 0; i < 10; i++ { sum += i } 无限循环的写法: ...
- go语言选择语句 switch case
根据传入条件的不同,选择语句会执行不同的语句.下面的例子根据传入的整型变量i的不同而打印不同的内容: switch i { case 0: fmt.Printf("0") case ...
- (旧)子数涵数·C语言——条件语句
首先,我们讲一下理论知识,在编程中有三种结构,分别是顺序结构.条件结构.循环结构,如果用流程图来表示的话就是: 那么在C语言中,如何灵活运用这三种结构呢?这就需要用到控制语句了. 而条件语句便是控制语 ...
- Go 语言 goto 语句
Go 语言的 goto 语句可以无条件地转移到过程中指定的行. goto语句通常与条件语句配合使用.可用来实现条件转移, 构成循环,跳出循环体等功能. 但是,在结构化程序设计中一般不主张使用goto语 ...
随机推荐
- QQ在通信与传输的一些知识
http://www.nowamagic.net/librarys/veda/detail/2028 一.登录 不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态.这个TC ...
- VC版DoEvents
VB和C#下有一个DoEvents方法,可以让程序在执行操作的同时仍可以处理其他事件.由于近期在做一个数据格式转换的项目,需要进行大批量的数据处理,希望能在进行数据读写过程中,程序还能接收其他操作,防 ...
- C# 类型转换,序列化
string转byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转string: stri ...
- 使用 log4j 2记录日志
log4j2使用方法还是很简单的 1 需要使用的jar包有两个, 1)log4j-api-2.8.2.jar 2)log4j-core-2.8.2.jar 2 产生Logger 对象非常的简单,使用 ...
- php扩展swoole的安装
这个明星php安装是要装php-pear yum install php-pear 然后通过pear命名安装swoole pecl install swoole 配置php.ini 添加 extens ...
- android BaseAdapter getView 理解
ListView是安卓中很经常使用的一个控件. 安卓设计使用Adapter来对ListView进行管理. 可是系统提供的Adapter无法满足一些复杂的显示情况,这个时候我们就须要使用BaseAdap ...
- iOS_文件上传进度条的实现思路-AFNettworking
iOS_文件上传进度条的实现思路-AFNettworking //要上传的文件名,在这里我使用当前日期做为文件的名称 NSString * fileName =[NSString stringWith ...
- ldap 使用 问题参考
Q2.ldapsearch查询一个有30000多条记录时出现:Size limit exceeded 4 A2:服务器端配置文件有sizelimit 1000的限制!用管理员身份查询-D"c ...
- nginx解析漏洞
一个比较老的漏洞了,但是今天在一个交流群里大佬们有那么一个案例.就深入学习了一下其原理. Nginx当检查url最后的文件名为脚本的时候,他就会把整个程序当作脚本来执行,否则就当作非脚本执行. 正确上 ...
- JQuery元素选择
1.基本元素选择器 $(“p”) //选取<p>元素 $(“p.info”) //选取所有class=”info”的<p>元素 $(“p#demo”) //选取id=”demo ...