C语言语句结构分为三种
第一种是顺序结构,第二种是选择结构,而第三种是循环结构。
if语句则是属于第二种选择结构,又称之为分支结构,或者分支语句。
同样属于分支语句的还要switch。
if语句的写法:
1、if(表达式)
语句;
只要括号内的表达式能够达成,就能够进入下面的语句!
2、
if(表达式)
语句1;
else
语句2;
若括号内的表达式能够达成则进入语句1,若括号内的表达式不能达成,则进入else下面的语句2。
3、
if(表达式1)
语句1;
else if (表达式2)
语句2;
else
语句3;
若表达式1能够达成,则进入语句1,若表达式1未能达成则进入 else if 进行表达式2的判断,若表达式2 也未能达成,则进入else 下面的语句3。
if 和 else 的格式问题:
关于if和else ,其实并不是每一个if的下方都会有else的跟随,但是如果出现了else 那么必定有if的出现,而 if 和else之间还会出现一定的格式问题。
在有的编译器当中,列如 VS 会自动将else匹配并对齐到距离 else最近的 if 上,这也是else的一个特性,会跟随最近的且未被匹配的 if 。
如图所示。
若想要else和最开始的 if 进行匹配 则需要进行格式的调整,也就是加上花括号。
关于if 和 == :
在 if 的判断条件中,时常会出现一系列的问题,而这些问题则往往与 if 身后的括号内的表达式有关。
举例:if ( num = 5)
num = 5 中的= 是一个赋值符号,意思是将5赋予了num这个变量,这样的写法,无法说明是对是错,但编译器是允许的,可是,这种写法在一些循环的过程中,是错误的,错误的原因就是这个等号 = ,因为 = 可能会将整个循环变成一种死循环。
所以应该的写法是 if (num == 5)
而正确的写法,往往是因为手速的问题,而导致了==中的一个=的缺失。
所以,若需要==的判断语句,更为严谨或是说不易出错的写法应该是 if (5 == num)
关于 if 、 <、>
在 if 的判断语句中,往往会出现大于小于两个符号,而对于多组数据进行的大小对比,很多初学者会出现一种错误的书写方法,那就是 if (a>b>c)或者是 if (a<b<c)
这两种写法都是错误的,或者说都是某些初学者会犯的错误。
在大小关系符号中的判断结果,我们会知道,当a>b 这个条件成立的时候,a>b会变成1这个非0数字。
而在 if 中,非0的数字通常表示为 ”条件为真” 或者 “条件达成” ,而 数字 0则通常表示为"条件未达成" 或者"条件为假" 。
而大于小于符号,是一个从左往右进行比较的关系运算符。
所以,当 int a = 10;int b=9 ;int c=8;的时候,在我们的数学逻辑中a>b>c是合理的,而最后的结果也是判断的条件是真的,或者说条件达成。
但是,在 C语言中的 if 中 这种写法在无疑是 错误的。
若正真的想要表达,a>b>c 应该是 a>b&&b>c
而a>b>c这种写法的大意则是:
a>b 条件成立 而因为a>b 的条件成立,所以使用数字1 进行代替,并且因为大于小于从左往右的判断顺序,在此之后的判断,则演变成为了 1>c
而 c = 8 ,数字1小于数字8 所以整个 a>b>c的条件在 if 的判断中,是“条件未达成” "条件为假"
a<b<c也是同理,因为关系运算符><的运算法则,以及 if 判断条件,所以这种写法经常会出现差错,但又因为初学者的数学逻辑,而会感到疑惑。