零基础玩转C语言第一章—分支语句

简介: 零基础玩转C语言第一章—分支语句

前言:

今天我们来重点来学习分支语句的相关内容,对于分支语句大家应该都挺熟悉的,但是你一定还有一些知识不知道,不信就来看看!

1.什么是语句?

C语言中的语句分为以下五类:

(1)表达式语句                       3+5;                

(2)函数调用语句                    printf("hehe\n");    

(3)空语句:                           ;      

有时候我们需要一条语句,但是这条语句什么都不需要做,就可以使用空语句  

(4)控制语句:用于控制程序的执行流程

可分为以下三类:

<2>循环语句:do while语句,while语句,for语句

<3>转向语句:break语句,goto语句,continue语句,return语句

(5)复合语句

2.分支语句(选择结构

2.1if语句

语法结构:C语言中:0表示假,非0表示真

if(表达式)             if(表达式)                    //多分支   if(表达式1)

    语句;                    语句1;                                           语句1;

                                else                                               else if(表达式2)

                                    语句2;                                          语句2;

                                                                                      else

                                                                                           语句3;

代码演示:

单分支:

//单分支
#include<stdio.h>
int main()
{
  //如果年纪大于18输出成年人
  int age = 0;
  //输入
  scanf("%d", &age);
  //判断
  if (age >= 18)
    printf("成年人\n");
  return 0;
}

双分支: 注意else后面不跟表达式

//双分支
#include<stdio.h>
int main()
{
  //如果年龄大于等于18-成年人,否则打印-未成年人
  int age = 0;
  //输入
  scanf("%d", &age);
  //判断
  if (age >= 18)
    printf("成年人\n");
  else
    printf("未成年\n");
  return 0;
}

多分支:因为各个分支是相互排斥的,所以18-30大于18就可以不用写

//age<18  - 未成年
//18~30   - 青年
//31~50   - 中年
//51~70   - 中老年
//71~99   - 老年
//>99     - 老寿星
#include<stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age < 18)
    printf("未成年\n");
  else if (age <= 30)
    printf("青年\n");
  else if (age <= 50)
    printf("中年\n");
  else if (age <= 70)
    printf("中老年\n");
  else if (age <= 99)
    printf("老年\n");
  else
    printf("老寿星\n");
  return 0;
}

注意:(1)在C语言中要想表达18<age<30怎么表达:不能和数学中一样直接写,C语言中不存在连等

if(age>18&&age<30)

(2)if默认只能控制一条语句,要执行多条语句,就得加{}

#include<stdio.h>
int main()
{
  int age = 0;
  scanf("%d", &age);
  if (age >= 18)
  {//代码块
    printf("成年了\n");
    printf("谈恋爱\n");
  }
  return 0;
}
2.1.1悬空的else
#include <stdio.h>
int main()
{
  int a = 0;
  int b = 2;
  if (a == 1)
    if (b == 2)
      printf("hehe\n");
  else
      printf("haha\n");
  return 0;
}

大家可以看看这个程序的结果是多少?


其实什么也不打印,因为else的匹配规则是和它最近的if匹配


这就告诉我们代码风格很重要,我们可以适当使用{}使代码的逻辑更加清晰

 

#include <stdio.h>
int main()
{
  int a = 0;
  int b = 2;
  if (a == 1)
  {
    if (b == 2)
      printf("hehe\n");
    else
      printf("haha\n");
  }
  return 0;
}

改成这样就清晰的知道这个代码的逻辑


2.1.2if书写形式的对比
1. if(condition)
2.  { 
3. return x;
4.  }
5. return y;
6.

分析这个代码,思考一下是不是满足condition就return x,不满足就return y

答案使肯定的,但是这样的代码我们还要思考一下才能知道它的逻辑

if(condition)
 { 
     return x;
 }
else
{
     return y;
}

这样改进就可以清晰的知道其逻辑


我们再来看一个代码

#include <stdio.h>
int main()
{
  int a = 10;
  if (a == 5)
    printf("hehe\n");
  return 0;
}

我们看到第5行,对于我们初学者很可能分不清=和==的区别,就经常会在if后面表达式跟=

先来看看=和==有什么区别?

=赋值符               eg:a=5,意思就是把5赋值给a

==判断是否相等 eg:a==5就是判断a和5是否相等

既然==是判断是否相等,那左右两边交换位置也就没有影响,那么我们为了防止写错

if(5==a)
2.1.3练习

(1)判断一个数是否为奇数

