我们上一篇介绍了C语言的HelloWorld,和C语言算是互相认识了,这篇我们继续对C语言进行了解。

数据类型

任何一门计算机编程语言都是以数据为中心的,因为程序就是要进行计算的。为了能够表示多种不同的数据,c语言提供了以下三种常用的基本数据类型:

  • 整型,就是整数
  • 浮点型,就是小数
  • 字符型,就是文本符号

常量与变量

在C语言中使用的数据按照是否可以修改,分为两大类:常量与变量。
常量
常量就是固定不变的数据,根据类型有以下四种:

  • 整型常量:所有整数(正整数,负整数,零)。
    如: 100,12345,-123,02
  • 浮点型常量:所有小数。
    如: 3.14,0.233
  • 字符常量:普通字符,用单引号括起来的一个字符。(不包括单引号本身)
    如:’A','1'
  • 字符串常量:用双引号括起来的若干个字符串。(不包括双引号本身)
    如:”hello World"

变量
变量呢,形象的说,是一块能够装数据的小房子,不过大家都是成年人了,本着探求本质的精神来说,变量就是块有名字的内存空间。我们可以通过变量的名字来为其背后的内存空间填充数据,或者使用内存空间中的数据进行计算。
如何定义变量呢?就是如下的形式:
变量类型 变量名= 初始值;

例如下面的代码

    int main(void) 
    {
        int nNum = 10;
        nNum = 200;
        printf("%d",nNum=100);
    }

其中int就是整数类型,nNum就是变量名,10就是变量的初始值。变量可以被修改,可以参与运算。当变量被定义之后,自动就开辟出了空间,变量名代表这个片空间了。
对于变量来说, 有各种各样的数据类型, 根据数据的不同,开辟的内存空间也不同。例如刚才的代码,定义一个int型的变量,那么编译器会为他开辟4个字节的空间。(int类型占4个字节)

变量类型

变量的类型有很多中,根据数据类型大致可以分为三大类:

  • 整数: int short long
  • 小数: float double
  • 字符: char wchar_t
    另外还有一个关键字: unsi gned可以修饰整数和字符,可以表示无符号数(就是正数)。下面是不同变量类型的取值范围:
项目价格数量取值范围
char18-128~127
unsigned char180~255
short [int]216-32768~32767
unsigned short [int]2160~65535
int432-2147483648~2147483647
unsigned [int]4320~4296947295
long[int]432-2147483648~2147483647
unsigned long[int]4320~4296947295
long long [int]864-9223372036854775808~-9223372036854775807
unsigned long long [int]8640~18446744073709551615
float4327位十进制有效数字±(3.4*10^(-38)~3.4*10^38)
double86416位十进制有效数字±(1,7*10^(-308)~3.4*10^308)

变量类型的选用

在编写c语言代码的时候,经常会面临定义变量的时候该选用什么类型。比如,存储一个人的年龄,应该选int还是short等问题。一般原则如下:

  1. 如果没有特殊需要,整数一般采用int类型,它是每个C系统里的最基本类型,必定能得到硬件的基本支持。
  2. 如果没有特殊需要,浮点数一般采用double类型,因为它的精度和表示范围能满足-般要求。
  3. 如果没有特殊需要,字符一般采用char 类型。对于特殊字符使用wchar_ t。

字符类型概述

开始之前,先在心中问自己一个问题: 1 和''1'是一个东西吗?
字符类型本质上来说,也是数字。这是必然,因为计算机只能存储数字嘛。有一个美国国家标准协会指定了一个标准,用0~127之间的数字代表不同的字符。所以每一个字符都和一个数字一一对应的。美国人制定的这个标准称之为ASCII。
ASCII

一个字节能表示 0 255,所以存储一个普通的英文字符只需要一个字节,故而char也就是1个字节大小。
悲催的是,由于编程语言是歪果人发明的,使用广泛的ASCII表中也就没有非英文使用国家的文字字符。比如像我们中国,汉字字符好几万。于是新的编码规范应运而生,就像我们常见的unicode。
在我们这里,wchar _t 就是用来存储复杂字符的,而且他是两个字节,共有65536个状态,基本就够用了。
现在我们就能够回答刚才的问题了,1 就是数字1,而字符‘1’就可以看成ASCII十进制的49。

字符型数据变量

定义char型字符变量,直接使用char 即可,赋值的单字符需要用''起来

char ch = 'A'; //这个字符占用1字节

