1月17日 C Primer Plus学习
7.1 if 语句
if语句被称为分支语句(branching statement)或选择语句(selection statement),因为它相当于一个交叉点,程序要在两条分支中选择一条执行。
if语句的通用形式如下:
if ( expression )
statement
如果对expression求值为真(非0),则执行statement;否则,跳过 statement。与while循环一样,statement可以是一条简单语句或复合语句。
if 语句的结构和while语句很相似,它们的主要区别是:如果满足条件可执行的话,if语句只能测试和执行一次,而while语句可以测试和执行多次。
通常,expression 是关系表达式,即比较两个量的大小(如,表达式 x > y 或 c == 6)。如果expression为真(即x大于y,或c == 6),则执行statement。否则,忽略statement。概括地说,可以使用任意表达式,表达式的值为0则为假。 statement部分可以是一条简单语句。
即使if语句由复合语句构成,整个if语句仍被视为一条语句。
7.2 if else 语句
if else语句的通用形式是:
if ( expression )
statement1
else
statement2
如果expression为真(非0),则执行statement1;如果expression为假或0,则执行else后面的statement2。
statement1和statement2可以是一条简单语句或复合语句。
C并不要求一定要缩进,但这是标准风格。缩进让根据测试条件的求值结果来判断执行哪部分语句一目了然。
如果要在if和else之间执行多条语句,必须用花括号把这些语句括起来成为一个块。
if 语句与if else 语句的区别如下:

7.2.1 另一个示例:介绍getchar() 和putchar()
getchar()函数不带任何参数,它从输入队列中返回下一个字符。例如,下面的语句读取下一个字符输入,并把该字符的值赋给变量ch:
ch = getchar();
该语句与下面的语句效果相同:
scanf("%c", &ch);
putchar()函数打印它的参数。例如,下面的语句把之前赋给ch的值作为字符打印出来:
putchar(ch);
该语句与下面的语句效果相同:
printf("%c", ch);
由于这些函数只处理字符,所以它们比更通用的scanf()和printf()函数更快、更简洁。而且,getchar()和 putchar()不需要转换说明,因为它们只处理字符。
这两个函数通常定义在 stdio.h头文件中。
7.2.2 ctype.h 系列的字符函数
ctype.h头文件包含了一系列专门处理字符的函数的原型。
这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真);否则,返回0(假)。
例如,如果isalpha() 函数的参数是一个字母,则返回一个非零值。
ctype.h头文件中的字符测试函数:

ctype.h头文件中的字符映射函数:

7.2.3 多重选择else if
实际上,else if 是已学过的 if else 语句的变式。
对于编译器的限制范围,C99标准要求编译器最少支持127层套嵌。
7.2.4 else 与if 配对
规则是,如果没有花括号,else与离它最近的if匹配,除非最近的if被花括号括起来。

注意:要缩进“语句”,“语句”可以是一条简单语句或复合语句。编译器是忽略缩进的。
编程练习第七题
#include<stdio.h>
int main()
{
printf("请输入一周工作的小时数:\n");
float salary,tax,salary2,i;
scanf("%f",&i);
if (i <= 30)
{
salary = i * 10.00;
tax = salary * 0.15;
}
else if (i <= 40)
{
salary = i * 10.00;
tax = 300 * 0.15 + (salary - 300) * 0.20;
}
else
{
salary = (40 + (i - 40) * 1.50) * 10.00;
if (salary <= 450)
{
tax = 300 * 0.15 + (salary -300) * 0.20;
}
else
{
tax = 300 * 0.15 + 150 * 0.20 + (salary - 450) * 0.25;
}
}
printf("你的工资总额是%.2f美元,税金是%.2f美元,净收入是%.2f美元", salary, tax, salary - tax);
return 0;
}
浙公网安备 33010602011771号