switch语句
除了 if 语句外, switch 语句也可以实现分支结构。
switch (expression) {
case value1: statement
case value2: statement
...
default: statement
}
根据expression不同的值来执行对应的case,如果没有case满足条件那就执行defult。
switch 后的 expression 必须是整型表达式。
case 后的值,必须是整形常量表达式。
下面是一个例子:
输⼊任意⼀个整数值,计算除3之后的余数
如果用if语句的话:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
用switch语句的话:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
case 和后边的数字之间必须有空格。
switch语句中的break:
每个 case 语句中的代码执行完成后,需要加上break ,才能跳出这个switch语句。
如果没有的话,代码会继续执行,可能就跳到别的case里了,直到遇到break或switch语句结束。
来看例子:
#include <stdio.h>
//这是去掉break后的代码
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
运行结果会是这样。
但加不加break是根据具体情况来判断的,
//输⼊1~5,输出的是“⼯作⽇”,输⼊6~7,输出“休息⽇”
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
}
return 0;
}
switch语句中的default:
当代码中的 switch 后的表达式中的值无法匹 case 语句的时候,要么就不做处理,要么就得在 switch 语句中加 default 。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
比方说上面的例子,day的输⼊不是1~7的值,就输出提示:输⼊错误。
//输⼊1~5,输出的是“⼯作⽇”,输⼊6~7,输出“休息⽇”,不是1~7的值,就输出提示:输⼊错误。
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
default:
printf("输入错误\n");
break;
return 0;
}
switch 语句中 default ⼦句有顺序要求吗? default 只能放在最后吗?
其实,default 语句是没有顺序要求的,不过会一般把 default ⼦句放在最后处理。
while循环
用法:
while(表达式)
语句;//如果循环体想包含更多的语句,可以加上⼤括号
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
//打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
for循环
用法:
for(表达式1; 表达式2; 表达式3)
语句;
//如果循环体想包含更多的语句,可以加上⼤括号
表达式1:循环变量的初始化
表达式2:循环结束条件的判断
表达式3:循环变量的调整
整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。
先执行表达式一,接着判断表达式二,为真就进入循环,执行一遍循环以后再执行表达式三,调整循环变量,接着判断表达式二,重复上述过程直到表达式二结果为假为止。
看一个例子:
//打印1~10的值
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
while循环和for循环的对比:
在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分非常集中,便于代码的维护,如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。
一个例子:
//计算1~100之间3的倍数的数字之和
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
for(i=1; i<=100; i++) //循环生成1到100的数字
{
if(i % 3 == 0) //判断是否为3的倍数
sum += i;
}
printf("%d\n", sum);
return 0;
}
//优化写法 #include <stdio.h> int main() { int i = 0; int sum = 0; for(i=3; i<=100; i+=3)//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断 { sum += i; } printf("%d\n", sum); return 0; }
有关其他循环语句(do while)和go to语句的介绍我会在后续发出来的!
非常感谢大家能看到这里!要是有表述不严谨或错误的地方请多多指正!(狠狠鞠躬)