1、第3章 数据类型、运算符和表达式,主要内容:1. 数据类型 2. 常量和变量 3.基本数据类型:整型 、实型 、字符型 4. 最常用的运算符和表达式: 算术运算符和算术表达式、赋值运算符和赋值表达式,引 入,假设某任务中有如下数据需要处理:1024、65536、123.5、123.456789e10、a、“name“ 设计算法前,需要先定义数据结构:即如何在计算机中表示这些数据? 编程时,函数的说明部分就是对数据结构的描述,可执行部分是对算法的具体描述。那么,在C语言中如何描述数据结构呢? 数据类型 数据结构描述完毕,然后是算法的C语言描述了。算法是对数据处理过程的描述,数据处理过程许多基本操
2、作是如何实现的呢?运算符 和表达式,3.1 C的基本语法单位,1、字符集 character set 2、关键字 keyword 3、标识符 identifier标识符命名规则:(1)由字母、数字及下划线组成,且不能以字母开头。(2)不能与关键字同名(3)尽量“见名知义” 例如:下列标识符,是否合法?为什么? area if score student_no 2day month_3 int _sum no*3 &aa,3.2 常量和变量,例1:输入任一半径,计算球的体积。#define PI 3.1415926 /*定义符号常量PI */main( ) float r, v ; /*定义变量
3、 r、v*/printf(“n enter r:“); scanf(“%f“, ,由例题分析可知: 常量:在程序的运行过程中其值不能被改变的量。如程序中的3, 4 符号常量:用一个标识符代表一个有特定含义的常量。如 PI 变量:在程序的运行过程中其值可以被改变的量。如 r , v 提示:变量必须先定义,后使用,原因有两个:(1)系统根据变量的类型为其分配合适的存储单元。如 系统给 r , v 各分配大小为 4B 的单元(2)编译系统根据变量的类型进行语法检查。如 r %5 是非法的表达式,3.3 基本数据类型:整型、实型、字符型,主要掌握各种类型的常量表示、变量的定义、所占存储空间的大小、取值
4、范围,一、整型: 用于表示整数所占内存空间:随机器而异,一般微机上一个整型数据占 2B 的内存空间。整型的可用修饰符:short int long intunsigned int / unsigned short /unsigned long,整型变量的定义(或说明):如: int a, c, no; long s;unsigned x, y; 等 整型常量:decimal: 12 -3 0octal : 024 056 hexadecimal: 0x3A -0X34long int : 12L 0L 问题:要定义两个变量x 和y,分别用于存放数据1024 和 65536,如何确定x和y类型?
5、,分析:首先,要处理的数据为整型;其次,根据数据的大小确定其具体类型:1024可用int 型变量保存,65536必须用long int 型变量才能保存。 程序:main( ) int x; long y ;x=1024; y= 65536 ;printf(“n x=%d , y=%ld“ , x , y); 说明:若x,y 均定义为long 型,程序运行如何? 若x,y均定义为 int 型,程序运行结果如何?,二、实型,Float : 单精度浮点型 Double: 双精度浮点型 所占空间大小 : 在一般微机上,float 型数据占4B,double型数据占8B。当然double型数据的表示范围
6、大。 实型变量的定义:float r, v ; double z, a, x ;float result ; 等,实型常量:(1)小数形式: 可由正负号、小数点和数字 组成。如: 12.35 -78.09 0.789 .145(2) 指数形式: 用科学计数法表示的实数。如: 44e 3 0.34e12 问题:若程序重要处理的数据为:123.5 和 123.456789e10, 设该数据分别用变量a 、b 保存,试问a 、b的类型如何确定? 分析:首先该数据均为实型; 其次,根据数据的大小及精度,可确定a 为float型即可,b必须为double型。,程序如下: main( ) float a;
7、 double b;a=123.5; b= 123.456789e10 ;printf(“n a=%f , b=%f“ , a, b) ; 运行结果:a=123.500000, b=1234567890000.000000 若改为:float b; 运行结果如下:a=123.500000, b=1234567954432.000000,三、字符型 char,Size: 占1B,只能保存一个字符。其取值范围为:0255 字符常量:普通字符:用单引号括起来的一个字符,如 a f * # 2 转义字符:用单引号括起来的、以“开头的字符序列,如 n t 100 x10 字符常量的值是该字符的ASCII
8、码值(即该字符在你的机器中所用的字符集中的编码)如字符 0 的值是整数 48 字符串: 用双引号括起来的字符序列,如“a“ “$#%“ “123n“ “(空串)注:字符串存储时,系统自动在字符串的末尾加上字符串结束标记 0,比较字符常量a与字符串常量“a“ :a “a“a 0 字符变量的定义及使用:char ch1, ch2; /*定义两个字符变量ch1 ,ch2 */unsigned char ss; /*定义一个无符号字符变量ss*/,97,97 0,例3.5 定义两个变量c、d, 用于保存字符a 、b,然后按字符和数值两种形式输出变量c、d的值。main( ) char c, d ;c=
9、 a ; d=b ;printf(“n %c %c“ , c, d);printf(“n %d %d“ , c, d); Rusult:a b97 98 若将第三行改为:c=97; d=98; 结果如何?结论: 在字符的ASCII码(0255)内字符与整数可通用。,3.4 变量的初始化 (自学),如 int r=6; 等价于 int r ; r=6; 应用:编程时,当定义变量时就已知该变量的值,则可以使用初始化的方式给变量赋值。 注意:int i=j=k=0; 是错误的。正确的应为:int i=0, j=0, k=0;,3.5 运算符和表达式,运算符: 规定了对数据的基本操作。 主要掌握:各运
10、算符的功能、优先级和结合方向。 本章只介绍最常用的运算符:算术运算符、赋值运算符 及其表达式,3.5.1 算术运算符和算术表达式,1. 基本算术运算符和表达式:+ * / %如: 10%3 4/2 6+8 7/5 78-9特点:双目运算符,即要求有两个操作数。% 运算符要求两个操作数必须是整型数。如 8.4%4 是错误的。 其他的算术运算都是通过调用数学函数实现的,其对应的头文件是:math.h如 pow(x,y) 表示 xy,自增、自减运算符: + -功能:使变量自增1、自减1 例如:计算110的和。main( ) int n=0, j;for( j=1; j=10; j+)n=n+j;pr
11、intf(“n sum: %d“, n); 说明:j+ 等价于 j = j+1,同理,k - 等价于 k= k-1 自加、自减运算符的前缀和后缀用法的区别: 例如:main() int i=6,j=6,k=6, h=6,m,n,x,y;m=i+; n=+j; x = k-; y= -h;printf(“n i=%d, m=%d, j=%d, n=%d“, i, m, j, n);printf(“n k=%d, x=%d, h=%d, y=%d“, k, x, h, y);运行结果:i=7, m=6, j=7, n=7k=5, x=6, h=5, y= 5,结论:前缀 : n=+j; 等价于 j
12、=j+1; n=j; (j先加1,后参与表达式的运算)后缀 : m=i+; 等价于 m=i; i=i+1;(i 先参与表达式的运算,然后加1 ),3、算术表达式的计算:当一个表达式中包含多个算术运算符时,如何计算呢? 表达式的计算方法:按优先级由高到低进行,相同优先级的运算符按结合方向计算。例如计算: 4 + 5*8/10 12%5/2 优先级 : 先 + - 负号 ,后 * / % ,然后 + - 结合性:+ - -(负号) 自右向左;其他的,自左向右,算术表达式的书写,要求自学 注意:表达式中的符号均写在同一行中,不能有上标或下标。 合理运用括号,保证原数学表达式的运算顺序。,3.5.2
13、类型转换,1. 当参加运算的两个操作数类型不同时,先将“低”类型的数据转换为“高”类型,再计算。隐式转换(系统自动进行的转换) 类型高低:参见 p38 例如:计算表达式 2.5*4+12 - 1.5 2. :当需要将某数据转换成指定类型时使用强制类型转换。例如,函数 sqrt的原型:double sqrt(double)如果要计算整数 n 的平方根,应写为:root = sqrt( (double) n );,例3.8 含有牵制类型转换的表达式的计算。main() int a=2, b=3;float x=3.5, y=2.5, z;z=(float )(a+b)/2 + (int)x%(in
14、t)y;printf(“n %f“, z);运行结果: 3.500000,3.5.3 赋值运算符和表达式,赋值 :给变量提供数据的一种方法。 1. 赋值表达式: 变量 = 表达式 作用:先计算“=”右边表达式的值,然后将其送给“=”左边的变量。 如 area = r*r*3.14 s=0 n=n+2 优先级 : 比算术运算符低,仅高于逗号运算符。 结合性: 自右向左 若定义:int a=2; 则表达式 b=c=a+4 的计算过成为: 先计算:c=a+4 得该表达式的值为 6 ;然后计算:b=6 得该赋值表达式的值为 6。,复合赋值表达式:变量 op = 表达式等价于: 变量 = 变量 op(表
15、达式)例如 : k +=2 等价于 k=k+2x*= 3+6 等价于 x = x*(3+6) 3. 赋值运算中的类型转换:当赋值号“=” 右边表达式的值与“=”左边的变量的类型不同时,先将“=”右边表达式的值转换成“=”左边变量的值,然后再赋值。such as: int n=4; float s;s = n*5;result: float,3.5.4 逗号运算符,如: for( j=0,s=0,p=1; j10; j+)s + =j; p*=j; 逗号表达式的计算:自左向右依次计算各表达式 逗号表达式的值:最右边一个表达式的值(要求自学),作 业,上机练习:1 习题1、3、5、6、7 预习:第四章 顺序结构程序结构 要求明确: Getchar() putchar() scanf() printf() 的使用,