一、c语句概述
1、c语句
用来对数据进行加工(完成操作任务)。是构成程序的基本单位,通常一个c程序由若干个函数(系统、用户)组成,每一函数由若干条语句组成。每条语句总是以‘;’结束。
2、c语句的分类
(1)简单语句
【1】表达式语句:由一个表达式后跟“;”组成
1—>赋值语句:赋值表达式加一个“;”,如 s = 3.14.59*r*r ; i ++;(与 i++不同)
2—>函数调用语句:函数调用表达式加一个“;”,如 printf("Hello,world \n") ;
【2】结构控制语句(9种):控制程序流程
1—>选择语句:if ... else switch
2—>循环语句:for while do ... while
3—>转向语句:continue break return goto
(2)复合语句:将一组语句包括在一对 { } 中
int i=0,sum=0; while(i<=100) { sum=sum+i; i=i+1; }
说明:<1>复合语句的 { } 之后不加分号
<2>复合语句中可以是简单语句、复合语句和空语句
(3)空语句:只有一个“ ; ”,什么也不做
for(i=0;i<100;i++) { ; }
(4)赋值语句:赋值表达式后加一个分号
if ((a=b)>0) //赋值表达式 t=a; //赋值语句
注意:<1>赋值表达式可以包含在其它表达式中,而赋值语句不可以
<2>赋值语句只能作为一条单独的语句,或放在复合语句中
<3>赋值语句用途很广
【1】另一种形式的赋值语句 <变量><运算符> = <表达式>;即<变量>=<变量><运算符><表达式>;
【2】连续赋值语句
int a , b , c ; a=b=c=1 ;
步骤:连续赋值语句应“从右向左”计算 a=b=c=1 ;等价于: a=(b=(c=1) );
1.把常数 1 赋给变量c,表达式(c=1) 的值为1;
2.把表达式(c=1)赋给变量b,表达式(b=(c=1) )的值为1;
3.将右侧表达式的值1赋给a , a =1 。
二、结构控制语句(9种)
1、if 语句
(1)if 语句的三种形式
【1】条件执行 if (e) A
main() { int x , y ; x=20 ; y=10 ; if (x>y) printf(“%d”,x); }
【2】分支选择 if (e) A else B
当e为真值(非0)时执行A,否则执行B或后续语句
main() { int x , y ; x=20 ; y=10 ; if (x>y) printf(“%d”,x); //A或B都可以是单一语句,也可以是复合语句 else //else部分不能独立存在,即else前一定有一个“;”,它必定是if语句的一部分 printf(“%d”,y); }
注:在C语言中,表达式e的值为非0 时,系统均按“真值”处理。
【3】else if 语句(阶梯式的 if - else 语句)
if (number>500) cost=0.15 ; else if (number>300) cost=0.1 ; else if (number>100) cost=0.075 ; else if (number>50) cost=0.05 ; else cost=0 ;
注:一般else与最近的 if 匹配
(2)if 语句的嵌套
If 语句中又包含一个或多个 if 语句称为 if 语句的嵌套。 实际上只要将前述 if 语句的形式1和2中的内嵌语句用一个 if 语句代替,即成为 if 语句的嵌套。 嵌套的 if 语句还可以嵌套另一个 if 语句,形成多重嵌套
if 嵌套的几种变形
if ~ else 配对原则:缺少{ }时,else总是和它上面离它最近的未配对的if 配对。
2、switch语句(多分支选择语句)
(1)格式
其中:表达式e可以是整型,字符型,枚举型;常量表达式Ci必须与表达式类型一致(整型与字符型通用)
注意:<1>常量表达式Ci仅起语句标号作用,不作求值判断
<2>常量表达式的值必须是唯一的,没有先后次序
<3>多个case语句可共用一组执行语句
(2)执行过程
【1】计算表达式e的值;
【2】若与常量表达式Ci值一致,则从语句i,开始执行;直到遇到break语句或switch语句的“ } ”;
【3】若与任何常量表达式值均不一致时,则执行default语句,或执行后续语句。

#include <stdio.h> void main( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++;b++; break; case 3: a++;b++; } printf(“\na=%d,b=%d”,a,b); } // a=2 , b=1
3、循环语句
(1)用 goto 语句和if语句构成循环(不提倡)
【1】goto 语句
goto 语句的一般形式:goto 语句标号
语句标号:用于定义程序中的某个位置,用标识符表示,不能只用数字
例:goto start 4(正确)
goto 20 6(错误)
goto 语句的功能是无条件地转到标号所指的语句
注:滥用 goto 语句会破坏结构化,所以应限制使用 goto
【2】用 goto 语句和if语句构成循环

