首页 > 其他分享 > C语言——分支与循环

C语言——分支与循环

时间:2024-01-24 18:32:19浏览次数:27  
标签:语句 case 常量 C语言 break 循环 else 表达式 分支

C语言中,分支语句与循环语句是我们接触的基础语句之一,可以说是大厦之基。本篇我们先来看分支语句。

分支语句包括if语句和swich语句两部分。我们先来看if语句,最简单的if语句如下

if(条件)
{
  语句1;
}
else
{
  语句2;
}

if后的圆括号里是判断条件,判断是否执行花括号里的语句;如果,判断条件为真,则执行if后的语句;判断条件为否,则执行esle里的语句。如果if后没有跟else,则什么也不执行。

注:花括号可以省略,但是,一旦省略花括号则if或else只于紧跟其后的下一条语句匹配,这样写代码容易出错,故不建议。另外,else与if的匹配遵从”就近原则“,即else与距离它最近的if匹配。例如下面这段代码

if(条件1)
{
   语句1;
}
		if(条件2)
      {
         语句2;
      }  
 else
 {
   语句3;
 }

这段代码中else是与第二个if匹配而不是第一个!

如果有多种情况,此时我们可以使用else if,例如下面这段代码,每个else if对应不同的判断条件:

if(条件1)
{
   语句1;
}
else if(条件2)
{
   语句2;
}  
else if(条件3)
{
   语句3;
}  
else if(条件n)
{
   语句n;
}  
 else
 {
   语句n+1;
 }

接下来是if语句的嵌套,是的,套娃来了。if语句可以嵌套使用,一个if或else的语句里可以包含另一个if语句,有点类似思维导图,一个树枝分出了多个树枝(嗯,面目逐渐狰狞起来)。例如以下代码:

if(条件1)
{
  if(条件2)
  {
  	语句1;
  }
  else if
  {
    语句2;
  }
}
else
{
  语句3;
}

       那么,关于if语句基本用法就说到这里。接下来我们来看另一种分支语句——switch语句,switch语句适合处理多分支情况的语句。在if语句里,如果遇到多分枝情况,我们说可以是用else if,但这只适用于分支不多的情况。想象一下,如果很多个分支,每一个分支我们都要打一遍else if外加一对花括号,且不说效率低下,反正我薄弱的心脏是无法接受这么麻烦的事。所以,switch语句就给我们提供了便捷的解决方法。我们来看:

switch(表达式)
{
  case 常量或常量表达式1:语句1;break;
  case 常量或常量表达式2:语句2;break;
  case 常量或常量表达式3:语句3;break;
  case 常量或常量表达式n:语句n;break;
  default 常量或常量表达式n+1:语句n+1;break;
 }

switch语句讲多分支整合到了一起,switch语句会先对圆括号里的表达式求值,求得的值对应花括号里哪一个分支则会进入该分支,执行其后的语句。一般来说,  每个分支后的break语句不能省略,因为一旦去掉break,那么程序会从进入的分支开始往下依次执行。default则是的是当常量表达式的值无法找到对应分支是会执行其后的语句。


switch(表达式)
{
  case 常量或常量表达式1:语句1;
  case 常量或常量表达式2:语句2;
  case 常量或常量表达式3:语句3;
  case 常量或常量表达式n:语句n;
  default 常量或常量表达式n+1:语句n+1;break;
 }

上面这段代码,假设从常量表达式1进入,由于没有break跳出,程序除了会执行语句1,还会依次执行语句2·3·4直到语句n+1。另外,switch语句内部不需要考虑顺序(default也可以在switch内部任意位置),但一般来说,为了便于阅读,会依次排序,并将default排在最后。

那么,如果当我们想让多个情况对应执行同一条语句该怎么办呢?难不成需要我们每一种情况都写一遍吗?当然不需要。在这种情况我们可以使用多重标签来解决。下面来让我们了解switch多重标签.请看下面一段代码:

switch(表达式)
{
  case 常量或常量表达式1:
  case 常量或常量表达式2:语句1;break;
  case 常量或常量表达式3:
  case 常量或常量表达式4:语句2;break;
  case 常量或常量表达式n-1: 
  case 常量或常量表达式n:语句n;break;
  default 常量或常量表达式n+1:语句n+1;break;
 }

