c语⾔写程序ifel,ifel⽤法详解,C语⾔ifel⽤法完全攻略if el 语句是⼀种选择结构,可以让代码选择执⾏。所谓选择执⾏,就是“某些代码可能执⾏,也可能不执⾏,有选择地执⾏某些代码”。
if 的最简单⽤法
if最简单的格式是:
if() {语句}
功能:如果表达式为真,就执⾏下⾯的语句;如果表达式为假,就不执⾏下⾯的语句。
下⾯给⼤家写⼀个程序:# int main(void) { if (3>2) { printf("I Love Youn"); } return 0; }
运⾏结果:
I Love You
这个是 if 最简单的程序。⾸先,前⾯讲代码规范化的时候讲过,if 与它后⾯的括号之间要加⼀个空格。其次,在前⾯讲过判断“真”、“假”分为两种,⼀种是数值是否为零,另⼀种是表达式是否成⽴。所以上⾯的程序表达式成⽴,故执⾏其下的输出语句。
再将 if 后⾯的表达式改成数字看看:# include main(void) { if (2) { printf("I Love Youn"); } return 0; }
运⾏结果:
I Love You
或这样写:# include int main() { int i; if (i = 2) { printf("I Love Youn"); } return 0; }
运⾏结果:
I Love You
再改成0看看:# include int main(void) { if (0) { printf("I Love Youn"); } return 0; }
编译并运⾏,什么也不输出。写事日记
所以只要 if 后⾯的表达式成⽴或⾮零,就执⾏其下的语句。表达式为0的时候即假,就不执⾏其下的语句了。感叹句
if 的控制范围问题
这个问题更重要!先给⼤家写⼀个程序:# include int main(void) { if (0) printf("I Love Youn"); printf("I Love You Toon"); return 0; }
运⾏结果:
I Love You Too
编发图片为什么“I Love You”没有输出⽽“I Love You Too”却输出了?因为在中,if 只能控制其后的⼀个语句。如果要控制多个语句就必须加⼤括号{}。所以在上⾯这个程序中 if 只能控制第⼀个 printf,⽽ if 后的表达式为 0,所以第⼀个 printf 不会执⾏,所以“I Love You”不会输出。⽽第⼆个 printf 不在 if 的控制范围内,所以 if 语句执⾏完之后顺序往下执⾏第⼆个 printf,所以“I Love You Too”会输出。
如果希望 if 控制两个 printf 的话就加上⼤括号,像下⾯这样:# include int main(void) { if (0) { printf("I Love Youn"); printf("I Love You Toon"); } return 0; }
这样两个printf都不会输出。
但在讲规范化的时候说过,if、el、for、while、do 后⾯的执⾏语句不论有多少⾏,就算只有⼀⾏也要加{}。这是规范问题,⼤家⼀定要记住。按规范书写就不容易出错,看着也舒服。
被你抛弃的人if…el 的⽤法
先给⼤家写⼀个程序:# include int main(void) { int i, j; printf("请输⼊两个数:"); //提⽰输⼊ scanf("%d %d", &i, &j); //注意取地址符& if (i>j) { printf("i⼤于jn"); } el { printf("i⼩于jn"); } return 0; }
运⾏结果:
请输⼊两个数:43 56
i⼩于j
这⾥我⾸先要强调的是:在前⾯讲 scanf 的时候,为了避免读者产⽣混乱,有些内容⼀直未讲,专门放到这⾥来讲。米鱼胶
前⾯强调,scanf 中双引号内多个“输⼊控制符”之间不要加任何“⾮输⼊控制符”。但这⾥我要说的是:可以加⼀个符号,就是“空格”。
空格在 scanf 中⽐较特殊,虽然它是“⾮输⼊控制符”,但它⼜算不上是真正的需要“原样输⼊”。因为就算不加空格,从键盘输⼊的时候还是要加空格(或回车)。⽽且在 scanf 中添加⼀个空格,输⼊的时候输⼊ 100 个空格也是正确的;在 scanf 中添加 100 个空格,⽽输⼊的时候只输⼊⼀个空格也是正确的。所以说算不上是真正的“原样输⼊”。
那么 scanf 中%d之间为什么要加空格呢?原因只有⼀个——“好看”。如果不加空格的话,看起来就很挤,不好看。但是尽管如此,仍然建议你们什么都不要加,统⼀思维和⽤法。在实际编程中也是不要求加空格的,在这⾥只是告诉你们可以这么做。
下⾯来看 if…el,上⾯那个程序是最简单的 if…el ⽤法。这⾥主要强调三点:
1) 同样,el 也只能控制到其后的⼀个语句,如果要控制多个语句的话必须要加⼤括号{}。但是这⾥再强调:if、el、for、while、do 后⾯的执⾏语句不论有多少⾏,就算只有⼀⾏也要加{}。
1) 代码规范化七⼤原则的第⼀个原则是“空⾏”,前⾯说过:两个不同的功能块之间要加空⾏。⾔外之意就是“两个相同的功能块之间就不需要加空⾏”。if 和 el 是相同的功能块,所以它们之间不需要加空⾏。
3) if 可以没有 el 单独使⽤,这个前⾯已经应⽤过了。但如果要⽤ el,它必须是 if 的⼀部分。el 绝对不可能脱离if⽽单独使⽤,这⼀点⼤家⼀定要注意。
下⾯将前⾯那个程序修改⼀下:# include int main(void) { int i, j; scanf("%d %d", &i, &j); if (i>j) { printf("i⼤于jn"); } ; el { printf("i ⼩于jn"); } return 0; }
这个程序你觉得有没有错?编译⼀下发现有⼀个错误:
有趣的大自然illegal el without matching if
意思是:不合法的 el 没有匹配的 if。
为什么会这样?因为在 if 和 el 之间多加了⼀个分号。在C语⾔中,⼀个分号也是⼀条语句,叫“空语句”,就是⼀个什么都不执⾏的语句。若在 if 和 el 中间加了⼀条语句,就将 el 和 if 分开了,就相当于 el 单独使⽤了,所以就会报错“没有和el匹配的if”。这个程序也告诉我们,分号不能乱加。
这⾥顺便给⼤家介绍⼀下“三⽬运算符”。在前⾯讲优先级的时候提到过它。在整个C语⾔中只有⼀个三⽬运算符,它的格式是:
表达式1 ? 表达式2 : 表达式3
它就相当于:
if (表达式1)
{undefined
表达式2;
}
el
{undefined
表达式3;
}
虽然“三⽬运算符”的格式看起来代码⽐较少,但是我们⼀般都不⽤。因为那么写看起来很别扭,⽽且它没有 if…el 的逻辑清晰,所以我们⼀般还是使⽤ if…el。这个了解⼀下就可以了。
if…el if…el 的⽤法
还记得前⾯写的⼀元⼆次⽅程的那个程序吗?那个程序就是⽤ if…el if…el 写的:# include # include int main(void) { //将三个系数保存到计算机中 int a = 1; //“=”不表⽰相等,⽽是表⽰赋值 int b = 2; int c = 1; double delta; //delta存放的是b*b - 4*a*c的值double x1, x2; //分别⽤于存放⼀元⼆次⽅程的两个解 delta = b*b - 4*a*c; if (delta > 0) { x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b -sqrt(delta)) / (2*a); printf("该⼀元⼆次⽅程有两个解,x1 = %f, x2 = %fn", x1, x2); } el if (0 == delta) { x1 = (-b) / (2*a); x
2 = x1; //左边值赋给右边 printf("该⼀元⼆次⽅程有⼀个唯⼀解,x1 = x2 = %fn", x1); } el { printf("⽆解n"); } return 0; }
if…el if…el ⽐ if…el 复杂⼀点,但也很好理解。if…el if…el 的意思就是:“如果”第⼀个成⽴,就执⾏第⼀个;“否则如果”第⼆个成⽴就执⾏第⼆个;“否则”就执⾏第三个。这个应该很好理解吧,与我们平时讲话时的思维逻辑⼀样。
专八听力题型
车到山前必有路练习——求分数的等级
下⾯就来写⼀个程序,这个程序是⽬前为⽌第⼀个⽐较有意义的程序。这个程序的功能是“求考试成绩的等级”。即,输⼊⼀个考试成绩:如果为 90~100分,就输出“优秀!”;
如果为 80~89 分,就输出“良好!”;
如果为 60~79 分,就输出“及格!”;
如果为 0~59 分,就输出“补考!继续努⼒!”;
如果分数不在这些范围内就输出“请重新输⼊!”。#include int main(void) { float score; printf("请输⼊您的考试成绩:"); scanf("%f", &score); if (score>=90 && score<=100) { printf("优秀!n"); } el if (score
>=80 && score<=89) { printf("良好!n"); } el if (score>=60 && score<=79) { printf("及格!n"); } el if (score>=0 && score<=59) { printf("补考!继续努⼒!n"); } el { printf("请重新输⼊!n"); } return 0; }
score>=90 && score<=100千万不能写成90<=score<=100,这样写是错误的。这是数学中的写法,在C语⾔中是不能这么写的。但我并不是说这样写语法有问题,⽽是说这样写⽆法实现我们所需要的功能。
在C语⾔中,90<=score<=100这种写法是允许的,编译的时候不会报错。但如果写成90<=score<=100,那么不管输⼊多少分,输出都是“优秀!”。⼤家想想为什么?
因为按照优先级,执⾏的时候肯定是从左到右,所以肯定是先执⾏ 90<=score。但是 90<=score 的运算结果是⼀个逻辑值,要么成⽴,要么不成⽴。我们前⾯讲过,逻辑值要么真、要么假,真就是 1,假就是 0。所以不管你输⼊多少分,90<=score 的执⾏结果要么是 1,要么是 0,肯定 <=100。所以不管输⼊多少分,90<=score<=100永远都成⽴,所以输出的永远都是“优秀!”。所以不能那么写。
下⾯写⼀个程序看⼀下:# include int main(void) { float score = 1000; int i = (90<=score<=100); printf("i = %dn", i); return 0; }
运⾏结果:
i = 1
不管 score 是多少,90<=score<=100永远都成⽴,所以 i 永远都是 1。原⽂始发于:if el⽤法详解,C语⾔if el⽤法完全攻略