【C语言】分支语句和循环语句

目录

 1. 什么是语句?

 2. 分支语句

2.1 if语句

2.1.1 悬空else 

2.2 switch语句

 3. 循环语句

3.1 while循环

 3.1.1 while循环中的break和continue

break

continue

3.2 for循环

【练习题】

3.3 do...while()循环 

4.goto语句

5. 练习 


首先C语言是一种结构化的程序设计语言,是人与计算机之间进行交流的一种语言。

C语言支持三种结构:

  • 顺序结构
  • 选择结构
  • 循环结构

顺序结构:步骤1->步骤2->步骤3...(按照顺序进行 一步一步地有序执行)

选择结构:根据条件进行选择

 循环结构:一般会用在,我们循环往复的执行事件上。

 

 1. 什么是语句?

C语言语句可以分为:

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

 其中分支和循环属于控制语句

C语言控制语句有:

  1. 分支语句(条件判断语句):if语句、switch语句
  2. 循环语句:do while语句、while语句、for语句
  3. 转向语句:break语句、goto语句、continue语句、return语句

 2. 分支语句

2.1 if语句

在C语言,0表示假,非零表示真

//语法
if(表达式)  //表达式为真,就执行下面的语句
    语句;

if(表达式)    //表达式为真,就执行语句1
    语句1;
else          //表达式为假,执行语句2
    语句2;
#include<stdio.h>
int main()
{
    int age = 0;    //初始化变量
    scanf("%d",&age);
    if(age < 18)
    {
        printf("未成年");
    }
    else
    {
        printf("成年了!");    //age >= 18
    }
    return 0;
}

 注意:if语句是一种分支语句,可以实现单分支,也可以实现多分支

//多分支
if(表达式1)
{
    语句1;
}
else if(表达式2)
{
    语句2;
}
else
{
    语句3;
}

易错提醒:

#include<stdio.h>
int main() 
{
	int age = 0;
	scanf("%d",&age);
	if (age<18)
	{
		printf("少年");
	}
	else if(18<=age<30)    //注意此代码
	{
		printf("青年");
	}
	else if (age>=30&&age<50) 
	{
		printf("中年");
	}
	else 
	{
		printf("老年");
	}

}

else if(18<=age<30)

此条语句是先判断 18<=age 再判断age<30

如果18<=age为真 (1),1<30也为真,语句执行

更正:else if(age>=18&&age<30)

 当保持代码状态顺序不变的情况下,进行代码简化

#include<stdio.h>
int main() 
{
	int age = 0;
	scanf("%d",&age);
	if (age<18)
	{
		printf("少年");
	}
	else if(age<30)
	{
		printf("青年");
	}
	else if (age<50) 
	{
		printf("中年");
	}
	else 
	{
		printf("老年");
	}

}

2.1.1 悬空else 

else是和它距离最近的if匹配的

#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,其实真正结果是什么都不打印

要打印haha的正确代码为

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

2.2 switch语句

switch语句也是分支语句的一种,常用于多分支的情况

 switch(表达式)

{

        case 整型常量表达式:

                语句;

                break;         //实际效果是把语句划分为不同的分支部分

        case 整型常量表达式:

                语句;

                break;         

        .....

        default:

                语句;

                break;

}

 注意:

switch(表达式)

这里的表达式,只能是 short、char、int、long整数、枚举

不能是:float、double

case语句后一般放整型结果的常量表达式或者枚举类型,枚举类型也可以看成是一个特殊的常量

当表达式的值与case的值都不匹配,则执行default的语句

switch语句中的default子句可以放在任意位置,一般case最好放在default之前

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		printf("吃饭\n");
	case 2:
		printf("睡觉\n");
	case 3:
		printf("打豆豆\n");
	default:
		printf("编程!!!");
	}
	return 0;
}

注意这里没有break,当键盘输入1时

 加入break

#include<stdio.h>
int main() 
{
	int n = 0;
	scanf("%d", &n);
	switch (n) 
	{
	case 1:
		printf("吃饭\n");
		break;
	case 2:
		printf("睡觉\n");
		break;
	case 3:
		printf("打豆豆\n");
		break;
	default:
		printf("编程!!!");
		break;
	}
	return 0;
}

 键盘输入1

 case的连贯使用:当要求

1. 输入1-5,输出的是“weekday”;
2. 输入6-7,输出“weekend”

