03 数据类型、运算符与表达式.ppt_第1页
03 数据类型、运算符与表达式.ppt_第2页
03 数据类型、运算符与表达式.ppt_第3页
03 数据类型、运算符与表达式.ppt_第4页
03 数据类型、运算符与表达式.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据类型、运算符与表达式,郑明雄,主要内容,C的数据类型 常量和变量 整型数据 实型数据 字符型数据 变量赋初值 各类数据间的混合运算 算术运算符和算术表达式 赋值运算符和赋值表达式 逗号运算符和逗号表达式,C的数据类型,基本类型 整型、字符型、实型(单精度、双精度) 枚举类型 构造类型 数组、结构体、共用体 指针类型 空类型,常量,定义:在程序运行过程中,其值不能被改变的量称为常量。 常量类型 整型常量:12,0,-3 实型常量:4.6、-1.23 字符常量:a,d 常量一般从其字面形式即可判别。这种常量称为字面常量或直接常量。,例符号常量的使用,#define price 30 main

2、( ) int num, total; num=10; total=num * price; printf(total=%d,total); ,变量,定义:其值可以改变的量称为变量。 一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放变量的值。 变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。,变量名,变量值,存储单元,a,标识符的使用,符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符(identifier)。简单地说,标识符就是一个名字。 C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下

3、划线。,练习,判断下面列出的是否是合法的标识符 sum,-total, _class, student-name,lotus-1-2-3,int,dohn,¥123,33,3d64,ab,使用标识符应注意,sum和SUM是两个不同的标识符 有的系统(IBM PC)只识别前8个字符 注意做到见名知意,C语言对变量的要求,先定义再使用 每一个变量被指定为确定的类型,在编译的时候分配内存空间 编译的时候检查类型是否合法,整型常量,整型常量即整常数。 c整常数可用以下三种形式表示: 十进制整数。如123, -456, 0 八进制整数。以0开头的数是八进制数。如0123表示八进制数123 十六进制整数。

4、以0 x开头的数是十六进制数。如0 x123,代表十六进制数123,整型变量,数据在内存中是以二进制形式存放的。 如果定义了一个整型变量i: int i; /* 定义为整型变量 */ i=10; /* 给i赋以整数10 */ 十进制数10的二进制形式为1010,每一个整型变量在内存中占2个字节。,i,10,0,0,0,0,1,0,1,0,i,整型变量的分类,(1) 基本整型,以int表示。 (2) 短整型, 以short int表示,或以short表示。 (3) 长整型, 以long int表示,或以long表示。 整数的范围 P43,例 整型变量的定义与使用,main() int a,b,c

5、,d; /*指定a、b、c、d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12;b=-24;u=10; c=a+u;d=b+u; printf(a+u=%d,b+u=%dn,c,d); ,运行结果为 a+u=22,b+u=-14,例 整型数据,main() int a,b; a=32767; b=a+1; printf(%d,%d,a,b); ,运行结果为 32767,-32768,注意,一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。 在-2147483648+2147483647范围内,可以

6、将它赋值给一个long int型变量。 如果c版本short int与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。 unsigned int型,如12345u 在一个整常量后面加一个字母l或l,则认为是long int型常量。,实型数据实型常量的表示方法,实数(real number)又称浮点数(floating-point number)。实数有两种表示形式: (1) 十进制小数形式。 .123、 123.、 123.0、 0.0。 (2) 指数形式。 123e3代表123103。 不合法的表示,如e3、2.1e3.5、e3、 e,实型数据的存放形式,+,.314159

7、,1,数符,小数部分,指数部分,实型数据的分类,单精度(float型)、双精度(double型)和长双精度型(long double)三类。 floatx,y,(指定x、y为单精度实数) double z; (指定z为双精度实数) long double t; (指定t为长双精度实数),例,main() float a,b; a = 123456,789e5; b = a + 20 ; printf(%f,b); ,字符型数据字符常量,单引号括起来的单个字符, a,x,d,?, 特殊形式的字符的常量,使用,称为转意字符,例如n P48 表3.3,例 转义字符的使用,main() printf(

8、 ab ct derftgn); printf(htibbj k); ,字符的存储,字符型变量用来存放字符常量,只能放一个字符,字符变量的定义形式如下: charc1,c2; c1=a;c2=b; 将一个字符常量放到一个字符变量中,将该字符的相应的ASCII代码放到存储单元中。 例如字符a的ASCII代码为97,b为98,,例 向字符变量赋以整数,main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2);/*以字符形式输出*/ printf(“%d %dn”,c1,c2);/*转换为整数形式输出*/ ,运行结果: a b 97 98,例,m