定义wchar _t型字符变量,直接使用wchar_t,需要注意的是字符要用这种格式L'':

wchar_t ch = L'A';//这个字符占2字节。

字符型与数字

字符类型与整数类型没有本质的区别,都表示数字,只是,字符类型所能表示的数字被人为设计成与不同的字符一一对应。所以字符类型的变量也可以用于数学计算,只是它表示的数据范围很有限。有符 号的情况下(char -128 127, wchar_ t -32768 32767)

字符串

C语言中还有一种类型叫做字符串常量, 但是没有一个变量能够存储字符串常量。需要借助于字符数组或指针,这个我们后面再讲。
字符串的表示方式:使用双引号扩起来例如:
char szCh[] = "adfadf4546545";

关于常量、变量、赋值问题

常量就是不可以改变的量
变量是背后有一块内存,变量名代表那一块空间,我们使用&符号能够得到变量的地址。
关于赋值符号的左值和右值。
对于一个变量来说,放在赋值左边的时候,使用的是背后内存,放在右边的时候,使用的是内存中的数值。

int main()
{
    int a = 0;
    int b = 0;
    a = 100;//复制符号左边的量,需要有内存
            //左边使用的也是内存
    b = a;  //右边,只要有数值就可以了。

    //100 = a;//错误 左边如果是一个常量是不行的,
              //因为常量背后没有内存
    return 0;
}

关于赋值时的类型转换

#include  <stdio.h>
#include  <stdlib.h>
int main()
{
    int a = 10;
    short b = 0;
    a = b;

    int c = 100;
    short d = 20;
    d = c;

    int e = 65538;
    short f = 0;
    f = e;         //这里丢失数据了
    return 0;
}

我们在赋值的时候,如果赋值符号左右两边的类型不一致,会自动的将右边的类型,给转换为左边的类型,然后再赋值。这个叫做隐式转换。
缺点就是,当右边的类型范围大,左边的类型范围小的时候,有可能会丢失数据。

关于显式类型转换

#include  <stdlib.h>
int main()
{
    double a = 3.14;
    int b = 0;
    b = (int)a;
    //当我明确知道他俩类型不一样的时候,应该写显示转换,表示我是故意这么做的。

    return 0;
}

标识符

编程的时候,我们经常会碰到需要命名的对象。比如函数名,变量名,这些名字都叫做标识符。
标识符也有一套自己的命名规则,规则如下:

  1. 只能由字母(A~Z,a~z)、数字(0~9)、下划线(_)组成。例如:
    int $abc = 0,!cde = 0; 错误!
  2. 数字不能开头,例如:
    int 2abc = 0,345num = 1;错误!
  3. 不可以使用关键字,例如:
    int if = 0,for = 1;错误!
  4. C语言中的标识符区分大小写,例如:
    int nNum = 0;int nnum = 1正确,为两个不同的变量

正确的标识符名称
abcd、NumberA、_2019、alexsel123

关于运算符

算数运算符
+ - * / % ++ --
需要注意的:

  1. / 在C语言中,两个整数相除,得到的只能是整数

        如果要得到小数部分,应该有浮点数参与运算
  2. % 是取模, 进行运算的数,只能是整数
  3. ++ 自增 自己增加1
    -- 自减 自己减小1

课后练习

1. 交换两个数的值

交换两个变量a和b的值
int a = 5;
int b = 6;
交换后,a等于6,b等于5

int main()
{
    int a = 5;
    int b = 6;

    int c = 0;
    c = a;
    a = b;
    b = c;
    return 0;

}

不使用中间变量方式

int main()
{
    int a = 5;
    int b = 6;
    a = a + b;
    b = a - b;
    a = a - b;
    return 0;
}

2.从键盘获取两个数,输出和

int main()
{
    int a = 0;
    int b = 0;
    printf("请输入两个数");
    scanf_s("%d %d",&a,&b);

    printf("%d", a + b);
    return 0;
}

3.从控制台中接收一个字符

int main()
{
    int a = 0;
    int b = 0;
    char m = 0;
    printf("请输入两个数");
    scanf_s("%d %d",&a,&b);
    printf("%d", a + b);
    printf("请输入一个字符");
    scanf_s("%c", &m);//去掉缓冲区中的回车
    scanf_s("%c", &m);

    printf("获取到的字符为%c",m);

    return 0;
}
最后修改:2020 年 08 月 26 日
如果觉得我的文章对你有用,请随意赞赏