一、本章目标
厨师做饭需要油、盐、酱、醋及各种食材,没有了材料的厨师也无能为力~数据是构成程序的根本,没有数据,就像没有了材料的厨师,在厉害也得饿死~
所以本章我们首先一起学习一下C语言中的数据篇,这是也是我们正式学习C语言的开始~
前面做了那么多的准备工作,终于正式开始学了,让我们开始吧~
二、本季主要知识点有:
- 数据划分
- 标识符的组成及限制
- C语言中中的保留字
- C语言中的数据类型划分——三种基本数据类型、四种构造类型、无数种指针类型
- C语言基本类型精讲——整形、字符型、实型
- C语言构造类型——数组
三、具体内容:
0、数据划分:
C语言中(其实不只是C语言,任何语言都是一样的),数据有很多划分方式,按照类型分、按照正负分、按照成员划分,按照所占内存空间分等等。但是无论怎么划分,我们都可以把所有的数据划到变量和常量两个范畴中——
变量:字面理解,其值可以改变的量
常量:字面理解,其值不能改变的量。
其实这个很好理解,就像我们可以把所有的人可以化为男人、女人一样,并不影响他们是工程师还是一个护士,是非洲人还是美国人——这只是划分原则不同而已。(当然有人说,可能还有第三种人——女bo士,第四种人——x监,第五种人——人妖,我们暂时不予讨论,哈)
好了,进入正题:
1、变量:
官方定义:程序执行过程中,其值可以改变的数据称之为变量。
变量包括三个非常重要的属性:变脸名、变量值、变量在内存中的地址
a、变量名:用标识符命名,对应一定数量的内存存储单元,其单元数据视变量类型而定, 用来访问对应数据的最重要途经。就像李亚鹏、王菲、谢霆锋、张柏芝一样,是一个代号标识符:符合一定命名规则的字符串序列就像给人起名字有一定的原则——名字不是乱取的,你可以姓包,可以叫包拯但不能叫包子铺吧,呵呵
b、变量值:暂存在变量对应存储单元的数据,可进行数据的保存及后续计算。同样道理,人只有名字不行,必须有内涵,有表有里才行,否则那就不是人,而是畜生了是吧^-^
c、变量在内存中的地址:当我们在程序中定义了一个变量,在使用时,系统会为他分配一定的储存空间,我们可以通过变量名访问,同样也可以直接通过地址(在内存中的分配空间的编号来访问,此篇我们不重点讨论这种访问方式,相见内存篇)有了名字、有了内涵,但是保不准中国之大、世界之大,有重名的现象出现,为别人做了嫁衣可不好,所有我们国家特有的一个证件(伴随着我们一生)出现了——身份证,每个变量都会分配一个地址与它对应,我们每个人都会有一个唯一的身份证对应我们。(这个唯一可能保不准,马航上貌似就有重号的想象出现,只能算是相对了,哈)
2、常量
官方定义:在程序的执行过程中其值不能改变的量,一般用于算术运算或赋值语句代码中孤立的一些数据,没有名字、没有地址,就像无家可归的流浪猫、狗一样,没有身份证,没有名字,有的只是一身肉。
好了,大概知道了以上概念,让我们写个例子来看一下究竟什么是变量,什么是常量
#include <stdio.h>
int main(void)
{
int num=10; //定义一个整形变量,类型为int型,变量名为num,内容为:10
num=20; //可以在使用中任意修改num的值
return 0;
}
我们去掉int 试试
int main(void)
{
num=10; //定义一个整形变量,类型为int型,变量名为num,内容为:10
num=20; //可以在使用中任意修改num的值
return 0;
}
编译会提示出错:
证明如果不定义变量num的话,系统就无法知道num的类型,所以就无法给它分配内存空间,所以变量必须先定义再使用。
int是定义整数变量,如果我们修改成int=20.0,加个小数看看哈
int main(void)
{
int num=10; //定义一个整形变量,类型为int型,变量名为num,内容为:10
num=20.5; //可以在使用中任意修改num的值
return 0;
}
它给了一个小数,而t是一个整型的类型,在这种情况下,它会出现一些错误,提示类型不相符,当然这个错误本身是可以解决的,这个错误会损失一些精度。
因为小数转换成整数的话,肯定要进行四舍五入等操作。这就是我们的变量定义。
我们再改一下
int main(void)
{
int num=10; //定义一个整形变量,类型为int型,变量名为num,内容为:10
num=num+10; //可以在使用中任意修改num的值
return 0;
}
第四行将num的值取出来与10相加再付给num,其中这个10就是我们前面提到的常量,num自然就是变量了。
3、标识符:
C语言中,为各种变量、函数和结构体等起名字称之勾为标识符C语言标识符的规则:
- 变量名只能由字母、数字、下划线组成
- 第一个字符必须为字母或下划线
- C语言标识符区分大小写,长度无限制
- C语言中默认的关键字不能作为标识符
int main(void)
{
int Num=10;
int 1_num; //出错,不能以数字开头
int struct; //出错,struct是结构体定义关键字
int num#; //出错,包含了不#特殊字符
num=num+10; //出错,n与N
return 0;
}
PS:
于是有些人就放心大胆的定义变量了:int p,P,a,_b,c,X,y_,z,num1,num2;
乍一看这些都是符合规定的(数字、英文字母、下划线....)
但是就像人起名字一样,符合规定的,不一定就是合适的,前面举过例子
比如:姓包的人不会叫包子铺,姓原的不会叫原子弹,姓李的不会叫李苹果一样
(当然也不能完全保证有一些诡异的名字,比如:呼唤、田由甲、范剑等,呵呵)
所以在很多语言中都会有一些额外的规范,下面给大家简单介绍三种比较常见的命名法:
a、全小写,单词之间加下划线。比如:key_init,key_scan,num_max,num_min等,多出现在:unix平台
b、骆驼命名法。该法则的风格是第一个字母小写,以后每个单词的第一个字母都大写。如myCar,myBlog,因为大写字母看上去像是驼峰,所以叫骆驼命名法,android平台一般采用这种语法。
c、匈牙利命名法。该命名是在每个变量名的前面加上若干表示数据类型的字符,变量名的第一个字母大写。如iMyCar表示是整型,windows平台一般采用此平台。
我们这里以及以后的代码都遵循第一种规则,请大家根据自己平台及习惯选择。其实具体使用那个规则没有太大的区别,关键是统一!你开着个宝马的车,挂着个奔驰的标,那算什么事呢?!
最后一句:无论哪种命名法,一定遵循见名知意的原则,一见他就知道他是干啥的。脑袋大、脖子粗,不是大款就是伙夫~
a、整形:例如:int num1=100;int num2=100+200;int num3=num2+123;100 200 123均为整形常量num1 num2 num3为整形变量
1)按照进制可以分为:10进制、8进制、16进制十进制: 以正常数字1-9开头,如457 789八进制: 以数字0开头,如0123十六进制:以0x开头,如0x1e
2)按照所占字节可以分为:整形变量:short(2个字节) int(四个字节) long(四个字节)整形常量:默认为整形,占四个字节
3)按照有无符号可分为无符号和有符号:(无符号的只能取正数,有符号数只能取负数)有/无符号短整型(un/signed) short有/无符号基本整型(un/signed) int有/无符号长整型(un/signed) long
PS1:我们经常听说过的二进制呢?在底层编程或者单片机编程中经常用到二进制,那么为什么在前面我们没有提到二进制呢?因为在C语言中不直接支持二进制,如果涉及到二进制,我们一般使用8进制或者16进制代替——每3位二进制==一位8进制,4位二进制==一位16进制,这样我们就可以把二进制的计算转换为16进制或8进制运算。
PS2:整形数据的应用场合应用于计数、标志位、控制循环次数等场合。
b、实型(浮点型):例如:double score=95.5;float r=4.5f;float s=3.1415f*r*r;其中95.5 4.5f 3.1415f为实型常量score、r、s为实型变量
1)实型常量:也称为实数或者浮点数,有两种表达形式十进制形式: 由数字和小数点组成:0.0、0.12、5.0指数形式: 123e3代表123*10的三次方不以f结尾的常量是double类型以f结尾的常量(如3.14f)是float类型
2)实型变量按照精度来分:单精度(float)和双精度(double)float型: 占4字节,7位有效数字double型: 占8字节,15位有效数字
PS1:为什么浮点数没有16进制、8进制答案是确实没有浮点数只有10进制
PS2:浮点数在内存中是怎么存放的呢?请参考《浮点数在内存中的存放》
浮点数常用于:成绩计算与统计、数据计算与表示等
C、字符型char ch1 = 'a';char ch2 = '!' ;char ch3 = '\n';其中 'a'、'!'、'\n'叫做字符常量ch1、ch2、ch3 为字符变量
1)字符常量:直接常量:用单引号括起来,如:'a'、'b'等.转义字符:以反斜杠“\”开头,后跟一个或几个字符、如'\n','\t'等,分别代表换行、横向跳格.字符变量:用char定义,每个字符变量被分配一个字节的内存空间字符值以ASCII码的形式存放在变量的内存单元中;注:a = 'x';a变量中存放的是字符'x'的ASCII :120即a=120跟a='x'在本质上是一致的.
PS:所以C语言中字符数据本质上跟整形数据是一样的,只是我们赋予它新的含义
有了以上变量,我们需要对数据,尤其是变量进行赋值、计算、输入输出这样我们就需要借助一定的函数——标准输入输出函数,进行数据的输入与输出我们需要包含stdio.h的头文件 #include <stdio.h>scanf();printf();putchar();getchar();puts();gets();
7、运算符与表达式——优先级、结合性