
众所周知C语言有几大分支结构if语句else语句switch语句其中If语句要和else语句连用switch语句要和case分支连用现在我就来介绍一下这两个语句。一、If语句1.语法结构if(条件表达式语句当条件表达式里的条件为真时执行语句否则不执行。2.else语句if...else语句(1)语法形式if(表达式 //这里有一个注意点当if与else分支中的语句多于1条时要加大括号 { //防止出现语法错误。 语句1 // 这里举一个例子判断一个数是否是正数 } if (a 0) printf(a is positive\n); // 只有这一行受 if 控制 count; // 这一行无条件执行无论 a 是否大于 0 else // count会被无数次执行无论a是否大于0 { 语句2 }这里我们拿一个例子来运用一下if...else语句。2举例#include stdio.h int main() { int age0; //定义变量age scanf(%d,age); //输入age if(age18) printf(已成年\n); else printf(未成年\n);//if...else判断是否成年大于等于18成年否则不成年 return 0; }上述判断是否成年的例子很好地运用了if...else语句非常简单大家可以把这段代码复制自己运行输入一个年龄判断。3.分支中包含多条语句这个其实就是刚才所说的if和else分支中有多条语句要加大括号。否则会语法错误。我们还是拿一个例子说明分数判断#include stdio.h int main() { int score0; scanf(%d,score); if(score60) { printf(及格\n); printf(恭喜\n); } else { printf(不及格\n); printf(继续努力\n); } return 0; }这个例子中由于if...else分支有多条语句一定要加大括号否则二者下面的printf里的字符串会不断输出构成语法错误所以大家平常在写代码时一定要注意。4.嵌套if语句(1)定义就是一个if分支里再嵌套一个if语句拿一个例子大家应该会更好理解。(2)举例#include stdio.h int main() { int n0; scanf(%d,n); if(n0) printf(正数\n); else { if(n0) printf(负数\n); else printf(是0\n); } return 0; }这个例子是输入一个数判断是正数负数还是0只有一个嵌套理解起来容易一些。5.悬空else问题(1)原则else总是离它最近的if相配对这个原则叫就近原则。(2)举例#include stdio.h int main() { int a0; int b2; if(a1) { if(b2) printf(hehe\n); else printf(haha\n);//根据就近原则下面的if与else相配对 } return 0; }如果代码改成这样#include stdio.h int main() { int a0; int b2; if(a1) { if(b2) printf(hehe\n); } else { printf(haha\n); } return 0; }只是else换了一下位置结果就不一样了这个else是与上面的if对齐的不是与下面的。所以大家要看清楚else与哪个if对齐避免判断错误。二、错题及总结在这里给大家展示两道我之前刷题时遇到的错题并总结一下1.三角形判断来源牛客网这道题就是根据三角形两边之和大于第三边的原理来判断三种三角形等边等腰普通三角形例如三角形三边为a,b,c,有三种情况就是abc,acb,bca,现在我展示我的错误代码和正确代码。#define _CRT_SECURE_NO_WARNINGS #include stdio.h int main() { int a,b,c; scanf(%d %d %d,a,b,c); if((abc)(acb)(bca)) { printf(Ordinary triangle!\n);//普通三角形 } else if((ab)||(bc)||(ac)) { printf(Isosceles triangle!\n);//等腰三角形 } else if(abc) { printf(Equilateral triangle!\n);//等边三角形 } else printf(Not a triangle!\n); return 0; }这道题的代码一共有两个错误1判断逻辑错误按照原来代码如果给出用例a3,b3,c3,会直接打印普通三角形下面均不会判断应该判断能否构成三角形另外一个是应先判断等边三角形再判断等腰三角形因为二者的的前提均是两边相等这就会导致当你输入3 3 3时会输出等腰三角形不会输出等边。2判断等边时条件书写错误C语言没有abc这种写法应该分开写写成ab bc。下面我给大家展示一下正确代码#define _CRT_SECURE_NO_WARNINGS #include stdio.h int main() { int a,b,c; scanf(%d %d %d,a,b,c); if(!(abc acb bca)) { printf(Not a triangle!\n);//不是三角形 } else if((ab)(bc)) { printf(Equilateral triangle!\n);//等边三角形 } else if((ab)||(bc)||(ac)) { printf(Isosceles triangle!\n);//等腰三角形 } else printf(Ordinary triangle!\n);//普通三角形 return 0; }2.判断是不是字母 来源牛客网这道题考的是ASCII码大写字母A~Z对应的ASCII码区间是65~90小写字母的ASCII码区间是97~122大家可以了解一下注意写代码的时候要写成字符形式加一对单引号不要写成字符串。下面我给大家展示一下我的错误和正确的代码。#include stdio.h int main() { char ch1,ch2; while(scanf( %c %c, ch1,ch2)!EOF) { if((ch1Ach1Z)||(ch1ach1z)) { printf(%c is an alphabet.\n,ch1); } else { printf(%c is not an alphabet.\n,ch1); } if((ch2Ach2Z)||(ch2a ch2z)) { printf(%c is an alphabet.\n,ch2); } else { printf(%c is not an alphabet.\n,ch2); } } return 0; }这段代码只满足判断两个字符是否是字母不满足多对字符判断可以通过部分用例。我下面的这段代码是对的。#include stdio.h int main() { char ch; while (scanf( %c, ch) ! EOF) { if((chA chZ)||(cha chz)) { printf(%c is an alphabet.\n,ch); } else { printf(%c is not an alphabet.\n,ch); } } return 0; }这段代码就可以不断读取单个字符满足题目要求多组字符判断是否是字母。3.总结关于用if-else语句的编程题目大家一定要掌握它的语法结构才能写对它在做题的时候要仔细读题涉及多组输入的题目时一定要考虑循环防止出错。