1.程序的三种结构
顺序结构、分支结构、循环结构
2.语句的分类
空语句、基础语句(表达式语句、函数调用语句)、语句if、跳转语句goto、循环语句(for、while、do-while)、break和continue、switch
3.空语句
只有分号组成的语句叫空语句。空语句的一般用途:(1)纯粹消耗CPU时间,起延时作用 (2)为了程序的结构清楚,可读性好,以后扩充新功能方便
4.基础语句
(1)表达式语句
由表达式加上分号组成
(2)函数调用语句
函数名(实际参数表)
5.语句if
(1)布尔变量与零值比较
注意:不可将布尔量直接与TRUE、FALSE或者1、0作比较,根据布尔类型的语义,零值为假,任何非零值为真
假设布尔变量名字为flag,则正确用法为
if(flag) //表示flag为真
if(!flag) //表示flag为假
(2)整型变量与零值比较
应当将整型变量用“==”或“!=”直接与0比较
例如:if(value==0)或if(value!=0)
(3)浮点变量与零值比较
浮点变量不能用==或!=与任何数字比较
而是if((x>=-EPSINON)&& (x>=-EPSINON))其中EPSINON为允许的误差
(4)指针变量与零值比较
指针变量应当用==或!=与NULL比较
(5)补充:if(NULL==p)语法正确,是为避免程序员将p==NULL写成p=NULL, p=NULL语句是合法的,而程序会指出NULL=p非法,NULL==p在纠错的时候易发现
6. 跳转语句goto
goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。
如: label: i++;
loop: while(x<7);
C语言不限制程序中使用标号的次数,但各标号不得重名。goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。
goto语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难
7. 循环语句
常用for及while循环
1.两者都用于循环处理,基本流程相同,都包含初始化语句、循环体、循环执行条件、调整语句;
2.两者对break语句的处理机制也相同,直接退出循环不进行其他操作。
3.两者的主要差别就是对循环中continue语句的处理机制不同:
for循环中,当遇到continue语句时,会执行调整语句。
while循环中,当遇到continue语句时,不会执行调整语句。
在循环语句的效率中,如果可能将最长循环放在最内层,短循环放在最外层,可以提高速率。但如果更改后效率差别不大,以简洁为主
8.break和continue
break:跳出当前循环,且对if-else条件语句不起作用
continue;跳过本次循环强制执行下一次循环,常与if来加速循环
break语句还可以用在switch语句中,用来跳出switch语句。
9.switch
switch()
{
case 1:
{
break;
}
case 2:
{
break;
}
……
default:
{
break;
}
}
注意,每个case结尾加break,否则会导致多分支重叠;不要忘记default分支。
10.if语句的注意事项
(1)在三种形式的if语句中,在if关键字之后均为表达式。 该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:
if(a=5) 语句;
if(b) 语句;
都是允许的。只要表达式的值为非0,即为“真”。如在:
if(a=5)…;
中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。
又如,有程序段:
if(a=b)
printf("%d",a);
else
printf("a=0");
本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。
(2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。
(3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。