C语言课件:第三章 数据类型、运算符与表达式

上传人:cl****1 文档编号:570099528 上传时间:2024-08-01 格式:PPT 页数:68 大小:1.72MB
返回 下载 相关 举报
C语言课件:第三章 数据类型、运算符与表达式_第1页
第1页 / 共68页
C语言课件:第三章 数据类型、运算符与表达式_第2页
第2页 / 共68页
C语言课件:第三章 数据类型、运算符与表达式_第3页
第3页 / 共68页
C语言课件:第三章 数据类型、运算符与表达式_第4页
第4页 / 共68页
C语言课件:第三章 数据类型、运算符与表达式_第5页
第5页 / 共68页
点击查看更多>>
资源描述

《C语言课件:第三章 数据类型、运算符与表达式》由会员分享,可在线阅读,更多相关《C语言课件:第三章 数据类型、运算符与表达式(68页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章数据类型、运算符与表达式C C语言程序设计语言程序设计共 57 页 第 2 2 页3.1 C3.1 C语言语言的基本的基本符号符号1. C1. C语言语言的基本字符集的基本字符集l 数数 字字:0 1 2 3 4 5 6 7 8 9l 字字 母母:a b c z A B C Zl 运运 算算 符符:+ - * / % = = != = & | & | ( ) - . ! ? : , ; “ l 特殊符号:特殊符号:_(下划线下划线) 回车回车(r) 换行换行(n) 制表符制表符(t)ASCIIASCII字符集字符集 基本字符集基本字符集共 57 页 第 3 3 页名称名称2. C语

2、言语言的标识符的标识符基本标识符:变量名、函数名、文件名、基本标识符:变量名、函数名、文件名、 数组名、类型名数组名、类型名规则:字母或下划线开头,后跟字母、规则:字母或下划线开头,后跟字母、 数字或下划线组成。数字或下划线组成。call_n test39 _string1 abccall.n 39test -string1 c2.0 例例共 57 页 第 4 4 页auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort

3、 signed sizeofstatic structswitch typedef union unsigned voidvolatile while保留字(保留字(3232个)个)3. C语言语言的关键字的关键字用户不能用关键字作标识符!用户不能用关键字作标识符!共 57 页 第 5 5 页4. 常量常量在程序运行中,其值保持不变的量称为常量在程序运行中,其值保持不变的量称为常量。常量的表示方法常量的表示方法:数值常量数值常量 例如:例如:10,3 , 2.68等等符号常量符号常量 用一个符号代表一个常量用一个符号代表一个常量 必须必须先定义先定义后使用后使用,习惯用习惯用大写大写字母表示。

4、字母表示。例如例如: #define PI 3.1415926 main( ) float l,s,r=2; l=2*PI*r; s=PI*r*r; printf(“l=%d, s=%d”, l,s); 常用这种方式简化程常用这种方式简化程序调试,但是必须在序调试,但是必须在程序的开头定义要使程序的开头定义要使用的符号常量。称为用的符号常量。称为宏定义。宏定义。共 57 页 第 6 6 页5.5.变量变量在程序执行期间其值可以改变的量。在程序执行期间其值可以改变的量。l有关变量的规定有关变量的规定u 变量通过变量名标识,变量名和内存中变量通过变量名标识,变量名和内存中的存储单元相对应。编写程序

5、时通过变量的存储单元相对应。编写程序时通过变量名来存、取存储单元。名来存、取存储单元。u 变量必须先定义,后使用。变量必须先定义,后使用。变量变量memorya88 81000H1000H1001H1001H1002H1002H2552551212命名规则命名规则: 变量名由标识符表示。即:由变量名由标识符表示。即:由字母字母、数字数字和和下划线下划线三种字符组成,且第一个字符必三种字符组成,且第一个字符必须须为为字母字母或或下划线下划线。说明:说明: *变量要变量要“先定义,后使用先定义,后使用” 定义格式定义格式:类型说明符类型说明符 标识符标识符1, 1, , ,标识符标识符n n 例如

6、:例如:int x, y, z; float a, b, c, d; *选变量名时,要做到选变量名时,要做到“见名知义见名知义” 例如:例如:name , st_age , xm , nl , class , sum *变量的初始化变量的初始化 即在定义变量的同时为变量指定初值。即在定义变量的同时为变量指定初值。例如:例如:int a=2,b=30; float x=23.6,y,z;注意:不许对几个变量同时赋同一个初值。注意:不许对几个变量同时赋同一个初值。 如:如:int i=j=k=0;共 57 页 第 8 8 页 许多程序设计语言都把它们能处理的数据分许多程序设计语言都把它们能处理的数

7、据分成若干类,这些类就是数据类型。成若干类,这些类就是数据类型。 为什么要划分数据类型?为什么要划分数据类型? 不同类型的数据在计算机内表示不同;不同类型的数据在计算机内表示不同; 不同类型的数据能执行的运算不同;不同类型的数据能执行的运算不同; 计算机能处理的问题中的数据是广义的。计算机能处理的问题中的数据是广义的。3.2 C语言数据类型变量名代表内存中的存储单元,变量的类型决定存变量名代表内存中的存储单元,变量的类型决定存储单元的大小。储单元的大小。共 57 页 第 9 9 页 C语言数据类型语言数据类型: 整型整型 字符型字符型 单精度型单精度型 算术类型算术类型 实型(浮点型)实型(浮

8、点型) 基本类型基本类型 枚举类型枚举类型 双精度型双精度型 指针类型指针类型数据类型数据类型 数组数组 构造类型构造类型 结构体类型结构体类型 共用体类型共用体类型规定:在程序中用到的数据,必须指定数据类型。本章介绍本章介绍3.2.13.2.1整型数据整型数据1.整型常量的表示方法(三种)*十进制整数十进制整数 :由数字(由数字(0-9)和正负号表示)和正负号表示 例如:例如:123、-456、0 等等*八进制整数八进制整数:以数字以数字0开头,后面一串由八进制数字开头,后面一串由八进制数字 (0-7)组成)组成 例如:例如: 0123 即即(123)8 =( 83) 10 012 即即(1

9、2)8 =(10)10(123) 8=1 82+2 81+3 80 =( 83) 10*十六进制整数十六进制整数:以以0x或或0X开头,后面一串由十六开头,后面一串由十六进制数字(进制数字(0-9,a-f,A-F)组成)组成 例如:例如: 0x123 即即 (123) 16 =(291) 10 -0x12 即即 (-12) 16 =(-18) 10 0x2F 即即 (2F) 16 =(47) 10(2F) 16=2 161+15 160 =( 47) 10共 57 页 第 1111 页l整型变量分类整型变量分类共六种共六种基本整型基本整型短整型短整型长整型长整型无符号整型无符号整型无符号短整型

