1、2022-12-71第第3章章数据类型及其运算数据类型及其运算2022-12-72n C程序结构程序结构n 基本数据类型、变量与常量基本数据类型、变量与常量n 赋值运算符与赋值表达式赋值运算符与赋值表达式n 算术运算符与算术表达式算术运算符与算术表达式n 逗号运算与逗号表达式逗号运算与逗号表达式n 运算符的优先级与结合性运算符的优先级与结合性n 混合运算时数据类型的转换混合运算时数据类型的转换主要内容主要内容2022-12-73C程序结构程序结构 例例3-1 从键盘输入半径,求圆的周长和面积。从键盘输入半径,求圆的周长和面积。算法算法思路思路:radius:存放从键盘输入的半径;:存放从键盘输
2、入的半径;计算周长计算周长:perimeter=2*PI*radius;计算面积:计算面积:area=PI*radius*radius;输出输出perimeter和和area的值的值不确定性不确定性列公式列公式2022-12-74#include double PI=3.14;int main()int radius;double perimeter,area;printf(Input a radius:);scanf(%d,&radius);perimeter=2*PI*radius;area=PI*radius*radius;printf(The perimeter is%.2f,The
3、area is%.2fn,perimeter,area);return 0;声明变量声明变量radius提示输入提示输入输入数据赋给输入数据赋给radius计算周长和面积计算周长和面积输出结果输出结果预处理命令预处理命令全局变量声明全局变量声明函数定义函数定义2022-12-75组成组成C源程序的三个要素源程序的三个要素(1)预处理命令预处理命令。C编译程序对源程序编译前,先由预处理编译程序对源程序编译前,先由预处理器对预处理命令进行预处理。器对预处理命令进行预处理。(2)全局声明全局声明。包括全局变量声明和函数原型声明。包括全局变量声明和函数原型声明。(3)函数定义函数定义。一个一个C语言程
4、序必须有一个语言程序必须有一个main函数。函数。函数函数由一组由一组语句语句组成。组成。比语句更小的语法单位:表达式、变量、常量和关键字等。比语句更小的语法单位:表达式、变量、常量和关键字等。2022-12-76#include/*函数功能:计算两个整数相加之和函数功能:计算两个整数相加之和 入口参数:整型数据入口参数:整型数据a和和b 返回值:返回值:整型数整型数a和和b之和之和*/int Add(int a,int b)return(a+b);int main()int x,y,sum=0;printf(Input two integers:);scanf(%d%d,&x,&y);/*输
5、入两个整型数输入两个整型数x和和y*/sum=Add(x,y);/*调用函数调用函数Add计算计算x和和y相加之和相加之和*/printf(sum=%dn,sum);/*输出输出x和和y相加之和相加之和*/return 0;2022-12-77 关键字关键字(Keyword)又称为保留字,又称为保留字,C语言预定的具有固定含义的一些单词语言预定的具有固定含义的一些单词 例如:数据类型修饰符例如:数据类型修饰符int,控制语句,控制语句return等等 a u t o b r e a k c a s e c h a r continue const default double do else
6、float for if int long NULL return switch shortsigned true this unsigned void whileC程序常见符号程序常见符号关键字关键字2022-12-78C程序常见符号程序常见符号n 大小写的英文字母:大小写的英文字母:AZ,azn 数字字符:数字字符:09n 特殊字符:特殊字符:空格空格!%&_(下划线下划线)+*=-/;.,()2022-12-79C程序常见符号程序常见符号标识符标识符 标识符标识符(Identifier)分系统预定义标识符和用户自定义标识符分系统预定义标识符和用户自定义标识符 以以字母字母和和下划线下划线
7、开始,大小写敏感,开始,大小写敏感,最长最长32个字符个字符。以大写字母、小写字母、下划线或数字以大写字母、小写字母、下划线或数字09组成。组成。直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读最好使用英文单词或其组合,忌使用汉语拼音最好使用英文单词或其组合,忌使用汉语拼音 不宜混淆不宜混淆 如如1与与l,o与与0 不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字 int,float,for,while,if等等2022-12-710例例:判断下列标识符号合法性判断下列标识符号合法性,并标出不合法的标示符。,并标出不合法的标示符。sumSumM.D.JohndayD
8、ate3daysstudent_name#33lotus_1_2_3charab_above$123M.D.John3days#33char$123abC程序常见符号程序常见符号标识符标识符2022-12-711 运算符运算符(Operator)34种,详见附录种,详见附录 分隔符分隔符(Separator)空格、回车空格、回车/换行、逗号等换行、逗号等 其它符号其它符号 大花括号大花括号和和 /*和和*/、/是程序注释所需的定界符是程序注释所需的定界符 数据数据(Data)变量变量(Variable)常量常量(Constant)C程序常见的其他符号程序常见的其他符号2022-12-712数据
9、类型、常量和变量数据类型、常量和变量数据为什么要区分类型?数据为什么要区分类型?不同类型的数据代表不同的不同类型的数据代表不同的数据表示形式数据表示形式合法的取值范围合法的取值范围占用内存空间大小占用内存空间大小可参与的运算种类可参与的运算种类 2022-12-713数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型整型整型实型(浮点型)实型(浮点型)字符型字符型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型单精度实型单精度实型双精度实型双精度实型基本整型基本整型长整型长整型短整型短整型无符号整型无符号整型数据类型数据类型(Data Type
10、)2022-12-714衡量数据类型所占空间大小的单位衡量数据类型所占空间大小的单位常用的单位如下:常用的单位如下:b,B,KB,MB,GB,TB bit,中文叫法:位中文叫法:位 Byte,中文叫法:字节中文叫法:字节 Kilobyte(KB),中文叫法:中文叫法:K Megabyte(MB),中文叫法:兆中文叫法:兆 Gigabyte(GB),中文叫法:中文叫法:G Terabyte(TB),中文叫法:中文叫法:T1 TB=1,024 GB1 GB=1,024 MB1 MB=1,024 KB1 KB=1,024 B1 B =8 b2022-12-715如何衡量数据类型所占空间大小?如何衡量
11、数据类型所占空间大小?一个位有多大?一个位有多大?只能是只能是0或者或者1,这叫二进制,这叫二进制 一个字节有多大?一个字节有多大?保存一个字符(英文字母、数字、符号)保存一个字符(英文字母、数字、符号)ASCII(美国标准信息交换码)编码(美国标准信息交换码)编码 见附录见附录A,常用字符与,常用字符与ASCII码对照表码对照表 两个字节保存一个汉字两个字节保存一个汉字 GB编码编码 可以表示可以表示0255之间的整数之间的整数2022-12-716基本数据类型基本数据类型表表3-1 C的基本数据类型(的基本数据类型(32位机)位机)数据类型数据类型关键字关键字占用位数占用位数取值范围取值范
12、围短整型短整型short16-3276832767,即,即-215215-1整型整型int32-2147483648 2147483647,即即-231231-1长整型长整型long32-231231-1浮点型浮点型float321.2*10-383.4*1038双精度浮点型双精度浮点型 double642.3*10-3081.7*10308字符型字符型char8-128127,即,即-2727-12022-12-717整型整型(integer)整型整型:有符号整数,允许取值为整数。如:有符号整数,允许取值为整数。如:123,567 整型的分类整型的分类:整型整型(int):占占4个字节个字节
13、 短整型短整型(short int):占:占2个字节个字节,通常简写为,通常简写为short 长整型长整型(long int):占占4个字节个字节,通常简写为,通常简写为long数据类型修饰符数据类型修饰符2022-12-718 signed 用来修饰用来修饰char、int、short和和long,说明他们是,说明他们是有符号有符号的的整数(正整数、整数(正整数、0和负整数)。和负整数)。有符号数在计算机内以有符号数在计算机内以二进制补码二进制补码形式存储的,最高位表示形式存储的,最高位表示符号位符号位(0为正数,为正数,1为负数为负数)。一般一般缺省缺省都是都是有符号有符号的,所以这个修饰
14、符通常省略。的,所以这个修饰符通常省略。short int型:型:最大最大:32767最小最小:-3276801 11 11 11 11 11 11 1110 00 00 00 00 00 00 00数据类型修饰符数据类型修饰符2022-12-719 unsigned 用来修饰用来修饰char、int、short和和long,说明他们是,说明他们是无符号无符号的的整数(正整数和整数(正整数和0)。)。无符号型在机内只能存放正数,最高位也来表示数值的。无符号型在机内只能存放正数,最高位也来表示数值的。当数据占用同样内存位数时,无符号型数值范围比有符号数当数据占用同样内存位数时,无符号型数值范围比
15、有符号数扩大一倍。扩大一倍。数据类型修饰符数据类型修饰符unsigned short int型:型:最大最大:65535最小最小:011 11 11 11 11 11 11 1100 00 00 00 00 00 00 002022-12-720扩充的整型类型扩充的整型类型 有符号基本整型有符号基本整型 signed int;无符号基本整型无符号基本整型 unsigned int;有符号短整型有符号短整型 signed short int;无符号短整型无符号短整型 unsigned short int;有符号长整型有符号长整型 signed long int;无符号长整型无符号长整型 unsi
16、gned long int;2022-12-721二进制存放与溢出二进制存放与溢出(1)10=(0000 0000 0000 0001)20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1(-1)10=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1(1111 1111 1111 1111)2(65535)10=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1(1111 1111 1111 1111)2 当当65535按按unsigned short int型理解时,仍为型理解时,仍为65535;而当;而当按按short int型理解时,被当作型理解时,
17、被当作-1的补码。的补码。2022-12-722字符型字符型(char)字符型字符型char的取值为单个字符。的取值为单个字符。例如:例如:A、用用ASCII编码表示一个字符,每个字符占用编码表示一个字符,每个字符占用1个字节,个字节,总共可以表示总共可以表示256个不同的字符。个不同的字符。char 类型前可用类型前可用signed和和unsigned加以修饰。加以修饰。例如:例如:signed char ch=-128;unsigned char ch=255;思考:思考:unsigned char 范围?范围?2022-12-723浮点型浮点型(float point)浮点类型:允许取值
18、为带小数的实数浮点类型:允许取值为带小数的实数(如如 123.46)双精度浮点型双精度浮点型double 单精度浮点型单精度浮点型float double比比float的精度更高的精度更高(即小数的有效位数更多即小数的有效位数更多),表示数据的范围也更大。表示数据的范围也更大。2022-12-724常量常量常量常量(Constant)在程序执行过程中在程序执行过程中其值不变的量其值不变的量。常量包括以下几种:常量包括以下几种:n整型常量整型常量n浮点常量浮点常量n字符常量字符常量n字符串常量字符串常量2022-12-725整型常量整型常量(short,int,long)整型常量整型常量 18、
19、-31 long int型常量型常量 123l、123L、123456l、123456L unsigned int型常量型常量 123u、123U 整型常量的类型整型常量的类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型在在整型常量后加字母整型常量后加字母l或或L,认为它是认为它是long int 型常量型常量例例:12与与12L2022-12-726整型常量的表示形式整型常量的表示形式 十进制形式十进制形式:若干个若干个09的数字的数字 如:如:100,-50,0 八进制形式:八进制形式:以以0开头开头的若干个的若干个07数字数字 如:如:0123 表示十进制数表示十进制数
20、83-011 表示十进制数表示十进制数-9。十六进制形式十六进制形式:用用0 x或或0X开头的若干个开头的若干个 09,af,AF的数字的数字 如:如:0X2F 表示十进制的数字表示十进制的数字470 x123 表示十进制数表示十进制数291-0 x12 表示十进制数表示十进制数-18。2022-12-727整型常量的表示形式整型常量的表示形式例例:0524 为为int型型,在内存中是如何表示的?,在内存中是如何表示的?0101010000000001425例例:01736L 为为long int 型型1101111000000011000000000000000063710000000000
21、0000002022-12-728何谓类型溢出何谓类型溢出(Overflow)?C语言提供的任何类型都有取值范围。当向其赋超过此范语言提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。围的数值,就会产生数值溢出,得到一个不正确的结果。例如:例如:short int的范围是的范围是-3276832767 如果超出取值范围,给它一个小于如果超出取值范围,给它一个小于-32768或者大于或者大于32767的数会如何呢?的数会如何呢?小蛇能吞下小蛇能吞下大象吗?大象吗?2022-12-729注意事项注意事项Example:看程序分析运行结果看程序分析运行结果
22、#include int main()short int a;printf(Input:);scanf(%d,&a);printf(a=%dn,a);return 0;运行结果运行结果:Input:12345 a=12345 Input:1234567 a=-10617 整型整型整数整数 short int 的范围:的范围:-32768+32767Because:12345的补码是的补码是0011000000111001 1234567的补码是的补码是100101101011010000111 截去多余部份截去多余部份(超过超过2个字节的左边部分个字节的左边部分)后后 其原码为其原码为 101
23、0100101111001(-10617)2022-12-730有趣的结果有趣的结果可用下图表示可用下图表示:32767 32766 32765 -32766 -32767 -32768输入输入(Input:)输出输出(a=)32767 32767 32768 -32768 32769 -32767 32770 -32766 -32768 -32768 -32769 32767 -32770 32766 2022-12-731类型溢出的解决方案?类型溢出的解决方案?解决方案:解决方案:预先估算运算结果的可能范围,采用取值范围更大的类型。预先估算运算结果的可能范围,采用取值范围更大的类型。1+2
24、+3+1!+2!+3!+13+23+33+如果不需要处理负数,则采用无符号类型。如果不需要处理负数,则采用无符号类型。在运算还没开始之前就判断运算数是否在合理的取值范围在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。内。如果超出,则停止运算,转错误处理。2022-12-732浮点型常量浮点型常量(float,double)浮点型常量:可以含有小数部分的数值常量。浮点型常量:可以含有小数部分的数值常量。根据占用内存长度的不同,分为:根据占用内存长度的不同,分为:单精度浮点常量:单精度浮点常量:占用占用32位内存,用位内存,用F、f表示。表示。如:如:19.
25、4F,3.0513E3f,8701.52f 双精度浮点常量:占用双精度浮点常量:占用64位内存,用带位内存,用带D或或d或不加后缀或不加后缀(缺省缺省)的数值表示的数值表示 如:如:2.433E-5D,700041.273d,3.1415。long double型常量型常量 123.45l、456.78L、4.5e3L 因为字母因为字母l和数字和数字1容易混淆,所以常使用大写容易混淆,所以常使用大写L做后缀。做后缀。2022-12-733浮点型常量的两种表示形式浮点型常量的两种表示形式 十进制小数十进制小数形式:形式:包括符号包括符号+与与-,数字数字09以及小数以及小数点点.。如:如:0.1
26、23,1.23,123.0 指数指数形式:形式:包括符号包括符号+与与-,数字,数字09,小数点,小数点.以以及及e(或或E)。如:如:0.123e3 表示表示0.123103 -35.4E-5 表示表示-35.410-5 其中其中e或或E之前必须有数字,且之前必须有数字,且e或或E后面的指数必须为整数。后面的指数必须为整数。如如:e-5,1.2E-3.5 不正确不正确2022-12-734浮点型常量浮点型常量(float,double)由于计算机系统分配给一个数据的存储空间是有由于计算机系统分配给一个数据的存储空间是有限的。一般来说,一个实型常量无法转换成与之等值限的。一般来说,一个实型常量
27、无法转换成与之等值的有限位的二进制数据,的有限位的二进制数据,其有限位以后的数字将被舍其有限位以后的数字将被舍去去,由此就会,由此就会产生舍入误差产生舍入误差。2022-12-735例例:/下列程序的功能是将下列程序的功能是将10个实型数个实型数0.1进行累加,然后将累加结果输出。进行累加,然后将累加结果输出。#include int main()int k;/*定义整型变量定义整型变量k*/double x,z;/*定义双精度整型变量定义双精度整型变量x与与z*/z=1.0;/*实数实数1.0赋给变量赋给变量z*/x=0.0;for(k=0;k10;k+)x=x+0.1;/*10个个0.1累
28、加到变量累加到变量x中中*/printf(z=%20.17fn,z);/*输出变量输出变量z的值的值*/printf(x=%20.17fn,x);/*输出变量输出变量x的值的值*/return 0;运行这个程序后,输出的结果如下:运行这个程序后,输出的结果如下:z=1.00000000000000000 x=0.999999999999999892022-12-736字符常量字符常量(Character)用一对用一对单引号单引号括起的括起的单个单个字符,其字符,其值为值为该字符的该字符的ASCII码码值值。如如:A 65,n 10。注意:注意:1和整数和整数1的区别的区别 字符字符1代表一个形
29、状为代表一个形状为1的符号,在需要时按原样输出,在的符号,在需要时按原样输出,在内存中以内存中以ASCII码形式存储,占码形式存储,占1个字节个字节 整数整数1是以整数存储方式,占是以整数存储方式,占1个字节个字节0 0 1 1 0 0 0 10 0 0 0 0 0 0 12022-12-737字符常量字符常量-转义字符转义字符用用开头的字符开头的字符(例如,(例如,n,代表,代表1个字符)个字符)转义转义字符字符含义含义 ASCII码码(十进制)(十进制)三位八进制数三位八进制数表示的字符表示的字符十六进制数十六进制数表示的字符表示的字符b退格退格08010 x8t水平制表符水平制表符090
30、11x9n换行换行10012xar回车回车13015xd字符字符92134x5c双引号双引号34042x22单引号单引号39047x270NULL00000 x0ddd三位八进制数表示的字符三位八进制数表示的字符xdd两位十六进制数表示的字符两位十六进制数表示的字符表表3-2 常用转义字符常用转义字符 2022-12-738如如:101-A012-n 376-x61-a 60 -0 483-例例:A-101-x41-65字符常量字符常量(Character)()2022-12-739转义字符举例转义字符举例例例1:阅读程序,给出运行结果阅读程序,给出运行结果int main()printf(1
31、01 x42 Cn);printf(C Programn);printf(Turbo C);return 0;运行结果:运行结果:(屏幕显示屏幕显示)A B CC ProgramTurbo C2022-12-740转义字符举例转义字符举例例例2:阅读程序,给出运行结果阅读程序,给出运行结果int main()printf(Yb=n);return 0;运行结果:运行结果:屏幕显示:屏幕显示:=打印机输出:打印机输出:2022-12-741例例3:阅读程序,给出运行结果阅读程序,给出运行结果#include int main()/t,跳到下一个输出区,跳到下一个输出区printf(How are
32、 you?t);printf(I am fine.nn);printf(How are you?n);/退格符退格符b,使当前输出位置退一格,即输出的起始位置左移一位,使当前输出位置退一格,即输出的起始位置左移一位printf(_bI am fine.nn);/回车符回车符r,使当前输出位置回到本行开头,使当前输出位置回到本行开头printf(I am fine.);printf(rHow are you?nn);/多个转义字符的混合运用多个转义字符的混合运用printf(note:n a stibbkrpn);return 0;How are you?_ _ _ _ I am fine._
33、How are you?I am fine.How are you?_ _ _ _ I am fine.note:p _ a_s_ _ ki2022-12-742什么时候要使用转义字符?什么时候要使用转义字符?C程序中需要实现某些特定打印或显示动作时程序中需要实现某些特定打印或显示动作时 如如 printf(123t56n);C程序中需要打印或显示以下三个字符时程序中需要打印或显示以下三个字符时 (斜杠斜杠)(双引号双引号)(单引号单引号)如如 printf(Youre a a bad egg!);C程序中需要打印或显示程序中需要打印或显示ASCII表中非键盘字符时表中非键盘字符时 如如 pr
34、intf(Look 16 and x80!);注意:使用转义字符时,注意:使用转义字符时,后的八进制或十六进制数不应大于后的八进制或十六进制数不应大于char类型所允许的范围(十进制值类型所允许的范围(十进制值256)。)。2022-12-743字符串常量字符串常量(String)用用双引号双引号括起的一串字符(可以括起的一串字符(可以0个)个)I am a string 表示空字符串表示空字符串 引号只作为字符串开始和结束的标志引号只作为字符串开始和结束的标志 C语言内部语言内部自动自动用用0表示字符串的结束表示字符串的结束 除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地
35、方 A和和A是不同的是不同的字符字符 A65 01000001占占1字节字节 65 0字符串字符串 A占占2个字节个字节2022-12-744枚举枚举(Enumeration)常量常量一个被遗忘的角色一个被遗忘的角色从程序来窥其一斑从程序来窥其一斑enum weeks MON,TUE,WED,THU,FRI,SAT,SUN;enum weeks today;enum response no,yes,none;enum response answer;today =TUE;answer=yes;if(answer=yes)printf(Today is Tuesday.n);elseprintf
36、(Today is NOT Tuesday.n);2022-12-745宏常量宏常量(符号常量符号常量)一般用大写字母表示一般用大写字母表示#define 标识符标识符 字符串字符串 不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令#include#define PI 3.14159#define R 5.3int main()printf(PI*R*R=%fn,PI*R*R );printf(2*PI*R=%fn,2*PI*R );return 0;3.14159*5.3*5.32*3.14159*5.32022-12-746const常量常量 用用const修饰定义的变量为
37、常量修饰定义的变量为常量 声明格式声明格式:const 数据类型数据类型 常量名常量名=缺省值缺省值;注意注意:常量只能在定义时常量只能在定义时赋值赋值,而在程序的中间不能改变其值。,而在程序的中间不能改变其值。常数、常数、const常量常量、宏常量和枚举常量,都可以用来表示一个永宏常量和枚举常量,都可以用来表示一个永远不会改变的数。远不会改变的数。前者不建议直接使用,而用后三者代替前者不建议直接使用,而用后三者代替例如例如:const double PI=3.14159;float r,area;area=PI*r*r;2022-12-747逻辑逻辑(布尔布尔)型常量型常量 boolean
38、在程序控制中经常用到布尔常量。例如:在程序控制中经常用到布尔常量。例如:if(条件条件)动作动作1 else 动作动作2 布尔常量的值:布尔常量的值:true(真真)和和false(假假)。C语言中将语言中将布尔类型映射为数值类型布尔类型映射为数值类型:true 用用非非0的整数的整数表示表示 false 用用0表示表示 如:如:3+1=4 结果为结果为true,通常表示,通常表示1。int a=23 结果为结果为false,通常表示,通常表示0。2022-12-748变量变量l变量变量在程序执行过程中在程序执行过程中其值可以改变的量,其值可以改变的量,因此用来记因此用来记录运算中间结果或保存
39、数据。录运算中间结果或保存数据。l变量的声明:变量的声明:数据类型数据类型 变量名变量名1,变量名变量名2,变量名变量名n;决定分配字节数决定分配字节数和数的表示范围和数的表示范围合法标识符合法标识符short,int,long,float,double,char,unsigned 复合类型复合类型2022-12-749变量变量例例:int a,b;double data;编译时,对变量声明语句将根据其类型分配存储空间。编译时,对变量声明语句将根据其类型分配存储空间。变量的名实际上对应空间的地址,变量的值对应空间的内容。变量的名实际上对应空间的地址,变量的值对应空间的内容。在对程序编译连接时由
40、编译系统给每一个变量名分配对应的在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据内存地址,从该存储单元中读取数据。a:(2000)b:(3000)data:(4000)4字节字节8字节字节4字节字节2022-12-750变量变量例如:例如:short s;/给给s变量分配两个字节,占用变量分配两个字节,占用2000-2001单元单元 s=1234;图图3-1 变量与内存单元的映射关系变量与内存单元的映射关系2022-12-751变量的使用:变量的使用:先声
41、明,后使用先声明,后使用例例1:int student;stadent=19;2022-12-752变量的使用变量的使用例例2:float a,b,c;c=a%b;2022-12-753变量的声明位置变量的声明位置 变量定义位置:变量定义位置:一般一般放在函数开头放在函数开头int main()int a,b=2;float data;a=1;data=(a+b)*1.2;printf(data=%fn,data);return 0;变量定义变量定义可执行语句可执行语句2022-12-754 变量的初始化:声明变量的同时指定变量初值变量的初始化:声明变量的同时指定变量初值 格式:格式:数据类型
42、数据类型 变量名变量名=初始值初始值;不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数变量的初始化变量的初始化#include int main()char esc=a;int i;double eps=1.0e-5;printf(esc=%cni=%dneps=%lf,esc,i,eps);return 0;运行结果:运行结果:esc=ai=-858993460eps=0.0000102022-12-755例如:利用变量例如:利用变量t交换变量交换变量x和和y的值的值t=x;x=y;y=t;tyx 变量的值主要通过赋值运算改变。变量的值主要通过赋值运算改变。变量值的改
43、变变量值的改变2022-12-756使用变量要注意使用变量要注意 不要对变量所占的内存空间字节数想当然不要对变量所占的内存空间字节数想当然 用用sizeof运算符:返回操作数存储空间的大小运算符:返回操作数存储空间的大小 使用形式:使用形式:sizeof(类型名类型名)或或 sizeof(变量名变量名)结果为结果为表达式值所属类型表达式值所属类型或者或者类型类型占用的字节数占用的字节数 sizeof运算符也可以出现在表达式中。运算符也可以出现在表达式中。例如,例如,x=sizeof(float)-2;printf(%d,sizeof(double);注意!注意!2022-12-757为什么要用
44、为什么要用sizeof获得类型或获得类型或变量的字长?变量的字长?因为因为 同种类型在不同的平台其占字节数不尽相同。比如同种类型在不同的平台其占字节数不尽相同。比如int在在16位、位、32位和位和64位系统分别占位系统分别占2、4和和8个字节。个字节。现象与危害:现象与危害:在平台间移植时会出现问题,导致数据丢失或者溢出。在平台间移植时会出现问题,导致数据丢失或者溢出。解决方案:解决方案:用,并且只用用,并且只用sizeof获得字长。获得字长。2022-12-758变量的类型变量的类型 整型变量整型变量 定义形式:定义形式:int 变量表列变量表列;实型变量实型变量单精度单精度 定义形式:定
45、义形式:float 变量表列变量表列;具有具有67位有效数字位有效数字双精度双精度 定义形式:定义形式:double 变量表列变量表列;具有具有1516位有效数字位有效数字2022-12-759阅读程序,给出运行结果阅读程序,给出运行结果#include int main()long x,y,z;x=-0 xffffL;y=-0 xffL;z=-0 xffffffffL;printf(x=%6ld y=%6ld z=%6ldn,x,y,z);x=-0 xffff;y=-0 xff;z=-0 xffffffff;printf(x=%6ld y=%6ld z=%6ldn,x,y,z);return
46、 0;2022-12-760阅读程序,给出运行结果阅读程序,给出运行结果#include int main()short int x;unsigned y;long z;x=65535;y=65535;z=65535;printf(x=%dn,x);printf(y=%un,y);printf(z=%ldn,z);return 0;它们在计算机中用二进制表示如下:它们在计算机中用二进制表示如下:变量变量x 1111111111111111变量变量y 0000000000000000 1111111111111111变量变量z 0000000000000000 1111111111111111%
47、d为基本整型输出格式说明符为基本整型输出格式说明符%u为无符号基本整型输出格式说明符为无符号基本整型输出格式说明符%ld为长整型输出格式说明符为长整型输出格式说明符2022-12-761变量的类型变量的类型 字符型变量字符型变量 即可以存放字符型常量,也可以存放字符的即可以存放字符型常量,也可以存放字符的ASCII码码 定义方式定义方式:char 变量表列变量表列;字符变量字符变量char(ASCII码值在码值在0255之间)之间)与与int数据间数据间可进行算术运算可进行算术运算例例:a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G;/*s=33+71;*/没有没有字符
48、串变量字符串变量,用字符数组存放,用字符数组存放2022-12-762char型与型与int型之间的关系型之间的关系/小写字母转换为大写字母小写字母转换为大写字母#include int main()char ch=b;printf(%c,%dn,ch,ch);ch=b-32;printf(%c,%dn,ch,ch);return 0;b,98B,66 ch=b-(a-A);2022-12-763一个整型数据占一个整型数据占4个字节,而字符型数据只占个字节,而字符型数据只占1个字节(只能存个字节(只能存放放0-255范围内的整数),因此,在将整型数据以字符形式输出范围内的整数),因此,在将整型
49、数据以字符形式输出时,只取低字节中的数据作为时,只取低字节中的数据作为ASCII码字符输出。码字符输出。#include int main()int x;x=1348;printf(x=%cn,x);return 0;运行结果为运行结果为:x=D1348在内存中为:在内存中为:000000000100010000000101000000002022-12-764实型数据在内存中的存放形式实型数据在内存中的存放形式实型数据在内存中按数据的指数形式存储,一般分三个部分:实型数据在内存中按数据的指数形式存储,一般分三个部分:1)数符)数符(s):0代表正,代表正,1代表为负代表为负2)指数部分)指数
50、部分(e):存储科学计数法中的指数数据,并采用:存储科学计数法中的指数数据,并采用指数移指数移位存储位存储。n位指数位能表示位指数位能表示0-(2n-1),为了表示负指数,采用减个,为了表示负指数,采用减个偏移量,如减偏移量,如减(2n-1-1)来实现负指数的表示。而存储时则用实际指来实现负指数的表示。而存储时则用实际指数值加偏移量如数值加偏移量如(2n-1-1)来存入指数部分,这就是指数移位存储。来存入指数部分,这就是指数移位存储。3)小数部分)小数部分(f):存放数据科学计数法中的小数数字部分。:存放数据科学计数法中的小数数字部分。2022-12-7651)float遵从的是遵从的是IEE