入门C语言第一话:分支与循环语句(上)——秒懂文章,分支如此简单

在这里插入图片描述

前言:想必大家都听说过三大结构,它们是十分神奇的,因为他们可以用逻辑描述在这个世界中所发生任何事情,今天就来了解一下实现这三大结构所用的其中一种语句——控制语句。

内容简要:
在这里插入图片描述

一.分支语句

1.if

1.if语句

执行逻辑:在这里插入图片描述
下面用代码实现一下:

int main()
{
   int true = 1;
   int false = 0;
   if(true)//非0为真,这里的true换成其他非0的数字也可以。
   {
     printf("真命题\n");   
   }
   if(false)//0为假不执行
   {
     false = 1;
   }
   printf("%d",false);//验证:如果执行则为1,反之为0。
   return 0;
}

2.if else

执行逻辑:在这里插入图片描述
注意:else与最近的if匹配。

实现代码:

#include<stdio.h>
int main()
{  
   int a = 2;
   if(a>1)//如果a大于1只执行if,否则执行else语句。
   {
   printf("真命题");
   }
   else
   {
   printf("假命题")}

  return 0;
}

3.if else if语句

执行逻辑:
在这里插入图片描述
说明:当语句在所有情况都成立时,只执行第一个条件,当都不成立时,跳过所有语句。

代码实现:

int main()
{
  int a = 3;
  if(a>3)
  {
  printf("a大于3\n");
  }
  else if(a>4)
  {
  printf("a大于4\n");
  }//很显然这里都不执行,所以什么也不打印。
  if(a>1)
  {
  printf("a大于1");
  }
  else if(a>2)
  {
  printf("a大于2");
  }//这里情况都成立,只执行第一句。
  return 0;
}

4.if __else if__else语句

执行逻辑:
在这里插入图片描述
代码实现:

#include<stdio.h>
int main()
{ 
  int a = 5;
  if(a<4)
  {
  printf("a小于4\n");
  }
  else if(a<3)
  {
  printf("a小于3\n");
  }
  else
  {
  printf("a大于4");
  }//这里第一丶二条语句都不成立,执行第三条语句。
  return 0;
}

5.书写建议

第一:使用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");
      //这里什么也不打印,如果没想通看一下上面 if else 的注意事项。
    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;
}
第二:再进行变量与常量判断是否相等时,应将常量放在前面,变量放在后面。

代码举例:

#include<stdio.h>
int main()
{
   //判断a是否等于1
   int a = 1;
   if(a==1)
   {
   printf("a的值为1\n");
   }
   //易错
   if(a=1)//注意:这里是将1的值赋给a而不是等于!并且编译器是不会报错的!
   {
      printf("a的值为1\n"); 
   }
 
   
   if(1==a)
   {
     printf("a的值为1\n");
   }
   if(1=a)//注意:这里编译器会提示出现表达式左边必须是常量的bug,可以提醒你。
   {
     printf("a的值为1\n");
   }

return 0;
}
第三:等号与大于等于号分开写

代码举例:
1.等号:

int main()
{
	int a = 2;
	int b = 2;
	int c = 2;
	//错误代码:
	if(a==b==c)
	{
	printf("abc相等\n");
	}
	else
	{
	printf("abc不相等\n");
	} 
	//正确代码
	if(a==b&&b==c)
	{
	printf("abc相等\n");
	}
	else
	{
	printf("abc不相等\n");
	}
	return 0;
}

这里a == b == c代码的执行逻辑是先判断a==b如果正确,此表达式结果为1,反之为0,再将 ==c 表达式的结果(0/1)判断,如故果成立执行语句,如果不成立跳过语句。

2.大于,大于等于,小于,小于等于
代码举例:

#include<stdio.h>
int main()
{
  int a = 0;
  //错误代码
  if(1<a<2)
  {
  printf("a大于1小于2\n")
  }//这里会打印,思考一下代码的执行逻辑。
  //正确代码
  if(a>1&&a<2)
  {
   printf("a大于1小于2\n")
  }
  return 0;
}

