
程序设计初步2-11综述.ppt
73页第2章 数据类型、运算符与表达式 1 2 例3 求两个数的平均值 /*该程序求两个数的平均值,这是一个自定义函数示例程序*/ #include /*定义函数average( )*/ float average(float x, float y) {float aver; /*定义变量aver类型为单精度实型*/ aver=(x+y)/2; return(aver);/*返回aver值,通过函数average带回调用处 */ } void main() {float a, b, ave; a=6.5; b=4.2; ave=average(a, b); /*调用自定义函数average()*/ printf( “average=%f”,ave); /*输出结果*/ } 主函数定义区 函数定义区 3 问题:一个C++函数如何构成? q函数说明部分(函数头) + 函数 体 示例: {float aver; //定义变量aver为单精度实型 aver=(x+y)/2; return(aver); //返回aver值至调用处 } 说明语句:数据类型名、变量名、… 执行语句:表达式语句、函数调用语句、 复合语句、空语句、控制语句 重要成分:表达式(变量、常量、运算符) 示例 float average(float x, float y) 重要成分 •数据类型名、函数名、形式参数名 •问题:名字如何取?-关键字、标识符 4 2.1 C++的字符集和关键字(1) q字符集 由52个字母、10个数字、30个特殊字 符组成 所有C++程序(忽略换行符、制表符 、注释和字符串常量中的内容)都由 字符集中的字符按一定规则构成 5 2.1 C++的字符集和关键字(2) qC++标识符是满足如下条件的一串字符 由一个字母 ( a ~ z , A ~ Z ) 或下划 线 ( _ )开头; 其它部分可以由字母、下划线或数字(0~9)组 成; 只有前32个字符有效,大小写有别; qC++的63个关键字也是标识符,称为保留字 ,不能作其它用。
另外,C++还使用了一些 标识符作预处理命令、库函数的名字,称为 预定义标识符,可以被重定义,但不提倡 6 标识符——课堂练习 q挑出一个不正确的标识符 ABC abc a_bc ab.c q选择一个正确的标识符 %x a+b a123 test! q挑出错误的标识符 room31 _SUM student num1 Mr.Zhu _1_2_3 MyName myname my_name 2men 7 问题:以什么数据形式表示算法中 涉及的数据(实体、对象)? 学生人数 商品个数 商品价格 学生姓名边长值 角度值 分数 商品名称 正弦值 字符类型 整型 实型 数值类型 8 2.2 基本数据类型(1) q每个C++程序中的数据对象(如2、x1 、x1+2)都有确定的数据类型 qC++的数据类型包括基本数据类型和 复合数据类型 q基本数据类型有 整型、浮点型、字符型、布尔型 q不同数据类型有自己的取值范围和所 允许的操作(运算) 9 2.2 基本数据类型(2) q整型(可进行算术、关系、逻辑等运算 ) signed short int (简写为 short ) signed int (简写为 int ) signed long int (简写为 long ) unsigned short int (简写为 unsigned short) unsigned int (简写为 unsigned ) unsigned long int (简写为 unsigned long) 10 有符号数与无符号数举例 void main() {int i; unsigned j; i=50; j=50; i=i/2; /*25*/ j=j/2; /*32743*/ } 0111001111111111 -50的补码i,j / 2 1110011111111111 1110011111111110 i/2-25的补码 j/2 32743的补码/原码 11 2.2 基本数据类型(3) q浮点型(实型) float (浮点型) double (双精度型) long double (长双精度型) 均有符号 不允许的操作:取余%、位运算等 12 实型数据的舍入误差 q由于实型数据表示的有效数字有限,将有 效位以外的数字舍去造成误差 q举例 float a=123456.789e5, b; b = a + 20; /*b=12345678920?*/ printf("a=%f\nb=%f\n", a, b); a=12345678848.000000 b=12345678868.000000 13 2.2 基本数据类型(4) q字符型 char signed char unsigned char 实质是占一个字节的整型数(小整数 ) 允许的操作:和整型相同 14 2.2 基本数据类型(5) q布尔型 bool 值为true和false 可以当作整数用( true一般为1, false为0) 把其它类型的值转换为布尔值时,非 零值转换为true,零值转换为 false 15 注意:各类型所占字节数和具体计算机有关 类 型 符 号 关键字数的表示范围所占字节数 整 型 字符型实 型 有 无 [signed] int2-32768~32767 [signed] short 2-32768~32767 [signed] long4-2147483648 ~ 2147483647 2 unsigned [int] 0 ~ 65535 40 ~ 4294967295unsigned long unsigned short20 ~ 65535 float 43.4e-38 ~ 3.4e38 有double81.7e-308 ~ 1.7e308 有 unsigned char 1-128 ~ 127 无 [signed ] char 1 0 ~ 255 long double 163.4e-4932 ~ 3.4e4932 表以16位计算机为例 但总是 long型≥int型≥short型≥char型 long double型≥double型≥float型 16 2.3 变量与常量 程序运行过程中, 其值是否能被改变? 变量 是 常量 不是 17 常量和变量示例 #define PRICE 2.8 void main() { int num; float total=0; num =10; total = num * PRICE; printf("total=%f", total); } 常量 变量 18 q定义 程序运行过程中,其值不能被改变的量 q分类 整型常量 实型常量 字符型常量 布尔型常量(false,true) 符号常量:用一个标识符代表的常量 常 量 字面常量:从字面形式 即可判断 19 常量示例 #define PRICE 2.8 main() { int num; float total=0; num=10; total = num * PRICE; printf("total=%f", total); } 符号常量 total = num * 2.8; 字面常量 符号常量的定义格式 #define 符号常量 常量 20 符号常量 q习惯上用大写字母表示符号常量 #define PI 3.14 注意:在一个程序中不能对同一 个符号常量定义多次 如: #define PI 3.14 #define PI 3.141596 q使用之前必须预先定义。
21 例1 计算圆的周长和面积 #include void main( ) { int r=2; float s,l; l=2*3.14*r; s=3.14*r*r; printf("l=%f,s=%f\n",l,s); } 符号常量的优点示例 #define PI 3.14 PI PI 3.14159 √含义清晰 √一改全改 22 整型常量 q表示形式 十进制整数:由数字0~9组成,除0外不能 以0开始 八进制整数:以数字0为前缀,由数字0~7 组成 十六进制整数:以0X或0 x为前缀,由数字0 ~9、A~F(或a~f)组成 可以加整型后缀,无后缀时作为int类型数 据 12,30 √ 045 0123, 040 √ 039 0 x12A, 0X96 √ 23 用扩充的巴克斯范式表示整型常量 → [] | [] | [] → 0 | { } → 0 { } → 0 x { } | 0X { } → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 → 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | A | B | C | D | E | F → [ ] | [ ] → u | U → l | L 24 u指数形式:由整数(或小数)、e(或E)、可 选的正负号、整数顺序组成 q表示形式 十进制小数:由0~9和小数点(必须)组成, 整数和小数部分都可省略,但不能同时省略 举例:123.4e5表示123.4105 错例:,e1、12e、1.2e3.4、.e5、e 实型常量(浮点常量) 0.123,.123 123. 345e2 13.2E+2 .5e-2 v注意:e或E前面必须有数字,后面必须是整 数(可以带+、-) v一个实数可以有多种指数表示形式 举例: 1234. 可表示成: 1234e0 123.4E1 12.34 e2 .1234E4 1.234E3 可以加浮点后缀,无后缀时作为double类型数据 25 用扩充的巴克斯范式表示浮点常量 → [] [] | [] → [] . | . → e [] | E [] → + | → { } → f | l | F | L 26 q字符常量 u用一对单引号括起来的一个普通字符( 不包括‘和\)或转义字符(也称转义序列) 包括字符常量和字符串常 量 字符型常量(1) a,?,3,# √ abc,,\,啊 u转义字符是用一个转义标识\(反斜线 )开头的字符序列。
如:\n,\xab u转义字符主要表示难以用一般字符表 示的单个字节 27 用扩充的巴克斯范式表示字符常量 → ‘ ’ 注:不考虑宽字符 → 字符集中除‘ 和 \ 外的任意字符 | → | | → \ | \ " | \ ? | \\ | \ a | \ b | \ t | \ n | \ v| \ f | \ r → \ | \ | \ → \ x {} 28 转义字符 注意: 1) 转义字符多用于printf()函数中,而在scanf() 函数中通常不用 2) 转义字符常量只代表一个字符(一个字节) 3) 反斜杠后的八进制数可以不用0开头 4) 反斜杠后的十六进制数只能以小写字母x开头 ,不允许用大。
