扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
C语句可分为以下五类:
本节内容着重介绍控制语句
什么是控制语句?
人在生活中做的事有三种状态,顺序、选择、循环
因而在程序中使用3种结构就可以表示生活中的所有事
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:
顺序结构、选择结构、循环结构),
它们由特定的语句定义符组成,C语言有九种控制语句
可分成以下三类:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句
2. 分支语句(选择结构)
2.1 if 语句if语句的结构
当表达式为真,执行语句,表达式为假,不执行语句
0表示假非0表示真
//单分支
if(表达式1)
语句1;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
单分支语句
多分支语句
注:选择语句中执行的语句可以是多条语句
但是需要加大括号
如果不加大括号则会报错
看一下下面这个代码,猜猜打印的是什么?
int main()
{int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0; }
你猜到了吗?
解释:else总是与最近的一个if匹配,所以else与if(b==2)匹配
所以上述代码等价于
int main()
{int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
a==1不成立,所以根本不会打印!!!
上述两种代码的效果是一样的,但是格式决定了我们理解代码的容易度,所以规范写代码很重要!!!
2.1.2 if书写形式的对比//代码1
if (condition)
{return x;
}
return y;
//代码2
if(condition)
{return x;
}
else
{return y;
}
//代码3
int num = 1;
if(num == 5)
{printf("hehe\n");
}
//代码4
int num = 1;
if(5 == num)
{printf("hehe\n");
}
上述代码2更好
理由:
虽然代码一和代码二的效果是一样的
但是阅读代码的人不知道这个代码究竟是有意而为之还是瞎猫碰死老鼠
上述代码4更好
理由:
当我们判断常量和变量的值是否相等时
我们应该把常量写在前面,这样可以避免我们将判断语句写成赋值语句
如果我们写成if(5=num)
程序会报错
2.1.3 练习1.判断下面输出什么?
int main()
{int age = 50;
if (20<=age<=30)
{printf("壮年");
}
return 0;
}
输出壮年
20<=age<=50在C语言中并不能表示age属于20到30
程序执行关系表达式使从左往右执行
20<=age的值为真,即1
1<=50的值为真,即1
所以if里面的表达式为1
会执行语句
2.判断一个数是否为奇数
int main()
{int n = 0;
scanf("%d", &n);
if (n % 2 == 1)
{printf("%d是奇数", n);
}
else printf("%d不是奇数", n);
return 0;
}
3.输出1-100之间的奇数
int main()
{for (int i = 1; i<= 100; i++)
{if (i % 2 == 1)
printf("%d ", i);
}
return 0;
}
2.1.4 总结if里的表达式结果为非0,执行语句,否则不执行
else会与之最近的一个if进行匹配
if else 为一个语句,因为程序只会执行其中一个执行语句
if判断变量和常量值是否相等时,将常量作为左操作数
switch语句也是一种分支语句。
常常用于多分支点判断的情况。
如
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
如果我们使用if语句,则需要很多if else if else 这样显示的过于繁琐
我们就有不一样的语法形式
这就是switch语句
switch(整形表达式)
{语句项; //若语句项有多条,则需要在将语句项用大括号括起来
}
语句项是一些case语句:
//如下:
case 整形常量表达式:
语句;
2.2.1 在switch中的breakcase语句只是确定语句列表的进入点而不会划分它们
break语句 的实际效果是把语句列表划分为不同的分支部分
我们来看下面的程序
int main()
{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");
case 7:
printf("星期天\n");
}
return 0;
}
和我们想要的只打印星期一不一样,这是为什么呢?
switch语句中case语句如果没有break
则执行完第一条语句后会继续执行后面的case语句知道遇见break或者switch语句执行完
所以我们因该这么写代码
int main()
{int day = 0;
scanf("%d", &day);
switch (day)
{case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
}
return 0;
}
day的值是1,所以会执行case 1语句,屏幕上打印星期一,并且遇到break语句,结束switch语句
如果我们想实现输入1-5打印工作日,6-7打印节假日
用switch该如和实现?
int main()
{int day = 0;
scanf("%d", &day);
switch (day)
{case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
case 6:
case 7:
printf("节假日\n");
}
return 0;
}
day是5,寻找case 5 找到case 5 后执行语句项,打印工作日,执行break
语句,跳出switch语句
day是1,寻找case 1 找到 case 后执行语句项,语句项为空
无break语句,执行case 2的语句项,语句项为空,无break语句
同理,最后 执行case 5的语句项,打印工作日,有break语句,跳出
switch语句。
编程好习惯:
在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以后的最后一个 case 语句后面忘了添加 break语句)
2.2.2 default子句当switch语句表达式的值与case所有标签的值不一样
程序会跳过switch所有的语句项
如果不想忽略不匹配所有标签的表达式的值
可以使用default语句
在语句列表中添加default:
输入9,与所有case标签不匹配,执行default语句后执行break语句,跳出switch语句
注意点:
当表达式的值与所有标签不匹配时,会执行default语句
一个switch只能有一个default语句
default语句可以出现在case语句能出现的任意位置
编程好习惯:
在每一个switch语句最后都加上default语句,并且在default语句最后加上break语句
2.2.3 练习#includeint main()
{int n = 1;
int m = 2;
switch (n)
{case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n); //m = 3, n = 5
return 0;
}
2.2.4 总结switch(表达式)表达式必须为整形表达式,可以时整形变量(包括字符)
case 标签 标签必须是整形常量
case 的语句项有多条时需要用大括号括起来
当case 语句项没有break语句时,执行完此条语句项会执行下条case 的语句项
有必要时尽量在每一个case 语句项最后加上break语句
尽量在每一个switch语句最后加上default语句并且最后加上break语句
最后看到最后,如果您觉得对您有帮助,请不要吝啬手中的赞,这对我来说很重要,也是我创作的动力,如果您觉得哪里说的不清楚或者有问题,欢迎评论区留言
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流