不怎么重要的前言
上一篇介绍了两个小题目,稍微带过解题的思路,以及多重迴圈(巢状迴圈)的概念。
现在我们来试着把所学的东西组合起来看看吧!
上次的小作业--九九乘法表
#include <stdio.h>int main(){ for(int i = 2; i<=9; i++){ for(int j = 1; j<=9; j++){ printf("%d x %d = %d\n", i, j, i*j); } printf("\n"); } return 0;}
Switch条件式?
大家应该有学过if条件式了,基本上是一个需要判断式为true才执行的条件式,不晓得大家在写等同多个不同数值时,要执行不同结果的if条件式,有没有感觉到疲累感。
如同以下的if条件式:
#include <stdio.h>int main(){ char data; printf("plz input a char: "); scanf("%c", &data); if (data == 'a'){ printf("mode 1.\n"); } else if (data == 'b'){ printf("mode 2.\n"); } else if (data == 'c'){ printf("mode 3.\n"); } else{ printf("mode default.\n"); } return 0;}
如果是漫长的判断等同某个数值的if条件式,也可以转换为这种的switch条件式,虽然这个语法并不是必要学的,但有兴趣的话,跑出来的结果也会是一样的:
#include <stdio.h>int main(){ char data; printf("plz input a char: "); scanf("%c", &data); switch (data){ case 'a': printf("mode 1.\n"); break; case 'b': printf("mode 2.\n"); break; case 'c': printf("mode 3.\n"); break; default: printf("mode default.\n"); } return 0;}
正式使用
规则(1)基本格式
switch (data){case 'a': printf("mode 1.\n"); break;case 'b': printf("mode 2.\n"); break;case 'c': printf("mode 3.\n"); break;default: printf("mode default.\n");}
(2) case的body结尾需补上break用以跳出switch,否则会出现问题。
a. break只会跳出switch条件式,而不执行剩下的。
b. 出现错误的範例(未加break)
#include <stdio.h>int main(){ char data; printf("plz input a char: "); scanf("%c", &data); switch (data){ case 'a': printf("mode 1.\n"); case 'b': printf("mode 2.\n"); case 'c': printf("mode 3.\n"); default: printf("mode default.\n"); } return 0;}
输入三次成绩并判断成绩等级为多少。
(可以看出在switch内的break只会跳出switch条件式,不会也跳出外面的for迴圈。)
#include <stdio.h>int main(){ int data; for(int i = 0; i<3; i++){ printf("plz input a int: "); scanf("%d", &data); printf("Case %d: ", i+1); switch (data/10){ case 10: printf("A++\n"); break; case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("F\n"); } } return 0;}