第四章
2018-01-02 本文已影响0人
White541
18.1.1~18.1.2
[TOC]
第四章:C程序控制
for循环语句
for循环语句的标准格式是:
for(表达式1; 表达式2; 表达式3)
语句
-
其中,表达式1用于对循环控制变量初始化,表达式2是循环继续条件,表达式3用于对循环控制变量进行增值;
-
很多情况下,表达式1和表达式3是用逗号运算符分隔的表达式组,组中各个表达式一次从左向右求值;
-
在for循环语句的初始化和增量部分,只编写与循环控制变量有关的表达式;
-
for循环语句的三个表达式可以选择省略,但分号
;
需保留。
//计算存款利息
#include <stdio.h>
#include <math.h>
int main(void)
{
double principal=1000, amount, rate=0.05;
int year = 1;
printf("%4s%21s\n", "Year", "Amount on deposit"); //制表
for (; year <= 10; year++)
printf("%4d%21.2f\n", year, amount = principal * pow(1.0 + rate, year));
return 0;
}
-
double
为双精度浮点数类型,变量比float
更大,精度也更高; -
pow(x,y)
函数能够求得x的y次幂,它接收两个double
型实参,返回一个double
型结果。使用pow
函数前,需在源程序中包含头文件math.h
; - 转换说明符
%21.2f
表明这个变量占用的域宽为21,保留的精度为2; - 若显示出的数码个数小于域宽,将会自动向右对齐。在
%
与域宽之间插入减号-
能实现左对齐。
Switch多重选择语句
switch
多重选择语句由一系列case
从句和一个可选的default
从句组成,每个case
只能测试一个整型常量表达式。
#include <stdio.h>
int main(void)
{
int grade;
int aCount = 0;
int bCount = 0;
int cCount = 0;
while ((grade = getchar()) != EOF) {
switch (grade) {
case'A':
case'a':
++aCount;
break;
case'B':
case'b':
++bCount;
break;
case'C':
case'c':
++cCount;
break;
case'\n': //对换行或空白符处理
case'\t':
case' ':
break;
default:
printf("Incorrect letter. Enter a new letter/n");
break;
} //end switch
} //end while
printf("A:%d\n", aCount);
printf("B:%d\n", bCount);
printf("C:%d\n", cCount);
return 0;
}
-
getchar
函数表示从键盘读入一个字符,类型为char
的整数;除了使用getchar
从键盘录入字符外,还可使用scanf_s
,通过转换说明符%c
来输入字符; -
EOF
意为“End Of File”,为符号常量,windows中通过Ctrl + Z
实现输入; - 每个case标签下可有多个操作语句而不需要使用花括号括起;
- 当每次只需要一个字符时,需要对输入流中的换行或其他空白符进行处理;
- 除了
int
和char
外,C语言中还有short
(-32768 ~ +32768)、long
(-2147483648 ~ +2147483648),int
取值范围至少与short
相当但不超出long
,数据类型signed char
可表示范围在-128 ~ +127之间的整数或计算机字符中的任意字符; - 字符常量用单引号
''
括起来的特定字符表示。
do...while循环语句
执行do...while
循环语句时,首先执行循环体,然后再进行循环条件的测试,因此,do...while
循环语句的循环体至少被执行一次。应当使用花括号括起循环体,以避免与while
循环语句的混淆。
//打印1到10
#include <stdio.h>
int main(void)
{
int counter = 1;
do {
printf("%d\n", counter);
} while (++counter <= 10);
return 0;
}
break和continue语句
- 在
while
、for
、do...while
和switch
语句中,执行break
语句将导致程序立即从这些语句中退出,转去执行紧跟这些语句之后的下一条语句。 - 在
while
、for
、do..while
循环结构中,执行continue
语句会使控制流略过循环体中剩余语句,重新开始新一轮循环。在while
和do...while
循环结构中,执行continue
语句后,将立即开始下一环节循环条件的测试;在for
循环语句中,执行continue
语句后,将立即开始下一轮环节的增量表达式,然后开始循环条件测试。 - 因此使用
continue
语句时,while
与for
循环结构工作方式不同。
性能提示:对于结构化程序设计技术,适当使用
break
与continue
语句有助于程序运行速度更快。
逻辑运算符
- 逻辑与运算符
&&
、逻辑或运算符||
都是二元运算符,从左到右结合;逻辑非!
是一元运算符,从右向左结合。 - 给出目前为止运算符优先级和结合律:
运算符 | 结合律 | 类型 | ||
---|---|---|---|---|
++ (后缀) -- (后缀) |
从右向左 | 后缀类 | ||
+ - ! () ++ (前缀) -- (后缀) |
从右向左 | 一元类 | ||
* / %
|
从右向左 | 乘法类 | ||
+ -
|
从左向右 | 加减类 | ||
< <= > >=
|
从左向右 | 关系类 | ||
&& |
从左向右 | 逻辑与运算符 | ||
` | ` | 从左向右 | 逻辑或运算符 | |
!= ==
|
从左向右 | 相等类 | ||
?: |
从右向左 | 条件类 | ||
= += -= *= /= %=
|
从右向左 | 赋值类 | ||
, |
从左向右 | 逗号运算符 |
区分相等运算符==
和赋值运算符=
在一常量一变量中使用相等运算符如 x == 7
时,习惯写为 7 == x
,即将常量写在左边,有助于避免运行时发生的逻辑错误。
错误预防提示:程序编写完成后,用文本搜索器检索程序中每一个
=
,检查其是否使用正确。