1、数据及其表示方法;数据的基本运算;基本输入输出。,第二章 基本程序设计,编制程序之前,首先要具备一些基础知识。 程序主要描述:,以上三个问题是程序设计的最基本问题!,2.2 数据类型,数据是对客观事物特征的符号化表示,客观事物不同,表示的方法也不同(人数用整数表示,圆面积用小数表示,灯的状态用开关表示,信件要用文字表示),计算机的处理方法也不同,因此根据程序处理的数据对象,应规定数据的类型。,数据类型不同时:, 数据的外部表示方式和内部存储方式不同; 表示的范围和精度不同; 对数据的处理方式不同。,C语言的数据类型,数据类型,基本类型,构造类型,数 组结构体 struct联 合 union枚举
2、型 enum,指针类型,空类型 void,整 型 int 字符型 char 实型(浮点型),单精度 float 双精度double,基本数据类型所占内存的字节数和取值范围见p20表2-1,2.2 常量(Constant)及其类型,常量的概念,在程序中不能改变的量。常量的类型由数据的外部表现形式确定,不占用内存,程序运行时直接出现在运算器中。,常量的外部形式及其确定的类型, 整型常量,根据数表示的范围可以有长整型和一般整型,用来表示十进制、八进制、十六进制整数。其中八进制、十六进制不能有符号。,进 制 表示举例 范 围 字节数 十 进 制 2304 -32768 +32767 2 八 进 制 0
3、4400 0 0177777(65535) 2 十六进制 0xaa00 0x0000 0xffff(65535) 2,进 制 表示举例 范 围 字节数 十 进 制 -21234l -231 +231-1 4 八 进 制 04400l 0 037777777777 4 十六进制 0xaa00L 0x0000-0xffffffff 4,一般整型的表示,长整型的表示, 实型常量(只有十进制),实型(浮点型)常量:具有一定精度的量。两种表示方法:,小数表示法:一个小数点、符号和至少一位数字。,-2.0 1. 0.11113 -15.,指数表示法:,规则:nem 表示 n10m,小数部分,整型常量或小数
4、形式表示的实型常量。,指数部分,两位整数。,n决定精度, m决定范围。两种表示法一般精度为7位 ; 取值范围为10-3810+38 ,当超过范围时称为“溢出”。,-1.23e2 0.123456E+3 -1e+7 0.123e-4,-123.0 123.456 -10000000 0.0000123,-123 123.456 -107 0.123 10-4,小数法,指数法, 字符常量:单引号 定界的一个字符。,表示ASCII 字符集(见p316)中的一个字符。字符有一个整型值,即该字符的 ASCII 码值。如:a 、 ! 。, 字符串常量:双引号 “ 定界的字符序列。,以字符的ASCII码值的
5、二进制形式存放于内存,系统会在最后一个字符后加 NULL(0 ASCII 码值为 0),标志字符串的结束。,如:“I am a student” ”HEFEI ” ”hello”,内存:,注意:a 和 ”a” 的区别?,a,“a”,97,内存,内存, 符号常量:用一个标识符代表一个常量。,如:#define PI 3.14159 在第五章函数 5.7 编译预处理”一节中详细论述。,2.3 变量(Variable)及其类型, 变量的概念 在程序中可以改变的量。,变量特征: 变量有名,用标识符命名; 变量有类型; 变量有地址。,变量对应于内存中某一地址下的几个单元,变量名为引用变 量的标志。变量的
6、类型确定变量在内存中所占单元的数量。变量的地址通过运算符&获得。,内存,int a;,a 变量的引用标志&a 对应a的地址。,整型变量占两个内存单元。,变量必须先说明后使用!说明的目的是确定变量的名字和类型。, 变量的定义(说明),格式:type 变量名表;,类型说明符,包括基本类型说明和修饰说明。,基本类型:int、char、float、double,修饰类型:unsigned /signed、long /short,int a,b,c;,2.3.2 整型变量, 有符号整型变量说明(内存中以二进制补码形式表示,见p23例),说明符 字节数 范围 int (整型) 2 -32768 +3276
7、7 (p25图2-4)short int (短整型) 2 -32768 +32767long int (长整型) 4 -2147483648 +2147483647,例:short a, b, c; int e, f, g; long _qs,num;,用“,”分隔的多个变量名。,注意:超过整型范围,数据溢出l2-2.c(见p26图2-7),char,float, 无符号整型变量说明,2.3.3 字符型变量,说明符 字节数 范围 char 1 -128 +127 unsigned char 1 0 255,例:char c1, c2 ; c1=a; c2=b ;,注:字符型和整型之间数据可以通
8、用: 把一个字符放到一个变量中,实际上是把该字符的ASICC值放到内存单元中.,c1,c2,01100001,01100010,97,98,A+10+101+c1=65+10+65+97=237,说明符 字节数 范围 unsigned int 2 0 65535 unsigned short 2 0 65535 unsigned long 4 0 4294967295,例: unsigned d,e,f;,例1:,例2: 见p27 例2.3 l2-3.c,2.3.4 实型变量(内存中以指数形式存储,见P26图2-8),说明符 字节数 范围 精度float 4 10-38 10+38 7位dou
9、ble 8 10-30810+308 16位, 实型变量包含精度和范围两个概念。, 超过精度位数后的数值不确定。,float a; a=1.2345678910;, 超过范围溢出(Overflow)。,超出精度部分,不准确。,float a,b,c; a=1.234e+20; b=2.345e+21; c=a*b;,超出1038,溢出。,例:float x, y ; double a, b;,当运算结果大于10+38称 为上溢,系统出错。 当运算结果小于10-38称 为下溢,当0处理。,2.4 运算符与表达式,程序重要的一点是对数据按照算法进行处理(运算)。C 语言运算功能强大,提供了多种运算
10、符 。数据通过运算符连接的式子称为表达式,表达式根据运算对象(常量、变量、数组、函数)及运算关系得到一个值。,运算符的种类(按功能):(1) 算术运算符 (2) 关系运算符 (3) 逻辑运算符(4) 赋值运算符 (5) 逗号运算符 (6) 条件运算符(7) 指针运算符 (8) 位操作运算符 ,注意: 表达式的运算方向(结合性) 运算符的优先级别 数据类型的转换,按运算对象的个数:(1)单目运算符(2)双目运算符(3)三目运算符,2.4.1 算术运算符和算术表达式,功能:完成各种类型数据的加、减、乘、除及求余数运算。, 双目算术运算(两个运算对象参加的运算),只能对整型或字符型数据运算。 余数符
11、号与被除数相同。,注意:乘号不能省略!,-11%5 = -1,-11%(- 5) ?,例:5/2.0=2.500000 而:5/2=2,自加、自减运算(单目运算),说明: 只能用于变量运算且对象只能是一个变量。, 前置是先自加(减),后运算,后置则是先运算,后自加(减)。,2+; /* Error !*/,int i, x; i=5; x=i+;/* x=i;i=i+1;*/ i=5; x=+i;/* i=i+1;x=i;*/, 算术表达式 用算术运算符和括号将运算对象连接起来、符合C规则的式子。例:见p30 例2.5,例:int i, x, y;i=5;x=-i+; /* x=-(i+) *
12、/y=-+i; 运算结果:x=-5, y=-7, i=7, 自加(减)运算具有右结合性。,2.4.2 赋值运算符和赋值表达式,1. 简单赋值运算符和表达式,格式: 变量=表达式; /* 将表达式的值赋给变量*/,例2:int b;b=3+2; /* 说明后赋值。*/,说明: “=”是赋值运算符(动词); 赋值运算的左值只能是变量。,a=a+2; iCount =(a=5)+(b=8);,a+2=a; /* Error ! */,int a=2.5 ; /* 2 a */, 赋值号两边类型应该一致,如不一致,以变量类型转换。, 赋值运算具有右结合性。,A=5+(c=6),例1:int a=2;
13、/* 说明语句中赋值。*/,2. 复合赋值运算符,说明: 运算对象的左值只能是一个变量。,(a+2)+=5; /*Error !*/, %= 运算的对象,必须是整型。,例:a+=a- =a*a,a-=a*a,a=a-a*a=12-144=-132,a+=-132,a=a+(-132)=-132-132=-264, 运算具有右结合性。,a=12,2.4.3 变量赋值和类型转换,1. 变量赋值 对变量说明的同时给变量赋值,初始化例如:int a=3,b=5,c=6;float x=3.2,y=0.75;,2. 赋值过程中变量类型的转换(1) 自动转换, 赋值号两边类型不同,转换原则:就左不就右。,
14、int a; float b; b=2/3; /* 0b 0.0*/ a=5.0./2.0; /*2.5a 2 */,将数据或计算结果存入变量变量赋值 例如:int x,y,z; x=17; y=6; z=x*y;, 运算对象类型不同,转换原则:就长不就短。以保证不降低精度为原则。,char,int,long,double,float,2*16.0+15.0,double,float,double,运算时可以实行类型的强制转换, 格式:,(类型说明符) (表达式),例如: (float) a(int)(x+y),(2) 强制类型转换,先将低等类型转换为高等类型后再进行运算,运算结果取高等类型。
15、等级原则如下:,注:无论是自动转换还是强制转换,只对当前表达式起作用(临时性转换),不会改变说明语句定义的变量类型。,main() float x=3.6; int i;i=(int)x; printf(“x=%f,i=%d n”,x,i ); ,输出结果: X=3.600000,i=3,运算的优先级,表达式的运算是分步骤进行的。当一个表达式中出现多种 运算时,存在优先级的问题。,算术运算的优先级:,+、- -、(type),*、/、%,+、-,=、+=、 -=、*=、/=、%=,相同优先级,结合顺序从左到右!,3*4+6/a- 6%3,相同优先级,结合顺序从右到左!,a=b=c+=2,可以用( )调整优先级。,c=c+2 b=c a=b, 思考题:,C语言中的数据表示方法与数学中数的表示方法的异同点。其主要的区别在哪里。, 作业题:,p43习题 一、选择题 110 。 二、填空题 16。 三、程序运行题 1、3、6, 实 验:,预习:实验指导 p913。 实验2:顺序结构程序设计 。,