选择结构(分支语句)

c语言是结构化的程序设计语言

有:顺序结构 、选择结构:if,switch、循环结构:while,for,do—while

文章目录

一、什么是语句?

二、顺序结构

 三、分支语句(选择结构)

3.1 单分支选择结构——if语句

3.1.1 语法结构: 

3.1.2 代码示例: 

3.2 双分支选择结构——if-else语句

3.2.1 语法结构:

3.2.2 代码示例: 

 3.3 多分支选择结构——if-else的嵌套形式

3.3.1 语法结构:

3.3.2 代码示例:

 3.4 悬空else

四、复合语句

五、switch语句

5.1 语法结构:

 5.2 在switch语句中的 break

 5.3  default子句


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是语句?

c语言可分为以下五类:

1.表达式语句:由表达式加上分号“;”组成

2.函数调用语句

3.控制语句

4.复合语句:由大括号“{}”中多个语句形式共同构成

5.空语句:由分号“;”组成,在程序当中的主要作用是进行作空循环,并没有什么特殊意义

本篇主要介绍的是控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,c语言有九种控制语句。

可分成以下三类:

1.条件判断语句也叫分支语句:if语句、switch语句;

2.循环执行语句:do while语句、while语句、for语句;

3.转向语句:break语句、goto语句、continue语句、return语句。 

二、顺序结构

顺序结构的基本结构就是根据语句的先后顺序依次执行。

例如计算:从21到32之间数值相加的结果。

根据顺序结构的算法为:21+22+23+24+25+26+27+28+29+30+31+32=318。

 三、分支语句(选择结构)

 选择结构(分支结构):根据条件判断来选择执行哪一条语句。

3.1 单分支选择结构——if语句

在执行过程中,如果表达式为真那么执行语句;如果为假那么不执行。

3.1.1 语法结构: 

if(表达式)

        语句;

3.1.2 代码示例: 

#include <stdio.h>

int main()
{
	int age = 0;
	//输入
	scanf("%d", &age);

	if (age < 18)
		printf("未成年\n");

	return 0;
}

3.2 双分支选择结构——if-else语句

如果条件表达式的值为真那么执行语句1,如果为假执行语句2。 

3.2.1 语法结构:

if(表达式)

        语句1:

else

        语句2:

3.2.2 代码示例: 

#include <stdio.h>

int main()
{
	int age = 0;
	//输入
	scanf("%d", &age);

	if (age < 18)
		printf("未成年\n");
	else
		printf("成年\n");

	return 0;
}

 3.3 多分支选择结构——if-else的嵌套形式

if语句嵌套的意思是指既是执行语句,又是if语句。

3.3.1 语法结构:

if(表达式1)

        语句1;

else if(表达式2)

        语句2;

else

        语句3;

3.3.2 代码示例:

#include <stdio.h>

int main()
{
	int age = 0;
	//输入
	scanf("%d", &age);

	//<18 青少年
	//18~30 青年
	//31~50 中年
	//51~80 中老年
	//81~100 老年
	//101+ 老寿星

	if (age < 18)
		printf("青少年\n");
	else if (age >= 18 && age <= 30)
		printf("青年\n");
	else if (age >= 31 && age <= 50)
	    printf("中年\n");
	else if (age >= 51 && age <= 80)
		printf("中老年\n");
	else if (age >= 81 && age <= 100)
		prnitf("老年\n");
	else
    	printf("老寿星\n");
    
    return 0;
}

既是执行语句,又是if语句的意思如下:

#include<stdio.h>

int main()
{
    if (age < 18)
		printf("青少年\n");
	else
		if (age >= 18 && age <= 30)
			printf("青年\n");
		else if (age >= 31 && age <= 50)
			printf("中年\n");
		else if (age >= 51 && age <= 80)
			printf("中老年\n");
		else if (age >= 81 && age <= 100)
			printf("老年\n");
		else
			printf("老寿星\n");

    return 0;
}

 上述两种代码是等价的,一般我们使用第一种写法。 

如果表达式的结果为真,则语句执行,那么在c语言中如何表示真假呢?

在c语言中:0表示假,非0表示真。  

 3.4 悬空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;
}

 改正:

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要
#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的匹配:else是和它离的最近的if匹配的。

四、复合语句

如果条件成立,要执行多条语句,怎么使用代码块呢?

 这就需要介绍一下复合语句了。

复合语句:由大括号“{}”中多个语句形式共同构成。

#include <stdio.h>
int main()
{
  if(表达式)
 {
    语句列表1;
 }
  else
 {
    语句列表2;
 }
  return 0;
}

这里的一对 { } 也是一个代码块。 

五、switch语句

switch语句也是一种分支语句。

常常用于多分支的情况。

比如: 

输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日

 那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。

这就是switch语句。

5.1 语法结构:

 switch(整型表达式)
{
  语句项;
}

那么语句项是什么呢? 

//是一些case语句:
//如下:
case 整形常量表达式:
  语句;

 5.2 在switch语句中的 break

 在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

比如:

#include <stdio.h>
int main()
{
  int day = 0;
  switch(day)
 {
    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;
 }
  return 0;
}

 有时候我们的需求变了:

1. 输入1-5,输出的是“weekday”;
2. 输入6-7,输出“weekend”

那我们的代码就应该这样实现了:

#include <stdio.h>
//switch代码演示
int main()
{
  int day = 0;
  switch(day)
 {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      printf("weekday\n");
      break;
    case 6:
    case 7:
      printf("weekend\n");
      break;
 }
  return 0;
}

 break语句 的实际效果是把语句列表划分为不同的分支部分。

编程好习惯

在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

 5.3  default子句

如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

 编程好习惯

 在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。


  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值