三种结构和各种语句详解

语句

语句是用来向计算机系统发出指令的。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;}

空语句

只由分号“;”组成的语句叫空语句。

(什么也不执行的语句)

 控制结构

分为三种:顺序结构、分支结构和循环结构。

顺序结构

顺序结构是最简单的程序结构,计算机从程序的第一条语句开始执行,一直到结束,中间没有分支跳转,也没有循环结构。

分支结构

6b981f43e0364a398554f1dc52adee93.jpeg

循环结构

38261a2df6124fac8d55ff906867bdef.jpeg

语句

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,然后继续执行后续程序。

  1. else子句不能做为语句单独使用,它必须是if语句的一部分,与if配对使用。
  2. if与else后面可以包含一个或多个内嵌的操作语句。
  3. 单条语句,只有一个printf语句,时if、else if、else后面可加{}可不加{}。
  4. 写多条语句时,要用到{},将代码括起来。

   条件运算符“?”

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函数看做一个贩卖机)

bc9349edd33b4c6bb910926b48b47bd7.png

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的倒数和。

7aab8f12143b4c7994d410129fa2ca5c.png

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这三个语句之间必须用分号隔开。

68817fe8ec9944b48de21f00b570605c.jpeg

c38167003adb46bd93af11a6b3036248.png

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中的用法

4c38f83daa5944e095bf447d48ebb3a0.png

continue在for循环中的用法

93540218a4ab42888818b27a802670cb.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++;是不合法的。

c35422e440374fa198ce491f230f3c62.png

fa0726a2044f4f8499845bd0628cf95d.png 这段代码我们会死循环的一直打印1 2,当程序看到a:时,他不管,直接往下走,到达goto flag时,他又回到第三行代码,就这样一直循环。

goto语句一般来说可以有两种途径:

1.与if语句一起构成循环结构。

2.从循环体跳转到循环体外。

注意:尽可能少使用goto语句,因为乱用会造成所编写的程序混乱、系统崩溃、可读性差等。

  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值