这里1<a<2的执行逻辑是先判断a<2如果成立结果为1,如果不成立结果为0,再将1< 表达式的结果(0/1) 进行判断,如故果成立执行语句,如果不成立跳过语句。

2.switch语句

内容:Switch主要用于多情况的判断,可以借助if ,else if,else语句进行理解
执行逻辑:这是没有break的switch,就像没有判断的if语句一样只执行不判断,不过唯一的区别是输入情况是几,就从那条语句开始进行执行。在这里插入图片描述代码实现:

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d",&n);//输入1
    switch(n)
    {
    case 1:
    printf("hehe\n");
    case 2:
    printf("haha\n");
    default:
    printf("heihei\n");
    }
    //试着思考一下代码结果。
    printf("\n");
    switch(n)
    {
    case 2:
    printf("haha\n");
    case 1:
    printf("hehe\n");
    default:
    printf("heihei\n");
    }//这跟上一段代码的打印结果相同吗?
    printf("\n");
     switch(n)
    {
    default:
    printf("heihei\n");
    case 2:
    printf("haha\n");
    case 1:
    printf("hehe\n");
    }//这跟上一段代码的打印结果相同吗?
    printf("\n");
     switch(n)
    {
    case 1:
    printf("hehe\n");
    default:
    printf("heihei\n");
    case 2:
    printf("haha\n");
    }//这一段的代码的结果是?
	return 0;
}

答案:在这里插入图片描述
解析:
这几段的代码都是从输入的值的情况 处开始从上往下运行,直到最后一条语句。如果没有则执行default。
注意:
1.switch括号里面只能整形的变量或常量,case 后只能跟整形常量!
2.default:是除case情况外的其他情况进行执行的,一个switch只能有一条default。
如果输入几就只执行那一条语句的情况呢?
答:
这里要引入一个关键字:break——有终止,打破的意思,可以帮我们终止后面语句的执行。

代码实现:

#include<stdio.h>
 int main()
 {
	int n = 0;
	scanf("%d",&n);//输入1
    switch(n)
    {
      case 1:
      printf("hehe\n");
      break;
      case 2:
      printf("haha\n");
      break;
      default:
      printf("heihei\n");//最后一句是switch语句的终点,故不需再加breaK,小编还是建议加上。
      break;
    }
    return 0;
 }  
思考:如果要知道一年的一个月有几天该如何实现呢(用switch语句)?

解析:

#include<stdio.h>
int main()
{
//思路:1.3.5.7.8.10.12月,31天永不差
//     2月:闰年29天,平年28天
//     4.6.9.11月,30天
//闰年判断规则:1:能被4整除并且不能被100整除
            // 2: 能被四百整除
               //注意这两个条件只要满足一个即可
	int month = 0;
	int year = 0;
	scanf("%d %d",&year,&month);
	switch(n)
	{
	case 1case 3case 5case 7case 8case 10case 12printf("31天\n");//想一下switch的运行逻辑
		break:
	case 4case 6case 9case 11printf("30天\n");
 	case 2{
 		if(((year%4==0)&&(year%100!=0))||(year%400==0))//因为这里并不知道优先级故要加括号,具体可参考if( ( ()&&() )||()  )这个框架。
 		{
 		printf("29天\n");
 		}
 		else
 		{
 		printf("28天\n");
 		}
 		break;
 		}
	default://其他情况如13
       printf("查无此月\n"); 
	}
    
return 0;
}

注意:switch是可以嵌套使用的!
例题:

int main()
{
        int n = 1;
        int m = 2; 
        switch (n)
        {
        case 1:
           {
              m++;
           }
        case 2:
          {
              n++;
          }
        case 3:
        {
            switch (n)//注意这里n为2。
            {
            case 1:
                {
                  n++;
                }
            case 2:
                {
                 m++;
                 n++;
                 break;
                }
            }
         }
        case 4:
            {
              m++;
              break;
            }
        default:
            break;
        }
        printf("m = %d, n = %d\n", m, n);
        return 0;
    }

答案:
在这里插入图片描述
不知你做对了吗?

总结

希望大家,学有所成,思有所得,得有所就!如果有误,请委婉一点指出,如果觉得文章不错,请留下您的点赞与评论,小编会继续加油!

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值