9、ain() char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(%c%c,c1,c2); ,运行结果为 ab,字符串常量,字符串常量是一对双引号括起来的字符序列。如: 例如:“how do you do.”, “CHINA,a,123.45“ 输出一个字符串 如:printf(how do you do.);,练习,请判断下面的赋值是否正确 char c; c=a; c=a; c= CHINA,字符串结束标志,C规定以字符0作为字符串结束标志。0是一个ASCII码,C,H,I,N,A,/0,“CHINA”,C,/0,“C”,C,C,变量赋初值,

10、几种变量初始化方法: int a=3; /* 指定a为整型变量,初值为3 */ float f=3.56;/* 指定f为实型变量,初值为3.56 */ char c=a; /* 指定c为字符变量,初值为a */ int a,b,c=5; int a=3,b=3,c=3;不能写成:int a=b=c=3;,各类数值型数据间的混合运算,整型、实型、字符型数据间可以混合运算。 例如:10+a+15-87651234 *b,int,unsigned,long,double,char,short,float,低,高,举例,已指定i为整型变量,f为float变量,d为double型变量,e为long型,有

11、下面式子: 10+a+i*f-d/e,基本算术运算符,+(加法运算符,或正值运算符。如3+5、+3) -(减法运算符,或负值运算符。如5-2、-3) *(乘法运算符。如3*5) /(除法运算符。如5/3,-5/3) %(模运算符,或称求余运算符,%两侧均应为整型数据,如7%4的值为3)。 判断-7%-3 , -7%3 , 7%-3的值,算术表达式,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合c语法规则的式子,称c算术表达式。 运算对象包括常量、变量、函数等。例如,下面是一个合法的c算术表达式: a*b/c - 1.5 + a,运算符的优先级,和运算符的结合性(结合方向) P375

12、 自左至右(左结合) abc*d 自右至左(右结合) 三目运算符和除成员运算外的单目运算符 运算符的优先级 P376,强制类型转换运算符,利用强制类型转换运算符将一个表达式转换成所需类型。例如: (double)a (将a转换成double类型) (int)(x+y) (将x+y的值转换成整型) (float)(5%3) (将5%3的值转换成float型) 其一般形式为(类型名)(表达式) 注意,表达式应该用括号括起来。 (int)x+y (int)x(不要写成int(x),例 强制类型转换,main() float x; int I; x=3.6; i=(int)x; printf(x=%f

13、, i=%d“,x,i); ,运行结果如下: x=3.600000, i=3 x类型仍为float型,值仍等于3.6。,自增自减运算符,作用是使变量的值增1或减1, +i,-i(在使用i之前,先使i的值加(减)1) i+,i-(在使用i之后,使i的值加(减)1) i=3,则执行下面的赋值语句: j=+i;(i的值先变成4, 再赋给j,j的值为4) j=i+;(先将 i的值3赋给j,j的值为3,然后i变为4) i=3; printf(“%d”,+i); 输出“4”。 若改为printf(%d,i+);则输出“3”。,自增自减运算符注意,自增运算符(+)和自减运算符(-),只能用于变量,而不能用于

14、常量或表达式,如5+或(a+b)+都是不合法的。 +和-的结合方向是“自右至左”。 -i+ printf(%d,-i+),,自增自减运算符注意,i+j,是理解为(i+)+j呢? 还是 i+(+j)呢? 将解释为(i+)+j,而不是i+(+j) 应避免这样的写法,有关表达式求值顺序问题说明,在调用函数时,实参数的求值顺序,C标准并无统一规定。 i=3; printf(%d,%d ,i,i+) 在有的系统中,从左至右求值,输出“3,3”。 多数系统中对函数参数的求值顺序是自右而左所以上面printf函数输出的是“4,3”。 j = i+; printf(%d, %d, j,i);,赋值运算符,赋值

15、符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量,即前面必须是变量。 a=3 a=b+c 3a;,复合运算符,a+=3 等价于a=a+3 x*=y+8 等价于 x=x*(y+8) x%=3 等价于 x=x%3 x %= y+3 x %=(y+3) x = x %(y+3) (不要错写成x=x%y+3),10个复合赋值符,凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。c语言规定可以使用10种复合赋值运算符。 +=,-=,*=,/=,%=, =,a=b=5,例子,a=b=c=5 (赋值表达式值为5, a、 b、 c值均为5) a=5+(c=6) (表达式值为11,a值为11

16、,c值为6) 赋值表达式也可以包含复合的赋值运算符。如: a=3; 则a+=a- =a*a的值为:12 a=a+(a- =a*a),使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句、循环语句等)中,如: printf(%d,a=b),逗号运算符,用它将两个表达式连接起来称为逗号表达式,又称为“顺序求值运算符”。 逗号表达式的一般形式为 表达式1,表达式2, 表达式n 先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。,举例,a3; a=3*5,a*4 ; a的值为60 a=(3*5,a*4); a的值为12 逗号运算符是所有运算符中级别最低的,

