C Primer Plus学习之C控制语句(分支和跳转)
c控制语句:分支和跳转
本章的内容如下(有点多。。)
关键字:if , else , switch , continue , break , case , default , goto运算符:&&、||、?:函数:getcher( ) , putcher( ) , ctype.h系列如何使用if和ifelse语句,如何嵌套它们在更复杂的测试表达式中用逻辑运算符组合关系表达式c的条件运算符switch语句break、continue和goto语句使用c的字符i/o函数:getcher( ) 和 putcher( )ctype.h头文件提供的字符分析函数系列if语句
在最开始,书上的引入程序是一个通过输入一些天数的温度,来计算在这些天中,0度以下的寒冷天气战的百分比/*colddays.c -- 找出0度以下的天数占总天数的百分比*/ #include int main(void) { const int foreeezing = 0; float temperature; int cold_days = 0; int all_days = 0; printf("enter the list of daily low temperatures.\n"); printf("use celsius, and enter q to quit.\n"); while(scanf("%f", &temperature) == 1){ all_days++; if (temperature < foreeezing){ cold_days++; } } if (all_days != 0){ printf("%d days total: %.lf%% were below freezing.\n", all_days, 100.0 * (float) cold_days / all_days); } if (all_days == 0){ printf("no date entered!\n"); } return 0; }enter the list of daily low temperatures.
use celsius, and enter q to quit.
12 5 -2.5 0 6 8 -3 -10 5 10 q
10 days total: 30% were below freezing.
程序分析:
程序中while循环的测试条件利用scanf()的返回值来结束循环,因为scanf()在读取到非数字是会返回0 。temperature的类型是float类型而不是int类型,这样扩大了temperature的取值范围,不仅仅局限于整数。
while循环中首次出现了if语句:
if (temperature < foreeezing){ cold_days++; }
if语句只是计算机,如果刚刚读取的temperature值小于0,就执行cold_days++,即寒冷天数加一天;如果不,就跳过cold_days++,让while循环继续读取下一个数。
while循环之后,又通过两个if语句来控制程序的输出。如果上面输入了数据,就打印前一个if语句中的结果;反之告诉执行者没有输入数据(当然这里其实并不需要使用两个if语句,后面会有介绍)。在printf()语句中,把百分比强制转换为float类型,其实并没有必要加上强制转换,因为100.0*cold_days求值时已经被转换成了float类型,这么做是为了让程序能适应各种编译器。
if语句被称为分支语句,或者选择语句,因为它相当于一个交叉点,程序又在两个分支中选择一条执行,if语句的通用形式如下:
if(expression){
statement
}
如果对表达式(expression)求值为真,就执行语句(statement)否则就不执行。这似乎与while语句很相似,但是while语句可以执行多次,而if语句只会执行一次。
ifelse语句
上面的if语句,可让程序选择执行一条语句或者跳过,还有一种语句,即ifelse语句,可以让程序在两条语句中进行选择。
if (all_days != 0){ printf("%d days total: %.lf%% were below freezing.\n", all_days, 100.0 * (float) cold_days / all_days); } if (all_days == 0){ printf("no date entered!\n"); }现在可以将这段用ifelse语句来写
if (all_days != 0){ printf("%d days total: %.lf%% were below freezing.\n", all_days, 100.0 * (float) cold_days / all_days); } else{ printf("no date entered!\n"); }
这里的else相当于原来的if (all_days == 0)。
ifelse语句的通用格式如下:
if(expression){
statement1
}
else{
statement2
}
如果对表达式(expression)求值为真,就执行statement1,否则就执行statement2 。这里的语句不一定只是一条语句,也可以是很多条,需要用大括号{}将其包括起来,形成一个块,当然这也算是一条语句。如果有多条语句而没有大括号,就会出错。
上一篇: C语言浮点数在内存中的存储介绍
下一篇: 炖羊肉汤羊肉需要炒吗