语法结构: (表达式为真就执行语句,C语言中非0即真)
单分支
if(表达式)
语句;
双分支
if(表达式)
语句1;
else
语句2;
多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
1.单分支
#include
int main()
{
int x=1;
if (x == 1)
printf("haha\n");
return 0;
}
#include
int main()
{
int x = 1;
if (x == 2)
printf("haha\n");
return 0;
}
图一x=1,满足if条件表达式,则会进行if语句;
图二x=1不满足if条件表达式,则不会进行if语句;
2.双分支
#include
int main()
{
int r =0;
scanf("%d", &r);
if (r%2== 1)
printf("Rest\n");
else
printf("Game\n");
return 0;
}
如果满足if条件表达式,则进行if语句,若不满足则进行else语句,else并不是没有条件,else的条件是if的对立面;
满足r%2=1,就打印Rest,不满足时即(r%2!=1),就打印Game
3.多分支
#include
int main()
{
int grade = 0;
scanf("%d", &grade);
if (grade < 0 || grade>100)
printf("输入数据不在有效范围内!\n");
else if (grade >= 90)
printf("A!优秀");
else if (grade >= 70)
printf("B!良好");
else if (grade >= 60)
printf("C!及格");
else
printf("D!不及格");
return 0;
}
4. 条件表达式写错
#include
int main()
{
int a = 0;
scanf("%d", &a);
if (a = 3) //因改为if(a==3)
printf("Right!\n");
else
printf("Error!\n");
return 0;
}
题意原本想表达 如果满足if条件a等于3的话,打印Right! 如果不满足if条件即a不等于3 则输出Error!
但 将if表达式里判断表达式==误写成赋值表达式=,则if条件永远为真,无论输入任何数,都会打印Right! (通过scanf函数输入a之后,紧接着进入if表达式,判断是否满足if条件表达式,满足则进行if内的语句,不满足就不会进入if语句,无论输入的a为几,进入if条件判断表达式时,都会将a重新赋值为3,非0即真,此语句为真,就会进行if语句)
改善方法:即使写错 编译器也不会报错,因为在c语言中a=3(将a赋值为3)表达式是允许的;所以避免这种情况 可以写成if(3==a),这样如果写错if(3=a) 编译器会报错,因为不可以将常量赋值,语法错误,编译器就会报错,就比较容易发现;注意:只有判断变量与常量是否相等时才能交替换位置写,但如果判断一个表达式是否等于一个常量时,不能交替位置写;举例说明:若判断a是否等于3 可以写if(a==3),就可以写成常量在左,变量在右 即if(3==a),但如果判断一个表达式是否等于一个常量时必须写成if(a%2==1),不能写if(1==a%2)。
5.书写规范
(1)else匹配问题
#include
int main()
{
int a = 0, b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
猜一下输出结果咯,另外思考一下else与哪个if匹配,是和跟它对齐的那个if匹配吗?
我来浅浅解释一下
嵌套if语句,捋清楚思路程序一步步如何进行,首先第一个if条件表达式满足的情况下(a==1)才会进入第二个if条件表达式(b==2),若满足第二个if条件表达式就会打印hehe,满足第一个if表达式(a==1)的基础上不满足第二个表达式(b==2),就会打印haha,此段代码输出结果是空的 啥也没有输出;
else匹配问题 仅有的一个else与谁匹配呢,答案是与它最近的一个if匹配 也就是和if(b==2)匹配,虽然else与第一个if是对齐的但是并不匹配,也就是不和if(a==1)匹配,此段代码书写不规范,正确情况下因该是 else 因该与所匹配的if对齐,部分编译器会使else自动与上一个if对齐,但部分编译器不会,你写什么样就是什么样,不会自动对齐,,所以书写不规范时使代码的可读性变差,上述代码书写规范示例如下
#include
int main()
{
int a = 0, b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
(2)省略else问题
#include
int main()
{
int a = 2, b = 3;
if (a == 1)
{
a++;
b++;
}
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
#include
int main()
{
int a = 2, b = 3;
if (a == 1)
a++;
b++;
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
猜一下输出结果咯,思考图一图二是一样的吗 分别什么时候执行b++;
图一:
a++;和b++;都属于if条件语句内容;如果满足if条件表达式(a==1),则执行if条件语句内容(a++;和b++;) 不满足则不会执行if语句内容
图二:
揭秘咯!只有a++属于if条件语句内容,b++不属于;如果满足if(a==1) 就会执行if条件语句内容(a++;),不满足if(a==1) 就会执行b++;代码中a=2不满足if条件表达式,所以会执行b++;
if语句没有加{},所以就默认只有一条语句,即a++; 后面的b++是单独的一条语句 不属于if语句内容 也就是不满足if条件,就会执行b++;上述代码书写规范如下所示:
#include
int main()
{
int a = 2, b = 3;
if (a == 1)
a++;
else
b++;
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}