if分支语句

语法结构:       (表达式为真就执行语句,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语句;

if分支语句_第1张图片

图二x=1不满足if条件表达式,则不会进行if语句;

 if分支语句_第2张图片

 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

if分支语句_第3张图片

 if分支语句_第4张图片

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语句内容

if分支语句_第5张图片

图二:

揭秘咯!只有a++属于if条件语句内容,b++不属于;如果满足if(a==1)  就会执行if条件语句内容(a++;),不满足if(a==1) 就会执行b++;代码中a=2不满足if条件表达式,所以会执行b++;

if分支语句_第6张图片

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

你可能感兴趣的:(初始C,c语言,c#)