以上代码中,假设从常量表达式1进入,则由于其后未关联语句,什么也不会执行,又由于没有break语句,会往下执行,进入常量表达式2。假设从表达式2进入,则会执行语句1,然后执行break跳出,后面的以此类推。这样,我们就完成了多个情况执行同一条语句,也就是多重标签。

最后,我们来思考一个点,那就是else if和switch我们该用哪一个,毕竟表面上他们的功能大体一致。当面对浮点类型的变量或表达式,我们就没法使用switch语句。另外,如果是根据范围判断执行的情况,使用switch语句将会异常麻烦。因为,我们需要范围内每一个整数都设置一个标签。


标签:语句,case,常量,C语言,break,循环,else,表达式,分支
From: https://blog.51cto.com/u_16371882/9401006

相关文章

  • Jmeter: 读取数据库数据并参数化(循环控制器与计数器)
    一前言:环境:window10,Jmeter5.3简单介绍下如何读取数据库中同个字段的多个值,并让该字段的多个值作为后面接口的请求参数读取mysql数据并参数化把前面数据库连接的例子拿来稍微改造下场景要求:如上,从数据库中查询出符合要求的age和name字段的数据,age和name的值都会作为......
  • 【VictoriaMetrics】一个小优化:循环改查表,性能提升56.48 倍
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯做了一个vm-storage数据文件merge的工具。测试的时候发现decimal.CalibrateScale()这个函数特别慢。做了一个小优化,用查表法代替循环的乘法,性能提升明显。Benc......
  • C语言中的at+;wt+;rt+;wb+;是什么意思
    这些都是C语言打开文件函数fopen的一个参数打开文件方式的值:定义函数FILE*fopen(constchar*path,constchar*mode);函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r打开只读文件,该文件必须存在。r+......
  • 结构化命令case和for、while循环
    1、case流程控制语句case是一种流程控制语句,通常用于根据不同的条件值执行不同的代码块。它的语法如下:caseexpressionin pattern1)    #在匹配pattern1时执行的代码   ;; pattern2)    #在匹配pattern2时执行的代码   ......
  • 00-C语言编程技巧
    目录一.if(3==i)一.if(3==i)将if(i==3)的写法改成if(3==i):这样做的好处是当出漏写一个=号的时候,编译器会告知“attemptedassighnmenttoliteral”.(试图向常数赋值)//假如有这样一段代码#include<stdio.h>intmain(){inti=3;while(1){......
  • C语言基础-数据类型-day2
    一、计算整数除法(只保留整数部分)#include<stdio.h>intmain(){printf("%d\n",14/3);return0;}整数除法(保留小数点后面数据)#include<stdio.h>intmain(){printf("%f\n",14/3.0);return0;}*浮点数除法#include<stdio.h>......
  • c语言main传参
    c语言中怎么理解main函数为什么传参main函数传参是为了接收命令行参数。在C语言中,main函数可以接收两个参数,分别是argc和argv。argc表示命令行参数的个数,而argv是一个指向字符串数组的指针,其中存储了命令行参数的值。通过传参给main函数,可以在程序运行时从命令行中接收参数,从而实......
  • C# 循环与条件语句详解
    C#Switch语句使用switch语句选择要执行的多个代码块中的一个。示例:switch(expression){casex://代码块break;casey://代码块break;default://代码块break;}它的工作方式如下:评估switch表达式一次将表达式的值与每个......
  • C# 循环与条件语句详解
    C#Switch语句使用switch语句选择要执行的多个代码块中的一个。示例:switch(expression){casex://代码块break;casey://代码块break;default://代码块break;}它的工作方式如下:评估switch表达式一次将表达式的值与每个......
  • C语言学习第三天
    一、选择语句#include<stdio.h>intmain(){intinput=0;printf("学习C语言\n");printf("你要好好学习C语言,然后好好学习数据结构吗?(1/0)/n,1--好好学习,2--不好好学习");scanf("%d",&input);//if(input==0)printf("娶个丑老婆");......