vlambda博客
学习文章列表

C语言入门与基础-数据类型

数据类型

    在高级语言程序设计中,为了数据存储和处理的需要,编译程序将数据划分为不同的数据类型,并为每一种数据类型规定了在内存中的存储单元字节数和对该数据类型数据所能进行的运算,其中数据类型分类如下图:

图3.1 C语言中的数据类型



◆数据类型是按被定义数据的性质、表示形式、占据存储空间的多少、构造特点来划分的
常量与变量

▶常量:在程序执行过程中,其值能变的量称为常量

●整型常量

(1)十进制整型常量:十进制整型常量没有前缀,其数码为 0~9
(2)八进制整型常量:八进制整型常量必须以0开头,即以0作为八进制数的前缀,数码取值为0~7,八进制数通常是无符号数
(3)十六进制整型常量:十六进制整型常量的前缀为0X或0x,其数码取值为 0~9,A~F或a~f
(4)整型常量的后缀:如果使用的数超过了整型数的范围,就必须用长整型数来表示,长整型数是用后缀“L”或“l”来表示的。如果是一个无符号整型常量,则在整数值后面加上“U”或“u”,无符号的长整型常量的表示方法是在整数后面加上“UL”,“LU”,“ul”或“lu”
●浮点型常量

(1)十进制小数形式:由数字 0~9和小数点组成(注意必须有小数点)

(2)指数形式由符号(+或 -)、整数部分、小数点(.)、小数部分、指数部分(e 或 E ±n)和浮点数后缀组成,其一般形式为:

[±][整数部分][.][小数部分][(e,E) ±n][后缀]

例:1.25×10³表示为指数形式浮点常量为+1.25e+3

后缀表示浮点数的类型,浮点数后缀可以是f或F,l或L;当后缀省略时,浮点数类型为 double;当后缀为f或F时,浮点数类型为 float;当后缀为l或L时,浮点数类型为 long double;符号[]表示该组成部分可以有或无(可选项),但必须遵守浮点数的下列组成规则:

① 一个浮点数可以无整数部分或小数部分,但不能二者全无

② 一个浮点数可以无小数点或指数部分,但不能二者全无




C语言入门与基础-数据类型


字符型常量

   字符常量是用单引号括起来的一个字符。 一个字符常量在计算机的内存中占据一个字节的容量。 字符常量的值就是该字符的ASCII码值。 因此,一个字节常量实际上也是一个字节的整型常量,可以参与各种运算

   例如:′a′、′C′、′=′、′+′、′?′都是合法字符常量。 但是,单引号中的内容不能是单引号、双引号和反斜线

   例如: ′′′,′″′,′\\′都是不合法的。这是因为单引号,双引号和反斜线具有其他的特殊用途。如果需要表示它们,正确的写法是′\′′、′\″′、′\\′

   转义字符是一种特殊的字符常量。转义字符以反斜线\开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符

   例如,在前面小橘猫举出的例题中printf函数的格式串中用到的′\n′就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码

C语言入门与基础-数据类型

图3.2 常见的转义字符



◆广义地讲,c语言字符集中的任何一个字符均可用转义字符来表示。表中的\ddd和\xhh正是为此而提出的;ddd和hh分别为八进制和十六进制的 ASCII代码。如\101表示字母A,\102表示字母 B,\134表示反斜线,\X0A 表示换行等

字符串常量

(1)字符串常量是由一对双引号括起的字符序列。例如:"CHINA",″program″,″$1.25″等是合法的字符串常量

(2)字符串常量和字符常量是不同的量它们之间主要有以下区别:

① 字符常量由单引号括起来,字符串常量由双引号括起来

② 字符常量只能是单个字符,字符串常量则可以含一个或多个字符

③ 可把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量



◆在c语言中没有相应的字符串变量,这与BASIC等其他高级语言不同,但可以用一个字符数组来存放一个字符串,这方面的内容小橘猫将在数组一节中予以介绍

④ 字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加 1;增加的一个字节中存放字符′\0′ (ASCII码为0) 这是字符串结束的标志

例如: 字符串″program″在内存中所占的字节为:

p
r
o
g
r
a
m
\0

   其中,每个格子表示一个字节,存放一个字符,最后一个字节存放字符′\0′,表示该字符串结束


◆字符常量′a′和字符串常量″a″虽然都只有一个字符,但在内存中的情况是不同的。字符常量′a′在内存中占 1 个字节,可表示为a字符串常量″a″在内存中占 2 个字节,可表示为a \0

符号常量

  常量除了可以用上述方法直接表示外,还可以采用符号表示,称为符号常量。符号表示是用标识符代表一个常量,例如,用PI表示 3.1415926。符号常量在使用之前必须先定义

其一般形式为:

#define 标识符  常量

【例3.1】设计算法求要求获取圆半径并圆的面积,并输出计算结果

#include<stdio.h>            //预处理命令#include<math.h>#define PI 3.1415926         //定义符号常量#define N 2//主函数int main(){  double R,area;          //定义一个双精度型变量  scanf("%lf",&R); //从键盘接收输入的数据,并赋值给变量R  area=pow(R,N)*PI;     //调用math.h函数库中的pow函数计算R变量数值的平方,  printf("此圆的面积为%lf",area); //将计算结果打印在显示器上 return 0;}
    其中, #define也是一条预处理命令(预处理命令都以#开头),称为宏定义命令 。其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。使用符号常量的好处是:含义清楚,能做到“一改全改”
