前面所见到的程序示例都有一个特点,就是太简单,都是从上到下,一波流,这样的代码显然是不能应用于实际生活的。生活中有各种选择和判断,C语言也是如此。
所谓选择与判断,就是,如果怎样,那么就怎样,翻译成C语言就是
程序示例1:
- if (//如果怎样)
- {
- //就怎样
- }
- else {
- //否则就怎样
- }
接下来看一个简单的可以执行的代码
程序示例2:
- #include
-
- int main()
- {
- int a = 100;
- int b = 55;
- int c = a - b;
- if (c > 0)
- {
- printf("a > b\n"); //如果c>0,就打印a>b
- }
- else
- {
- printf("a < b\n"); //如果c<0,就打印a
- }
-
- return 0;
- }
显然,结果打印的是a>b, else后面的语句没有执行,这就是C语言的选择结构,根据条件来选择执行哪些语句。
if... else...只有两条路可选,在实际生活中肯定是不够的,如果有多个备选项怎么办,也就是说有多路分支的C语言代码怎么写?用多个if else 不就行了
程序示例3:
- #include
-
- int main()
- {
- int a = 100;
- int b = 55;
- int c = a - b;
- if (c > 0)
- {
- printf("a > b\n"); //如果c>0,就打印a>b
- }
- else if(c==0)
- {
- printf("a == b\n"); //如果c==0,就打印a==b
- }
- else
- {
- printf("a < b\n"); //如果c<0,就打印a
- }
-
- return 0;
- }
显然,结果打印的是a>b, else if后面的雨具是没有执行的。
程序练习:输入三个数x, y, z,打印最小的那个数
思路:
1、定义一个中间变量m;
2、比较x和y的大小,将较小的那个赋值给m;
3、比较m和z的大小,将较小的那个赋值给m;
4、m中保存的就是3个数中最小的那个了
程序示例4:
- #include
-
- int main()
- {
- int x, y, z,m;//C语言是可以一下子定义多个变量的
- printf("请输入x的值\n");
- scanf_s("%d",&x);
-
- printf("请输入y的值\n");
- scanf_s("%d", &y);
-
- printf("请输入z的值\n");
- scanf_s("%d", &z);
-
- if (x <= y)
- {
- m = x;
- }
- else
- {
- m = y;
- }
-
- if (m <= z)
- {
- m = m;
- }
- else
- {
- m = z;
- }
-
- printf("最小的数是 %d\n", m);
-
- return 0;
- }
这个代码可以实现功能,但是太长了,又臭又长,可以精简下,如程序示例5所示
程序示例5:
- #include
-
- int main()
- {
- int x, y, z,m;//C语言是可以一下子定义多个变量的
- printf("请输入3个整数\n");
- scanf_s("%d%d%d",&x,&y,&z);
-
-
- if (x <= y)
- {
- m = x;
- }
- else
- {
- m = y;
- }
-
- if (m > z)
- {
- m = z;
- }
-
-
- printf("最小的数是 %d\n", m);
-
- return 0;
- }
程序练习:根据学生成绩给出相应的等级
1、先判断输入的分数是否正确,分数区间是0-100;
2、如果数据正确,进一步判断等级;
3、如果数据不正确,打印提示信息;
程序示例6:
- #include
-
- int main()
- {
- int score;
- printf("请输入分数\n");
- scanf_s("%d",&score);
-
-
- if ((score>=0)&&(score <=100))
- {
- if ((score > 90) && (score <= 100))
- {
- printf("分数等级为A\n");
- }
- else if ((score >= 80) && (score < 90))
- {
- printf("分数等级为B\n");
- }
-
- else if ((score >= 70) && (score < 80))
- {
- printf("分数等级为C\n");
- }
- else if ((score >= 60) && (score < 70))
- {
- printf("分数等级为D\n");
- }
- else
- {
- printf("分数等级为E\n");
- }
- }
- else
- {
- printf("分数不正确,请重新输入\n");
- }
-
- return 0;
- }
前面用if else 来判断,写起来麻烦,读起来也麻烦,有个看起来更简洁高效的语法,就是switch语句
switch的语法如下
程序示例7:
- switch (m)
- {
- case x: //m == x
- //do something
- break; //break就是跳出switch
- case y: //m == x
- //do something
- break;
- case z://m == x
- //do something
- break;
- ...
-
- default://默认情况,执行default下面的语句
- ...
- }
程序练习:看代码吧,不解释
程序示例8:
- #include
-
- int main()
- {
- int a = 1;
- int b = 2;
-
- char symb;
-
- printf("请输入运算符号\n");
- scanf_s("%c", &symb);
-
- switch (symb)
- {
- case '+':
- printf("%d + %d = %d\n",a,b, a+b);
- break;
- case '-':
- printf("%d - %d = %d\n", a, b, a - b);
- break;
-
- case '*':
- printf("%d * %d = %d\n", a, b, a * b);
- break;
- default:
- printf("未定义的符号\n");
- }
-
-
-
- return 0;
- }
switch语句的几个知识点:
1、switch只适用于离散的变量和整数值
2、case对应着分着,只有匹配成功,才执行case后面的语句
3、case后面的语句执行完之后,要通过break跳出switch,不然就要执行下一个case语句了
4、default不要也可以