c语言分支与循环语句的介绍与运用

本文详细介绍了C语言中if、switch、while、for和do-while等基本结构的使用方法,包括分支结构的实现,如if和嵌套if,以及循环结构如while、for和do-while的语法和示例。还提到了break和continue的关键字在控制循环流程中的作用。
摘要由CSDN通过智能技术生成

c语言的结构类型

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。 我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。

分支结构的实现

(1)if语句

if 语句的语法形式如下:

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

表达式是用来判断的,表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏ 。

 在C语⾔中,0为假,⾮0表⽰真。也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是 不是0,则语句执⾏。

例子:

输入描述:

题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。

输出描述:

针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	while (scanf("%d %d %d", &a, &b, &c) != EOF)
	{
		if (a >= b && b >= c && a<b + c && c>a - b)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}
		else if (a >= c && b <= c && a<b + c && b>a - c)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}
		else if (b >= a && a >= c && b<a + c && c>b - a)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}
		else if (b >= c && a <= c && b<a + c && a>b - c)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}
		else if (c >= a && a >= b && c<a + b && b>c - a)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}
		else if (a <= b && b <= c && c<a + b && a>c - b)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}
		else
			printf("Not a triangle!\n");
	}
	return 0;
}

注意: 默认在 if 和 else 语句中默认都只控制一条语句,如果我们要if语句同时控制2条语句或多条语句,就要使⽤ {} 将代码括起来, else 后也可以跟上⼤括号。如上例中:

if (a >= b && b >= c && a<b + c && c>a - b)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}
		else if (a >= c && b <= c && a<b + c && b>a - c)
		{
			if (a == b && b == c)
				printf("Equilateral triangle!\n");
			else if (a == b || b == c || a == c)
				printf("Isosceles triangle!\n");
			else
				printf("Ordinary triangle!\n");
		}

嵌套if

在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。

if (a >= b && b >= c && a<b + c && c>a - b)
        {
            if (a == b && b == c)
                printf("Equilateral triangle!\n");
            else if (a == b || b == c || a == c)
                printf("Isosceles triangle!\n");
            else
                printf("Ordinary triangle!\n");
        }

 上图中红色背景的代码就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。

以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。

注意:如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

但初学者往往容易在写多个if和else这样的代码时出错,只要带上适当的⼤括号,代码的逻辑就会更加的清晰,能够有效减少代码出错的概率,因此建议各位新手朋友们在写代码时能够养成适当加上大括号的习惯,提高代码的可读性。

(2)switch语句

switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式。

switch语句的语法形式如下:

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

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值, 就执⾏ default 分⽀。

注意: 1. switch 后的 expression 必须是整型表达式

2.case 后的值,必须是整形常量表达式 

例子:输入任意正整数,判断它是奇数还是偶数

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	switch (num % 2)
	{
	case 1:
		printf("%d是奇数\n",num);
		break;
	case 0:
		printf("%d是偶数\n",num);
		break;
	}
	return 0;
}

上述的代码中,我们要注意的点有: 1. case 和后边的数字之间必须有空格

2. 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

如果把上述代码中的break去掉就会出现以下情况:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	switch (num % 2)
	{
	case 1:
		printf("%d是奇数\n",num);
	case 0:
		printf("%d是偶数\n",num);
	}
	return 0;
}

我们可以看到,原本应该打印“5是奇数”的,却打印出了“5是奇数,5是偶数”,可见如果没有break,程序就会一直往下执行,出现bug,所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句。

例子:输入一个1~12的数字,打印其对应的季节

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	switch (month)
	{
	case 3:
	case 4:
	case 5:
		printf("春季\n");
		break;
	case 6:
	case 7:
	case 8:
		printf("夏季\n");
		break;
	case 9:
	case 10:
	case 11:
		printf("秋季\n");
		break;
	case 12:
	case 1:
	case 2:
		printf("冬季\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加⼊ default ⼦句。 就⽐如前⾯的练习,如果用户 的输⼊不是1~12的值,我们就可以利用default来提示用户。

注意:在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。

循环结构的实现

(1)while循环

while语句的语法结构如下:

while(表达式)
    语句;

执行流程:⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

应用实例:输⼊⼀个正的整数,逆序打印这个整数的每⼀位

 题⽬解析

1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位。

 2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的。

#define _CRT_SECURE_NO_WARNINGS1
#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	while (num)
	{
		printf("%d", num % 10);
		num /= 10;
	}
	return 0;
}

 (2)for循环

for 循环是三种循环中使⽤最多的, for 循环的语法结构如下:

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

表达式1 :⽤于循环变量的初始化

表达式2: ⽤于循环结束条件的判断

表达式3: ⽤于循环变量的调整

for循环的执行流程:

⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果 ==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式 3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继 续。 整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3再循 环。

应用实例:打印9*9乘法口诀表

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	for (a = 1; a < 10; a++)
	{		for (b = 1; b <= a; ++b)
		{
			c = a * b;
			printf("%d*%d==%d ", b, a, c);
		}
		printf("\n");
	}
		
	//打印9*9乘法口诀表	
	return 0;
}

运行结果: 

 for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部 分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形 式上 for 循环要更优⼀些。

(3)do-while循环

 do-while循环的语法结构如下:

do
{
  语句;
}
while(表达式)

 注意:do-while的循环体至少被执行一次。

应用实例:输入1个正整数,计算这个整数是几位数

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int cnt = 0;
	do
	{
		cnt++;
		n = n / 10;
	} while (n);
	printf("%d\n", cnt);
	return 0;
}

break和continue的介绍

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中 提供了 break 和 continue 两个关键字,就是应用到循环中的。

• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执 ⾏。 • continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所 差异的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值