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 使用函数返回值的循环示例


相关文章
|
6月前
|
C语言
『C语言初阶』第三章-分支语句和循环语句
『C语言初阶』第三章-分支语句和循环语句
|
6月前
|
C语言 数据安全/隐私保护
C语言初阶②(分支语句和循环语句)编程练习
C语言初阶②(分支语句和循环语句)编程练习
56 1
|
2月前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
|
6月前
|
C语言 数据安全/隐私保护
C语言初阶①(分支语句和循环语句)知识点(下)
C语言初阶①(分支语句和循环语句)知识点
43 1
|
6月前
|
程序员 C语言
C语言程序设计——循环语句
C语言程序设计——循环语句
|
6月前
|
编译器 C语言
C语言初阶①(分支语句和循环语句)知识点(上)
C语言初阶①(分支语句和循环语句)知识点
48 0
|
安全 C语言
《C语言初阶篇》循环语句还没搞懂?这篇文章带你轻松学会循环语句!
《C语言初阶篇》循环语句还没搞懂?这篇文章带你轻松学会循环语句!
201 0
|
12月前
|
C语言
C语言分支语句和循环语句经典题及易错题
C语言分支语句和循环语句经典题及易错题
144 0
|
C语言 数据安全/隐私保护
c语言学习第五课——分支语句与循环语句及应用
c语言学习第五课——分支语句与循环语句及应用
75 0