栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

分支语句(详细)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分支语句(详细)

if语句 一、语法结构 1、结构

//单分支结构
if(表达式)
   语句;

//双分支结构
if(表达式)
   语句1;
else
   语句2;

//多分支结构  
if(表达式1)
   语句1;
else if(表达式2)
   语句2;
……
else
   语句n;

2、示例
#include 
//代码1
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年n");
   }
  return 0;
}
//代码2
#include 
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年n");
   }
    else
   {
        printf("成年n");
   }
  return 0;
}
//代码3
#include 
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
    {
         printf("老年n");
    }
    return 0;
}

二、注意要点 1、一个分支只能控制一条语句或者代码块

if语句条件成立时,如果要执行语句为多条语句,则必须将所要执行的多条语句用代码块括起来。一对 { } 就是一个代码块。

//代码1
if (a>5)
	printf("a大于5");
	a++;
//代码2
if (a>5)
{
	printf("a大于5");
	a++;
}
//这里两段代码表达的意思是不一样的,代码1如果条件成立则执行printf("a大于5");执行到此该分支语句就结束了,随后执行a++;是按照顺序结构依次执行的。也就是说无论条件是否成立,代码1总会执行a++;,但代码2只有在条件成立时才会执行a++;。
2、多分支语句中else与离else最近且未匹配的if匹配

多分支语句中,若出现if与else无法两两匹配情况时,从第一个else开始,else与离其最近且未匹配的if匹配(如果最近且未匹配的if被限制在了代码块内,则上述原则不成立)。

//代码1
#include 
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehen");
	else
			printf("hahan");
	return 0;
}//执行结果为:(什么都没输出)
//代码2
#include 
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehen");
		else
			printf("hahan");
	return 0;
}//执行结果为: (什么都没输出)
//代码3
#include 
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		{
            if (b == 2)
                printf("hehen");
		}
		else
			printf("hahan");
	return 0;
}//执行结果为:haha
//比较代码1,2,3,其中代码1和代码2中else都和离它们最近的if匹配,代码3由于离else最近的if是第一个if的执行内容(被代码块括住了),所以无法与代码块外的else匹配,故else只能与第一个if匹配。
3、代码风格

为了增加代码的可读性,好的代码风格很重要。

  • 分支语句中,适当使用代码块能减少对代码的误解。
//代码1
int max2 (int x, int y)
{
    if(x>y) 
        {
            return x;
        }
     return y; 
}
//代码2
int max2 (int x, int y)
{
    if(x>y) 
        {
            return x;
        }
    else
        {
            return y; 
        }
}//尽管代码1和代码2所表达的意思是一样的,但代码1容易被误解。注意return语句一旦执行代表该函数结束,即使后面仍有语句也不会执行。
  • 条件表达式如果出现比较一变量与常量是否相等时,常将常量写在前面,以避免漏写等号造成代码出现逻辑错误。
//代码1
int num = 1;
if(num == 5)
{
    printf("hehen");
}
//代码2
int num = 1;
if(num = 5)
{
    printf("hehen");
}//漏写等号,后患无穷
//代码3
int num = 1;
if(5 == num)
{
    printf("hehen");
}
switch语句 一、语法结构 1、结构

switch(整型表达式)

{

case  **整型常量**表达式:

			语句;

​ (break;)//根据需要确定是否写break语句

​ ……

​ (default :

​ 语句;)根据需要确定是否写default语句

}

2、示例
 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;
        default :
            printf("您输入的数据有误n");
   }
二、注意要点 1、表达式要求
  • switch语句中能传入的条件表达式只能是整型表达式(char也可以,系统可以将字符型数据按ASCII码强制转换成整型。浮点型数据比整型级别高,系统无法转换成整型,所以不算整型表达式)。

  • case后紧跟的表达式也只能是整型常量表达式(必须是常量,跟变量会报错。也可以是用单引号引起来的单个字符,系统会按照ASCII码将其转化成整型处理)。

​ 总而言之,从广义上讲,字符型也能算作整型。

//代码1
int main()
{
	int day = 96;
	switch (day+1)
	{
	case 'a':
		printf("nice!n");
		break;
	case 98:
		printf("好耶!n");
		break;
	default :
		printf("关闭n");

	}
	return 0;
}
//代码2
int main()
{
	char day = 'a';
	switch (day+1)
	{
	case 'a':
		printf("nice!n");
		break;
	case 98:
		printf("好耶!n");
		break;
	default :
		printf("关闭n");

	}
	return 0;
}
2、case标签与break的作用
  • case标签只是让程序根据条件表达式找到switch语句的执行入口,随后按照顺序结构依次执行语句(如果没有break语句即使后面的case标签不符合条件,其后语句也会被执行)。

  • switch语句无法直接实现分支,搭配break语句才能达到分支的目的。break的作用就是将switch语句分成若干部分,作为switch出口跳出switch语句。

  • 程序根据条件表达式和case标签找到入口,遇到break即找到switch语句出口跳出。

//代码1
int main()
{
	int day = 96;
	switch (day+1)
	{
    case 23://不符合条件,寻找下一个case标签
		printf("!!!n");
	case 'a'://符合条件,程序从该行开始往下执行,只有遇到break才跳出switch语句
		printf("nice!n");
	case 98://没有遇到break,继续往下执行
		printf("好耶!n");
		break;//遇到break,跳出switch语句,后面本switch内的语句不再执行
    case 33:
		printf("!!!n");
	default :
		printf("关闭n");

	}
	return 0;//跳到该处继续执行
}

3、default子句的作用
  • 当表达的值与所有的case标签的值都不匹配又想让switch语句给一个反馈的时候,可以在任何一个case标签可以出现的位置写上default子句。当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。

  • default子句不一定要写在语句结尾(开头、中间、结尾都可以),只要switch表达式的值不匹配所有case标签的值就能执行default子句。

#include 
int main()
{
    int n = 1;
    int m = 2;
    switch (n)//n为1
   {
    case 1://入口处,程序从此处执行
            m++;//m变为3
    case 2://上一case子句没有break,继续向下执行
            n++;//n变为2
    case 3://上一case子句没有break,继续向下执行
             switch (n)//n为2
           {//switch允许嵌套使用
             case 1:
                    n++;
             case 2://内层switch语句入口处,程序从此处执行
                    m++;//m变为4
                    n++;//n变为3
                    break;//跳出内层switch
           }
    case 4://继续执行
            m++;//m变为5
             break;//跳出外层break
    default:
             break;
   }
    printf("m = %d, n = %dn", m, n);//m=5,n=3
    return 0; 
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312204.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号