17、逗号使用注意,请注意并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如 int a=1,b=2,c=3; printf(%d,%d,%d,a,b,c); printf(%d,%d,%d,(a,b,c),b,c); 则“(a,b,c)”是一个逗号表达式,它的值等于c的值。,sizeof运算符,sizeof运算符:用于了解一个变量或某种类型的量在内存中所占的字节数。它有以下两种用法: sizeof(表达式) 例如:int x=1; float y=5.0; printf(“%d”,sizeof(x+y); 结果为:8 sizeof(类型名) 例如: printf(“%d

18、”, sizeof(int) 结果为:2,程序的概述,程序应该包括数据描述(由声明部分来实现)和数据操作(由语句来实现)。 数据描述主要定义数据结构(用数据类型表示)和数据初值。 数据操作的任务是对已提供的数据进行加工。,5类C语句,控制语句 函数调用语句 表达式语句 空语句 复合语句,函数调用语句,由一次函数调用加一个分号构成一个语句 例如: printf(this is a c stateent);,表达式语句,由一个表达式构成一个语句。 a=3 是一个赋值表达式,而 a=3;是一个赋值语句。,复合语句, z=x+y; t=z/100; printf(%f,t); 最后一句的分号不能省,预

19、编译,预编译命令“include”将有关的“头文件” 包括到用户源文件中。 “stdio.h”文件。文件后缀“h” 是head的缩写,#include命令都是放在程序的开头,因此这类文件被称为“头文件” 。 #include 或#include studio.h“ studioh是standard input t=a; a=b; b=t; printf(“a=%d,b=%dn”,a,b); ,顺序结构的程序,输入输出函数,字符输入输出函数 putchar()和getchar() 格式输入输出函数 printf()和scanf()函数。,putchar函数,putchar函数的作用是向终端输出一

20、个字符:例如putchar(c);它输出字符变量c的值。c可以是字符型变量或整型变量。,#include main() char a,b,c; a=b;b=o;c=y; putchar(a);putchar(b);putchar(c); ,运行结果: boy,例子稍作修改,#include main() char a,b,c; a=b;b=o;c=y; putchar(a);putchar(n); putchar(b);putchar(n); putchar(c); putchar(n); ,运行结果: b o y,可以输出其他转义字符,putchar(101) (输出字符a) putchar

21、() (输出单引号字符) putchar(015) (输出回车,不换行,使输出的当前位置移到本行开头),getchar函数,此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。 getchar函数没有参数,其一般形式为getchar()函数的值就是从输入设备得到的字符 例4.2输入单个字符,#include main() charc; c=getchar(); putchar(c); ,getchar函数,getchar()只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。 putchar(getchar(); p

22、rintf( %c,getchar();,Printf函数,printf(“格式控制”,输出表) printf(%d, %cn,i,c) (1)“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息: 格式说明,由“%”和格式字符组成,如%d,%f等。其作用是将数据转换为指定的格式输出。 普通字符,即需要原样输出的字符。例如上面printf函数中双引号内的逗号、空格和换行符。 (2) “输出表列”是需要输出的一些数据,可以是表达式。,d格式符,用来输出十进制整数: %d,按整型数据的实际长度输出。 %ld,输出长整型数据。如 long a=135790; printf(%

23、ld,a);,o格式符(字母o,不是零),以八进制数形式输出整数。由于是将内存单元中的各位的值(0或1)按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数的一部分输出。例如: int a=-1; printf(%d,%o,a,a);,输出为 -1,177777,d,I: 输出带符号的十进制整数,用ld可输出长整型数据 o: 输出无符号的八进制整数,用lo可输出长整型数据 x,X: 输出无符号的十六进制整数,用lx可输出长整型数据 u: 输出无符号的十进制整数,用lu可输出长整型数据 c: 以字符形式输出一个字符 f: 以十进制形式输出单、双精度浮点数 e,E: 以指数(科学

24、记数法)形式输出单、双精度浮点数 g,G:选用%f或%e格式中输出宽度较短的一种格式,用大写G时,指数用大写表示 s: 输出以0结尾的字符串或数组 P77,可加在格式字符d、f、o、x、u前面 型如: m.nf、md m: 代表一个正整数,表示数据的最小宽度 .n: 代表一个正整数,表示小数点后面的位数 输出举例: 1.a=123;b=12345;printf(“a=%4d,b=%4d”,a,b); 输出: a= 123,b=12345, m时 按数据的实际位数输出。,附加格式说明字符,附加格式说明字符示例,例: j=586;y=3.1415; printf(“%5dn”,j); 输出: 58

25、6 printf(“%-5dn”,j); 586 printf(“%7.2fn”,y); 3.14 printf(“%-7.4fn”,y); 3.1415,printf函数说明(1),(1) 除了x,e,g外,其他格式字符必须用小写字母,如%d不能写成%d。 (2) 可以在printf函数中的“格式控制”字符串内包含第2章2.5节2.5.1段中的“转义字符”,如“n”、“t”、“b”、“r”、“f”、“377”等。,printf函数说明(2),(3) 以上述9个格式字符之一为结束,中间可以插入附加格式字符(也称修饰符)。 Printf(“c=%c f=%f s=%s”,c,f,s); (4)

26、如果想输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示,printf(%f%,10/3); 输出: 0333333%,scanf函数(格式输入函数),1. 一般形式 scanf(格式控制,地址表列) “格式控制”的含义同printf函数; “地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。,例4.9用scanf函数输入数据。 main() int a,b,c; scanf(“%d%d%d”,&a,&b,&c); printf(%d,%d,%dn,a,b,c); ,格式说明(1),(1) 对unsigned型变量所需的数据,可以用%u,%d或%o,%x格式输入

27、。 (2) 可以指定输入数据所占列数,系统自动按它截取所需数据。如,scanf(%3d%3d,&a,&b); 输入: 123456 系统自动将123赋给a,456赋给b。 scanf(%3c,&ch);,格式说明(2),(3) 如果在%后有一个“*”附加说明符,表示跳过它指定的列数。 scanf(%2d %*3d %2d,&a,&b); 如果输入如下信息:12 345 67 (4) 输入数据时不能规定精度,例如, scanf(%72f,&a); 是不合法的,不能企图用这样的scanf函数并输入以下数据而使a的值为1234567。1234567 ,scanf函数注意(1),(1) scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。scanf(%d,%d,a,b); (2) 如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。例如 scanf(%d,%d,&a,&b); 3,4 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论