10、无符号短整型无符号长整型无符号长整型int int short int short int long intlong intunsigned intunsigned intunsigned short unsigned short unsigned longunsigned long在内存中占字节数与所选系统有关在内存中占字节数与所选系统有关(VC+6.0)占内存字节数占内存字节数4 42 24 44 42 24 42.整型变量VC+VC+规定:规定:shortshort型占型占2 2个字节,个字节, intint和和longlong都占都占4 4个字节。个字节。共 57 页 第 1212 页

11、l整型变量的整型变量的分类(分类(TC环境)环境)共六种共六种基本整型基本整型短整型短整型长整型长整型无符号整型无符号整型无符号短整型无符号短整型无符号长整型无符号长整型int int short int short int long intlong intunsigned intunsigned intunsigned short unsigned short unsigned longunsigned long 占内存字节数占内存字节数2 22 24 42 22 24 4共 57 页 第 1313 页l整型变量的定义整型变量的定义例:int i, j; long k, m; unsigne

12、d int x,y;格式:类型说明符格式:类型说明符 变量列表;变量列表;在在C语言中所有变量必须先定义后使用!语言中所有变量必须先定义后使用!既不指定既不指定既不指定既不指定signed,signed,signed,signed,也不指定也不指定也不指定也不指定unsigned,unsigned,unsigned,unsigned,则隐含为有符号(则隐含为有符号(则隐含为有符号(则隐含为有符号(signed)signed)signed)signed)共 57 页 第 1414 页 类型类型 类型说明符类型说明符 长度长度 数的范围数的范围基本型基本型 intint 4 4字节字节 -2-23

13、1312 23131-1-1短整型短整型 short short 2 2字节字节 -32768-3276832767 32767 长整型长整型 long long 4 4字节字节 -2-231312 23131-1-1无符号整型无符号整型 unsigned int 4unsigned int 4字节字节 0 042949672954294967295无符号短整型无符号短整型 unsigned short unsigned short 2 2字节字节 0 06553565535无符号长整型无符号长整型 unsigned long unsigned long 4 4字节字节 0 0(2 23232

14、-1-1) 思考:思考:j j、m m、x x 所占存储容量和取值范围?存储容量和取值范围?例:例: int i, j; long k, m; long k, m; unsigned int x,y;(VC+6.0环境环境)Vc+6.0和和tc环境环境是不同的是不同的#include“stdio.h”intmain()shorta=-12345,b=23456;longsum1;unsignedshortc=52800;unsignedlongsum2;sum1=b-a;sum2=c+b;printf(“sum1=%ld,sum2=%un”,sum1,sum2);return0;运行结果举例:

15、若sum1定义成short型,sum2定义成unsigeed short型,结果?#include“stdio.h”intmain()shorta=-12345,b=23456;shortsum1;unsignedshortc=52800;unsignedshortsum2;sum1=b-a;sum2=c+b;printf(“sum1=%d,sum2=%un”,sum1,sum2);return0;改为:若sum1定义成short型,sum2定义成unsigeed short型,结果?运行结果结论:由于结论:由于sum1超出超出了了short的范围的范围sum2超出了超出了unsigned s

16、hort的范围的范围出现了错误结果!出现了错误结果!3.数据在内存中的存放形式以整型数据为例(如,tc环境)定义inti;i=10;在内存中,存放情况(数值是以补码表示的)0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 010在内存中的存放-10在内存中的存放1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0int类型存储最小值1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-32768int类型存储最大值0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 132767如无符号整型数据:(如,tc环境)即定义unsignedinti;unsigne

