C primer plus 学习笔记 第6章 C控制语句:循环

简介: C primer plus 学习笔记 第6章 C控制语句:循环

   第6章 C控制语句:循环

6.1 再探while循环(略)

6.1.1 程序注释(略)

6.1.2 C风格读取循环

while (scanf("%ld", &num) == 1)

{

/*循环行为*/

}

6.2 while语句

while 循环的通用形式:

 while (expression)

   statement

 while 循环是 入口条件循环,满足条件时才进入循环体。

 只有while(expression) 后的单独语句(或者{}扩起的语句块)才是

 循环部分。

6.2.1 终止while循环

构建while循环时,测试表达式(即while后面的expression)的值 最终要为假。否则,就会出现“死循环”。

6.2.2 何时终止循环

6.2.3 while:入口条件循环

while循环是使用入口条件(entry condition)的有条件循环。入口条件是指,只要满足条件时才进入循环体,不满足时就直接跳过循环。

6.2.4 语法要点

只有测试条件后面的单独语句(大括号扩起的复合语句也是单独语句。空语句; 也是单独语句)才是循环部分。

int n = 0;
while (n < 3)
  printf("n is %d\n", n);
  n++;   //注意这句不是循环体的内容,n++不会执行,n<3一直成立,所以上面的循环会一直进行。
while( scanf("%d", &num) == 1)
 ;  /*跳过整数输入*/

6.3 用关系运算符和表达式比较大小

while循环经常依赖测试表达式作比较,这样的表达式被称为 关系表达式(relation expression),

出现在关系表达式中的运算符叫做关系运算符(relation operator)。

在while语句中使用 关系表达式:

 while( number < 6) 
 
{
  printf("Your number is too small.\n");
  scanf("%d",&number);
 
}
while(ch !='$')
{
count++;
scanf("%c",&ch);
}
while (scanf("%f", &num) ==1)
  sum += num;

使用关系运算符可以比较数字、字符,但不能直接比较字符串。 另外要注意,比较浮点数时一般使用< ,>,而不用==。因为由于浮点数精度问题会使原本相等的数在程序中不相等。

如果要比较两个浮点数是否相等,通常用这两个数作差,看它们的差是否足够小:

6.3.1 什么是真

简单来说,1是真,0是假

6.3.2 其他真值

不为0的数都是真值

6.3.3 真值的问题

看一个例子

    int status;
  while (status = 1)
  {
    sum += num;
    printf("Enter next integer (q to quit):");
    status = scanf("%ld", &num);
  }

本来这段代码是要在按下q的时候退出循环的,但是由于 将status == 1 错写成 status = 1,结果while后面的表达式 变成了一个赋值表达式,而这个赋值表达式的值是=左侧的值,即status的值,即1.即使进入循环体时输入q使得status的值变为0,进入while判断时又会执行一次status =1,结果无法退出循环。


避免这种错误的一个方法时 将 常数写在==左侧,例如 1 == status,这样如果漏写一个=,写成1=status的话,编译器就会报错。


6.3.4 新的_Bool类型 (_Bool)C99中的新变量类型 布尔类型,只有真(1)或假(0)两种值。

6.3.5 优先级和关系运算符

()优先级最高,使用()就可以。没必要写一些可读性很差、很长的表达式。

6.4 不确定循环和计数循环

一个简单的计数循环:

  int count = 1;
  while (count <= 10) {
    printf("count=%d\n", count);
    count++;
  }


6.5 for循环

for的形式:

for (initialize; test; update )

 statement

for循环的三个表达式 通常是第一个给计数器赋初始值,第二个表达式表示计数器范围

第三个表达式递增计数器。

实际使用可以灵活的利用三个位置的特点,

第1个表达式只在执行循环嵌执行一次,

第2个表达式可以是任何条件

第3个表达式是可以每次递增、递减、加倍等。

三个表达式可以空缺(但是分号不能缺)

6.6 其他赋值运算符(略)

6.7 逗号运算符

