【C语言】循环与分支(知识总结)

一. if 语句

1.单分支 if 语句

if(表达式)
语句;

(1)代码示例

if(a==1) 
 printf("梦");

(2)执行流程

单分支 if 语句流程图

语义:首先计算表达式,如果表达式为“真”,则执行语句;否则不执行语句,直接执行 if 语句的下一条语句

(3)注意

单分支 if 中的语句只能有一条,如果有多条应使用花括号括起来

示例代码:

#include<stdio.h>
int main()
{
    
    
	int a=0;
	int b=1;
	if(a==1)
	   if(b==1)
	   printf("梦");
	else
	   printf("渊");
	   return 0;
}

运行结果为空:
运行结果

解释:其中的下方代码一般情况下为一个单分支语句(语句的结束标志为" ; "):

if(a==1)
   if(b==1)
   printf("梦");

但是在示例代码中 elseif(b==1) 配对构成一个 if-else 语句;所以 if(a==1) 的语句为下方代码:

	if(b==1)
	printf("梦");
else
	printf("渊");

所以示例代码相当于:

#include<stdio.h>
int main()
{
    
    
	int a=0;
	int b=1;
	if(a==1)
	{
    
    
	   if(b==1)
	   printf("梦");
	else
	   printf("渊");
	}
	   return 0;
}

结合上面的流程图知:当 if(a==1) 判断为时,不执行它的语句,直接执行下一条语句,即 return 0;
代码执行完毕,什么都没有打印,所以运行结果为

2. 双分支 if 语句(if-else语句)

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

(1)代码示例

if(a==1) 
 printf("梦");
 else
 printf("渊")

(2)执行流程

双分支 if 语句流程图

3.多分支

if(表达式)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;

else
语句n;

(1)代码示例

if(a==1) 
 printf("梦");
 else if(a==2)
 printf("渊")else if(a==3)
 printf("wo")else
 printf("ya");

(2)执行流程

多分支 if 语句流程图

(3)运用

题目:实现下面分段函数

代码如下

#include<stdio.h>
int main()
{
    
    
		int x = 0;
		scanf("%d", &x);
		if (x >= 2)
			printf("y=3\n");
		else if (x > 0)
			printf("y=%f\n", -1.0 / 2 * x);
		else if (x >= -1)
			printf("y=%d\n",2*x+2);
		return 0;
	
}

在写 else if (x > 0) 时很多人会写 else if (x > 0&&x < 2),但这是不必要的,因为只有在
if (x >=2) 为假,即 x<2 时才会执行 else if (x > 0),后面同理

3. if语句的嵌套

(1) 悬空else

else 总是与离它最近未匹配if 配对而与代码的排列无关

看下面一段代码:

#include<stdio.h>
int main()
{
    
    
	int a=0;
	int b=1;
	if(a==0)
	   if(b==0)
	   printf("梦");
	else
	   printf("渊");
	   return 0;
}

运行结果为 而不是 因为 else 是与 if(b==0) 配对的

(2)多条 if-else 语句

用花括号 {} 将它们区分开来

代码示例:

#include<stdio.h>
int main()
{
    
    
	int a=0;
	int b=1;
	if(a==1)
	  {
    
    
	   if(b==1)
	     printf("梦");
	   else
	     printf("ya");
	  }
	else
	   printf("渊");
	   return 0;
}

4.规范问题

当有多条语句时用花括号"{}"括起来比较好.

例如:

if(a==1) 
{
    
    
  printf("梦");
  printf("入");
}
 else if(a==2)
 {
    
    
  printf("渊")printf("底");
 }
 else if(a==3)
  printf("wo")else
  printf("ya");

5.其他需要注意的问题

(1) == 和 =

看下面一段代码:

#include<stdio.h>
int main()
{
    
    
 int a=0;
 if(a=1)
 printf("梦");
 else
 printf("渊");
}

运行结果为 并不是
因为 a=1 表示将1赋给了a,导致表达式恒为真,进而打印的是 而不是
要打印 应将 = 改为 ==
== 才表示判断,而 = 表示赋值,别写错了.