int main()
{
	int day = 0;
	switch (day)
	{
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("weekday\n");
		break;
		case 6:
		case 7:
			printf("weekend\n");
			break;
	}
	return 0;
}

 3. 循环语句

3.1 while循环

当某一事件我们需要执行多次。c语言中while,可以实现循环

【例】打印 数字 1-10

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

 3.1.1 while循环中的break和continue

break

查看下方代码的输出

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

结果输出为

 总结:break在while循环中 的作用,直接终止循环,后面的循环不再继续进行。

continue

查看下方代码的输出

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

 输出:1 2 3 4 进入死循环

【例】判断输出结果

#include<stdio.h>
int main()
{
	int i = 1;
	while (i<=10)
	{
		i = i + 1;
		if (i==5)
			continue;
		printf("%d ",i);
	}
	return 0;
}

易错处,输出结果容易看成: 2 3 4 6 7 8 9 10

但是结果为:2 3 4 6 7 8 9 10 11

因为while循环中i<=10,后面有i= i+1;

总结:continue在while循环中的作用为:终止本次循环,即本次循环后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断

3.2 for循环

for(表达式1;表达式2;表达式3)

        语句;

  • 表达式1:用于初始化循环变量
  • 表达式2:用于判断循环什么时候终止
  • 表达式3:用于循环条件的调整

 例:用for循环输出1-10

#include<stdio.h>
int main() 
{
	int i = 0;
	for (i =1;i<=10;i++) 
	{
		printf("%d ",i);
	}
	return 0;
}

for循环里面也可以有break和continue语句

#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}

结果为:1 2 3 4

一些for循环的变种

#include<stdio.h>
int main() 
{
	for (;;)
	{
		printf("666 ");
	}
	return 0;
}

for循环里面的表达式有时是可以省略的。但是判断部分省略会一直循环下去【不建议省略】

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 0;i<3;i++)
	{
		for (j = 0; j < 3;j++)
		{
			printf("6 ");//一共打印9个6
		}
	}
	return 0;
}

这是嵌套循环

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (;i<3;i++)
	{
		for (; j < 3;j++)
		{
			printf("6 ");//一共打印3个6
		}
	}
	return 0;
}

结果:6 6 6

因为两个for循环里面都没有初始化部分,当最里面的循环 j等于3的时候(打印完三个6),之后再进入循环时条件不满足了。

【练习题】

//请问循环要循环多少次?
#include<stdio.h>
int main() 
{
	int i = 0;
	int j = 0;
	for (i = 0, j = 0; j = 0; i++, j++)
		j++;
	return 0;
}

 结果是:一次也不循环

因为判断部分 j = 0;就是 j 赋值为零,即为假,循环就进不去。

3.3 do...while()循环 

do

        循环语句;

while(表达式);

do...while()循环是先执行一次,再进行判断。如果表达式为真,接着执行循环语句,直到条件不满足停止。

4.goto语句

goto语句最常用的场所就是 终止程序在某些深嵌套的结构

因为在多层循环中,跳到某层循环中,一个break是达不到的。而goto语句可以做到。 

//goto语句运用
#include<stdio.h>
int main() 
{
	int i = 0;
	int error = 1;
	for (i = 0; i < 3;i++)
	{
		for (int j = 0; i < 3; i++) 
		{
			for (int k  = 0; k < 3; i++) 
			{
					goto end1;//跳转标记
			}
		}
	}
end1://所跳转的位置
	if (error)
	{
		printf("hh");
	}
	return 0;
}

执行结果:

 建议尽量少使用goto语句

5. 练习 

1. 计算n 的阶乘

//计算n的阶乘
#include <stdio.h>
int main() 
{
	int n = 0;
	int ret = 0;
	while (~scanf("%d",&n))//实现多组输入
	{
		int i = 0;
		ret = 1;
		for (i = 1; i <= n;i++)
		{
			ret *= i;
		}
		printf("%d\n",ret); 
	}
    return 0;	
}

2. 计算1-10之间阶乘的和

#include<stdio.h>
int main()
{
	int i = 0;
	int sum = 0;
	int ret = 1;
	for (i = 1; i <= 10;i++) 
	{
		ret *= i;
		sum += ret;
	}
	printf("%d",sum);
	return 0;
}

输出结果为:

猜你喜欢

转载自blog.csdn.net/qq_72505850/article/details/131766555