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

文章目录

  • 前言
  • 一、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


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

前言

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

一、if 语句

1.1 if

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

if ( 表达式)
	  语句

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

#include 
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("%d是奇数\n", num);
	return 0;
}

运算结果:

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

1.2 else

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

if ( 表达式 )
语句1
else
	语句

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

#include 
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("%d是奇数\n", num);
	else
		printf("%d是偶数\n", num);
	return 0;
}

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

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

1.31 分⽀中包含多条语句

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

#include 
 int main()
 {
 	int age = 0;
 	scanf("%d", &age);
	 if(age >= 18)
 		printf("成年了\n");
	 	printf("可以谈恋爱了\n");
 	 return 0;
  }

你会发现输⼊的值不管是>=18 还是⼩于18,"可以交谈恋爱了"都会打印在屏幕上。如图:
【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“_第4张图片
【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“_第5张图片

这是因为if语句只能控制⼀条语句,就是
printf(“成年了\n”); if语句为真,则打印成年了,if语句为假,则不打印,对于printf(“可以谈恋爱了\n”); 是独⽴存在的,这里你把代码编在VS2022上他其实也会自动调整;
【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“_第6张图片

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

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


【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“_第7张图片
这样子用{}起来就可以不管if语句的条件的真假,都不会被执⾏。

1.32嵌套if

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

 #include 
 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 
 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匹配。
我们通过代码展示:

#include 
 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"。但是当你运行这段代码时,实际的输出却是什么都没有。那么事实真的是这样吗?
看结果:
【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“_第8张图片
但是当你去运⾏代码,输出的结果是:啥都不输出来。
哎这是为什么鸭?

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

#include 
 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匹配,可以这样修改代码

#include 
 int main()
 {
 	 int a = 0;
 	 int b = 2;
	 if(a == 1)
	  {
 		if(b == 2)
	 	printf("hehe\n");
 	  }
 	  else
 	  {
 		printf("haha\n");
	  }
	 return 0;
 }

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

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

二、switch语句

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

switch (expression)
 {
	 case value1: statement
 	 case value2: statement
  	 default: statement
 }

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

2.1 if语句和switch语句的对⽐

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

 #include 
 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语句:

#include 
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去掉,又会发生什么情况呢?

#include 
 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
 }

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

分析:13 除以3余数是1,那为什么又多出一行“余数是2”呢?
原因是switch语句是按分支运行的,只有switch语句中使用break才能跳出switch语句,如果一个分支case语句后没有break语句,代码会继续走,不会停,又可能执行其他case语句中的代码,直到break语句结束。就如上面代码就执行了case 中的语句。
【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“_第11张图片

2.3 switch语句中的default

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

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 输出:星期天

#include 
 int main()
 {
    int day = 0;
    scanf("%d", &day);
    switch(day)
    {
        case 1printf("星期⼀\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语句就会一直执行下去,因此:

#include 
 int main()
 {
 	int day = 0;
 	scanf("%d", &day);
 	switch(day)
 	{
 	case 1case 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子句放在最后进行处理。

你可能感兴趣的:(我爱C语言,1024程序员节,c++,c语言,c#)