二. switch 语句

switch(表达式)
{
case 常量表达式 1 :语句1;break;
case 常量表达式 1 :语句1;break;

case 常量表达式 n :语句n;break;
default:语句 n+1;break;
}

1.代码示例

(1)

#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;//这里的break可加可不加,但最好加上
	   }
	   return 0;
 }

(2)

#include<stdio.h>
int main()
{
    
    
	   int month=0;
	   printf("输入月份:");
	   scanf("%d",&month);//int a=(month-1)/3;
	   switch((month-1)/3)//switch(a)
	   {
    
    
		 case 0:
			 printf("%d月是第1季度\n",month);
			 break;
	     case 1:
		     printf("%d月是第1季度\n",month);
		     break;
	     case 2:
		     printf("%d月是第1季度\n",month);
		     break;
	     case 3:
		     printf("%d月是第1季度\n",month);
		     break;
	     default:
		     printf("输入错误\n");
		     break;
	   }
	   return 0;
 }

2. 说明

(1) switch 后的表达式可以是任何表达式,形见示例,但其值只能为整型、字符型、枚举型;如果表达式过长,可以再定义一个变量来表示表达式,见示例 2 注释
(2)每个 case 后面的常量表达式的值应互不相同,否则会相互矛盾
(3)各个 case 和 default 的出现次序不影响执行结果
(4)可以让多个 case 共用一组执行语句
(5) switch 语句允许嵌套使用

(4)的代码示例(由示例2变化而来)如下:

#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;
	     default://默认值 可加可不加
		     printf("输入错误\n");
		     break;//这里的break可加可不加,但最好加上
	   }
	   return 0;
 }

三. for 循环

for(表达式1;表达式2;表达式3) 注意是分号
{
循环体语句; 花括号在不需要时可以不加
}

1. 执行流程

for 语句执行流程
语义:

2. 代码示例

#include<stdio.h>
int main()
{
    
                                 //也可写成下面这样,但是不建议这样写
	int i,sum;                //int sum;       
	sum=0;                    //sum=0;
	for(i=1;i<4;i++)          //for(int i=1;i<4;i++)
	{
    
                             
		sum=sum+i;
		printf("%d\n",sum);
	}
	return 0;
}

3. for 循环语句一般形式的省略(结合上面的代码示例说明)

(1) 省略表达式 1

for(i=1;i<4;i++)  
 sum=sum+i;
 

等价于

i=1
for(;i<4;i++)  
 sum=sum+i;

(2) 省略表达式 2

for(i=1;;i++) 

省略表达式2时,表示不对循环进行控制,倘若没有其他处理,会形成死循环

(3) 省略表达式 3

for(i=1;i<4;i++)  
 sum=sum+i;

等价于

for(i=1;i<4;)  
 sum=sum+i;
 i++;

(4)省略循环体语句(表达式 3 为逗号表达式)

for(i=1;i<4;i++)  
 sum=sum+i;

等价于

for(i=1;i<4;sum=sum+i,i++)  //后面用逗号隔开

(5)表达式 1 为逗号表达式

sum=0;
for(i=1;i<4;i++)  
 sum=sum+i;

等价于

for(sum=0,i=1;i<4;i++)  
 sum=sum+i;

说明:

通过上述介绍,说明 for 循环控制结构功能强大,但不建议这样写代码

四. while 循环

while(表达式)
{
循环体; 花括号在不需要时可以不加
}

1. 执行流程

while 语句执行流程

2. 代码示例

#include<stdio.h>
int main()
{
    
                                 
	int i,sum=0;                                      
	while(i<4)          
	{
    
                             
		sum=sum+i;
		printf("%d\n",sum);
		i++;
	}
	return 0;
}

五. do…while 循环

do
{
循环体
}while(表达式); 分号别漏了

1. 执行流程

do-while 语句的执行流程

2. 代码示例

#include<stdio.h>
int main()
{
    
                                 
	int i,sum=0;                                      
	do     
	{
    
                             
		sum=sum+i;
		printf("%d\n",sum);
		i++;
	}while(i<4);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_74102736/article/details/129699012