除了while循环,C语言中还有 for 循环,它的使用更加灵活,完全可以取代 while 循环。

 例如:使用 while 循环来计算1加到100的值,代码如下:

  1. #include <stdio.h>
  2. int main(){
  3. int i, sum=0;
  4. i = 1; //语句①
  5. while(i<=100 /*语句②*/ ){
  6. sum+=i;
  7. i++; //语句③
  8. }
  9. printf("%d\n",sum);
  10. return 0;
  11. }

可以看到,语句①②③被放到了不同的地方,代码结构较为松散。为了让程序更加紧凑,可以使用 for 循环来代替,如下所示:

  1. #include <stdio.h>
  2. int main(){
  3. int i, sum=0;
  4. for(i=1/*语句①*/; i<=100/*语句②*/; i++/*语句③*/){
  5. sum+=i;
  6. }
  7. printf("%d\n",sum);
  8. return 0;
  9. }

在 for 循环中,语句①②③被集中到了一起,代码结构一目了然。

for 循环的一般形式为:

for(表达式1; 表达式2; 表达式3){
    语句块
}

它的运行过程为:

1) 先执行“表达式1”。

2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。

3) 执行完循环体后再执行“表达式3”。

4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。

上面的步骤中,2) 和 3) 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。

“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。

for循环的执行过程可用下图表示:

例:分析一下“计算从1加到100的和”的代码:

  1. #include <stdio.h>
  2. int main(){
  3. int i, sum=0;
  4. for(i=1; i<=100; i++){
  5. sum+=i;
  6. }
  7. printf("%d\n",sum);
  8. return 0;
  9. }

运行结果:
5050

代码分析:
1) 执行到 for 语句时,先给 i 赋初值1,判断 i<=100 是否成立;因为此时 i=1,i<=100 成立,所以执行循环体。循环体执行结束后(sum的值为1),再计算 i++。

2) 第二次循环时,i 的值为2,i<=100 成立,继续执行循环体。循环体执行结束后(sum的值为3),再计算 i++。

3) 重复执行步骤 2),直到第101次循环,此时 i 的值为101,i<=100 不成立,所以结束循环。

由此我们可以总结出for循环的一般形式:

for(初始化语句; 循环条件; 自增或自减){
    语句块
}

for 循环中的三个表达式

for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号;必须保留)。

1) 修改“从1加到100的和”的代码,省略“表达式1(初始化条件)”

  1. int main(){
  2. int i = 1, sum = 0;
  3. for( ; i<=100; i++){
  4. sum+=i;
  5. }

可以看到,将i=1移到了 for 循环的外面。

2) 省略了“表达式2(循环条件)”,如果不做其它处理就会成为死循环。例如:

for(i=1; ; i++) sum=sum+i;

相当于:

  1. i=1;
  2. while(1){
  3. sum=sum+i;
  4. i++;
  5. }

所谓死循环,就是循环条件永远成立,循环会一直进行下去,永不结束。死循环对程序的危害很大,一定要避免。

3) 省略了“表达式3(自增或自减)”,就不会修改“表达式2(循环条件)”中的变量,这时可在循环体中加入修改变量的语句。例如:

  1. for( i=1; i<=100; ){
  2. sum=sum+i;
  3. i++;
  4. }

4) 省略了“表达式1(初始化语句)”和“表达式3(自增或自减)”。例如:

  1. for( ; i<=100 ; ){
  2. sum=sum+i;
  3. i++;
  4. }

相当于:

  1. while(i<=100){
  2. sum=sum+i;
  3. i++;
  4. }

5) 3个表达式可以同时省略。例如:

for( ; ; )  语句

相当于:

while(1)  语句

6) “表达式1”可以是初始化语句,也可以是其他语句。例如:

for( sum=0; i<=100; i++ ) sum=sum+i;

7) “表达式1”和“表达式3”可以是一个简单表达式也可以是逗号表达式。

for( sum=0,i=1; i<=100; i++ ) sum=sum+i;

或:

for( i=0,j=100; i<=100; i++,j-- ) k=i+j;

8) “表达式2”一般是关系表达式或逻辑表达式,但也可是数值或字符,只要其值非零,就执行循环体。例如:

for( i=0; (c=getchar())!='\n'; i+=c );

又如:

  1. for( ; (c=getchar())!='\n' ; )
  2. printf("%c",c);