17、dint最小值0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00unsignedint最大值1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 165535讨论:按无符号输出是65535按有符号输出是-1按八进制输出是177777按十六进制输出是ffff注意:如果vc环境就不是以上的结果了。因为,相同类型在不同的平台其占字节数不尽相同。sizeofsizeof的作用:的作用: 计算计算类型类型占用的字节数占用的字节数sizeofsizeof两种语法形式:两种语法形式:sizeof(sizeof(类型类型) )或或sizeof(sizeof(表达式表达式) )或或sizeo

18、f(sizeof(变量名变量名) ) 结果为类型或表达式值所属类型占用的字节数结果为类型或表达式值所属类型占用的字节数 C语言提供的语言提供的sizeof运算符查询所用编译系统对运算符查询所用编译系统对变量分配的空间。变量分配的空间。共 57 页 第 2020 页 在在在在VCVCVCVC的运行结果:的运行结果:的运行结果:的运行结果:#include main()printf(Data type Number of bytesn);printf(- -n);printf(char %dn, sizeof(char);printf(int %dn, sizeof(int);printf(sho

19、rt int %dn, sizeof(short);printf(long int %dn, sizeof(long);printf(float %dn, sizeof(float);printf(double %dn, sizeof(double);共 57 页 第 2121 页1. 实型常量实型常量 (实型常数不区分单精度和双精度)实型常数不区分单精度和双精度)实型常数不区分单精度和双精度)实型常数不区分单精度和双精度)l 有有两种表示形式:两种表示形式:十进制数形式:十进制数形式:由数字和小数点及正负号组成。由数字和小数点及正负号组成。 (注意:必须有小数点注意:必须有小数点) 例如:例

20、如:23.678 .678 23.23.678 .678 23.指数形式:指数形式:由数字、小数点、字母由数字、小数点、字母e或或E及正负号组成。及正负号组成。(注:注:e或或E之前必须有数字,且后指数必须为整数之前必须有数字,且后指数必须为整数) 例如:例如:3.5E-5 2e3 3.5E-5 2e3 E2 3.6e3.5 .e6 e E2 3.6e3.5 .e6 e 这些不合法!这些不合法!3.5乘以乘以10的的-5次方,次方,即即0.0000352乘以乘以10的的3次方,次方,即即2000对于超过有效数字位的数据,对于超过有效数字位的数据,系统存储时自动舍去。系统存储时自动舍去。3.2.

21、2 3.2.2 实型数据实型数据共 57 页 第 2222 页2.2.实型变量实型变量实型变量分实型变量分类类:单精度、双精度和长双精度型。:单精度、双精度和长双精度型。 实型变量的有关规则:实型变量的有关规则:类型名称类型名称类型说明符类型说明符类型说明符类型说明符长度长度长度长度取值范围取值范围取值范围取值范围有效数字有效数字有效数字有效数字单精度型单精度型单精度型单精度型floatfloatfloatfloat4 4 4 4字节字节字节字节10-10-10-10-38 38 38 38 1010101038383838 7 7 7 7位位位位双精度型双精度型双精度型双精度型doubled

22、oubledoubledouble8 8 8 8字节字节字节字节10-10-10-10-308 308 308 308 10101010308308308308 16 16 16 16位位位位长长双精度型双精度型双精度型双精度型long doubledoubledoubledouble16字节字节 10101010-4932 -4932 -4932 -4932 10101010493249324932493218-19位位位位实型变量定义实型变量定义实型变量定义实型变量定义 float a,b;float a,b; double c,d; double c,d; long double e,f

23、; long double e,f; 例如:输出实型数据例如:输出实型数据例如:输出实型数据例如:输出实型数据a,ba,bmain()main() float a; float a; /* /* 说明变量说明变量说明变量说明变量 a a为单精度型为单精度型为单精度型为单精度型 * */ / double b; double b; /* /* 说明变量说明变量说明变量说明变量 b b为双精度型为双精度型为双精度型为双精度型 * */ / a=12345.6789; a=12345.6789; /* /* 为为为为a a赋值赋值赋值赋值 * */ / b=0.1234567891234567899

24、e15; b=0.1234567891234567899e15; /* /* 为为为为b b赋值赋值赋值赋值 * */ / printf(a=%f,b=%fn,a,b); printf(a=%f,b=%fn,a,b); /* /* 输出变量输出变量输出变量输出变量a a、b b的值的值的值的值 * */ / 程序为单精度变量程序为单精度变量a和双精度变量和双精度变量b分别赋值,并没分别赋值,并没经过任何运算就直接输出变量经过任何运算就直接输出变量a,b的值。理想结果应该的值。理想结果应该是照原样输出,即:是照原样输出,即:a=12345.6789,b=0.1234567891234567899

25、e15但运行该程序,实际输出结果是:但运行该程序,实际输出结果是:a=12345.678711,b=123456789123456.800000a为单精度为单精度,只有只有7位有效位有效b为双精度为双精度,只有只有15位有效位有效共 57 页 第 2424 页注意注意: :实型数据应用中的误差问题实型数据应用中的误差问题 由于浮点型变量是由有限的存储单元组成,由于浮点型变量是由有限的存储单元组成,因此能提供的有效数字总是有限的。在有效因此能提供的有效数字总是有限的。在有效位以外的数字将被舍去,由此产生一些误差。位以外的数字将被舍去,由此产生一些误差。运算次数愈多,误差积累就愈大,所以要注运算次

