前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“

【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“

作者头像
学习起来吧
发布2024-02-29 21:24:08
1210
发布2024-02-29 21:24:08
举报
文章被收录于专栏:学习C/++

前言

C语言是一种结构化的程序设计语言,其中包含三种结构:顺序结构、选择结构和循环结构。要实现分支结构,可以使用ifswitch,而实现循环结构则可以使用forwhiledo while

一、if 语句

1.1 if

表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏代码示例:

代码语言:javascript
复制
if ( 表达式)
	  语句

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是不是0,则语句执⾏。 例⼦:输⼊⼀个整数,判断是否为奇数,还是偶数?

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("%d是奇数\n", num);
	return 0;
}

运算结果:

1.2 else

如果一个数不是奇数,那这个数就是偶数了嘛!那在C语言中又怎么表示呢?这里就需要 if...else... 语句了:

代码语言:javascript
复制
if ( 表达式 )
语句1
else
	语句

例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("%d是奇数\n", num);
	else
		printf("%d是偶数\n", num);
	return 0;
}

1.3 嵌套if 和 分⽀中包含多条语句

1.31 分⽀中包含多条语句

C语言中ifelse 语句中默认都只控制⼀条语句

代码语言:javascript
复制
#include <stdio.h>
 int main()
 {
 	int age = 0;
 	scanf("%d", &age);
	 if(age >= 18)
 		printf("成年了\n");
	 	printf("可以谈恋爱了\n");
 	 return 0;
  }

你会发现输⼊的值不管是>=18 还是⼩于18,"可以交谈恋爱了"都会打印在屏幕上。如图:

这是因为if语句只能控制⼀条语句,就是 printf(“成年了\n”); if语句为真,则打印成年了,if语句为假,则不打印,对于printf(“可以谈恋爱了\n”); 是独⽴存在的,这里你把代码编在VS2022上他其实也会自动调整;

不管if语句的条件的真假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤else 后也可以跟上⼤括号。如

代码语言:javascript
复制
 #include <stdio.h>
 int main()
 {
 	int age = 0;
 	scanf("%d", &age);
	if(age >= 18) //if 后使⽤{} 控制多条语句这个块也叫:程序块,或者复合语句
 		{
 			printf("成年了\n");
 			printf("可以交⼥朋友了\n");
 		}
 	 else //else 后使⽤{}控制多条语句这个块也叫:程序块,或者复合语句
		{
	 		printf("未成年\n");
 			printf("不可以早恋哦\n");
 		 }
 	 return 0;
 }

这样子用{}起来就可以不管if语句的条件的真假,都不会被执⾏。

1.32嵌套if

if else 语句中,else 可不以与另⼀个if 语句连⽤,然后构成多重判断,答案是可以的。 ⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:

代码语言:javascript
复制
 #include <stdio.h>
 int main()
 {
	 int num = 0;
 	scanf("%d", &num);
 	if(num == 0)
	 	printf("输⼊的数字是0\n");
	else if(num > 0)
	 	printf("输⼊的数字是0\n"); //这⾥的if相当于嵌套在else语句中,形成了嵌套结构 
 	else
		printf( "输⼊的数字是负数\n");
 return 0

 //这⾥的if相当于嵌套在else语句中,形成了嵌套结构 如下展示:
 #include <stdio.h>
 int main()
 {
	 int num = 0;
 	scanf("%d", &num);
 	if(num == 0)
	 	printf("输⼊的数字是0\n");
	else 
	{
		if(num > 0)
	 	printf("输⼊的数字是0\n");  
 		else
		printf( "输⼊的数字是负数\n");
	}
 return 0

1.4悬空else问题

如果有多 ifelse,可以记住这样⼀条规则,else总是跟最接近的if匹配。 我们通过代码展示:

代码语言:javascript
复制
#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;
 }

程序运行的结果是什么? 当你看到这段代码时,你可能会认为答案是"haha"对吧?因为代码中的逻辑是如果a不等于0,那么就执行else子句并打印"haha"。但是当你运行这段代码时,实际的输出却是什么都没有。那么事实真的是这样吗? 看结果:

但是当你去运⾏代码,输出的结果是:啥都不输出来。 哎这是为什么鸭?

这是悬空else的问题,如果有多个if匹配。上面的代码排版让if和else对齐,可以记住这样一条规则,else总是跟最接近else和第一个if语句对齐,让我们在语句不成立的时候自然想到执行else子句,打印else是和第一个if匹配的,当进行匹配的时候,这样后边的haha,但实际上if…else语句是嵌套在第一个if中的,else是和第二个if成立,嵌if和if语句中的,如果第一个if语句就不else就没机会执行了,最终什么都不打印。 但是我们可以通过程序块来解决:

代码语言:javascript
复制
#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;
 }

