开头先举个例子,人生有许多选择。好好学习编程将来挣大钱,或者不好好学习将来烤牛筋。这就是选择,人生处处是选择。那c语言中有什么选择呢?
if语句
语法结构:
if(表达式) 语句; //多分支 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
这就是if语句的基本结构,其中表达式可以是表达式语句、函数调用语句,空语句。而里面包含的语句就是如果表达式成立的情况下执行的语句。
举个最简单的例子:如果用成绩好坏来决定标准,标准为60分以下为差,60—80分为良,80分以上为优,则可以写出以下代码评判一个人。
#include<stdio.h> int main(void) { int a = 0;//a为一个人的成绩 scanf("%d", &a); if(a < 60) printf("差\n"); else if(a >= 60 && a <= 80) printf("良\n"); else printf("有\n"); return 0; }
如果全部写if在这个问题上也是可以的,只不过每一个条件都要进行判断,增大了计算机的计算量,使计算变慢。
if语句也可以进行嵌套,使成立条件变得更加苛刻更加细致。但是if和else的匹配加上嵌套后就会有一点偏差和误解,所以为了代码的可读性应该在if和else上加上{}是块更加明显。举个例子来说
#include<stdio.h> int main(void) { int a = 0; int b = 1; if(a == 1) if(b == 1) printf("666\n"); else printf("888\n"); return 0; }
这个问题就出在if和else关系不明确,导致对组合的判断失误,结果什么都没有打出来 。这个代码中else是和if(b == 1)这个匹配的,所以导致第一个if判断不成功后直接结束程序。(在没有{}的加持下,else是和最近的if配对的)
#include<stdio.h> int main(void) { int a = 0; int b = 1; if(a == 1) { if(b == 1) printf("666\n"); } else printf("888\n"); return 0; }
这个才是我们想要的结果!!!
switch语句
语法结构:
switch(整形表达式) { case 常量表达式1: 语句1; case 常量表达式2: 语句2; … case 常量表达式n: 语句n; default: 语句n+1; }
switch语句和if不同,if语句在执行完后会跳出去,不会执行其他语句,但是switch语句在执行完一种选择后会继续往下执行,所以在这里应该引出break关键词(break一般在循环语句中和switch语句中经常用到,作用是跳出正在执行的任务)
如果在一个程序中没有用到break时,有很大的几率会将不正确的答案依次显示在屏幕上。
#include<stdio.h> int main(void) { int day = 0; scanf("%d", &day); switch(day) { case 1: printf("星期一\n"); case 2: printf("星期二\n"); case 3: printf("星期三\n"); case 4: printf("星期四\n"); case 5: printf("星期五\n"); case 6: printf("星期六\n"); default: printf("星期天\n"); } return 0; }
这就是没有break的后果!!!
default和else的作用大同小异。
switch语句也允许嵌套使用。