▶变量:在程序执行过程中,其值可变的量称为变量

 一个变量应该有一个名字,同时在内存中占据着一定的存储单元。变量值的改变实际上就是对应存储单元中内容的改变

●变量的命名必须遵循以下几条规则:
① 必须是以英文字母或下画线开头的,由字母、数字和下画线组成的字符序列

② 不能与c语言的关键字(保留字)重名,因为关键字已经被赋予了特殊的含义

③ 变量名的长度不受限制,但是根据不同的编译器其识别的最大长度各有不同
④ C 语言对变量名的大小写敏感,例如Max和max就是不同的变量名


◆在 C 语言的长期使用过程中还形成了一些约定俗成的规则:

① 尽量使变量名能够表达出该变量的含义,例如,year,max 等,最好不要使用 a,j,sp5等 类似的无意义的变量名,因为这将降低程序的可读性
② c语言系统内部已经定义了一些以下画线开头的标识符,为了避免冲突和以示区别, 用户最好不要用下画线来作为变量名的开头
③  习惯上符号常量的标识符用大写字母,变量标识符可大小写结合
●整型变量

    在c语言中,整型用int表示。根据整型数在存储器中占用的字节数,可以long和short来修饰 int,表示长整型数和短整型数;根据其是否带有符号,又可以用signed和unsigned表示带符号整型数和无符号整型数。当整型数带有修饰语时,可将int省略,如short int可以写为short,带有不同修饰语的整型数具有不同的字节数以及数据范围

    各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同,但由于省去了符号位,故不能表示负数,数据范围也不同。 表3.1列出了BolandC++3.1 编译系统中各类整型量所分配的内存字节数及数的表示范围

有符号短整型变量表示的最大正数为32767

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

无符号短整型变量表示的最大数为65535

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1



◆有符号数据转化为二进制后首位为符号位,0为正,1为负

浮点型变量

C 语言中提供了两种浮点数的类型:

float 单精度型

double 双精度型

它们之间的区别在于,在BolandC++3.1 中,float型数据占据4个字节,double型数据占据8个字节。同时,它们表示的数据范围和精度也不同。与整型数不同,浮点数均为有符号浮点数,不能用signed和unsigned修饰。但是,符号long可以用来修饰double形成 long double类型(长双精度型)。BloandC++3.1中,各类型浮点型数据所表示的数的范围以及有效数位数见表3.1

●字符变量

字符变量用来存储字符常量,即单个字符。字符变量的类型说明符是char;在c语言中,字符型也可以分为signed和unsigned,它们的区别在于取值范围的不同,有关规定见表3.1,每个字符变量被分配一个字节的内存空间,因此,只能存放一个字符。 字符值是以ASCII码的形式存放在变量的内存单元之中的

例如,x的十进制ASCII码是120,y的十进制ASCII码是121,则对字符型变量 a,b 赋予值′x′和′y′:

a =′x′;

b =′y′;

实际上,在 a,b 两个单元内存放了 120 和 121 的二进制代码:

a:0 1 1 1 1 0 0 0

b:0 1 1 1 1 0 0 1

所以,也可以把字符变量看成是整型量。c语言允许对整型变量赋以字符值,也允许对字符

变量赋以整型值在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输

出。由于整型量为多字节量,字符量为单字节量,因此,当整型量按字符型量处理时,只有低8位数据参与处理

表3.1 Boland C ++V3.1 中数据类型的长度和值域

【例3.2】 字符变量与整型量之间的联系程序
#include<stdio.h>     //预处理命令//主函数int main(){  int i;              //定义一个整型变量1  char ch='a';        //定义一个字符变量ch并初始化为'a'  i=(int)ch;          //将ch赋值给i  printf("%c的ASCII码数值为%d",ch,i);  //输出变量ch和i的值  return 0;           //主函数返回0}



课后练习
     ▶分别指出下列常量的意义:
     0x2a66    .223E+120   017   0XA5LU   +1.23e-4f   '\"'
    设计算法利用ASCII码值在显示器输出字母AZ
答案小橘猫会在下期进行公布


上期课后练习解答
    ▶ 设计算法计算100!
#include<stdio.h>int main(){  int num=1,i=2;  while(i<=100)      //循环控制  {    num=num*i;       //变量num与i相乘赋值给num    i++;             //变量i进行自增加一  }  printf("100!=%d",num); //输出计算结果 return 0;}
    ▶ 设计算法找出100以内的所有素数
#inclue<stdio.h>#define ZERO 0             //定义一个符号常量int main(){  int n=1,i=2,flag=1;      //定义三个整型变量并初始化,其中flag是标识变量,用于标记算法中找出的素数  printf("100以内的素数有:");  for(;n<=100;n++)        //利用for循环实现1—100  {
    if(n==2){print("%d\t",n);}   //当n=2时直接输出2    else if(n==1){}              //当n=1时什么也不执行    else                         //其他数字时利用循环检验是否为素数    {     while(i<n) {        if(n/i==ZERO){flag=0;break;}  //当n能被大于3小于自身的数除尽时重新赋值标志变量为0并跳出循环      }    }    if(flag==1){printf("%d\t",n);}    //当标志变量没有改变时,则说明n没有被大于3小于自身的数除尽,则n为素数并输出n的数值    else{flag=1;}                     //当标志变量改变时,只需刷新标识变量,然后进入下一循环  } return 0;}


               ♩          ♫     •      ♪     •               ♩   

今天小橘猫的学习就到这里,有什么不懂的问题欢迎小伙伴们在评论区留言,小橘猫会在第一时间进行解答!


编辑|小橘猫
审核|小橘猫十有九胖