数据类型 C语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.2常量与变量
3.2.1 常量与符号常量
1.常量的概念
在程序运行过程中,其值不能被改变的量称为常量。

2.常量的分类
(1)整型常量
(2)实型常量
(3)字符常量。

(4)符号常量。

常量的类型,可通过书写形式来判别。

3. 符号常量:有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即给某个常量取个有意义的名字,这种常量称为符号常量。

#define PI 3.1416
使用符号常量的好处:
(1)含义清楚、见名知意。

(2)修改方便、一改全改。

#define PI 3.14
#include<stdio.h>
void main()
{
float area;
area=10*10*PI;
printf("area=%f\n",area); }
结果:area=314.000000
例3.1符号常量的使用
#define PRICE 30
#include<stdio.h>
void main()
{
int num,total;
num=10;
total=num*PRICE;
printf("\ntotal=%d",total); }
3.2.2 变量
1.变量的概念
在程序运行过程中,其值可以被改变的量称为变量。

2.变量的两个要素
(1)变量名。

每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。

(2)变量值。

在程序运行过程中,变量值存储在内存中。

在程序中,通过变量名来引用变量的值。

3.标识符命名规则
(1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。

(2)有效长度:随系统而异,但至少前8个字符有效。

如果超长,则超长部分被舍弃。

例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。

在TC V2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。

(3)C语言的关键字不能用作变量名。

注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。

习惯上,变量名和函数名中的英文字母用小写,以增加可读性。

思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl 等是同一个变量吗?
标识符命名的良好习惯──见名知意:
所谓“见名知意”是指,通过变量名就知道变量值的含义。

通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。

例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。

变量的地址:变量在内存中占据相应字节的存储空间该存储空间的首地址即为变量的地址,变量a的地址用&a表示
变量的声明:变量在使用前必须先声明,其声明格式为类型标识符变量名;
变量的赋值:变量名=表达式
没有赋值的变量其值是不确定的
3.3整型数据
3.3.1整型常量的表示方法
八进制整数:以数字0开头的八进制数。

如:0127
十六进制数:以0x开头的十六进制数.如:0x2f
长整型:后面加l或L。

如:12L
无符号整型:后面加U或u
3.3.2 整型变量
1,整型数据在内存中的存放形式:以二进制补码的形式存放补码:正数的补码与原码相同,负数的补码为除符号位(最高位)外,其余各位取反后加1
10的二进制表示为:1010
10的存放形式为:00000000 00001010
-10的存放形式为:10的存放形式按位取再反加1,即:11111111 11110101+1=
11111111 11110110
例:求1234和-1234的存放形式
1234=1024+210=1024+128+64+16+2
=1×210+ 0×29+ 0×28+ 1×27+ 1×26+ 0×25+ 1×24+ 0×23+ 0×22+ 1×21+ 0×20
=10011010010B=0000 0100 1101 0010B
-1234的存放形式为:
1111 1011 0010 1101+1=1111 1011 0010 1110
2.整型变量的分类
根据占用内存字节数的不同,整型变量又分为4类:(1)基本整型(类型关键字为int)。

(2)短整型(类型关键字为short)
(2)长整型(类型关键字为long [int])。

又分为无符号整型(unsigned)与有符号整型(默认类型)。

无符号型:最高位仍用来存放数据
整型变量所占存放空间:short≤int≤long
Turbo C中分别为:2,2,4
Visual C++中分别为:2,4,4
3.整型变量的定义
int a,b;
long c;
unsigned d;
#include<stdio.h>
void main(){
short i=65538;
int j=-1234;
long k=65538;
printf("%d,%d,%d",sizeof(short),sizeof(int),sizeof(long));
printf("\n%d,%u,%ld\n",i,j,k);
}
Visual C++中的运行结果为:
2,4,4
2,4294966062,65538
例3.2整型变量的定义与使用
#include<stdio.h>
void main()
{int a,b,c,d;
unsigned u;
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf("a+u=%d,b+u=%d\n",c,d); }
4.整型数据的溢出:注意各种类型变量的取值范围例3.3整型数据的溢出
main()
{int a,b;
a=32767;
b=a+1;
printf("%d,%d",a,b); }32767=215-1=(0111 1111 11111111)B 32768= 215=(1000 0000 00000000)B -32768的补码为:
(0111 1111 11111111)B+1
3.4 实型数据
3.4.1,实型常量的表示方法
实型常量即实数,在C语言中又称浮点数,其值有两种表达形式:
(1)十进制形式。

例如3.14、9.8。

(2)指数形式:<尾数>E(e)<整型指数>。

例如3.0E+5等。

3.4.2浮点型变量
1。

实型数据在内存中的存放形式
一个实数在内存中占4个字节(一个字节为8个二进制位),其存放形式为:用一个部分位如24位存放小数,用其余位存放指数部分。

如3.14159,小数部分为0.314159,指数部分为1
3,实型数据的舍入误差
在计算机中实型数据并不是总能准确表示。

如float型数据只有6-7位是有效的。

例3.4:实型数据的舍入误差
#include<stdio.h>
void main(){
float a,b;
a=123455.789e5;
b=a+20;
printf("a=%f,b=%f",a,b);
}
运行结果为:a=12345578496.000000,b=12345578516.000000
3.4.3 实型常量的类型
许多系统将实型常量作为双精度型数据进行运算,然后再将结果取7位有效数字。

若在实型常量后面加一个f,则此常量不会转换成双精型常量。

如:1.65f,654.321f
3.5 字符型数据
3.5.1 字符常量
1.字符常量的定义
用一对单引号括起来的单个字符,称为字符常量。

例如,‘A’、‘1’、‘+’等。

2.转义字符
C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\”开头的转义字符
注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:‘\\’、‘\’‘。

例3.5转义字符的使用#include<stdio.h>
void main()
{
printf(" ab c\t de\rf\tg\n"); printf("h\ti\bj k\n")
printf("\tY\b=");
}
\t:制表区占8列a在第2列输出d在第10列输出
3.5.2 字符变量
字符变量的类型关键字为char,一般占用1字节内存单元
字符变量的定义格式:char 字符变量名表;如:char c1,c2;
字符变量的赋值:字符变量名=字符常量;或:字符变量名=正整数;
如:c1='a';c2=97;c1='\103';
变量的输出:printf("%c",c1);
3.5.3 字符数据在内存中的存储形式及使用方法
字符变量用来存储字符常量。

将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。


c1='A'的存储方法为:01000001
字符型数据可以以字符型(%c)格式输出字符或整型格式(%d)输出其ASCII码。

字符型数据可以进行算术运算。

例3.6向字符变量赋以整数#include<stdio.h>
void main()
{char c1,c2;
c1=97;c2=98;
printf("%c%c\n",c1,c2); printf("%d%d\n",c1,c2); }
输出结果:a b
97 98#include<stdio.h>
void main()
{char c1,c2;
c1='a';c2='b';
printf("%c%c\n",c1,c2); printf("%d%d\n",c1,c2); }
例3.7大小写字母的转换
#include<stdio.h>
输出结果为:Ab void main(){
char c1,c2;
c1='a';c2='B';
c1=c1-32;c2=c2+32;
printf("%c%c",c1,c2);
}
3.5.4 字符串常量
1.字符串常量的概念和字符串长度
字符串常量是用一对双引号括起来的若干字符序列。

字符串中字符的个数称为字符串长度。

长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为"" (一对紧连的双引号)
例如,"How do you do."、"Good morning."等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。

如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。

例如:(1)C:\msdos\v6.22 →"C:\\msdos\\v6.22"
(2)I say:"Goodbye!" →"I say:\"Goodbye!\""
字符常量'A'与字符串常量"A"的区别:
(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;
(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数;
(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志’\0’。

3.6变量赋初值
没有赋值的变量其值是不确定的
变量赋值的格式为:变量名=表达式如:a=4;b=5;c='a';
变量的初始化:定义的同时赋值。

如int a=65,b;
char c1='d';
3.7 各类数值型数据间的混合运算
当两个不同类型数据间进行运算时,系统会自动将较低的数据类型转换成较高的数据类型
低------------->高
char->int->unsigned->long->float->double 例:求下列表达式的值:
7/2 7.0/2 7.0/2.0 7/2*2
3.8 算术运算符和算术表达式3.8.1C运算符简介:包括13类
1.算术运算:+ -* / %
2.关系运算:>, <, >=, <=, ==, !=
3.逻辑运算:!, &&, ||
4.位运算:<<, >>, ~,|^ &
5.赋值运算符:=及其扩展运算符如+=等
6.条件运算符:? :
7.逗号运算符:,
8.指针运算符:*,&
9.求字节运算符:sizeof
10.强制类型转换:(类型)
11.分量运算符:. ->
12.下标运算符:[]
13.其它( )
3.8.2算术运算符和算术表达式
1. 基本算术运算符
+、-(减法/取负)、*、/、%(求余数)
(1)关于除法运算/
C语言规定:两个整数相除,其商为整数,小数点和小数部分被舍弃。

例如,5 / 2 = 2。

-5/2=-2(2)关于求余数运算%
要求两侧的操作数均为整型数据,否则出错。

(3)如果参加+,-,*,/运算的两个数中有一个实数,则结果是double型。

2. 算术表达式和运算符的优先级与结合性
(1)表达式的概念
用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合C语言语法规则的式子,称为表达式
(2)算术表达式的概念
表达式中的运算符都是算术运算符。

例如,3 + 6 * 9、(x + y) / 2 -1等,都是算术表达式
(3)运算符的优先级与结合性
1)C语言规定了运算符的优先级和结合性。

所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。

结合性是C语言的独有概念。

除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。

2)表达式求值
按运算符的优先级高低次序执行。

例如,先乘除后加减。

如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按C语言规定的结合方向(结合性)进行。

例如,算术运算符的结合方向是“自左至右”,即:在执行“a –b + c”时,变量b先与减号结合,执行“a -b”;然后再执行加c的运算。

3,强制类型转换运算符
数据类型强制转换的一般格式为:
(要转换成的数据类型)(被转换的表达式)
当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。

例如,
(double)a(等价于(double)(a)) //将变量a的值转换成double型(int)(x+ y)//将x+y的结果转换成int型
(float)5/2 //(等价于(float)(5)/2)
(float)(5/2)//将5整除2的结果(2)转换成实型(2.0)
注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。

例如,(double)a只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。

例如int i=5; y=++i;又如
int i=5; y=i++;
又如
int i=5;
y=(++i)+ (++i)+(++i);相当于
++i;++i;++i;
y=i+i+i; /*y=24*/又如
int i=5;
y=(i++)+ (i++)+(i++);相当于
y=i+i+i;
i++;i++;i++;
#include<stdio.h>
void main(void)
{int m,n;
m=8;n=10;
printf("%d,%d,%d,5d",m,n,m++,n++); }
3.9 赋值运算与赋值表达式
1.赋值运算
赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。

赋值运算符的一般形式为:变量= 赋值表达式
例如,x = 5
y = (float)5 / 2
如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。

思考题:假设变量num的数据类型为float,其值为2.5,则执行“num = (int)num”后,num的值等于多少?
3.10 逗号运算符和逗号表达式
C语言提供一种用逗号运算符“,”连接起来的式子,称为逗号
表达式。

逗号运算符又称顺序求值运算符。

1.一般形式
表达式1, 表达式2, ……, 表达式n
2.求解过程
自左至右,依次计算各表达式的值,“表达式n”的值即为整个逗号表达式的值。

例如,逗号表达式“a = 3 * 5, a * 4”的值=60:先求解a = 3 * 5,得a=15;再求a * 4 = 60,所以逗号表达式的值=60。

又例如,逗号表达式“(a = 3 * 5, a * 4), a + 5”的值=20:先求解a = 3 * 5,得a=15;再求a * 4=60;最后求解a + 5=20,所以逗号表达式的值=20。

注意:并不是任何地方出现的逗号,都是逗号运算符。

很多情况下,逗号仅用作分隔符。

作业 3.3,3.4,3.6,3.7,
3.9 3.10 3.12。

相关文档
最新文档