26、数愈多,误差积累就愈大,所以要注意实型数据的有效位,合理使用不同的类型,意实型数据的有效位,合理使用不同的类型,尽可能减少误差。尽可能减少误差。3.2.3字符型数据1.字符常量 C语言中的字符常量是用单引号括起来的语言中的字符常量是用单引号括起来的一个字符。一个字符。例如:例如: a A $ ! 注注: a与与A是是不同不同的字符常量的字符常量 abc和和 a 都是字符常量都是字符常量2.转义字符:l 转义字符的概念:转义字符的概念:是一种特殊的字符常是一种特殊的字符常量,用于表示常用的特定的控制字符。量,用于表示常用的特定的控制字符。l 转义字符的表示转义字符的表示: : 用一个转义标识符反

27、用一个转义标识符反斜线斜线“ ”开头,后跟需要的转义字符。常开头,后跟需要的转义字符。常用的转义字符如下:用的转义字符如下:转义字符是特殊形式的转义字符是特殊形式的字符常量字符常量常用的转义字符:转义字符功能 n 换行换行 t 水平跳格水平跳格 b 退格退格 r 回车回车 f 走纸换页走纸换页 一个反斜线字符一个反斜线字符 单引号字符单引号字符 双引号字符双引号字符 ? 问号字符问号字符 ddd 到位八进制数表示的字符到位八进制数表示的字符 xhh 到位十六进制数表示的字符到位十六进制数表示的字符将当前位置移到下一行的开始将当前位置移到下一行的开始将当前位置移到本行的开始将当前位置移到本行的开

28、始说明:ddd 与与xhh 分别表示用八进制数或十六进制数分别表示用八进制数或十六进制数所表示的也是一个字符。所表示的也是一个字符。例如:例如: 101代表十进制的代表十进制的65,是字符是字符A。 x41代表十进制的代表十进制的65,是字符是字符A。 转义字符的使用转义字符的使用利用利用printf函数直接输出双撇号内的各个字符。函数直接输出双撇号内的各个字符。如:如:main( )printf( );屏幕输出结果为:屏幕输出结果为: 如:如:main( )printf(abcdnABC );屏幕输出结果为:屏幕输出结果为:abcdABC例:例:main()printf(ctlanguags

29、berCn); printf(istusef165x6c);屏幕输出结果为:屏幕输出结果为:C languageis useful(165) 8=1 82+6 81+5 80 =( 117) 10(6c) 16=6 161+12 160 =( 108) 106c转换为十进制为转换为十进制为108,是,是ASCII的的l165转换为十进制为转换为十进制为117,是,是ASCII的的u定义形式定义形式: char占存储空间占存储空间 :一个字符变量占一个字节一个字符变量占一个字节2. 字符变量字符变量char char a,b,a,b,c c,d,d; ;a=a=1 1 ; ;b=b=B B; ;

30、c=c=c c; ;d=d=nn 例:例:A A的的ASCIIASCII值为值为65 65 在内存中存储为在内存中存储为0 1 0 0 0 0 0 10 1 0 0 0 0 0 1在在在在ASCIIASCII范围以内范围以内范围以内范围以内, ,整型数据与字符型数据可以通用,整型整型数据与字符型数据可以通用,整型整型数据与字符型数据可以通用,整型整型数据与字符型数据可以通用,整型变量和字符型变量可以相互赋值,字符型数据可以直接与变量和字符型变量可以相互赋值,字符型数据可以直接与变量和字符型变量可以相互赋值,字符型数据可以直接与变量和字符型变量可以相互赋值,字符型数据可以直接与整型数据进行算术运

31、算。整型数据进行算术运算。整型数据进行算术运算。整型数据进行算术运算。整型常数整型常数65 65 内存中存储为内存中存储为( (如如TcTc环境环境2 2个字节个字节) )0 0 0 0 0 0 0 0讨论:字符变量在内存中的存储讨论:字符变量在内存中的存储共 57 页 第 3232 页main()main() char x; char x; int y; int y; x= x=A A; ; y=x+25; y=x+25; printf( printf(%c,%d,%c,%dn%c,%d,%c,%dn,x,x,y,y);,x,x,y,y); 例:例: 计算字符计算字符A与整型数据与整型数据2

32、5的和。的和。程序运行结果:程序运行结果:A,65,Z,90可见可见:字符型数据和整型数据是字符型数据和整型数据是通用的通用的.它们可以用字符形式它们可以用字符形式%c输出输出,也可以用整数形式也可以用整数形式%d输出输出.(注:要求值在注:要求值在0-127)在此范围内整型数据和字符型在此范围内整型数据和字符型数据可以通用!(标准)数据可以通用!(标准)共 57 页 第 3333 页main()main() char a,b,c;char a,b,c; int d; int d; a= a= 4343 ; ; b= b= x30x30 ; ; c= c= A A ; ; d=1089; d=

