0
点赞
收藏
分享

微信扫一扫

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


          第6章 C控制语句:循环

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

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)。

C primer plus 学习笔记 第6章 C控制语句:循环_关系运算符_02

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

举报

相关推荐

0 条评论