第二章 数据描述与基本操作教学目的:程序设计是对数据进行不同的操作来解决实际问题的,通过该章的学习,使学生掌握程序中所用的数据类型有哪些?对这些数据的操作有哪些?各种操作对不同的数据类型运算后的结果是什么?为编程序中用到常量、变量、函数、表达式时打下一个好的基础,能用表达式表示要解决的问题。
重点与难点:变量定义,各种运算符的操作结果,输入与输出语句的合理使用,各种表达式值的判断,用表达式处理具体问题。
数据与操作是构成程序的两个要素。
程序中所用的数据和对数据的操作是编程序的主要内容,掌握了数据和对数据的基本操作,是编程序的基础,特别是求表达式的值,对程序执行结果和程序流程起着决定的作用。
2.1数据类型数据是程序的必要组成部分,也是程序处理的对象。
程序中使用“数据类型”的概念,主要是数据的存储形式和数据所参加的运算不同,程序中所用到的数据和变量都要归属于某一类型。
C 语言中数据类型介绍:⒈基本类型(整型、实型、字符型)⒉构造类型(数组、结构体、共用体、文件)⒊指针类型⒋空类型2.1.1数值的定点表示与浮点表示形式浮点数:看π的不同形式3.14159×100 3.14159e00.314159×101 0.314159e+131.4159×10-1 31.4159e-1同一个 π可用不同的形式表示,主要是小数点的位置在变化,即一个实数可分“尾数和阶码”两部分来表示,称为浮点数。
即 是实数在内存中的存储形式。
12、 –20,10 称为定点数,在计算机中的存储形式按字节用二进制形式存储。
左图为10的16位存储形式2.1.2字符型数据的表示和存储形式如: 'A','9' 为字符型数据,在内存中以ASCII 码代码存放(字符的ASCII 代码可查阅附录I ),例'a'的ASCII 码为97,则存储形式为: 与存放整数97一样,即字符型的数据在ASCII 码允许在范围内与整型数相同。
以下程序运行结果可说明问题:main(){char ch;ch=’a’;printf(“%d ,%c”,ch,ch);}输出结果为:97,a即字符型数据和整型数在一定范围内是通用的。
2.1.3数据的存储空间长度与取值范围C语言中不同的数据类型分配不同的长度(以字节为单位1字节存8位二进制)的存储空间。
分配如下:1字节字符型 (char) 2字节整型 (int)4字节长整型 (long) 单精度型(float )8字节双精度型(double)由于存储字节不同,所以取值范围就不同:int –32768~32767long –2147483648~2147483647float和double取值范围更大。
2.1.4带符号的数据类型与无符号的数据类型计算机内存中的正负数在存储时是通过最高位来表示的,如:(以8 位为例 )01101011 表示正数 10710100111 表示负数(补码)-89即负数在内存中以负数的补码形式存放。
正数的补码就是该数本身化为二进制数。
如何求负数的补码:先求该数的绝对值,化为二进制数;按位取反(1变0,0变1);再加1;如|-89|=89 89=( 01011001 )2取反后等于10100110加1 后变为10100111为补码。
有符号整型数的取值范围:两字节十六位二进制数最大数:0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=32767最小数:1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0= -32768(为负数的存储形式)大家计算一下为什么是-32768?无符号整型数的取值范围:对于无符号数来说,高位不再来表示整数的符号位,16位的二进制数全部用来存放整数,因此无符号数不会是负数。
这时:最大数:1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1=65535(不再代表-1,而是65535)最小数:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0=0程序举例:main() main(){char ch; {int a=-1;ch=0362;/*八进制数*/ printf("%d,%u\n",a,a) ;printf("%d \n",ch);} }输出结果为:-14 -1,655352.2常量和变量不同的数据类型既可以以常量形式出现,也可以以变量形式出现。
常量在程序执行期间不发生变化、具有固定值。
变量则其值可发生变化,其实变量对应的是内存中的某一存储单元。
2.2.1直接常量和符号常量直接常量就是程序中直接书写的常数:12 整型常量 12.0,13.56 实型常量 's','D','A' 字符型常量符号常量在程序中用名字代表的常量,需要由编译预处理和说明语句定义。
例:#define PI 3.1415926#define M 100PI与M就是符号常量。
const float N 356 ;说明语句 N是符号常量。
在程序的其它语句中用到PI ,M, N它的值就是对应的常数2.2.2直接常量的书写格式㈠整型常数(十进制、八进制、十六进制)0开头八进制 0x 0X 开头十六进制0254 089 0x1FF 20af12 与12L 加L为长整型,大小相同,但存储所占空间不同㈡实型常量 (小数形式和指数形式)34.5 .345 1e2 1.5e-3 e-3 1e-0.5㈢字符常量(用单引号括起来的字符)'A' , 'W' , '\\'代表字符\ , '\'不正确㈣转义字符(以\开头后跟一个字符代表控制字符)'\n' 表示回车换行 '\t' 表示跳格'\b' 表示退格 '\ddd' 表示3位8进制数所对应的字符'\xhh'表示2位16进制数所对应的字符㈤字符串常量(用双引号括起来的多个字符)"hello","12345","A"与'A'值相同,存储形式不同,前者2字节,后1字节。
2.2.3变量和对变量的赋值数据被存储在一定的存储空间中,数据的加工就是在它们所在的存储区与运算器之间传送过程中实现的。
在高级语言程序中,数据连同存储空间被抽象为变量。
变量有名字标识,即变量名,用字母等来表示,它代表某个存储空和所存储的数据,存储空间的数据就是变量的值。
赋值运算就是从运算器向变量所对应的存储单元传送数据。
用“=”表示赋值操作。
C语言中的“=”符号称为赋值运算,由赋值运算符组成的表达式称为赋值表达式,形式如下:变量名=赋值表达式赋值号的左边必须是变量名,即代表一个存储单元或是代表某个存储单元的表达式;赋值号右边必须是C语言中合法的表达式。
它的作用是把右边表达式的值计算出来后赋给左边的变量,即放入存储单元。
若定义了int a,b则a=10 b=a都是合法的赋值表达式。
若一个变量经过了多次赋值,则最后一次才是它的值。
赋值语句的注意事项:1.和数学中的“等于号”不是等同关系。
2.赋值运算的执行方向同右向左,执行为先计算再赋值。
3.赋值号连接的式子称为赋值表达式,如:a=3+5,赋值表达式的值等于赋值后左边变量中的值。
可写成连续赋值表达式:b=a=3=5 d=c=b=a=3+54.n=n+1数学式子无意义,但在程序中则有用的,是把 n的值增加1再放到n中,程序中可用来计数。
2.2.4变量的声明变量声明的意义C 程序中用到的变量都要声明它们属于哪一种类型。
即要明确指定变量的类型。
为什么呢?不同变量所占存储单元大小不同。
不同数据类型对应不同的取值范围。
不同数据类型对应一组允许的操作(运算)。
int 整型 float 单精度double 双精度 char 字符型2.2.5标识符标识符是给程序中处理的实体—变量、常量、函数、数组、结构体、文件等起名字的。
标识符定义的规则如下:由字母、数字及下划线组成,且第一个字符必须是字母或下划线。
area ,PI ,_int, a_array,s1234,P101p 都是合法的标识符;456P、cade-y、w.w、a&b都是不合法的标识符;C语言中规定,大写字母和小写母是两个不同的标识符,因此page与Page,p1与P1都是不同的标识符。
对标识符的长度(含字母、数字和下划线的个数)不同的系统也有不同规定,一般规定只识别前8个,即前8个字符相同就被认为是同一个标识符(如:abcdefgh1与 abcdefgh2认为是同一个变量名)。
关键字是C语言中规定的一批专用标识符,它们在程序中在专门的用处,不能用作它用,也就是用户再不能对它们重新定义。
这些关键字如下:case if for int double 等。
预定义标识符这种标识符在C语言中也有规定,它是库函数名或预编译处理命令等。
如:printf,define,scanf等。
这类标识符允许用户另作它用,但将失去系统规定的原意,鉴于这种原因,建议用户不要把这些预定义标识符另作它用。
主要是各种函数名(数学、字符、文件函数)。
用户标识符:由用户根据需要定义的标识符。
一般用来给变量、函数、数组或文件命名,是用户编程的关键(类似与数学中列方程解应用题时:设××是x;××是y)。
用户应遵守标识符命名的规则,尽量不要和关键字和预定义标识符相同,还应做到“见名知义”,增加程序的可读性,如果用户定义的标识符与关键字相同,编译时会给出错误信息;如果和预定义标识符相同,系统不报错,只是预定义标识符失去原来的含义,代之以用户确定的含义,也可能引起程序运行时的错误。
2.3运算符与表达式运算是对数据的加工,基本运算符是用简洁的符号记述,参加运算的对象称为操作数。
表达式描术了对哪些数据,以什么顺序以及施以什么样的操作,由运算符与运算量组成。
C语言中提供了丰富的运算符,能构成多种表达式,掌握了C语言中的表达式,及表达式值的计算方法是必需的。
C语言中的运算有13种:算术运算符:+ ,-,*,/,%,++,--关系运算符:>,<,= =,>=,<=,!=逻辑运算符:! ,&&, ||位运算符:<<,>> ,~,|,^,&赋值运算符: = 条件运算符: ? :逗号运算符: , 指针运算符: &,*求字节数运算符:sizeof()强制类型转换运算符: ( 类型说明符)分量运算符: . -> 下标运算符 [ ]学习运算符应注意以下几点:⑴运算符的功能是什么?⑵与运算量的关系(个数、类型)。