三、认识变量与常量:
4. 常量的分类:
字面常量、const修饰的常变量、#define定义的标识符常量、枚举常量。
1)字面常量:
字面常量就是可以直接看到的量,如图中的100、c、abcdef,这些能够一眼看到的量就是字面常量。
2)const修饰的常变量:
听到常变量这个词一定感觉很奇怪,那在这之前我们来看这么一段代码:
a输出两个值说明了a是一个变量,下面我们用const修饰一下看它的结果会不会改变呢?
这时候代码第7行报错,很明显被const修饰过的变量a的值是不能够被改变的。
由此我们可以说const修饰的是一个具有常属性的变量。上面我们已经证明他具有常属性,下面我们再来验证一下它还是不是变量:
两段代码的运行结果一样,同样的报错,代码报错的原因是:定义数组arr[ ]时,[ ]中不能为变量。由此可见,即使加了const,n本质上仍然是变量,只不过是具有常属性的变量。
注意:以上所说的定义数组时[ ]中不能为变量只是针对不支持C99的编程软件来说,例如vs2019。如果你的编程软件支持C99,那定义数组时可以用变量。
3)#define定义的标识符常量:
注意定义标识符常量时中间不需要等号:#define MAX 100
4)枚举常量:
枚举就是一一列举,枚举是C语言提供的一种自定义类型的方法。
生活中,性别:男,女,保密。三原色:red green blue。都是可以一一列举出来的常量。
用代码表示:
enum就是枚举类型,大括号中的就是枚举常量。我们可以用大括号中可能出现的值来给变量s赋值: enum SEX s = MALE;
四、字符串+转移字符+注释
1.字符串
“hello world.\n”这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
注意:字符串的结束标志是一个\0的转义字符。在计算字符串长度时\0是结束标志,不算作字符串内容。
下面我们定义一个字符串数组,按F10键调试一下:
打开调试→窗口→监视,并在监视名称输入arr会发现,在 f 后面还多出现一个 \0(如下图所示), \0是字符串“abcdef”的结束标志。
换一种定义数组的方式:
同样进行调试并打开监视窗口:
此时我们发现 f 后面并没有出现 \0 ,那就说明此时的数组中存放的不是字符串。
打印一下两个数组:
会发现arr2后面打印出了一堆乱码,这是因为数组arr2中没有结束标志\0,而计算机中内存是连续的,它会持续打印下去,直到在内存的某个地方遇见了 \0 才会结束打印。
用代码计算一下两种方式数组的长度也有不同:
注:在计算字符串长度时\0是结束标志,不算作字符串内容。
strlen为函数,用来求字符串的长度。注意使用时,要包含<string.h>这个头文件
即#include<string.h>
如果给数组arr2中添加上结束标志 \0 结果就相同了:
2.转义字符
转义即转变它的意思。
先看下面一段代码:
为什么打印出来的结果和代码中的不一样呢?
答案是在 t 前面加斜杠后就改变了它的意思,\t 是一个转义字符,相当于电脑上的Tab键,打印出来的结果就变成以上形式。
类似的:n前面加上斜杠变成 \n 表示换行:
下面来看一些转义字符:
\? 解释一下三字母词:例如:如果电脑支持三字母词,在电脑中 ??)这三个符号会被解析为 ],那么 printf("(Are you ok??)");打印出来的结果就是(Are you ok]
如果想打印出来(Are you ok??),就需要这样写:(Are you ok\?\?)
\' 如果想打印一个字符 ' 直接写是不对的,应该写为
\" 如果要打印一个字符串 " 直接写不对,应该写为
\\ 如果不想将 \t 写成转义字符 那么在它的前面再加一个斜杠变成 \\t 就会打印出 \t,如下图:
对比一下就可以很清楚地了解 \\ 的作用了。
接下来着重介绍一下 \ddd 和 \xdd :
\ddd: ddd表示1~3个8进制数
看下面一段代码:
为什么字符 \130 打印出来是 X 呢?
图中的130代表的是8进制数,转换为10进制数为1*64+3*8+0*1=88,而在ASCII表(此表文章后面desh给出)中十进制的88代表的字符刚好就是 X 。
由此可见,\ddd表示的就是把1~3位8进制数转换为10进制数的值对应在ASCII表中代表的字符。
\xdd: dd代表2个16进制数字
类似\ddd,
字符 \x67 打印出来是 g ,图中67代表的是16进制数,转换为10进制数为103,对应在ASCII表中的字符为 g
由此可见,\xdd表示的是把2位16进制数转换为10进制数的值对应在ASCII表中代表的字符。
每个字符都有对应的ASCII值,例如A~Z——65~90,a~z——97~122
特别的,大写字母的ASCII值+32=小写字母的ASCII值
通过上面的学习,我们了解了转义字符,那么让我们来测验一下掌握的程度吧!
请看下图并回答:打印出来的字符串长度是多少呢?提示:8进制中每一位上的数最大为7。
答案放在评论区。
3.注释
注释有两个作用:
1.代码中有不需要用的代码可以直接删掉,也可以直接注释掉。
2.代码中有些代码比较难懂,可以加一下注释文字。
如图中的绿色文字即为注释:
对于不需要的代码有两种注释方法:
一种是直接在前面加 // 进行注释:这是C++的注释方式
另一种是对需要注释的内容首尾分别加 /* 和 */ 进行注释:这是C语言的注释方式
但是这种注释方法有缺陷:
上图我们用了两个/* */来注释,但是注释到第一个 */ 就停了下来。由此可见,C语言的注释方式不能嵌套使用。
除此之外,还有一种更方便的注释方式:在选中后点击编译软件中的
就可以进行大段的注释。点击它的右边一位可以取消注释。
五、选择语句
常见的选择语句有:
1.二路分支:if语句
2.多路分支:switch语句
今天只介绍if语句:
六、循环语句
常见的循环语句:
1.while语句
2.for语句
3.do...while语句
今天只介绍while语句:例题:1~100求和并输出。
这里简单了解一下,后面再深入学习。
七、函数
直接通过代码来理解吧:
首先我们用正常的方式来写一段两数求和的代码:
下面采用调用函数的方式 写一段两数求和的代码:
由图可见,我们是先在主函数之前写了一段具有求和功能的函数Add(),然后在主函数中需要求和时选择直接调用函数Add()实现求和功能。
问题来了,明明这么简单的代码非要写复杂呢?
其实函数会极大地减少代码量,只不过我们举例的两数求和很简单体现不出来它的价值。在以后的学习工作中,我们可能遇到同一段代码在不同的地方重复使用,这时候我们为了避免一遍遍写这段代码,就可以先写一个功能相同的函数,然后在需要时只调用函数就可以了。
八、数组
要存储1~10的数字,怎么存储呢?
这时候就要用到数组了,数组是一种相同类型元素的集合
1.数组的定义
定义数组时 [ ] 内为数组的长度,存放的元素数不能超过长度。
定义时可以不规定 [ ] 内的长度
不规定长度时一定要初始化,不初始化时一定要规定长度。
2.数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
比如:
数组可以通过下标来访问:如下图下标为5的数组元素打印出来是6
我们也可以用循环来打印出数组所有的元素:
今天就学到这里,未完待续。。。