【C语言初阶】C语句成员1:分支语句
目录
- C语言中的3种结构
- 什么是语句
- 分支(选择)语句
- if语句
- switch语句
C语言中的3种结构
我们在了解C语言的语句之前,应先了解C语言中的基本程序结构,从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支(选择)结构、循环结构。
顺序结构:
就是从上往下依次执行语句的结构,就如一条笔直的大路,没有任何转折。
分支(选择)结构:
通过分支语句(选择语句)组成,分支就如我们走到分叉路口,我们要进行方向选择才能接着往前走。
循环结构:
通过循环语句组成,循环就如春夏秋冬四季的变换。
这三种基本结构可以组成所有各种复杂程序。
C语言中提供了多种语句来实现这些程序结构。
这期我们对分支(选择)结构进行讲解。
什么是语句
语句是C程序的基本构建块。在C语言中由一个分号 ;结尾就是一条语句。比如:
printf(“hehe\n”);
1+2;
最简单的语句是空语句:
;//空语句
分支(选择)语句
if语句
if语句的三种形式
//语法结构//第一种
if(表达式)语句;//第二种
if(表达式) //if可以理解为如果的意思语句1;
else //else就是否则的意思语句2;//第三种
if(表达式1)语句1;
else if(表达式2)语句2;
else语句3;
解释:在第二种和第三种形式中,如果表达式的结果为真,则语句执行。
在C语言中:0表示假,非0表示真。
下面我们来看第一种形式:
if(表达式) 语句;
#include <stdio.h>
int main()
{int age = 0;scanf("%d",%age);if(age<18)printf("未成年\n");return 0;
}//再举个例子
//从键盘上获取两个数,按从大到小输出
#include <stdio.h>
int main()
{int a = 0;int b = 0;int t = 0;scanf("%d%d",&a,&b);if(a<b){t = a;a = b;b = t;}printf("a = %d,b = %d\n",a,b)return 0;
}
注意:
(1)如果if后的语句只有一条,可以不用大括号括住。
例如:
if(age<18)printf("未成年\n");
等价于:
if(age<18){printf("未成年\n");}
(2)当if控制多条语句时,则必须用大括号将缩控制的所有语句括起来,否则if只能控制离它最近的那条语句
例如:
if(a<b)t = a;a = b;b = t;
等价于:
if(a<b){t = a;}
a = b;
b = t;
第二种形式:if…else分支结构
//演示代码:
//代码1
#include <stdio.h>
int main()
{int age = 0;scanf("%d",&age);if (age >= 18){printf("成年\n");} //合理使用大括号,可以使代码的逻辑更加清晰,使读者更易读懂else{ printf("未成年\n");}return 0;
}//代码2
/输入两个整数,使用if...else结构求最大数,并输出
#include <stdio.h>
int main()
{int a = 0;int b = 0;printf("请输入两个整数:");scanf("%d%d",&a,&b);if(a>b)printf("最大数为:%d\n",a);elseprintf("最大数为:%d\n",b);return 0;
}
第三种形式: 多重选择 if…else if…else
//代码演示
#include <stdio.h>
int main()
{int age = 0;scanf("%d",&age);if (age < 18)printf("青少年\n");else if (age >= 18 && age < 30)printf("青年\n");else if (age >= 30 && age < 50)printf("中年\n");else if (age >= 50 && age < 80)printf("老年\n");elseprintf("老寿星\n");return 0;
}
注意: 以上三种形式无论是哪种,在if或者else后面都不需要加分号“;”。因为这样会影响控制范围,甚至导致语法错误。
悬空else:
我们看下列代码
#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n"); return 0;
}
你觉得输出什么呢?是不是haha呀?实际上当我们运行代码会发现什么都没输出。
其实上方代码等价于:
#include <stdio.h>
int main()
{int a = 0;int b = 2;if (a == 1){if (b == 2)printf("hehe\n");elseprintf("haha\n");}return 0;
}
所以,我们可以看到,在C语言中,如果没有用括号来改变配对关系,else 总是与它前面最近且未配对的 if 进行配对。
适当的使用 { } 可以使代码的逻辑更加清楚
从这我们可以清楚的知道代码风格的重要性,在这我给大家推荐一本书,可以来提高自己的代码风格,不是打广告,哈哈~
高质量的c-c++编程
switch语句
switch语句结构:
switch(整型表达式)
{
语句项;
}
那么语句项时什么呢?
//是一些case语句
//如下:
case 整型常量表达式:语句;
注意:
(1)switch小括号里面的表达式必须是整型表达式,比如 int、short、long、char。其中的char类型虽然是字符型,但每个字符对应的ASCII值也是整型。
(2)case后面接的也必须是整型常量表达式,其中关键字case与整型常量表达式之间有空格,整型常量表达式后面必须有一个冒号“ :”。
接下来让我们来看看switch语句如何使用吧!
//代码演示
//打印星期几
#include <stdio.h>
int main()
{int day = 0;scanf("%d",&day);switch(day){case 1:printf("星期1\n");case 2:printf("星期2\n");case 3:printf("星期3\n");case 4:printf("星期4\n");case 5:printf("星期5\n");case 6:printf("星期6\n");case 7:printf("星期天\n");}return 0;
}
阅读上面代码,是不是输入数字几,就会在屏幕上输出星期几呢?我们来运行一下
程序输出的是从我们输入的数开始,将后方输出的内容都打印出来了。
我们应该如何解决这个问题呢?接下来看:
在switch语句中的break
在switch语句中,其实我们没法直接实现分支,搭配break使用才能实现真正的分支。那我们将break加入上方语句看看效果
#include <stdio.h>
int main()
{int day = 0;scanf("%d",&day);switch(day){case 1:printf("星期1\n");break;case 2:printf("星期2\n");break;case 3:printf("星期3\n");break;case 4:printf("星期4\n");break;case 5:printf("星期5\n");break;case 6:printf("星期6\n");break;case 7:printf("星期天\n");break;}return 0;
}
让我们看看运行代码
这样就得到我们想要的效果啦。
有时候我们的需求变了,比如:
1.输入1-5输出的是”工作日”
2.输入6-7输出的是“休息日”
所以我们的代码就可以这样实现了:
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;
}
从这我们就可以看出 break语句 的实际效是把语句列表划分为不同的部分。
编程好习惯
在最后一个case语句的后面加上一条break语句(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加break语句)。
default字句
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个case标签可以出现的位置。
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default字句。
编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
接下来我们来做一道练习结束这期吧
#include <stdio.h>
int 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);return 0;
}
正确答案:m = 5 , n = 3
好啦,这期到这,记几天精彩继续。
【C语言初阶】C语句成员1:分支语句相关推荐
- 五十分钟带你看遍C语言初阶语法(总纲)
C语言初阶语法(总纲) 此篇博客包含了前面C语言所有的基础语法,写这一期的博客不仅是为了记录自己的学习成果也是为了让更多的朋友能学到对自己有用的知识,如果总有一个知识点帮助到了你,给卑微博主点点关注加 ...
- C语言初阶作业题-数组
C语言初阶作业题-数组 一.选择题 1.关于一维数组初始化,下面哪个定义是错误的?( ) A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5 ...
- C语言初阶_初识C语言(1)
凡是过往,皆为序章 期末考试结束了,真是感慨良多啊...... C语言编程题大家都做对了多少呢? 不管怎么样,都已经过去了.不管你学得怎么样,都可以在接下来的时间里,我们一起重新回顾一遍C语言初阶的知 ...
- C语言初阶(18) | 数组详解
目录 1.数组的定义 2.一维数组 2.1一维数组的格式 2.2一维数组的初始化 2.3一维数组的使用 2.4一维数组再内存中的存储 3.二维数组 3.1二维数组的创建和初始化 3.2二维数组的使用 ...
- C语言初阶——6.进制
C语言初阶--6.进制 1. 进制 百度百科: 进制也就是进位计数制,是人为定义的带进位的计数方法,对于任何一种进制-X进制,就表示每一位置上的数运算时都是逢X进一位. 十进制是逢十进一,十六进制是逢 ...
- C语言初阶——5.字符串
C语言初阶--5.字符串 1. 字符串操作 1.1 字符串遍历 可以通过数组方式遍历字符串. char* str="Hello World"; for(int i = 0;'\0' ...
- shell脚本详解(二)——条件测试、if语句和case分支语句
shell脚本详解(二)--条件测试.if语句和case分支语句 一.条件测试 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if条件语句 1.单分支 2.双分支 ...
- C语言初阶第三篇:换我心,为你心,始知C语言 从C语言选择语句到循环语句保姆教学来喽
换我心,为你心,始知C语言 老铁们,咱们上一篇文章把字符串的知识点给过了一遍,今天就要开始真正的程序语句的学习了,也就是选择语句和循环语句,今天的内容比较简单,所以写的也不多,废话不多说,咱们开始吧! ...
- C语言初阶总结 v1
目录 C 基础1⭐ 数据类型 计算机中的单位 常量与变量 字符串/转意字符/ 注释 C 基础2⭐ 判断语句 函数与数组 C语言操作符 C语言关键字 C语言定义宏与关键字 初始指针 ⭐⭐ 指针基础 拓展 ...
最新文章
- 快乐的生活 2008-10-10 18:49:00
- zabbixdocker里的mysql_Zabbix Docker
- 找到一个或多个多重定义的符号
- Redis集群监控RedisClusterManager
- Win7系统网页视频无法播放怎么办
- Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】
- 企业视觉-大型电商(系统)高性能-用户视觉性能(1)
- php写进度条原理,php实现进度条原理
- Word中调整编号和文字的间距
- Docker 镜像基本命令操作
- 《WF编程》系列之15 - 顺序工作流与SequenceActivity 3 顺序工作流
- TensorFlow by Google Machine Learning Foundations: Ep #8 - Tokenization for Natural Language Process
- 基于单片机智能电子密码锁设计(毕业设计资料)
- 软件项目经理应具备的素质和条件_项目经理应具备的素质和能力
- 2048游戏编程C语言,使用C语言编写一个2048游戏
- DirectX11 SDK下载地址
- 微信公众号模板如何使用?公众号模板教程!
- 学生用计算机怎么调,学生计算器怎么调时间
- Playing With Strings
- python的numpy库安装_Python库之numpy库的安装教程