#include "stdio.h" void main() { int k = 1, s = 0; loop: if (k <= 3) { s = s + k; k++; goto loop; } printf(" s = %d ",s); }
(2)用 while 语句(当型循环——先判断后执行)
【1】一般形式:while(表达式) 循环体语句;
while循环先判断表达式,若为真则执行循环体,再判断表达式,重复上述过程,直到表达式为假时退出循环,循环体有可能一次也不执行。
【2】注意事项
1.若循环体包含一条以上的语句,应以复合语句形式出现,用 { } 括起来
2.循环前,必须给循环控制变量赋初值
3.循环体中,必须有改变循环变量值的语句(使循环趋向结束的语句)
4.循环体可以为空,如:
while( ( c=getchar() ) != 'a'); //等价 c=getchar(); while( c != 'a') c=getchar();
5.下列情况,退出while循环:条件表达式不成立(为零),循环体内遇 break 、goto
6.无限循环 while(1) 循环体 ;
(3)用 do-while 语句(直到型循环——先执行后判断)
一般形式: do
循环体语句;
while(表达式) ; <—(分号不可省略!!!)
先执行循环体,然后判断表达式。若为真,则再次执行循环体,否则退出循环。
1. do-while 循环,循环体至少执行一次;
2. while和do-while可以解决同一问题,两者可以互换。
3. while后的表达式一开始就为假时,两种循环结果不同。
(4)用 for 语句(多功能)
for 语句是 C 语言中最为灵活,使用最广泛的循环语句,可完全替代while,do-while语句。
【1】一般形式:
常用形式:for(循环变量赋初值;循环条件;循环变量增值) 循环体语句;
For语句可以转换成while结构:
表达式1; while(表达式2) { 循环体语句; 表达式3; }
【2】其他形式:
1.省略表达式1:应在for之前为变量赋初值。
k = 1; for ( ;k<=3 ;k++) s = s+k;
2.省略表达式2:循环条件始终为“真”,循环不终止,将成为“死循环”,需要在循环体中引入break语句以退出循环。
3.省略表达式3:应另外设法使程序能够结束,即循环体内应有使循环条件改变的语句。
for( k = 1; k <= 3;) { s = s+k; k++; }
4.省略表达式1、3:完全等同于while语句。
k=1; for(; k<=3; ) { s = s+k; k++; } //等同于 k=1; while( k<=3) { s = s+k; k++; }
5.三个表达式都省略:无初值,不判断条件,循环变量 不增值,死循环。
6.表达式1、3可以是与循环无关的表达式,也可以是逗号表达式。 for ( s=0 , i=1 ; i<=100 ; i++ ) s=s+i;
7.表达式2可以是关系、逻辑、算术、字符表达式,非0时,执行循环体,为0时退出循环。
#include <stdio.h> main() { int i,c; for(i=0;(c=getchar())!='\n';i+=c) printf("%d ",i+c); }
for ( k=1; k-4; k++) //仅当k的值等于4时终止循环。k-4是数值表达式。
s=s+k;
4、break 语句和 continue 语句
(1)break 语句
【1】用 break 语句可以结束 switch 结构和三种循环。
【2】break只能终止并跳出最近一层的结构。
【3】break不能用于循环语句和switch语句之外的任何其它语句之中。
(2)continue 语句
用 continue 语句可以结束本次循环,即跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。
(3)break 和 continue 语句的区别
【1】continue 语句只结束本次循环,break语句则是结束整个循环。
【2】continue 语句只用于while,do-while,for循环语句中,break语句还可以用于switch语句中。
三、循环的嵌套
定义:一个循环体内又包含了另一个完整的循环结构,称为循环的嵌套。 三种循环可以互相嵌套,层数不限。 嵌套循环的执行流程。
1、几种合法的嵌套形式

while() { ...... while() { ...... } ...... }

do { ...... do { ...... }while(); ...... }while();

for( ; ; ) { ...... for( ; ; ) { ...... } ...... }

for( ; ; ) { ...... while( ) { ...... } ...... }

while() { ...... do { ...... }while(); ...... }
2、循环嵌套的说明
【1】嵌套的循环控制变量不能相同
【2】内循环变化快,外循环变化慢

void main() { int i,j; for(i=1;i<10;i++) printf("%4d",i); printf("\n------------------------------------\n"); for(i=1;i<10;i++) for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j); } //条件运算符: j=9,输出i*j,再回车换行。 j≠9,只输出i*j。
【3】正确确定循环体
【4】循环控制变量常用求解的问题挂钩
注意:循环可以互相嵌套,但不能相互交叉
四、几种循环的比较
1、不提倡用 goto 构成循环
2、关于循环的控制
3、循环体的执行
【1】先判断条件,循环体可能一次也不执行——while语句
【2】后判断条件,循环体至少执行一次——do-while语句
4、for循环功能强,两个界限不清,使程序设计较随意
5、都可以用 break 语句终止循环和 用 continue 语句结束本次循环