,逗号运算符扩展了for循环的灵活性,以便循环头中包含更多的表达式,

如:

for(ounces = 1, cost = FIRST_OZ; ounces <= 16; ounces++, cost += NEXT_OZ)

   printf("%5d $%4.2f\n", ounces, cost/100.0 );

6.8 出口条件循环 do while (先做一次,再检查条件)

do

 statement

while( expression);

6.9 如何选择循环

主要考虑是入口循环还是出口循环,

出口循环选do while , 入口循环for或while

6.10 嵌套循环

循环内的语句也是循环时,就形成嵌套循环。

以简单的二层嵌套为例,外层循环每执行一次,里面的语句(包括循环)就执行一遍。

  for (row = 0; row < 5; row++)
  {
    for (ch = 'A'; ch < 'A'+10; ch++) 
    {
      printf("%c", ch);
    }
    printf("\n");
  }

这段代码里的ch会被打印5*10 次。

 

6.11 数组简介

6.12 使用函数返回值的循环示例


相关文章
|
7月前
|
SpringCloudAlibaba Java Nacos
尚硅谷SpringCloud教程 笔记
本文介绍了基于Spring Cloud Alibaba构建的cloud-demo工程创建步骤,包括父模块及子模块的配置。父模块采用pom打包方式,定义了Java 8、Spring Boot 2.4.2、Spring Cloud 2020.0.1及Spring Cloud Alibaba 2021.1版本。包含三个主要模块:services(依赖Nacos)、service-order和service-product(均依赖spring-boot-starter-web)。同时提供了discoveryClient的测试代码,展示服务发现功能的实现与验证过程。
439 12
尚硅谷SpringCloud教程 笔记
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
480 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
人工智能 vr&ar Android开发
深入探索安卓与iOS的未来发展
【10月更文挑战第8天】 本文将深入探讨安卓和iOS两个主流操作系统的未来发展,从技术创新、用户体验和市场竞争等多个角度进行分析,揭示它们在技术演进中的趋势以及面临的挑战。
228 3
|
7月前
|
传感器 监控 物联网
《解锁分布式软总线:构建智能设备统一管理平台》
随着智能设备数量激增,如何有效管理这些设备成为一大挑战。分布式软总线技术应运而生,作为一种创新通信技术,它整合Wi-Fi、蓝牙、NFC等优势,打破设备间连接壁垒,提供统一通信接口,极大降低开发难度。通过设备自发现机制、灵活组网方式及抽象控制模型,分布式软总线实现了设备的统一管理。在智能家居中,用户可一键控制多品牌设备;智能办公场景下,任务可在多设备间无缝流转;工业互联网领域,实时监控与智能调度显著提升生产效率。这一技术为智能化生活和工作提供了强大支撑,推动各行业向数字化、智能化发展。
209 0
|
对象存储
wangEditor 富文本详解(中)
wangEditor 富文本详解(中)
547 1
|
安全 Python
【视频】Python用GM(1,1)灰色模型预测模型对电力预测
【视频】Python用GM(1,1)灰色模型预测模型对电力预测
|
消息中间件 Kafka API
【极数系列】ClassNotFoundException: org.apache.flink.connector.base.source.reader.RecordEmitter & 详细分析解决
【极数系列】ClassNotFoundException: org.apache.flink.connector.base.source.reader.RecordEmitter & 详细分析解决
754 0
|
存储 编译器 Linux
【C++】float / double 与 0 值比较
使用普通的比较没有问题,如果考虑精度的话,需要与具体的值比较
1641 0
【C++】float / double 与 0 值比较
|
消息中间件 运维 关系型数据库
KnowStreaming系列教程第一篇——安装和使用
KnowStreaming系列教程第一篇——安装和使用
908 0
|
IDE NoSQL 数据可视化
【Linux】顶级编辑器Vim的基本使用及配置
【Linux】顶级编辑器Vim的基本使用及配置
736 0
【Linux】顶级编辑器Vim的基本使用及配置