C语言:for循环(for循环,while 循环:计算1加到100的值)相关推荐

  1. java使用while循环来计算1+2+3+…+100的值

    public class Yang1014 { public static void main(String[] args) { //使用while循环来计算1+2+3+-+100的值 int i=1 ...

  2. 为什么用c语言程序中的if语句实现从1加到100最后的结果是负数,用C语言程式计算从1加到100的程式是怎样的?...

    用C语言程式计算从1加到100的程式是怎样的?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用C语言程式计算从1加到1 ...

  3. 递归算法1加到100_五种循环方法计算1加到100

    上文讲过1加到100,详细解释了计算的过程,如果理解了以前的文章,就容易理解今天的内容了. 1加到100使用VBA我能使用十来种方法,以下也是一种方法. While --wend循环 Private ...

  4. C语言学习之分别用while、for 编写程序,计算2*4*6*......*100的值

    分别用while.for 编写程序,计算246*-*100的值 for语句 #include <stdio.h> void main(){int x,multiply=1;for(x=1; ...

  5. C语言学习之分别用while、for 编写程序,计算1+2+3+......+100的值

    分别用while.for 编写程序,计算1+2+3+-+100的值 for语句 #include <stdio.h> void main(){int x,add=0;for(x=1;x&l ...

  6. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1079:计算分数加减表达式的值

    时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6330 通过数: 4632 [题目描述] 编写程序,输入n的值,求11-12+13-14+15-16+17-18+-+(-1)n- ...

  7. C语言:计算从1加到100的值

    [while语句] #include <stdio.h> void main() { int i = 1, sum = 0; while (i <= 100) { sum = sum ...

  8. C语言while循环和do while循环详解

    在C语言中,共有三大常用的程序结构: 顺序结构:代码从前往后执行,没有任何"拐弯抹角": 选择结构:也叫分支结构,重点要掌握 if else.switch 以及条件运算符: 循环结 ...

  9. C语言 while循环和do...while循环

    1.while语句的一般形式: while(表达式)语句 这里的表达式是指循环条件表达式,语句就是循环体,循环体只能是一个语句,这个语句可以是一个简单语句,也可以是一个复合语句. 执行循环体的次数由循 ...

  10. c语言第四章循环程序设计,C语言程序设计教程第4章-循环结构程序设计

    <C语言程序设计教程第4章-循环结构程序设计>由会员分享,可在线阅读,更多相关<C语言程序设计教程第4章-循环结构程序设计(42页珍藏版)>请在人人文库网上搜索. 1.C语言程 ...

最新文章

  1. KVM中virtio实现(九)
  2. 从痴迷数据库SQL语句逐渐走进面向对象化(系统的核心以处理对象为主、淡化数据库概念)...
  3. 数组中求子数组和最大
  4. 软件测试人员需要了解关于自动化的什么(译)
  5. 跨域上传图片的尝试过程,最终成功了--- 转载
  6. 孝感职称计算机考试时间,孝感2017年职称计算机考试报名3月中下旬
  7. Restorator V2009 单文件版
  8. 物联网通讯协议:MQTT,NB-IOT,Zigbee,CoAP,RFID,BLUETOOTH,NFC,4G,HTTP
  9. mysql 打包 脚本_windows下mysql自动备份压缩打包时间命名批处理脚本
  10. c++中的继承--3(多继承问题,菱形继承)
  11. 云服务器怎么安装声音驱动_Windows服务器怎么装虚拟声卡驱动呢
  12. 水力冲孔数值模拟前景_防喷器成形工艺的有限元数值模拟研究
  13. JAXB注解 java 关于xml的注解,自动生成xml文件 - @XML***
  14. C++实现输入任意大小的整形数组并且利用冒泡排序法进行升序排序并且进行二分查找
  15. 【实验报告】LFM信号产生与频谱分析(记录一次实验:《电类综合实验》)
  16. CISCO常用配置命令
  17. 顺序表的基本操作代码实现
  18. 注册表的保存位置在哪里?注册表文件保存在哪里?
  19. android切换高德导航,Android调起高德地图
  20. 分布式链路追踪在字节跳动的实践

热门文章

  1. 论fastadmin里面token加密方式
  2. 传奇源码分析-服务器端
  3. python短文本数据集的关联性_短文本分析----基于python的TF-IDF特征词标签自动化提取...
  4. PyCharm中 Django导入views时出现报错红线
  5. 复杂网络——活跃度驱动模型(activity-driven model)原理及算法实现
  6. UA用Mode-Driven的使用笔记
  7. 文件系统读写性能测试实战
  8. win10默认壁纸位置
  9. 计算机专业研究生读研规划,关于一个计算机研究生人生规划的迷惑
  10. 基于Java spring的实验室设备管理系统的设计与实现