if语句总结

if语句总结

这只是我学习c语言的笔记,写的也是我关于这一章节的一些理解,肯定会有不严谨的地方,欢迎大家的指正

if语句的语法

if(表达式)

​ 语句

只要表达式的结果为真(非0)就执行语句;反之表达式的结果为假(0)就不执行语句

例子:输入一个整数,判断这个整数是不是5的倍数

#include
int main()
{
    int i = 0;
    scanf("%d",&i);
    //判断
    if(i%5==0)//如果输入的表达式的结果为真,就执行大括号中的语句
    {
        printf("%d是5的倍数",i);
    }
    return 0;
}

打印效果如下

在这里插入图片描述

因为我们输入了一个10,然后if后面括号里面的表达式就会判断是真还是假,因为10可以被5整除,所以执行if中的语句。

else

上述代码中只表示了这个整数能被5整除的情况,如果不能被5整除的时候该怎么样表示呢?

这就要用if…else语句

if…else的语法

if(表达式)

语句1

else

语句2

else是否则的意思,表示如果if后面的表达式为的话就会执行语句1,如果为假就会执行语句2

例子:输入一个整数判断是不是奇数,如果是奇数打印YES,否则打印NO。

#include
int main()
{
    int num = 0;
    scanf("%d", &num);
    if (num % 2 == 0)
    {
        printf("NO");
    }
    else
    {
        printf("YES");
    }
    return 0;
}

if语句大括号的使用

在if语句中,if默认只能执行一条语句,要想执行多条语句可以用大括号括起来使其变成一个代码块

比如:

if语句总结_第1张图片

在这里插入图片描述

可以看出因为if后面跟了多条语句所以使得代码无法运行,所以需要在if后面跟一个大括号,将多条语句组成一个代码块

if语句总结_第2张图片

这时代码就可以运行了

在这里插入图片描述

if的嵌套

在if else语句中else可以和另一条jf连用

比如:输入一个整数,判断这个数是正数还是负数,如果是正数再判断这个数是奇数还是偶数,如果是负数则打印负数

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

    }
    else if (num < 0)
    {
        printf("%d是负数", num);
    }
    else
    {
        printf("这个数等于0");
    }
    return 0;
}

上面这段代码首先判断这个数大于0的情况,如果这个数能被二整除这个数就是偶数,否则就是奇数,如果这个数小于0的话就跳到了else if 后面的这个语句,就会表达这个数是负数,如果输入的这个数不大于0也不小于0的话,那就只能是0了,所以又有了一个else来表达这个数是0的情况,而下面就是运行的结果。

在这里插入图片描述

在这里插入图片描述

再比如现在想要记录某班的成绩,90100分评价是A,8090评级是B,7080评级是C,6070评级是D,0·60是不合格

代码如下:

#include
int main()
{
	int cj = 0;
	scanf("%d", &cj);
	if (cj >= 90 && cj <= 100)//当成绩在90~100时
	{
		printf("评级为A");
	}
	else if (cj >= 80 && cj < 90)//当成绩在80~90时
	{
		printf("评级为B");
	}
	else if (cj >= 70 && cj < 80)//当成绩在70~80时
	{
		printf("评级为C");
	}
	else if (cj >= 60 && cj < 70)//当成绩在60~70时
	{
		printf("评级为D");

	}
	else
	{
		printf("不合格");//当成绩在0~60时
	}
	return 0;
}

在这里插入图片描述

悬挂else

在有多个if和else的情况下else始终与它最近的if匹配

例子:

#include
int main()
{
	int i = 9;
	if (i >= 1 && i <= 6)
	if (i >= 6 && i <= 9)
	printf("初中生");
	else
	printf("其他年级的学生");
	return 0;
}

我们的本意是i=9我们要打印初中生,但是实际结果是这样的
在这里插入图片描述

屏幕上面什么都没有打印

因为i=9要先执行第一条if但是第一条if中没有包含i=9的情况,所以结果为假直接跳出了if语句,因为else匹配的if是第二个if

其实正确的书写规范是这样的

int main()
{
	int i = 9;
	if (i >= 1 && i <= 6) {
		if (i >= 6 && i <= 9) 
		{
			printf("初中生");
		}
		else {
			printf("其他年级的学生");
		}
	}
	return 0;
}

这样可以直观的看出else匹配的是哪个if

关系操作符

c语言中用于比较的表达式。称为“关系表达式”,里面使用的运算符称为“关系运算符”,主要有:

  • 大于运算符 >
  • 小于运算符 <
  • 大于等于 >=
  • 小于等于 <=
  • 相等运算符 ==
  • 不相等运算符 !=

关系表达式返回的值通常是或者1,用来表示真假

比如:1<2返回的值就是1,1>2返回的值就是0

用代码表示是这样的:

#include
{
	int a = 1;
	int b = 2;
	printf("%d", a > b);

	return 0;
}

因为2肯定是比1大的所以表达式的结果为假,返回的就是0

#include
int main()
{
	int a = 1;
	int b = 2;
	printf("%d", a < b);

	return 0;
}

如果将小于号换成大于号,因为1是比2小的,所以结果为真,返回的值就是1

