这只是我学习c语言的笔记,写的也是我关于这一章节的一些理解,肯定会有不严谨的地方,欢迎大家的指正
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中的语句。
上述代码中只表示了这个整数能被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后面跟一个大括号,将多条语句组成一个代码块
这时代码就可以运行了
在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;
}
在有多个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要先执行第一条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;
}
格式: 表达式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的结果是假的,即不会执行语句
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的条件所以结果为真
如果将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满足第一个条件,所以整个表达式的结果都是真的,正常执行语句
练习:输入一个数,判断是否是闰年
闰年的判断条件: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)的条件已经满足了,那么就不用执行右操作数