当然想让else和第⼀个if匹配,可以这样修改代码

代码语言:javascript
复制
#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;
 }

只要在适当的位置添加括号,代码的逻辑就会更加清晰。因此,在编写代码时,请注意括号的使用,以提高代码的可读性。

二、switch语句

除了if语句,C语言还可以用switch语句来实现分支结构。switchswitch 语句是⼀种特殊形式的的elif…else 结构,⽤于判断条件有多个结果的情况。它把多重else改成更易⽤、可读性更好的形式。

代码语言:javascript
复制
switch (expression)
 {
	 case value1: statement
 	 case value2: statement
  	 default: statement
 }

上⾯代码中,根据表达式expression 不同的值就执⾏相应的case分支。如果找不到对应的值,就执行default分支 注: • switch后的 expression 必须是整型表达式 • case 后的值,必须是整形常量表达式

2.1 if语句和switch语句的对⽐

练习:输⼊任意⼀个整数值,计算除3之后的余数

代码语言:javascript
复制
 #include <stdio.h>
 int main()
 {
 	int n = 0;
	scanf("%d", &n);
 	if(n%3 == 0)
 		printf("整除,余数为0\n");
	 else if(n%3 == 1)
	 	printf("余数是1\n");
 	else 
		printf("余数是2\n");
 return 0;
 }

改为switch语句:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d",&n);
	switch(n%3)
	{
	case 0:
		printf("整数,余数0\n");
		break;
	case:1
		printf("余数是1\n");
		break;
	case:2
		printf("余数是2\n");
		break;
	}
	return 0;
}

通过上述的代码中,我们要注意的点有: 1.case 和后边的数字之间必须有空格 2. 每⼀个case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

2.2 switch语句中的break

如果我们把前面代码的break去掉,又会发生什么情况呢?

代码语言:javascript
复制
#include <stdio.h>
 int main()
 {
 	int n = 0;
 	scanf("%d", &n);
 	switch(n%3)
 	{
	 case 0:
 		printf("整除,余数为0\n");  
	 case 1:
		printf("余数是1\n");       
 	 case 2:
 		printf("余数是2\n");       
	}
	 return 0
 }

输出:

分析:13 除以3余数是1,那为什么又多出一行“余数是2”呢? 原因是switch语句是按分支运行的,只有switch语句中使用break才能跳出switch语句,如果一个分支case语句后没有break语句,代码会继续走,不会停,又可能执行其他case语句中的代码,直到break语句结束。就如上面代码就执行了case 中的语句。

2.3 switch语句中的default

在使⽤switch语句的时候,使⽤比如switch 后表达式中的值⽆法匹 配代码中的case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊default ⼦句。(与 ifelse 相似)

代码语言:javascript
复制
switch (expression) 
{
	 case value1: statement
	 case value2: statement
	 default: statement
 }

switch 后边的expression 的结果不是default ⼦句。如果以这样完成代码:value1 ,也不是value2 的时候,就会执⾏default ⼦句。

输⼊⼀个1~7的数字,打印对应的星期⼏ 例如: 输⼊:1 输出:星期⼀ 输⼊:2 输出:星期⼆ 输⼊:3 输出:星期三 输⼊:4 输出:星期四 输⼊:5 输出:星期五 输⼊:6 输出:星期六 输⼊:7 输出:星期天

代码语言:javascript
复制
#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;
    }
    return 0;
 }

如果改为要求: 1.输⼊1-5,输出的是“⼯作⽇”; 2.输⼊6-7,输出“休息⽇; 这时我们可以借助上面所谈到的switch没有break语句就会一直执行下去,因此:

代码语言:javascript
复制
#include <stdio.h>
 int main()
 {
 	int day = 0;
 	scanf("%d", &day);
 	switch(day)
 	{
 	case 1:
	case 2:
    case 3:
    case 4:
    case 5:
  		printf("⼯作⽇\n");
 		break;
    case 6:
    case 7:
 		printf("休息⽇\n");
 	break;
 }
 return 0;

注:在switch语句中,casedefault的顺序问题是有规定的吗?default必须放在最后吗?实际上,在switch语句中,casedefault语句的顺序没有具体要求,只要满足实际需求即可。然而,通常我们会将default子句放在最后进行处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、if 语句
    • 1.1 if
      • 1.2 else
        • 1.3 嵌套if 和 分⽀中包含多条语句
          • 1.31 分⽀中包含多条语句
          • 1.32嵌套if
        • 1.4悬空else问题
        • 二、switch语句
          • 2.1 if语句和switch语句的对⽐
            • 2.2 switch语句中的break
              • 2.3 switch语句中的default
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档