分支和循环(1)

文章详细介绍了C语言中的控制语句,包括if语句、switch语句、循环执行(如while、for)、转向语句(break、continue)以及return语句。特别强调了条件判断中的逻辑操作符使用,如短路现象,并给出了防止错误的编写建议,如避免连续关系操作符和正确使用break。此外,还讨论了switch语句的结构和注意事项,包括default子句的使用。
摘要由CSDN通过智能技术生成

什么是语句?

C语句可分为以下五类:

  • 表达式语句
  • 函数调用语句
  • 控制语句
  • 复合语句
  • 空语句

以下主要讲的是控制语句。控制语句又包含九种控制语句:

  • 条件判断语句(分支语句):if语句,switch语句
  • 循环执行语句:do while语句,while语句,for语句
  • 转向语句:break语句,goto语句,countinue语句,return语句

分支语句(选择语句)

if语句

//语法结构:
if(表达式)//若表达式为真(0为假,非0为真),才会执行语句
	语句;

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

悬空else

例如以下代码:

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

这个代码实际上什么也不会输出,它等价于:

#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悬空的匹配机制:else是和它最近的if匹配。

关系操作符

主要有以下六个:

  • >大于操作符
  • <小于操作符
  • >=大于等于操作符
  • <=小于等于操作符
  • !=不等于操作符
  • ==等于操作符

关系表达式通常返回 0 或 1 ,表⽰真假。
另外要非常注意"=="与“=”,千万不要写错,不然会出大错误,因此,在写代码是可以写成:

if3==x)//这样当==写成=是就会报错引起你的注意
	x++;	

还要注意避免使用连续关系操作符,因为它极易出现错误。例如:

#include <stdio.h>
int main()
{
 	int age = 0;
 	scanf("%d", &age);
 	if(18<=age<=36)
 	{
 		printf("⻘年\n");
 	}
 	return 0;
}

当你输入10时,代码输出的结果会是青年,因为它的运算顺序是这样的:先运算18<=10,结果为0,再运算0<=36,结果为1,因此输出青年。
此代码因改为:

#include <stdio.h>
int main()
{
 	int age = 0;
 	scanf("%d", &age);
 	if(18<=age && age<=36)
 	{
 		printf("⻘年\n");
 	}
 	return 0;
}

逻辑操作符

有以下三个:

  • !逻辑反运算
    例如:若a=0 则!a=1,若a=1,则!a=0。
  • &&逻辑与
    它的运算规律是:有0取0
  • ||逻辑或
    它的运算规律是:有1取1
短路

例如:
if(i>=5 && i<=25)当i<5时,计算机就不会执行i<=25这个代码,就像是被短路。
if(i>=5 || i<=25)当i>5时,计算机不会执行i<=25这个代码。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。

switch语句

switch(整型表达式)
{
	语句项;
}
case 整型表达式:
	语句;
default:
	语句;

1.需要注意的就是switch后只能为整型表达式case后也只能为整型表达式
2.case 和后边的数字之间必须有空格
3.每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
例子:

#include<stdio.h>
int main()
{
	int n=1;
	int m=2;
	switch(n)
	{
	case 1:
		m++;//1
	case 2:
		n++;//2
	case 3:
		switch(n)
		{
		case 1:
			n++;//3
		case 2:
			m++;//4
			n++;//5
			break;
		}
	case 4:
		m++;//6
		break;
	default:
		break;
	}
	printf("m=%d,n=%d\n",m,n);
	return 0;
}

由于不是每个语句都有break,导致计算机执行了1,2,4,5,6,这五个关于m,n的语句,导致m=5,n=3。

default
  1. 每个switch语句只能有一条defalut子句。
  2. default子句可以出现在语句列表的任何位置。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值