c语言顺序结构和选择结构

                              第八次课-----顺序结构和选择结构
 一、算法的基本结构
 算法:解决问题的方法(结构)

 计算从1开始加到10的结果
 算法一:1+2+3+4+5+6+7+8+9+10=55
 算法二:(1+10)*10/2=55

 算法的三种基本结构:顺序结构、选择结构(分支结构)和循环结构。

 二、顺序结构:按语句书写的先后顺序依次执行的结构。
 1.复合语句:由大括号{}中的0个或多个声明和语句列表共同构成。

 int main(void)
{
  int a = 0;
  int b = 0;
  a = 5;
  b = 4;
  {
     int a = 6;//变量声明
     printf("%d\n",a);//这个a的值是6,和前面的a不是同一个
     a++;//自增表达式语句
     printf("%d\n",a);//函数调用语句
     ++b;
  }
  printf("%d\n", a);//这个a的值是5
  printf("%d\n",b);
  return 0;
}

 注意:
 1>复合语句不以分号;作为结束符,即最后的}后面不加分号。

 2>在复合语句中可以定义变量,但仅在复合语句中有效,即作用域是{}括起来的部分。
 指出下列程序的错误。
 int main(void)
{
  int b = 0;
  b = 4;
  {
     int a = 6;
     printf("%d\n",a);
     a++;
     printf("%d\n",a);
     ++b;
  };//错误,不能加;
  printf("%d\n", a);//错误,a没有定义
  printf("%d\n",b);
  return 0;
}

 三、选择结构(分支结构):根据条件判断来选择执行哪一条语句。
 选择结构的语句有:if条件语句和switch多路分支语句。
 1.if语句
 if(条件表达式)
   语句1;
 执行过程:如果条件表达式的值为真,则执行语句1,否则不执行语句1。
 demo:输入a和b的值,判断并输出最大值
 int main(void)
 { 
     int a = 0;
     int b = 0;
     int max = 0;
     printf("请依次输入a和b的值:");
     scanf("%d%d",&a,&b);
     max = a;
     if(max < b)
      max = b;
     printf("max:%d\n",max);
     return 0;
 }
 注意:if条件语句中的语句1不是只有一条语句的意思,可以是多条语句用{}括起来的复合语句。
 int main(void)
 { 
     int a = 0;
     int b = 0;
     int max = 0;
     printf("请依次输入a和b的值:");
     scanf("%d%d",&a,&b);
     max = a;
     if(max < b)
     {
        max = b;
        printf("a < b \n");
     }
     printf("max:%d\n",max);
     return 0;
 }
 2.if...else语句
 if(条件表达式)
   语句1;
 else
   语句2;
 执行过程:如果条件表达式的值为真,则执行语句1,否则执行语句2。

 demo:输入a和b的值,判断并输出最大值
 int main(void)
 { 
     int a = 0;
     int b = 0;
     int max = 0;
     printf("请依次输入a和b的值:");
     scanf("%d%d",&a,&b);     
     if(a < b)
      max = b;
     else
      max = a;
     printf("max:%d\n",max);
     return 0;
 }
 3.if...else if语句
 if(条件表达式1)
  语句1;
 else if(条件表达式2)
  语句2;
 else if(条件表达式3)
  语句3;
 ....
 else
  语句n;

 执行过程:依次判断条件表达式的值,当某个值为真时,则执行相应的语句,然后跳出整个if语句之外,继续执行后面的程序。如果所有的表达式都为假,则执行语句n,然后继续执行后面的程序。 
  
  demo:输入成绩分数,并判断该成绩属于哪个等级
  int main(void)
  {
      int score = 0;
      printf("请输入成绩:");
      scanf("%d",&score);
      if (score >= 0 && score <= 100)
      {
        if(score >= 90)
          printf("A+\n");
        else if(score >= 80)
          printf("A\n");
        else if(score >= 70)
          printf("B+\n");
        else if(score >= 60)
          printf("B\n");
        else
          printf("不合格\n");
      }
      else
        printf("请输入合法的成绩!");
      return 0;
  }

 4.if语句嵌套:当if语句中的执行语句又是if语句时,则形成了if语句嵌套。

 if(条件表达式)
   if语句;
 或者
 if(条件表达式)
   if语句;
 else
   if语句;

 demo:修改下面的程序使程序:输入a和b的值,判断最大值是否大于100,是则输出最大值。
 
 int main(void)
 {
     int a = 0;
     int b = 0;
     printf("请依次输入a和b的值:");
     scanf("%d%d",&a,&b);
     if(a < b)
      if(b > 100)
       printf("max:%d\n",b);
     else
      if(a > 100)
       printf("max:%d\n",a);
     return 0;
 }

 注意:C语言规定,else总是与它前面最近的为配对的if配对。
 所以修改后应为:
 int main(void)
 {
     int a = 0;
     int b = 0;
     printf("请依次输入a和b的值:");
     scanf("%d%d",&a,&b);
     if(a < b)
     {
      if(b > 100)
       printf("max:%d\n",b);
     }
     else
     {
      if(a > 100)
       printf("max:%d\n",a);
     }
     return 0;
 }

 demo:输入a、b、c的值,判断并输出最大值
 int main(void)
 {
     int a = 0;
     int b = 0;
     int c = 0;
     int max = 0;
     printf("请依次输入a、b、c的值:");
     scanf("%d%d%d", &a, &b,&c);//
     if (a > b)
     {
    if (a > c)
      max = a;
    else
      max = c;
     }
     else//b > a
    {
    if (b > c)
      max = b;
    else
      max = c;
    }        
    printf("max:%d\n", max);
    return 0;
 }

 5.switch多路分支语句
 switch(表达式)//1
 {
    case 常量表达式1:语句1(集合);
    case 常量表达式2:语句2(集合);
    ...
    case 常量表达式n:语句n(集合);
    default:语句n+1;
 } 
 执行过程:首先计算表达式的值,与常量表达式i进行比较,如果与其中一个常量表达式i的值相等,就执行其后的语句直到遇到break语句才结束switch语句,如果case后无break语句,则继续执行随后所有的case后的语句。如果没有找到与表达式的值相匹配的常量表达式,则执行default后的语句n+1。

 demo:输入数字1-7,并输出显示对应的星期
 int main(void)
{
    int week = 0;    
    printf("今天星期几:");
    scanf("%d", &week);//1---'1'
    switch (week)//week是表达式
    {
    case 1:printf("今天是星期一\n"); break;    
    case 2:printf("今天是星期二\n"); break;
    case 3:printf("今天是星期三\n"); break;
    case 4:printf("今天是星期四\n"); break;
    case 5:printf("今天是星期五\n"); break;
    case 6:printf("今天是星期六\n"); break;
    case 7:printf("今天是星期天\n"); break;
    default:printf("输入数据有误!\n");
    }
    return 0;
}

  注意:
  1>switch后面括号中的表达式可以是整型、字符型和枚举型。
  2>在case后的各常量表达式的值不能相同 
  3>在case后,允许有多个语句,可以不用  {}括起来,而整个switch结构一定要有一  对{}
  4>各case和default语句的先后顺序可以改  变,不影响程序执行结果。

  demo:指出以下程序的错误
  int main(void)
{
    float week = 0;    
    printf("今天星期几:");
    scanf("%f", &week);
    switch (week);//week不能是浮点型,  
                //不能有;,缺少{
    
    case1:printf("今天是星期一\n"); break;//case 后面要空格    
    case 2:printf("今天是星期二\n"); break;
    case 3:printf("今天是星期三\n"); break;
    case 4:printf("今天是星期四\n"); break;
    case 5:printf("今天是星期五\n"); break;
    case 6:printf("今天是星期六\n"); break;
    case 7:printf("今天是星期天\n"); break;
    default:printf("输入数据有误!\n");
    //缺少}
    return 0;
}

 6.条件运算符和条件运算表达式: (?:)
 表达式1 ? 表达式2 :表达式3
 求值过程:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为条件表达式的值.
  
 demo:输入a、b的值,判断并输出最大值
 int main(void)
 { 
     int a = 0;
     int b = 0;
     int max = 0;
     printf("请依次输入a和b的值:");
     scanf("%d%d",&a,&b);    
     max = a>b?a:b;
     printf("max:%d\n",max);
     return 0;
 }

猜你喜欢

转载自blog.csdn.net/qq_41992378/article/details/82731859