33、1089; printf(a=%c b=%c c=%d d=%cn,a,b,c,d); printf(a=%c b=%c c=%d d=%cn,a,b,c,d); printf(a=%d b=%dn,a,b); printf(a=%d b=%dn,a,b); 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1d d6565按字符输出按字符输出d按整数输出按整数输出c按字按字符和符和整数整数输出输出a例:例:运行结果运行结果:(43) 8=(35) 10,(30) 16=(48) 10共 57 页 第 3434 页3.3.字符串常量字符串常量字符串常量是字符串常量是字符串常量是字符串

34、常量是用用用用双引号双引号双引号双引号括起来的一个或多个字符。括起来的一个或多个字符。括起来的一个或多个字符。括起来的一个或多个字符。n n个字符组成的字符串常量个字符组成的字符串常量, , 占内存空间为占内存空间为 n+1 n+1 个字节。如个字节。如 china c ch hi in na a00字符串结束标记字符串结束标记用用00, ,“空空”字符表示字符表示例:例: a a 字符串长字符串长 1 1 This is C stringThis is C string 串长串长1616 (空格)空格) 串长串长1 1 (不含空格)不含空格) 串长串长0 0字符常量和字符串常量的区别:在程序

35、中,可以用字符常量或字符串常量表示单个字符,例如a,或“a”,两者的区别如下:(1)字符串a在内存中占2个字节,而字符a在内存中占1个字节。字符串a字符a(2)不能将字符串赋给一个字符变量。例:charch1,ch2;ch1=a;ch2=a;a0a共 57 页 第 3636 页 指出指出下列字符串的长度下列字符串的长度及输出内容及输出内容: 054 054 x56ta x56ta nabcb nabcb3 输出输出 ,5 输出输出 V a6 输出输出 cb十进制为86对应”V”ab0efgab0efgab011efgab011efg2 ab6 ab efg练 习3.3 3.3 运算符和表达式运

36、算符和表达式运算符运算符: : 描述各种操作的符号。描述各种操作的符号。3.3.13.3.1算术运算符和算术表达式算术运算符和算术表达式1.1.算术运算符算术运算符 2.2.算术表达式:算术表达式: 由算术运算符、常数、变量、函数和圆括号组成。由算术运算符、常数、变量、函数和圆括号组成。 注意:左右括号必须配对,多层括号都用圆括号表示。注意:左右括号必须配对,多层括号都用圆括号表示。 例如:例如:a+ b + a*b/c +2.83. 优先级:优先级:高于高于4. 结合性:结合性:“左结合性左结合性”或称为或称为“自左至右的结合方向自左至右的结合方向”即运算对象先与左边的运算符结合。即运算对象

37、先与左边的运算符结合。 例如:例如:a - b + c 注意注意: l在在“”运算中,若操作数均为整数,则运算中,若操作数均为整数,则执行整除运算,舍去小数部分。执行整除运算,舍去小数部分。例如:例如: 5/3=1 1/2=0 l%是取余数运算符是取余数运算符,只能作用于两个整数。只能作用于两个整数。运算结果的符号与被除数的符号一致。运算结果的符号与被除数的符号一致。“”运算不能用于运算不能用于float 和和 double型数据型数据 2; 5%-3=2; -5%3=-2 ; 而,而,5%3.0是不允许的。是不允许的。 例例例例: : : : 1010 / / 3 3 值是值是 3 3 11

38、11 / / 3 3 值是值是 3 3 1. 1. / / 2 2 值是值是 0.5000000.50000010.0 10.0 / / 3 3 值是值是 3.3333333.333333 1010 / / 5*35*3 值是值是 6 6 1010 / / (5*3)(5*3) 值是值是 0 0 10 10 % 3 3 值是值是 1 1 2 2 % 3 3 值是值是 2 21010 % 3 3 值是值是 -1-1 1010 % 3 3 值是值是 1 1-10-10 % 3 3 值是值是 -1-1注意:注意:%(取余)运算,(取余)运算,结果的符号与被除数的结果的符号与被除数的符号相同。符号相同

