【C语言】分支语句

目录

一、常见的三大结构。

1、顺序结构

2、选择(分支)结构

3、循环结构

二、分支语句

2.1 if语句

语法结构:

悬空else

2.2 switch语句


一、常见的三大结构。

1、顺序结构

很简单,即就是程序从上至下顺序执行,如果我们没有采用其它结构的话,就是顺序结构

2、选择(分支)结构

当程序出现需要选择的时候,就会产生分支,满足一种条件运行一个分支,满足另外的条件运行另外的分支,当然不同分支往往运行的结果不同。

3、循环结构

有时候,我们需要把一个事情重复的做上很多次才能达到我们想要的结果,比如我们要计算从1加2加3一直加到99的总和,我们就可以采用循环结构,来逐个相加,最后计算出整体的总和


而我们今天的主人公就是选择结构。我们将对分支语句进行研究。


二、分支语句

分支语句的分支思想就如这张图所示:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGhlRGV2aWNl,size_14,color_FFFFFF,t_70,g_se,x_16

2.1 if语句

语法结构:

1.

if(表达式)

 语句;

//例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age < 18) {
		printf("你还是未成年\n");
	}
	return 0;
}

2.

if(表达式)

          语句1;

else

         语句2;

//例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age < 18) {
		printf("你还是未成年\n");
	}
	else
	{
		printf("你已经成年了\n");
	}
	return 0;
}

3.多分支:

if(表达式1)

         语句1;

else if(表达式2)

         语句2;

else

         语句3

//例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age < 18)
	{
		printf("少年\n");
	}
	else if (age >= 18 && age < 30)
	{
		printf("青年\n");
	}
	else if (age >= 30 && age < 50)
	{
		printf("中年\n");
	}
	else if (age >= 50 && age < 80)
	{
		printf("老年\n");
	}
	return 0;
}

解释一下: 如果表达式的结果为真,则语句执行。0表示假,非0表示真。

4.If.....else 结构还可以嵌套 if....else结构:

#include <stdio.h>

int main()
{
    int a = 11, b = 9;
    if(a > 10)
    { 
        if(b < 10)
            printf("you are right !");
        else
            printf("you are wrong !");
    }
    else
        printf("you are wrong !");
    return 0;
}

悬空else

接下来学习一个注意点—>悬空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;
}

我们注意到这段代码里的if语句没有用“ { } ”表示出来,这样特别没有条理性,是代码的识别度降低。

所以说:代码风格很重要;我们在写代码的时候要适当的使用{}可以使代码的逻辑更加清楚。

2.2 switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。但是如果我们写成 if...else if ...else if 的

形式太复杂,那我们就得有不一样的语法形式。 这就是switch 语句。

switch(整型表达式)

{

                语句项; //是一些case语句:

                               //case 整形常量表达式: 

                               // 语句;

                 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;
}

如果我们去掉了语句中的“break”,代码会变成什么样子???

1.我门去掉“case 1:语句中的break”

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGhlRGV2aWNl,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGhlRGV2aWNl,size_20,color_FFFFFF,t_70,g_se,x_16

 我们可以发现,出了输入“1”时,出现了问题,其它情况正常。

我们可以自己在进想多次的实验。

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


default子句

        如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句

都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。但是,如

果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?

你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个case标签可以出现

的位置。

当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所

以,每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语

句流会像贯穿一个case标签一样贯穿default子句。


编程好习惯

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

后一个 case 语句后面忘了添加 break语句)。

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


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

结果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGhlRGV2aWNl,size_20,color_FFFFFF,t_70,g_se,x_16

这道题可以让我们充分体会到在使用switch语句写程序break的关键。

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值