注意:==是相等运算符,=是赋值运算符,两者表达的意思是截然相反的

int a=0;
if(a==1)
    printf("你好");

这段代码如果用相等运算符是不会打印任何东西的,因为前面将0赋值给了变量a,if后面的表达式只有在a==1的情况下才会成立,所以if的结果为假

int main()
{
	int a = 0;
	if (a = 1)
		printf("你好");
	return 0;
}

但是换成赋值操作符的话,就相当于在if后面的表达式将1赋值给了a,而1代表着真,这段代码就会运行

多个关系运算符不适合连用

int main()
{
	int a = 1;
	int b = 5;
	int c = 3;
	if (a < b < c)
	{
		printf("%d<%d<%d", a, b, c);
	}
	return 0;
}

按理来说,因为1<5<3,这个说法是错的,但是上面这段代码却可以运行,因为c语言中它会先判断a

如果想要表达三个数之间的大小的话

a<b&&b<c

这样是符合c语言的运算规则的

例子:如果你一次考试,考了90~100的话,爸妈奖励你糖吃

	int main()
	{
		int a = 95;
		if (a >= 90 && a <= 100)
		{
			printf("爸妈奖励糖吃");
		}
		return 0;
	}

if语句总结_第3张图片

条件操作符

格式: 表达式1 ? 表达式2:表达式3

如果表达式1为真,就计算表达式2,不计算表达式3

如果表达式1为假,就计算表达式3,不计算表达式2

int main()
{
	
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	b = (a > 10 ? 5 : -5);
	printf("b=%d", b);
	return 0;
}

这段代码的意思就是如果a的值大于10,那么b就等于5,否则b就等于-5

逻辑操作符&& || !

!逻辑取反运算符

改变表达式的真假

int main()
{
	int a = 1;
	if (!a)
	{
		printf("你好");
	}
	return 0;
}

刚开始将1赋值给了a,然后if后面的表达式给了一个逻辑取反运算符,就相当于if的结果是假的,即不会执行语句

if语句总结_第4张图片
ef8a83824d.png#pic_center)

相反,如果一开始将0赋值给a,那么就会执行if中的语句
if语句总结_第5张图片

逻辑与运算符&&

a b a&&b的返回值
!0 !0 1
!0 0 0
0 !0 0
0 0 0

如果a和b都为真,结果为真。如果a和b有一个为假,结果为假。如果a和b有一个为假,结果为假。

比如想表达1念及到6年级是小学生

int main()
{
	int nj = 3;
	if (nj >= 1 && nj <= 6)
	{
		printf("小学生");
	}

	return 0;
}

因为3同时满足大于大于1小于等于6的条件所以结果为真

if语句总结_第6张图片

如果将nj的值改成7,7确实比1大,但是他也比6大,有一个条件不满足,所以结果为假

逻辑或运算符||

a b a||b的返回值
!0 !0 1
0 !0 1
!0 0 1
0 0 0

如果a,b都为真,结果为真。如果a,b有一个结果为真,结果为真,如果a,b结果都为假,结果为假。

例子:在屏幕上打印冬季

int main()
{
	int mouth = 1;
	if (mouth == 1 || mouth == 2 || mouth == 12)
	{
		printf("冬季");
	}

	return 0;
}

因为1满足第一个条件,所以整个表达式的结果都是真的,正常执行语句

if语句总结_第7张图片

练习:输入一个数,判断是否是闰年

闰年的判断条件:1 可以被4整除,并且不能被100整除

​ 2 可以被400整除(二者完成其一即可)

int main()
{
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	{
		printf("%d是闰年", year);
	}
	else
	{
		printf("%d不是闰年", year);
	}

	return 0;
}

假设year的值是2000,虽然因为2000除以100等于了0,但是它可以被400整除,满足year%400==0,所以执行if语句

短路求值

因为逻辑运算符的计算特点是先对左边的表达式进行求值,再对右边的进行求值,如果左边的表达式符合逻辑运算符的条件,右边则没必要计算了,这种情况就是短路

if(a>1&&a<5)
    

对于与运算符来说,如果左操作数(a>1)的条件都不满足的话就没必要执行右操作数(a<5)了

if(year%4==0||year%400==0)

对于或运算符来说,如果左操作数(year%4==0)的条件已经满足了,那么就不用执行右操作数

ar);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
printf(“%d是闰年”, year);
}
else
{
printf(“%d不是闰年”, year);
}

return 0;

}




假设year的值是2000,虽然因为2000除以100等于了0,但是它可以被400整除,满足year%400==0,所以执行if语句

## 短路求值

因为逻辑运算符的计算特点是先对左边的表达式进行求值,再对右边的进行求值,如果左边的表达式符合逻辑运算符的条件,右边则没必要计算了,这种情况就是短路

```c
if(a>1&&a<5)
    

对于与运算符来说,如果左操作数(a>1)的条件都不满足的话就没必要执行右操作数(a<5)了

if(year%4==0||year%400==0)

对于或运算符来说,如果左操作数(year%4==0)的条件已经满足了,那么就不用执行右操作数

你可能感兴趣的:(c语言)