39、。共 57 页 第 4040 页例例: 将下列数学表达式将下列数学表达式: 写成符合写成符合C语言言规则的表达式如下的表达式如下:(a+b+c)/(sqrt(a)+b*( sin(x)+sin(y)+sin(z) 表达式必须书写在一行,其中表达式必须书写在一行,其中sqrt(a)和和sin(x)、sin(y)、sin(z)都是数学函数的引用都是数学函数的引用(详见附录详见附录E) ,表达式中用了三层括号,以保证表达式的运算顺序。表达式中用了三层括号,以保证表达式的运算顺序。 强调强调: 对对C语言表达式的理解和掌握,除了要严格遵循表达语言表达式的理解和掌握,除了要严格遵循表达式构成的规则,还要

40、加强对表达式含义的理解,掌握运算符式构成的规则,还要加强对表达式含义的理解,掌握运算符的优先级和结合规则。在此基础上才能灵活地运用表达式,的优先级和结合规则。在此基础上才能灵活地运用表达式,有效地对实际问题进行描述。有效地对实际问题进行描述。共 57 页 第 4141 页常用的标准数学函数 3.3.23.3.2赋值运算符和赋值表达式赋值运算符和赋值表达式1.赋值运算符(赋值运算符(=)“=”就是赋值运算符,它的作用是将一个表达式就是赋值运算符,它的作用是将一个表达式的值赋给一个变量。的值赋给一个变量。例如:例如:a=3(作用是把常量(作用是把常量3赋给变量赋给变量a)2.复合赋值运算符复合赋值

41、运算符复合赋值运算符:在赋值符复合赋值运算符:在赋值符“=”之前加上其它运算之前加上其它运算符符共有共有10种复合赋值运算符种复合赋值运算符 += ,-=,/, ,&, =, |=与位运算有关与位运算有关例如:例如:a+=3 a=a+3 x*=y+3 x=x*(y+3)3.赋值表达式赋值表达式定义:定义:由赋值运算符将一个变量和一个表达式连由赋值运算符将一个变量和一个表达式连接起来的式子接起来的式子形式:变量名形式:变量名=常量或表达式常量或表达式作用:将右边常量或表达式的值赋给左边的变量作用:将右边常量或表达式的值赋给左边的变量例如:例如:a=3 b=c+d 说明:说明:赋值表达式的值为被赋

42、值的变量的值赋值表达式的值为被赋值的变量的值例如:例如:a=b=c=6 (可以连续赋值可以连续赋值) a=(b=4)+(c=6) a=(b=4)*(c=6)赋值表达式中可以包含复合赋值运算符赋值表达式中可以包含复合赋值运算符 例如:若例如:若a=12,计算表达式计算表达式a+=a-=a*a,运算后运算后a的值的值? 第一步第一步:a-=a*a a=a-a*a=12-12*12=-132 第二步第二步:a+=-132 a=a+(-132)=-264 练习:练习:指出下列表达式运算后的指出下列表达式运算后的x值值 (设设x,a为整型为整型): 1. x=a=b=10 2. x=25%(c=3) 3

43、. x*=2+3 (设初值设初值x=10) 4. x/=x-(a%2) (设初值设初值x=10 ,a=5) 5. x*=x+=x-=x x=10x=1x=0x=50x=13.3.33.3.3逗号运算符和逗号表达式逗号运算符和逗号表达式1.逗号运算符逗号运算符:即:即“,”优先级:是所有运算符中级别优先级:是所有运算符中级别最低最低的的2.逗号表达式逗号表达式(用逗号运算符连接起来的表达式)(用逗号运算符连接起来的表达式) 形式形式:表达式表达式1 1,表达式,表达式2 2,表达式,表达式n n 求解过程:顺次求解表达式求解过程:顺次求解表达式1,表达式,表达式2 最后求解表达式最后求解表达式n

44、逗号表达式的值为:逗号表达式的值为:表达式表达式n n的值的值例如:例如:a=3*5,a*4 a=3*5,a*4,a+5 x=(a=4%3 , a+1, a*10)表达式的值是表达式的值是60,a的值是的值是15表达式的值是表达式的值是20,a=15x=10,a=1a=3*5是赋值表达式是赋值表达式共 57 页 第 4646 页 main( ) int a=3,b=4,c; c=(a+=b,a-b); b=b+a,c+a; printf(b=%d,c=%dn,b,c); 例例:阅读程序阅读程序程序运行结果:程序运行结果: b=11,c=3注意:表达式的值是注意:表达式的值是10,而赋而赋值表达

45、式值表达式b等于等于11a=a+b共 57 页 第 4747 页3.4.13.4.1不同数据类型数据间的混合运算不同数据类型数据间的混合运算整型和实型数据可以混合运算整型和实型数据可以混合运算.在在C语言中语言中,字符型数据可以与整型通用字符型数据可以与整型通用,因此因此,整型、实整型、实型、字符型数据间可以混合运算。型、字符型数据间可以混合运算。例如:例如:10+a +1.5-89.7* b 在运行时,不同类型的数据必须先转换成在运行时,不同类型的数据必须先转换成同一类型。同一类型。3.43.4数据类型转换数据类型转换转换形式:转换形式: 隐式转换隐式转换 (由系统自动进行)(由系统自动进行

46、) 显式转换显式转换 (强制类型转换)(强制类型转换)3.4.1隐式转换(隐式转换(不同数据类型的数据间的混合运算不同数据类型的数据间的混合运算) 隐式转换的转换规则:隐式转换的转换规则: int unsigned int long int unsigned long int double short , char float(1) float 型数据一律转换成型数据一律转换成double 型数据。型数据。(2) char 和和short int 型数据一律转换成型数据一律转换成 int 型数据型数据 以上两条转换原则说明:即使两个操作数类型相同,以上两条转换原则说明:即使两个操作数类型相同,

47、但只要它们同属但只要它们同属 char , short int 或或 float 类型,则转类型,则转换一定发生。换一定发生。形式形式竖直方向的转换表示一定要发竖直方向的转换表示一定要发生的转换;横向表示操作数的生的转换;横向表示操作数的类型转换的方向。类型转换的方向。共 57 页 第 4949 页若两个操作数类型不同,则按箭头所指的级别高低,由若两个操作数类型不同,则按箭头所指的级别高低,由低向高转换:低向高转换:例如:例如: 一个一个int型数据与一个型数据与一个double型数据运算,则直接将型数据运算,则直接将int型转换成型转换成double型。型。 若一个若一个int型与一个型与一

48、个long型数据运算,先将型数据运算,先将int型转换型转换成成long型。型。例:若有:例:若有: int i ; float f ; double d ; long e ;试判断表达式试判断表达式 3 +b +i*f - d/e 的类型的类型int unsigned int long int unsigned long int double 低低 高高short , charfloatdouble型共 57 页 第 5050 页3.4.2显式转换显式转换(强制类型转换)(强制类型转换)形式:形式: (类型名类型名)(表达式表达式)例如:例如:(double)(a+b),(int)c说明:说

49、明:()表达式要用括号括起()表达式要用括号括起例如:例如:(int)(x+y) ; 假设假设x是整型是整型,若要得到若要得到x/2的小数部分,应写为:的小数部分,应写为: (float)x/2 还是还是 float (x/2)()在强制类型转换时,得到一个所需类型()在强制类型转换时,得到一个所需类型的中间变量,原来变量类型没有发生变化。的中间变量,原来变量类型没有发生变化。例如:例如:float x=8.6 ; int y; y=(int)x ;它只对它只对x进行了进行了转换转换它将它将x/2之后再之后再转换成实数转换成实数X类型仍为类型仍为float型,型,x值仍值仍等于等于8.6【例例

50、】类型强转运算符类型强转运算符m/2 = 2(float)(m/2) = 2.000000(float)m/2 = 2.500000m = 53.53.5自增、自减运算符(、)自增、自减运算符(、)作用:作用:使变量的值增或减,如:使变量的值增或减,如: + + i , i (使用之(使用之前前,先使,先使i的值加(减)的值加(减)1)i + +, i (使用之(使用之后后,使,使i的值加(减)的值加(减)1) + +i 先执行先执行i=i+1,再使用,再使用i的值的值 i+ + 先使用先使用i的值,再执行的值,再执行i=i+1例如:例如:int a=1 , b; b=+a ; 若,若, in

51、t a=1 , b; b=a+; 说明:说明:(1)为单目运算符)为单目运算符(2)+ 、只能用于变量,而不能用于常量或表达式。、只能用于变量,而不能用于常量或表达式。 例如:例如:10,(,(x+y)+, +a, b+ 中合法的为:中合法的为:(3)自增、自减运算符为)自增、自减运算符为右结合性右结合性。 例如:例如:-n+ -(n+) 如:m=-n+;与m=-(n+);等价与m=-n;n=n+1;等价共 57 页 第 5353 页main() int i=3,j=3; i+; +j; printf(“i=%d,j=%d”,i,j);(4)单独作一个语句使用时,两种形式的结果一样。单独作一个

52、语句使用时,两种形式的结果一样。(5)当出现在其它表达式中时,两种形式结果不同。当出现在其它表达式中时,两种形式结果不同。main() int i=1,j=1,m,n; m=i+; n=+j; printf(i=%d,m=%dn j=%d,n=%d,i,m,j,n);共 57 页 第 5454 页i=2;k=i+ +i+ +i+;执行完分执行完分号再自增号再自增i=?k=?算一算?共 57 页 第 5555 页首页首页 上页上页 下页下页节节末页末页结束结束main()main()int a,b,sint a,b,s; ; a=5 a=5; ; b=5 b=5; ; s=s=a+b;a+b;

53、printf(printf( %d,%d,%dn%d,%d,%dn ,a,b,s);,a,b,s); s=s=( (a+a+) ) +b; +b; printf(printf( %d,%d,%dn%d,%d,%dn ,a,b,s);,a,b,s); s=s=+a+b;+a+b; printf(printf( %d,%d,%dn%d,%d,%dn ,a,b,s);,a,b,s); s=s=-a+b;-a+b; printf(printf( %d,%d,%dn%d,%d,%dn ,a,b,s);,a,b,s); s=s=a-+b;a-+b; printf(printf( %d,%d,%dn%d,%

54、d,%dn ,a,b,s);,a,b,s); s=s=a+b;a+b; printf(printf( %d,%d,%dn%d,%d,%dn ,a,b,s);,a,b,s); s=a+bs=a+b 优先级?优先级?s=s=a+ +ba+ +bs=s=a+ +ba+ +bs=a+(+b) s=a+(+b) 例:例: C编译系统在处理时尽可能编译系统在处理时尽可能多地(自左向右)将若干个多地(自左向右)将若干个字符组成一个运算符字符组成一个运算符5 5 106 5 107 5 126 5 115 5 11 5 5 10共 57 页 第 5656 页 作业作业 第三章全部第三章全部共 57 页 第 5

55、757 页3.6 3.6 位运算位运算( (自学自学) ) 位运算是针对二进制数的运算,通常只适用于整位运算是针对二进制数的运算,通常只适用于整数数据。数数据。 C C语言中提供的位运算符有:语言中提供的位运算符有: 、 、 & & 、 、1.1.按位取反运算符按位取反运算符形式:形式: A A功能:把功能:把A A的各位都取反,(即的各位都取反,(即0 0变变1 1,1 1变变0 0)例如:例如:int A=179int A=179A0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 1A 1 1 1 1 1 1 1 1 0 1 0 0 1 1 0 0共 57 页 第 5858 页2

56、. 按位与运算符按位与运算符 &形式:形式:A&B功能:对功能:对A的各位与的各位与B的对应位进行比较,如果两者都为的对应位进行比较,如果两者都为1, A&B对应位上的值为对应位上的值为1,否则为,否则为0。例如:例如:int A=179int A=179(二进制(二进制1011001110110011) int B=169int B=169(二进制(二进制10101001)10101001)A10110011B10101001A&B10100001共 57 页 第 5959 页3. 按位或运算符按位或运算符|形式:形式:A | B功能:对功能:对A的各位与的各位与B的对应位进行比较,如果两者

57、中有一个的对应位进行比较,如果两者中有一个 为为1,A|B对应位上的值为对应位上的值为1,否则为,否则为0。例如:例如:int A=179int A=179(二进制(二进制1011001110110011) int B=169int B=169(二进制(二进制10101001)10101001)A10110011B10101001A|B10111011共 57 页 第 6060 页4. 按位异或运算符按位异或运算符 形式:形式:AB功能:对功能:对A的各位与的各位与B的对应位进行比较,如果两者不同,的对应位进行比较,如果两者不同, AB对应位上的值为对应位上的值为1,否则为,否则为0。例如:例

58、如:int A=179int A=179(二进制(二进制1011001110110011) int B=169int B=169(二进制(二进制10101001)10101001)A10110011B10101001A&B00011010共 57 页 第 6161 页5. 左移运算符左移运算符 形式:形式:An ( 其中其中 n为一个大于为一个大于0的整型表达式)的整型表达式)功能:把功能:把A的值向左移动的值向左移动n位,右边空出的位,右边空出的n位用位用0填补。填补。 当左移时移走的高位中全都是当左移时移走的高位中全都是0时,相当于对时,相当于对A作作n 次乘次乘 以以2的运算。的运算。例

59、如:例如:int A=27int A=27(二进制(二进制0001101100011011)A00011011A形式:形式:An ( 其中其中 n为一个大于为一个大于0的整型表达式)的整型表达式)功能:把功能:把A的值向右移动的值向右移动n位,左边空出的位,左边空出的n位用位用0填补。填补。 相当于对相当于对A作作n 次除以次除以2的运算。的运算。例如:例如:int A=179int A=179(二进制(二进制1011001110110011)A10110011A300010110C C语言重难点讲座语言重难点讲座时间:本周六18:00点至20:00 地点:综合楼153教室内容:VC+6.0环

60、境调试程序、数 据定义、输入输出 讲座人:陈雪龙 共 57 页 第 6464 页在程序中不能改变其值的量在程序中不能改变其值的量包括包括: :整型整型( (如0,67,-2,0,67,-2,123123L, L,123123u,u, 0 022,22,0x0x1212) )默认为默认为intint实型实型( (如2.3,1.2e-5,2.732.3,1.2e-5,2.73F, F,2.732.73L L) )默认为默认为doubledouble字符型字符型( (如z,3,$,nz,3,$,n) )用用 开头的字符为转义字符开头的字符为转义字符, ,代表代表1 1个字符个字符字符串字符串( (如

61、UKM,1,5aUKM,1,5a) ) 常量常量常量常量(ConstantConstantConstantConstant)长整型长整型无符号整型无符号整型 八进制八进制十六进制十六进制单精度实型单精度实型长双精度实型长双精度实型十进制小数十进制小数指数形式指数形式十进制十进制共 57 页 第 6565 页变量的声明变量的声明 类型关键字类型关键字 变量名变量名; ;变量声明变量声明变量声明变量声明 使用变量的基本原则使用变量的基本原则使用变量的基本原则使用变量的基本原则变量必须先声明,后使用变量必须先声明,后使用变量必须先声明,后使用变量必须先声明,后使用所有变量必须在第一条可执行所有变量必

62、须在第一条可执行所有变量必须在第一条可执行所有变量必须在第一条可执行语句前声明语句前声明语句前声明语句前声明 声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要声明的顺序无关紧要 一条声明语句可声明若干个同类一条声明语句可声明若干个同类一条声明语句可声明若干个同类一条声明语句可声明若干个同类型的变量型的变量型的变量型的变量共 57 页 第 6666 页【例例】如何分离一个三位整数的如何分离一个三位整数的个位、十位和百位数字?个位、十位和百位数字? 如如153?153 % 10 = 3153 / 100 = 1(153/10)%10 = 5共 57 页 第 6767 页【例例】计算并输出一个

63、三位整数的计算并输出一个三位整数的百位、十位和个位数。百位、十位和个位数。 main()int x=153,a0,a1,a2;a2=x/100; /*计算百位数字计算百位数字*/a1=(x/10)%10; /*计算十位数字计算十位数字*/a0=x%10; /*计算个位数字计算个位数字*/printf(a2=%d,a1=%d,a0=%d,a2,a1,a0);运行结果本章常见错误小结1.2*r表达式中使用了非法标识符2.4ac省略了*运算符3.1.0/2.0+a-b/a+b使用”“和”“4.3.5%0.5对浮点数进行求余运算5.float(m)/2强制表达式的类型名未使用圆括号6.(a+b)+对一个算数表达式进行增1运算

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号