C语言零基础 分支与循环(1)

一、If else 语句

1.1基本用法

首先,简单介绍一下 if else 语句的书写格式:

if (条件语句)

{

满足条件后的执行内容;

}(ps:此处在 if 后的执行语句只有一行的时候可以不用加这个大括号 ,但此时会默认执行内容为条件语句后的第一条语句;而当有多个执行语句时,务必要加上大括号 。当然还是建议大家不论什么情况都加上个大括号也算是养成一个编程的好习惯。)

else(条件语句)

{

满足条件语句后的执行内容;

}

1.2多分支与嵌套

当然 if else 语句是支持多分支食用的。举例如下:

int age =0;

if(age<=18{

printf("少年\n")}

else if (age<=25)

{

printf("青年\n");   

}

else

{

printf("壮年\n");   

}

此时就是一个三分支的句例

嵌套如下:

int age =0;

if(age<=18{

if (age<=10{

printf ("幼年\n")

}<--注意:此处就进行了 if 语句的嵌套使用。

else

{

printf ("少年\n")}

}

else if (age<=25)

{

printf ("青年\n");   

}

else

{

printf ("壮年\n");   

}

1.3 食用过程中几个需特别注意的点

比如,在条件语句中需描述 a 的值要大于等于1且小于等于2时

大部分小萌新们会将数学语言直接照搬到条件语句中,

错误示例

if1=<a<=2

长期以来数学语言的熏陶下,这种根深蒂固的惯性思维也将使我们困扰许久。于是在这里便和大家分享此题正解:

正确示例

if (a>=1&&a<=2)ps:此处的 && 是逻辑与符号,在这块就表示并且、

当然还有一些需要注意的点,在下面与你娓娓道来。

1.3.1 关于经常把赋值符号 “=" 与 等于 ”== “ 弄混的小秘招

刚学这块内容时,我相信很多与我一样的小萌新都曾在这个地方上栽过跟头。

例如此处我想设计一个程序:问自己每天在编程上花的时间有三个小时吗?(1 Yes / 2 No)

输入 1 就在屏幕上打印 ”很棒,要继续努力!“ 而输入 2 就在屏幕上打印”是想回家放羊去了吗?“

接下来我们来实现这个函数

常见错误示范:

#include<stdio.h>

int main()

{ int a=0;

scanf("%d",&a);

if(a=1)

{

printf(" 很棒,要继续努力\n");

}

else

printf("是想回家放羊去了吗 ?\n")return 0;

}

如果这样写的话输出结果就会是下面这样

你会问号的发现不管是输入 1 还是 2 输出的结果都为 ”很棒,要继续努力“了。并且编译器也不会给你报任何错误。那么其实这就是走入了 赋值符号 “=" 与 等于 ”== “ 弄混 的这个误区。对于这种一个常量和变量进行对比的条件语句 我们可以在写的时候将常量与变量的位置互换一下

if1==a) 

这样一来即使你不小心将两个符号混乱使用了,也能够即使发现错误(因为如果此处写成了赋值的符号,变量在右边,常量在左边,变量是不能给常量赋值的,产生了语法错误,此时编译器会报错。这样一来就将逻辑错误转换成了语法错误,妈妈再也不用担心我因此头昏脑胀了。)

并且前后对调位置后对程序运行的结果是不会有影响的

1.3.2 一个叫"悬空 else "的究极易错的问题

直接上代码

#include<stdio.h>
int main()
{
  int a = 0;
  int b = 2;

  if(1==a)//这里就现学现用,把常量和变量的位置互调。
      if(2==b)
{
      printf("haha\n");
}
  else
{
      printf("hehe\n");
}
return 0;
}

那么大家思考一下上述代码输出的结果应该是多少。
其实并不是 hehe 噢,答案是什么都不输出。
原因就是因为 else 会与最近的一条 if 语句相匹配,而不是与位置上对齐的 if 语句相匹配。(此处特意把第一条if 与后面的 else 在位置上对齐,混淆一下同学们。)
经过前面对 if else语句的学习,我们简单分析一下这串代码,首先走到第一个 if 的条件语句判断 a是否等于1,如果等于程序才走后面的一套 if else 语句(注意后面的if else语句虽然中间有两个分号但本质上两个合起来才算组成一条语句,且因为if else是选择执行一个的,所以必然是一条)。而很明显不满足第一个 if 的判断语句,所以后面的无论是 haha 还是hehe就算符合条件了也根本不会输出,因为程序都不会走过去。这就造成了所谓的"悬空else"的情况。

1.3.3要使所有控件路径都有返回值

简单来说就是在使用分支语句时要使所有分支都有返回值,否则编译器将会发出警告.

如果你只写了 if 的返回值情况,没在其他情况下设置返回值,编译器就会认为在 if 语句不满足时该函数没有返回值。 因为编译器要求在 if 不符合的情况下也得有相应返回值。

二、switch case语句

2.1基本用法

直接上代码

#include<stido.h>
int main()
{
  switch(整型表达式)//
{ 
    case 整型常量表达式:   //注意这里和上面不同,既要是整型类型又要为常量
      执行内容  
      break;             
    case 整型常量表达式:
      执行内容
      break; 
    default:
      执行内容;
      break;
}
return 0;
}

讲讲switch case语句逻辑: 程序会将 switch 后面的整型表达式与 case 后面的整型常量表达式进行匹配,符合哪个,程序就从哪个 case 语句开始往下一直执行,直到遇到 break 语句或者是走完所有 case 语句。(所以这里必须注意的是,如果只想执行对应的一条 case 语句的话,就要在其后面加入 break 语句来跳出 switch case语句)其中 case 语句可以有无穷多个,即可以无限分支。

default 语句的逻辑是当所有 case 语句都不符合时,就会进入 default 语句(default是任何情况下都能进入的),它是可有可无的,不加也不会出现任何语法错误,并且放在任何地方的效果都是一样的。(当然个人认为加不论上面情况都加上 default 是一种写代码的好习惯。)

那么它能起到什么作用呢?直接上代码

#include<stdio.h>
int main()
{
   int day = 0;
   scanf("%d",&day);
   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");
     break;
}
return 0;
}

代码效果如下在这里插入图片描述
但此时假若你输入的 switch 后面的整型表达式是不符合任何一个语句的时候,根据我们上面提到此时程序就应该走到 default 语句里面,所以这时候就会在屏幕上打印出"请重新输入" ,就能达到提示我们输入的表达式不匹配的效果。接着看一下效果在这里插入图片描述

2.2多分支与嵌套

多分支这点,case语句越多当然分支就越多了。
嵌套使用就直接上代码

#include<stdio.h>
int main()
{   int a=2;
    switch(a)
  {
      case 1:
      printf("heihei\n");
      break;
      
      case 2:
      ++a;       \\这里的意思是先使 a+1 再使用变化后的值   
      switch(a)  \\这里就是嵌套了,switch case 语句嵌套在case 2 的执行内容中
    {
        case 2:
        printf("hehe\n");
        break;
        
        case 3:
        printf("haha\n");
             
        case 4:
        printf("wuhu\n");
        break;
    }
      break;
      default :
      break;
  }
    return 0;
}

这个代码就相对复杂一点了,小伙伴们要自己耐心观察一下,看看结果是什么
在这里插入图片描述
还有注意一点就是,有些人可能会得出只有 haha 的结果,但是我们仔细看会发现嵌套语句的 case 3 执行内容后面是没有加 break 的,所以会一直执行完 case 4 语句直到遇到 break 为止。

2.3食用过程中几个需特别注意的点

卧槽,写完了才发现好像把这一块要写的内容都写上面了,不过真的花了比较长的时间来整理,所以也就懒得再腾到下面来了。友友们就累一点将就一下在上面多花一点精力吧,不过可能会眼花哈哈哈哈,建议戴上老花镜食用。

三、两者比较

其实如果认真看完了应该也就能感觉的出来了,在分支较多的情况下优先使用 switch case 语句会大大提高程序效率。emmm暂时也还没想到其他的,等以后接触多了再来补充吧…

好了,今天的相关内容就到这里。笔者编写不易,觉得好的话可以给个三连噢。也希望大家能对写的不好的地方多多指正。往后会一直坚持更博客,写的越来越好的!

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值