c语言-程序设计_c语句+循环结构

一、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  
switch嵌套

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()
      {
           ......
      }
      ......
}
while 嵌套 while
do
{
      ......
      do
      {
           ......
      }while();
      ......
}while();
do-while 嵌套 do-while
for( ; ; )
{
      ......
      for( ; ; )
      {
           ......
      }
      ......
}
for 嵌套 for
for( ; ; )
{
      ......
     while( )
      {
           ......
      }
      ......
}
for 嵌套 while
while()
{
      ......
      do
      {
           ......
      }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 语句结束本次循环

 

猜你喜欢

转载自www.cnblogs.com/dabj-yb/p/12521366.html