语句
语句是用来向计算机系统发出指令的。C程序的执行部分是由语句组成的,所以一个程序应当包含了若干语句;程序的功能是有执行语句实现的。
C语句可分为五类:表达语句,函数调用语句,控制语句,复合语句和空语句。
表达语句
表达语句有表达式加上分号";"组成。其一般格式为:
表达式;
函数调用语句
即由函数名,实际参数加上分号组成。一般格式为:
函数名(实际参数);
执行函数语句就是调用函数体,并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求函数值。例如:
printf("hello world");
就是一个函数调用语句,printf函数是函数库中已有的函数,不需用用户自定义。
控制语句
C语言程序从执行方式看,可以分为顺序,选择和循环3种基本结构。一般都是这三种结构的复杂组合。C语言中规定了9种控制语句,用于实现选择结构与循环结构。它们可以分为以下三类:
1.条件判断语句:if语句,switch语句。
2.循环执行语句:do-while语句,while语句,for语句。
3.转向语句:break语句,goto语句,continue语句,return语句。
复合语句
把多个语句用花括号“{}”括起来组成的一条语句称为复合语句,在程序中应把复合语句看作是单条语句,而不是多条语句。例如:{ t=a;
a=b;}
空语句
只由分号“;”组成的语句叫空语句。
;
(什么也不执行的语句)
控制结构
分为三种:顺序结构、分支结构和循环结构。
顺序结构
顺序结构是最简单的程序结构,计算机从程序的第一条语句开始执行,一直到结束,中间没有分支跳转,也没有循环结构。
分支结构
循环结构
语句
if语句
If语句有三种表达形式。
第一种形式: if(表达式) 语句组
其语义是:如果表达式的值为真(非0,负数也行),则执行其后的语句组,否则不执行该语句。
第二种形式:
if(表达式)
语句组1
else
语句组2
其语义是:如果表达式的值为真,则执行语句组1,否则执行语句组2.
第三种形式:
if(表达式1)
语句组1
else if(表达式2)
语句组2
else if(表达式3)
语组3
...
else if(表达式m)
语句组m
else 语句组n
其语义是:依次判断各表达式的值,当出现某个值为真时,则执行其对应的语句,然后跳到整个if语句之外继续执行程序;若所有表表达式都为假,则执行语句组n,然后继续执行后续程序。
- else子句不能做为语句单独使用,它必须是if语句的一部分,与if配对使用。
- if与else后面可以包含一个或多个内嵌的操作语句。
- 单条语句,只有一个printf语句,时if、else if、else后面可加{}可不加{}。
- 写多条语句时,要用到{},将代码括起来。
条件运算符“?”
C语言中的条件与算符功能强大且使用灵活,在条件与算符的基础上形成的条件表达式语句能够代替某些if-else语句。这个三目运算符的一般格式如下:
表达式1?表达式2:表达式3
max=a>b? a:b;
使用时应注意:1.条件运算符优先于赋值运算符,比关系运算符和算术运算符都低。
2.条件运算符的结合方向为自左向右。
3.条件表达式中,表达式1的类型可以与表达式2和3的不同。
switch语句
switch(表达式)
{
case 常量表达式1:
语句一:
case 常量表达式2:
语句2;
......
case 常量表达式n:
语句n;
default:
语句n+1;}
其语义是:计算表达式的值,并逐个与其后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句;如果表达式的值与所有case后的常量表达式值均不相同,则执行default后的语句。
每一个case后的常量表达式的值必须互不相同,各个case和default的出现次序不影响执行结果;在执行完一个case分支后,如果想使流程跳出switch结构,可以在相应的语句后加break来实现,最后一个default可以不加break语句。
default表示与表达式和所有常量表达式都不匹配,那么就执行default语句组。如果都不匹配那么不需要执行任何语句,则default可以省略
case和default后可以没有语句。
注(可以将switch函数看做一个贩卖机)
While 语句
一般形式:while(表达式)语句
int i=1,sum;
while(i<21)
{sum=sum+1;
i++;}
printf("sum=%d",sum);
其语义是当表达式为非0值(可以为负数)时,执行while语句中的内嵌语句。该语句的特点是先判断表达式,后执行语句。
说明:1.while语句中一般时关系表达式或逻辑表达式,只要表达式的值为真,即可继续循环。
2.循环体如果包括一个以上的语句,应用花括号括起来,以复合语句的形式出现。如果不加花括号,则while语句的范围直到while后面第一个分号处。
3.应避免死循环
do-while语句
一般形式:do
循环体语句
while(表达式)
其语义是:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非0(真)时,返回重新执行循环语句,如此反复,知道表达式的值为0为止,此时循环结束。其特点是:先执行循环体,然后判断循环条件是否成立。
例如实现1到20的倒数和。
for语句
一般格式:for(表达式1;表达式2;表达式3)语句;
其执行过程如下:
(1).求解表达式1.
(2).求解表达式2.若其值为非0,则执行for语句中指定的内嵌语句,然后执行步骤(3);若表达式的值为0,则结束循环,跳转步骤(5)。
(3).求解表达式3。
(4).返回步骤(2)继续执行。
(5).循环结束,执行for语句下面的一个语句。
说明:(1)表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句为给循环标量赋初值,此时可以省略该表达式。
(2)表达式2通常是循环条件,一般为关系表达式或逻辑表达式。如果表达式2省略,即不判断循环条件,也就是认为表达式2始终为真,则循环将用户无止境地进行下去。
(3)表达式3通常可以用来修改循环变量的值,一般是赋值语句。表达式3也可以省略,但此时程序设计者应另外设法保证循环能够正常结束。
(4)表达式1,表达式2,表达式3这三个语句之间必须用分号隔开。
for语句的变体
1.用逗号运算符使用两个或两个以上的变量共同实现对循环的控制。
for(x=0,y=0;x+y<20;++x)
{printf("");
scanf("%d",&y);
...}
2.表达式可以省略,但分号不能省略。
int i=1,sum=0;
for(;i<=100;i++)
{sum=sum+1;
printf("the sum is%d",sum);}
3.表达式2也可以省略,即不判断循环条件,循环将无终止地进行。例如:
for(;;)
printf("it will run forever!!");
4.省略表达式1和表达式3的for语句实现的功能相当于while语句所能实现的功能
int i,sum=0; int i=1,sum=0;
for(;i<=100;) while(i<=100)
{ sum=sum+1; { sum=sum+i;
i++; } i++; }
5.如果3个表达式都省略。
int i=1,sum=0;
for(;;)
{ if(i<=100)
break;//使用break跳出for循环,否则程序陷入死循环。
sum=sum+i;
i++; }
continue语句
一般格式:continue;
其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,而转入下一次循环条件的判断与执行。(注:只能用在循环体中)
continue和break语句的最大区别在于,break结束整个循环,continue只结束本次循环而继续进行下一次循环。
continue在while中的用法
continue在for循环中的用法
![93540218a4ab42888818b27a802670cb.png](https://i-blog.csdnimg.cn/blog_migrate/d630736d7fa2c9ed47e4407354cf142c.png)
break语句
一般形式:break;
其语义是:跳出循环。
return语句
return语句将被调用函数中的一个确定值带回主调函数中。如果需要从被调函数返回一个函数值,被调函数一定要包含return语句。当执行到return语句时,就按照return关键字后面的要求返回相应的内容给主函数。即使被调用函数后面还有语句也不执行。因此,return语句也被看作函数执行的结束语句。如果不需要从被调函数中返回值,则可以不使用return语句。
除了被定义为void类型的函数外,所有函数都返回一个值。这个值由return语句明确给出;如果没有return语句则返回0。(不返回函数值的函数,可以明确定义为空类型,类型声明符为void)
return语句后面可以是一个值,也可以是一个表达式。例:return a+b;
return语句后面可以使用括号,也可以不使用。例:return (x);或return x;
函数可以有返回值,只要 return 就可以给出一个。不过人们常常不用它,有两个原因:
1、C/C++里返回值是复制出去的,而对于大的对象,复制的代价很高;
2、有些对象是不能复制的--至少编译器不知道怎么复制--比如数组。
goto语句
goto语句也称为无条件转移语句,
一般格式为:格式(1)
名字:
执行语句;
goto 名字;
格式(2)
goto 名字;
名字:
执行语句;
其语义是:改变程序流向,转去执行语句标号所标示的语句。
”语句标点“是按标识符规定书写的符号,放在某一语句的前面,标号后加冒号(:)。语句标号主要起到标识语句的作用,与goto语句配合使用。
例如: label:i++;是合法的,而123:i++;是不合法的。
这段代码我们会死循环的一直打印1 2,当程序看到a:时,他不管,直接往下走,到达goto flag时,他又回到第三行代码,就这样一直循环。
goto语句一般来说可以有两种途径:
1.与if语句一起构成循环结构。
2.从循环体跳转到循环体外。
注意:尽可能少使用goto语句,因为乱用会造成所编写的程序混乱、系统崩溃、可读性差等。