C语言程序设计——流程控制(C语言第一个重点)

1. 什么是流程控制

  • 概念:程序代码执行的顺序

流程控制的分类

一、顺序执行

二、选择执行

1.概念:某些代码可能执行,也可能不执行,有选择的执行某些代码
2.分类
  • if语句
    1. if最简单的用法

      格式:if(表达式)
      语句
      功能:如果表达式为真,执行语句,反之不执行

      • if的范围问题

        1. if(表达式)
          语句A;
          语句B;
          只控制A的执行或不执行,无法控制语句B一定会执行
        2. if(表达式)
          {
          语句A;
          语句B;
          }
          if都控制
    2. if…else…用法
      是一个语句

    3. if…else if…else…用法
      一个语句

       if(1)		成立执行A
       	A;
       if else(2)	1不成立,2成立执行B
       	B;
       else			1,2都不成立,执行C
       	C;
      
    4. 举例

      • 90<=score<=100
        写法是错误的
        因为:90<=score逻辑值永远为1或0,那么1或0永远小于100,所以执行的结果永远为真(1)
        正确的写法:90<=score&&score<=100

      • 两个变量值得互换

          例:int a=3;
          	  int b=5;
          方法:加一个另外变量	int t;
          	a,b互换如下 
          		t=a;
          		a=b;
          		b=t;
        
      • 对三个变量的值进行排序

          编写代码完成:a最大,b中间,c最小
          方法:定义一个中间变量t
        
        if(a<b)
        {
        	t=a;
        	a=b;
        	b=t;
        }
        if(a<c)
        {	
        	t=a;
        	a=b;
        	b=t;
        }
        if(b<c)
        {
        	t=b;
        	b=a;
        	a=t;
        }
        
    5. if的常见问题

      1. 空语句问题

         if(3>2);
         等价于
         if(3>2)
         	;		这是一个空语句
        
      2. 错误示范

         if(表达式1);			有一个空语句
         		A;				第二个语句
         else					else无法与第一个if语句匹配
         	B;
        
      3. 语句执行问题

         if(表达式1)
         	A;
         else if(表达式2)
         	B;
         else
         	C;
         即使表达式1和2都成立也只会执行A语句
        
      4. 语句逻辑上有漏洞(虽然不会出错)

         if(表达式1)
         	A;
         else if(表达式2)
         	B;
         else if(表达式3)
         	C;
        
      5. 不合法语句

         if(表达式1)
         	A;
         else(表达式2)		这样写法不正确:要么去掉(表达式2);要么在else后加if
         	B;			
        
  • switch语句
    1. 一般形式:

       switch(控制表达式)
       {
       	case常量表达式1:
       		语句1;
       		break;
       	case常量表达式2:
       		语句2;
       		break;
       	case常量表达式3:
       		语句3;
       		break;
       	.......
       	default:
       		语句n;
       		break;
       } 
      
    2. 举例

      scanf("%d",&val);
      switch(val)
      {
      	case 1:
      		printf("一层开\n");
      		break;
      	case 2:
      		printf("二层开\n");
      		break;
      	default :
      		printf("没有这一层\n")break;
      }break去掉后,输入1
      将输出:一层开和二层开
      因为:case1和case2都是程序的入口,先找到入口后再自上而下执行,不再进行判断。
      

      case后面的称为标签:常量表达式
      只能是:枚举常量、数值常量、字符、常变量、宏名

三、循环执行

1.定义:某些代码会被重复执行
2.分类
  • for语句

    1. 一般形式为:for(表达式1;表达式2;表达式3)
      注:for语句中的表达式可以部分或者全部省略,但是两个;不能省略。

    2. 执行过程

       for(i=1; i<4; ++i)		表达式(1,2,3)
       	sum = sum + i;		表达式 4	
       printf("sum=%d\n", sum);
       
       先执行1,在执行2(2成立的话),执行4,再执行3, 3执行完表示一次循环结束。
      
      i=1,1<=4 	成立
      sum=1,i=2	第一次循环结束
      
      i=2,2<=4		成立
      sum=1+2=3,i=3	第二次循环结束
      
      i=3,3<=4		成立
      sum=1+2+3=6,	第三次循环成立
      
      i=4,4<=4			成立
      sun=1+2+3+4=10,i=5	第四次循环成立
      
      i=5,5<=4		不成立
      执行下一个语句
      i的最终值是5
      
    3. 多个for循环的嵌套使用

       for(1;2;3)
       	for(4;5;6)
       		A;
       		B;
       先执行:1->2(成立)->4->5(成立)->A->6		一次循环结束 
       例如:
       	内部:6->5(成立)->A->6->5(不成立)
       	外部:->3->2(成立)->4->5(成立)->A->6
       			   ->5(不成立)->3->2(不成立)->B		结束
      
  • while语句

    1. 一般形式

       while(表达式)
       {	
       	循环体
       }
      
    2. 执行顺序

       while(表达式)
       	语句;
       表达式成立执行下面语句
      
    3. 举例

      求回文数
      	int main(void)
      	{
      		int val;
      		int m;
      		int sum=0;
      		scanf("%d",&val);
      		m=val;
      		while(m);
      		{
      			sum=sum*10+m%10;
      			m=m/10;
      		}
      		if(sum==m)
      		printf("YES\n");
      	}
      	```
      	整数求逆
      	对一个整数做%10得到它的个位数
      	对一个整数做/10,去掉它的个位数
      
      
  • do…while语句

    1. 一般形式:

       do
       {
       	循环体语句
       }while(表达式);
      
       先执行循环体里面的语句,然后判断表达式是否成立,如果表达式成立继续执行循环体语句
      

      do…while并不等价于for,也不等价于while

       主要用于人机交互
       例如:
       char ch;
       do
       {	
       	...
       	...
       	printf("想继续吗?(Y/N)");
       	scanf("%c",&ch);
       }while('Y'==ch||'y'==ch);
      
  • break语句和continue语句

    1. break语句作用

       1. 如果用于循环是用来终止循环的
       2. 如果用于switch则用来终止switch
       	break不能直接用于if,除非if属于循环内部的一个字句
      
      举例:
      for(i=1;i<3;++i)
      {
      	if(3>2)
      	 break;		终止for循环,一次也不输出哈哈
      	printf("哈哈\n");
      }
      
      注:在多层循环中break只能终止距离它最近的循环
      
    2. continue语句的作用

       用于跳过本次循环余下的语句,转去判断是否需要执行下次循环
       例:
       for(1;2;3)
       {
       	A;
       	B;
       	continue;		执行完本语句后会执行语句3,C,D会被跳过去
       	C;
       	D;
       }
      
       while(表达式)
       {
       	A;
       	B;
       	continue;		C,D会被跳过去,继续判断表达式是否成立
       	C;
       	D;
       }
      
3. 几种循环语句的比较
  1. for循环与while循环的相互比较
    for( ;条件; ) == while(条件)

     for(1;2;3)
     	A;
     
     等价于
     
     1;
     while(2)
     {
     	A;
     	3;
     }
    

    例子:

    for(i=1;i<101;++i)
    {
    	sum=sum+i;
    }
    等价于
    i=1;
    while(i<101)
    {
    	sum=sum+i;
    	++i;
    	
    }
    
  2. for while do…while使用时刻
    如果有固定次数使用for
    如果必须执行一次用do…while
    其他情况用while

如何看懂一个程序

分三步:

  1. 流程

     知道程序的流程是如何运行的
    
  2. 每个语句的功能

  3. 试数

你可能感兴趣的:(C语言程序设计,c语言)