大家好,欢迎来到IT知识分享网。
if语句总结
这只是我学习c语言的笔记,写的也是我关于这一章节的一些理解,肯定会有不严谨的地方,欢迎大家的指正
if语句的语法
if(表达式)
语句
只要表达式的结果为真(非0)就执行语句;反之表达式的结果为假(0)就不执行语句
例子:输入一个整数,判断这个整数是不是5的倍数
#include<stdio.h> 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<stdio.h> int main() {
int num = 0; scanf("%d", &num); if (num % 2 == 0) {
printf("NO"); } else {
printf("YES"); } return 0; }
if语句大括号的使用
在if语句中,if默认只能执行一条语句,要想执行多条语句可以用大括号括起来使其变成一个代码块
比如:
可以看出因为if后面跟了多条语句所以使得代码无法运行,所以需要在if后面跟一个大括号,将多条语句组成一个代码块
这时代码就可以运行了
if的嵌套
在if else语句中else可以和另一条jf连用
比如:输入一个整数,判断这个数是正数还是负数,如果是正数再判断这个数是奇数还是偶数,如果是负数则打印负数
#include<stdio.h> 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<stdio.h> 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<stdio.h> 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<stdio.h> {
int a = 1; int b = 2; printf("%d", a > b); return 0; }
因为2肯定是比1大的所以表达式的结果为假,返回的就是0
#include<stdio.h> 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<b,因为1是肯定小于5的,所以返回了1,然后又用1和c进行了比较,1也是小于c的所以程序会正常运行
如果想要表达三个数之间的大小的话
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的结果是假的,即不会执行语句
ef8a83824d.png#pic_center)
相反,如果一开始将0赋值给a,那么就会执行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)的条件已经满足了,那么就不用执行右操作数
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/151946.html