04、老徐教你学C语言基础篇4——C语言之门(数据篇)

一、本章目标

厨师做饭需要油、盐、酱、醋及各种食材,没有了材料的厨师也无能为力~
 

数据是构成程序的根本,没有数据,就像没有了材料的厨师,在厉害也得饿死~

 

所以本章我们首先一起学习一下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平台一般采用此平台。

我们这里以及以后的代码都遵循第一种规则,请大家根据自己平台及习惯选择。
其实具体使用那个规则没有太大的区别,关键是统一!
你开着个宝马的车,挂着个奔驰的标,那算什么事呢?!

最后一句:无论哪种命名法,一定遵循见名知意的原则,一见他就知道他是干啥的。
脑袋大、脖子粗,不是大款就是伙夫~

4、C语言数据类型划分

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语言中字符数据本质上跟整形数据是一样的,只是我们赋予它新的含义

5、数据的输入输出
     有了以上变量,我们需要对数据,尤其是变量进行赋值、计算、输入输出
     这样我们就需要借助一定的函数——标准输入输出函数,进行数据的输入与输出
     我们需要包含stdio.h的头文件 #include <stdio.h>
     scanf();
     printf();
     putchar();
     getchar();
     puts();
     gets();


6、数据的混合运算——自动类型转换、强制类型转换

7、运算符与表达式——优先级、结合性

猜你喜欢

转载自blog.csdn.net/xdw1985829/article/details/22717049