#include<stdio.h>
int main()
{
  int number = 0;
  scanf("%d", &number);
  if (number % 2 == 1)
    printf("是奇数\n");
  else
    printf("不是奇数\n");
  return 0;
}


(2)输出1-100之间的奇数


方法一:

#include<stdio.h>
int main()//输出1-100之间的奇数
{
  int i = 0;
  for (i = 1; i <= 100; i++)
  {
    //判断并输出
    if (i % 2 == 1)
      printf("%d ", i);//记得加一个空格隔开
  }
  return 0;
}


方法二:1就是奇数,然后加2下一个奇数,直接i=i+2


#include<stdio.h>
int main()//输出1-100之间的奇数
{
  int i = 0;
  for (i = 1; i <= 100; i = i + 2)
  {
    printf("%d ", i);//记得加一个空格隔开
  }
  return 0;
}

2.2switch语句

switch语句也是一种分支语句,但是常常是多分支的情况(这样就避免if..else if...else if..形式)

比如:

switch语句的结构:

switch(整形表达式)

{

      case 整形常量表达式:

                      语句;

}

注意:switch语句中case和switch后面接的不一定只是int类型,还可以是char,short,long类型,但是不能跟double,float类型

2.2.1在switch语句中的break和default语句

break实现了switch语句跳出分支语句的效果,switch语句搭配break使用才能实现真正的分支

比如:

#include<stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
    printf("星期1\n");
    break;
  case 2:
    printf("星期2\n");
    break;
  case 3:
    printf("星期3\n");
    break;
  case 4:
    printf("星期4\n");
    break;
  case 5:
    printf("星期5\n");
    break;
  case 6:
    printf("星期6\n");
    break;
  case 7:
    printf("星期天\n");
    break;
  }
  return 0;
}

但是如果要

1.输入1-5,输出“weekday”

2.输入6-7,输出“weedend”

代码如下:

#include<stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day)
  {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("weekday\n");
    break;
  case 6:
  case 7:
    printf("weekend\n");
    break;
  default:
    printf("选择错误\n");
    break;
  }
  return 0;
}

如果输入的值和所有case标签的值都不一样,那就直接进入default语句,注意每个switch语句只能出现一个default子句,default子句可以出现在语句列表的任何位置


编程好习惯:在最后一个case语句和default语句的后面加上一条break语句


2.2.2练习

问题:看看下面代码结果是什么?


#include <stdio.h>
int main()
{
  int n = 1;
  int m = 2;
  switch (n)
  {
  case 1:
    m++;
  case 2:
    n++;
  case 3:
    switch (n)
    {//switch允许嵌套使用
    case 1:
      n++;
    case 2:
      m++;
      n++;
      break;
    }
  case 4:
    m++;
    break;
  default:
    break;
  }
  printf("m = %d,n = %d\n", m, n);
  return 0;
}

答案:m=5,n=3


分析:首先n=1,m=2,然后进入switch语句,n=1,直接进入case1,m=3,因为没有break,继续进入case2,n=2,然后又没有break,继续进入case3,因为n=2,进入case2,m=4,n=3,然后break跳出小的switch语句,因为case3没有break,继续进入case4,m=5,遇到break直接跳出大的switch语句,最后输出m=5,n=3


结语:彼方尚有荣光在,少年不惧岁月长


觉得笔者写的还可以,或者自己有些许收获的时候,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢


目录
相关文章
|
2月前
|
C语言
C语言之分支结构
C语言之分支结构
34 0
|
2月前
|
Go C语言
爱上C语言:分支与循环(循环篇)
爱上C语言:分支与循环(循环篇)
|
16天前
|
C语言
【C语言基础】:分支与循环
【C语言基础】:分支与循环
|
2月前
|
C语言 数据安全/隐私保护
C语言初阶②(分支语句和循环语句)编程练习
C语言初阶②(分支语句和循环语句)编程练习
37 1
|
7天前
|
C语言
C语言循环与分支
C语言循环与分支
19 5
|
9天前
|
C语言
C语言-----分支和循环
C语言-----分支和循环
43 0
|
2月前
|
C语言
C语言分支与循环
C语言分支与循环
25 2
|
2月前
|
编译器 C语言
C语言(3)----分支和循坏以及操作符
C语言(3)----分支和循坏以及操作符
32 1
|
2月前
|
C语言 数据安全/隐私保护
C语言初阶①(分支语句和循环语句)知识点(下)
C语言初阶①(分支语句和循环语句)知识点
25 1
|
25天前
|
C语言
C语言控制流程详解:分支与循环语句
C语言控制流程详解:分支与循环语句
14 0