




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计,主讲:计算机应用系,第2章 基本数据类型 运算符及表达式,2.1 C语言的数据类型 2.2 标识符、常量和变量 2.3 整型数据 2.4 实型数据 2.5 字符型数据 2.6算术表达式 2.7赋值表达式 2.8 关系表达式和逻辑表达式 2.9逗号表达式 2.10 位运算,2.1 C语言的数据类型,基本数据类型(VC 6.0),说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:,基本数据类型(Turbo C 2.0),整型,字符型,实型,有,无,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:,数据类型说明: 不同的数据类型所占用的存储空间、表示范围、其上的运算以及运算精度不同; 算法 + 数据结构 = 程序: 程序设计主要涉及数据结构和算法两方面的内容。数据结构包含数据的存储形式、数据间的逻辑关系以及定义在其上的运算三方面内容,是对数据的精确描述;算法是为解决一个问题而采取的方法和步骤,是对数据处理的精确描述。算法的设计和实现依赖于特定的数据结构。,2.2 标识符、常量和变量,一 、标识符 所谓标识符就是名字系统。C 语言的标识符分为两类:系统标识符和用户标识符。系统标识符也叫保留字,包括系统规定的32个关键字,如int、unsigned、extern、if、else、for、sizeof等,以及系统预先定义的具有特定意义的标识符两方面内容,如printf、scanf、define、getchar等。 用户标识符就是用户对程序中出现的变量、符号常量、函数、数组、文件名等实体所定义的名字,用户对这些实体命名时必须遵循标识符命名规则。,2.2 标识符、常量和变量,二 、常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。常量可以直接用一个字面值的形式来表示,也叫字面常量。C语言的常量分为: 整型常量: 12、0、-3 实型常量: 4.6、-1.23、0.314e1、5.6E2 字符常量:a、b 字符串常量:“I am a boy!” 在语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为: #define 标识符 常量表达式,如: #define PI 3.1415926 /定义符号常量PI void main() int r=1,s; s=PI*r*r; /合法引用,编译时用3.1415926替换PI PI=PI+1; /非法引用,不能改变其值 ,2.2 标识符、常量和变量,三 、变量 在程序运行过程中,其值可以被改变的量称为变量,也称内存变量。内存变量有两个要素: 变量名:每个变量都必须有一个名字变量名,变量的命名必须遵循用户自定义标识符命名规则。名字就是地址!好理解吗?别人如何找我们?人的名字、身份证号都是地址。便于理解,所谓变量名就是该变量在内存中的地址。 变量值:变量值存储在内存中,即该变量所对应的内存单元的内容。在程序中,通过变量名来引用变量的值,本质上就是通过地址来引用内存单元的内容。 在语言中,要求对所有用到的变量,必须是“先定义、后引用”。所谓“定义”,就是根据数据类型的不同,编译系统在内存中为其分配相应的单元(参见表2.1),“引用”就是引用该变量的值。,2.2 标识符、常量和变量,变量定义的一般格式: 存储类型 数据类型 变量名 = 初值 , 变量名 2= 初值 2 ; 在语言中,要求对变量的定义一般放在函数定义时的形参部分、函数体或复合语句的首部,也可以放在函数的外部。 在定义变量的同时进行赋初值的操作称为变量初始化。例如: float x, y ; /只定义不初始化,其值不确定 int i=1,j=2; /定义同时初始化 变量x、y、i、j的内存分配如图2.1 所示。,如:int, float,char,自己设定,满足标识符规定:字母、数字、下划线,且以字母或下划线开头。,;不可省,2.3 整型数据,一 、整型常量 1. 整型常量:即整常数,在语言中可用三种形式表示: (1)十进制(基数字09)。例如 10、36 、-26 (2)八进制(基数字07,以数字0开头)。 例如012、011、017 (3)十六进制(基数字09、a/Af/F,以数字0 +字母 x 开头)。 例如0x36 、0xaf、0xAB、0x38FB 2. 整型常量的后缀 “L”/“l”:类似于long 型数据,这些常量在内存中 占4 个字节。 “U”或“u”:表示无符号整型常数。 后缀“L/l”和后缀“U/u”可同时使用以表示无符号长整型数。,如 : 128L (十进制的128)、300000L (十进制的300000); 022L (十进制为18)、065L (十进制为53)、0300000L (十进制为98304); 0X22L (十进制为34)、0XAF5L (十进制为2805)、0X300000L (十进制为3145728)。 128u,0x128Au,0126u均为无符号数。 0xA5Lu、023Lu、0X1234Lu。,2.3 整型数据,二 、整型变量 1. 整型变量分类 整型变量的基本类型符为 int。根据有无符号,整型变量定义时有两个符号修饰符signed和unsigned,分别代表有符号整型和无符号整型变量;根据数值的宽度,整型变量定义时有两个宽度修饰符short和long,分别代表短整型(16b)和长整型(32b)变量。归纳起来C 语言共有六种整型变量(双括号表示可缺省): 有符号基本整型signed int 有符号短整型 signed short int) 有符号长整型 signed long int) 无符号基本整型 unsigned int 无符号短整型 unsigned short int 无符号长整型 unsigned long int,如 : int i=1,j=1,k; 定义了3个int 型变量i、j、k,各占用4个字节,其取值范围 -21474836482147483647(-231231-1)。变量i、j是定义的同时初始化,其值为1,k只定义但没有初始化,这时k的值Turbo C2.0环境下是一个随机值,不确定,在VC 6.0下为0xcccccccc。又如: short m,n; unsigned short a,b; short型变量m、n各占用2个字节16位,其取值范围为 -3276832767(-215215-1)。 Unsigned short型变量a、b各占用2个字节16位,其取值范围为 065535(0216-1).,思考:int a=20000,b=20000,c; c=a+b; c的值为多少? 如果c定义为long型是否能解决问题?,2.3 整型数据,二 、整型变量 2. 整型变量的存储形式 计算机中的数值是以二进制形式存储的,对于n位的整型数据,若为有符号数(int、short、long)则是以二进制补码形式表示的,最高位为符号位,1代表负,0代表非负,数值位只有n-1位;若为无符号数(unsigned int、unsigned short、unsigned long)则是以二进制原码形式表示的,数值位有n位。 有符号数在计算机中用补码表示,0和正数的补码和原码相同;负数的补码就是将该数的绝对值按位取反再加1。,-32768、0!对吗?为什么 ?,2.3 整型数据,二 、整型变量 3.类型匹配规则 我们知道,不同类型的整型变量的范围和占用的字节数是不同的,那么如何为整型变量赋值?变量是容器,一般情况下,一个整型常量,可以赋给能容纳下其值的整型变量。,例如, 宽度为16b的整型常量(-1515 -)或(016-)可以赋给宽度为16b或32b(-3131-)或(032 -)的整型变量; 宽度为32b的整型常量可以赋给宽度为32b的整型变量; 宽度为32b的整型常量赋给宽度为16b的整型变量时,从整型常量低位截取16b再赋给16b的整型变量。 具体匹配规则参见2.7.3小节赋值运算中的类型转换规则。 另外,在函数调用时,要求形参与实参的类型必须匹配,这时我们可以使用后缀。如形参为long int 型,在调用时实参必须用后缀“L/l”如:fun(12L)。,2.4 实型常量,一 、实型常量 实型也称为浮点型。实型常量也称为实数或者浮点数。在语言中,实数只采用十进制,有二种表示形式: 十进制小数形式及指数形式。 十进制小数形式:由数码09和小数点组成。例如: 0.0、25.0、5.789、0.13、5.0、300.、-267.8230 等均为合法的实数。注意,必须有小数点。 指数形式:由尾数、阶码标志和阶码三部分组成。尾数为实常数,阶码为十进制整常数。 其一般形式为: 尾数m+阶码标志E/e +阶码n,这三部分都不可缺省。其值为:m*10n.,如: 2.0E5、0.5e-7、-2.8E-2等都是合法的 小数点不能单独出现; 0. .0 . e或E的两边必须有数,且其后面必须为整数; 如: 6E0.2 e5 e/E两侧不能有空格,且尾数、阶码为常量; 0.5 E 3 ,(0.3+0.5)E(2+3) ,2.4 实型变量,一 、实型变量 实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型,了解就可以)三类。 VC6.0中浮点型数据所占的内存空间、数值范围及有效数字(7、16位)见下表:,2.4 实型变量,二、关于规格化数与输出精度: 对于给定数制N的任意一个实数,都可表示成形如:sa.b0b1bnNk的指数形式,称这样表示的数为规格化数。其中s表示符号,a为整数部分且0aN,a.b0b1bn为小数部分,N为该数制的基,k为指数。计算机内部都是二进制,所以二进制下规格化实数可表示为:s1.b0b1bn2k。 实数在内存中一律用规格化数形式存放,其存储格式由数符、阶码和尾数三部分组成。下图为 VC 6.0下实型数据存放形式。另外,由于实型变量是由有限的存储单元组成的,能提供的有效数字总是有限的,因此使用实型数据时存在一定的误差,实际中要注意。,如: void main() float a=12345678.123e5,b; double x=12345678.123e5,y; y=x+20; b=a+20; printf(“a=%.2f, b=%.2fn“,a,b); /float 型精度丢失 printf(“x=%.2f, y=%.2fn“,x,y); /double 保持精度 printf(“b=%e, y=%en“,b,y); /以指数形式输出时为规格化数 运行结果如下: a=1234567823360.00, b=1234567823380.00 x=1234567812300.00, y=1234567812320.00 b=1.234568e+012, y=1.234568e+012 Press any key to continue,2.5字符型数据 1.字符常量 定义:用单引号括起来的单个普通字符或转义字符.,如 101 -A 012 -n 376 - x61 -a 60 -0 483 -(),例: A-101-x41-65,如 A65, a97, 048 , n10,如 a A ? n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例(ch2_001.c,ch2_004.c) main() printf(“101 x42 Cn“); printf(“I say:“How are you?“n“); printf(“C Programn“); printf(“V C6.0“); ,运行结果:(屏幕显示) A B C Isay:”How are you?” C Program V C6.0,语言程序设计 第二章语法要素,字符常量的值:该字符的ASCII码值,字符常量与字符串常量不同,2.字符串常量 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志,例: char ch; ch=“A”;,3.字符变量,字符变量用类型说明符char进行定义,如: char ch1=a,ch2; /定义两个字符变量ch1、ch2, 同时对ch1初始化 每个字符变量被分配一个字节的内存空间来存储字符的ASCII值,字符常量可以是任意一个ASCII码字符。变量的值就是相应字符的ASCII码值,如字符A的存储形式是01000001(二进制),即十进制的65, 所以也可以把它们看成是整型量。语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值(=127)。在输出时,允许把字符变量按整型形式输出,也允许把整型量(=127)按字符形式输出。字符型数据可以参加简单的运算。,如: char ch1=A,ch2=D,ch3;ch4=8; ch3=ch1+1; /A+1=65+1=B,ch3为字符B ch3=ch2-ch1+1; /ch2-ch1+1=68-65+1=3+1=4,ch1至ch2之间字符的个数 ch3=ch1+32; / ch2+32=65+32=97=a,将大写字母转换为小写 ch3=ch4-0; /将字符8=38转换为相应的数字8 ch3=0+6; /将数字6转换为相应的字符6=36 ch3=ch1ch2; /关系运算:ch1ch2 6568,条件为真ch3为真(1) ch3=ch1 /逻辑运算:ch1、ch2为真,所以ch3 为真(1),4.变量应用举例:,main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data); ,例2 float a,b,c; c=a%b; /Illegal use of floating point in function main,例1 int student; stadent=19; /Undefined symbol statent in function main,例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; int x=y=z=1;,例 float a; a=111111.111; /* a=111111.1*/ double b; b=111111.111; /* b=111111.111*/,例 /*ch2_003.c*/ #define PRICE 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); ,运行结果: total=37.500000, ch1=d,2.6 算术表达式,一 、语言运算符概述 语言的运算符十分丰富,除控制语句和输入输出函数外,其他的操作都作为运算符处理。语言运算符主要分为以下10类: 算术运算符七种。 关系运算符六种。 逻辑运算符三种。 位操作运算符六种。 赋值运算符:十一种。 条件运算符一种 逗号运算符 指针运算符二种运算。 求字节数运算符 (sizeof)。 特殊运算符:有括号(),下标,成员(,.)等几种。,%(取余)(注意:取余运算的操作数只能是整数,且结果的符号与前一操作数的符号相同),二 、算术运算符和算术表达式,1、 运算符 +(加):3+4、 +3 -(减):3-5、 -5 *(乘):3*5 /(除):5/2、5.0/2 (注意,此二种形式,结果不同),5%3的值为2; -5%3的值为-2; 5%(-3)的值为2; -5%(-3)的值为-2; 12.3%3 若a%b 的结果为0,则有a能被b整除,2.6 算术表达式,2、算术表达式 用算术运算符和括符将操作数连接起来的式子。 优先级:() *、/、% +、- 结合性:从左至右; 表达式的值: 数值型(int、long、unsigned、float、double);,例如: 已知: float a=2.0; int b=6,c=3; 求解: a*b/c-1.5+a+fabs(-5)=?,float a=2.0; int b =6,c =3; a*b/c -1.5 +a +fabs(-5),12.0/3,4.0 - 1.5,2.5 + 97(int),99.5 + 5,104.5(double),思考 int a=1,b=2; 表达式a/b+3的结果是多少? int a=10000,b=30000; 表达式a+b的结果是多少? 如何修改?,等价于:j=i;i+; 所以i的值为4,j的值为3,等价于:i+;j=i; 所以i的值为4,j的值为4,(1) i=3; j=i+; (2) i=3; j=+i;,3、自增与自减运算符 (+ 、-), +i,-i:使用之前使i的值增1(或减1);, i+,i-:使用之后使i的值增1(或减1);,分析下面几种情况中i与j的值:,当+、 -不与其他运算符混合使用时,+i与i+都等价于 i=i+1, -i与i-都等价于 i=i-1,如:i = 2; j = -i+; 求执行完这两句后i与j的值分别是多少,特殊的:设i=3,j=4,k=i+j, k= i= j=, 结合性:自右至左。,分析:“+”与”-“是同优先级,且都高于“=” 按结合规则,等价于:j=-(i+); 结果:i的值为3,j的值为-2。,再看几个例子: 如:设i=3,k=(i+)+(i+)+(i+) k= i=,9,6,如:设a=3,b=(a+)+(a+) b= a=,6,5,设a=3,b=(+a)+(a+) b= a=,8,5,设a=3,b=(a+)+(+a) b= a=,8,5,设a=3,b=(+a)+(+a) b= a=,10,5,7,4,4,int i=3; Printf(“%d%d%d”,i,+i,i+);,再看以下例子,如有定义: int i=3,j ; 分别执行以下语句,仔细分析、体会。 j=(i+)+ (i+); j=(+i)+(+i); j=i+i+(+i); /在Turbo C2.0 中i为4,j 为12! j=(+i)+(+i)+(+i);/在Turbo C2.0 中i为6,j 为18! 第一条语句好理解,两个(i+)都是先引用后自增,所以j 的值为6,i为5; 第二条语句好理解,两个(+i)都是先自增后引用,所以j 的值为10,i为5; 第三条语句先执行i+i为6 ,6+(+i),先自增后引用,所以j 的值为10,i为4(VC6.0); 第四条语句先执行(+i)+(+i),结果i为5,j 为10,再执行10+(+i),先 自增后引用,其结果是i为6,j为16(VC6.0下.),对于自增自减应注意: 在同一个表达式中避免对同一个变量多次使用,使用时应加括号以增加程序可读性; 编译环境不同结果可能不同。本书的编译环境为VC6.0。 对计算机等级考试笔试部分,应以Turbo 2.0 环境为准,机试以VC 6.0环境为准!,2.7 赋值表达式,1、赋值运算符 = (执行功能:把=右边的表达式的值,存入=左边的变量对应的存储空间,即给此变量赋值) 3=2+1 a=a+2 2、赋值表达式:用赋值运算符将变量和表达式连接起来的式子 形式: = 求值规则: 将“=”右边表达式的值赋给左边的变量。 优先级: !算术关系& |赋值 结合性:自右至左; 表达式的值:被赋值变量的值。 例如:(1) x=(y=12)/4 (2) x=y=12/4 (3) x=(y=12/4) (4)(x=y)=12/4,2.7 赋值表达式,3、复合赋值运算符 *=、/=、 %=、 +=、 -=, =, 后a=-8。表达式a+a的值为8 ,a-=8后a= -4,a+= - 4后a = - 8,2.7 赋值表达式,4、赋值运算中的类型转换 如果赋值运算符两边的数据类型不相同,系统把赋值号右边的表达式类型自动转换成左边变量的类型,然后再赋值给变量。 通常情况下,实型赋予整型,舍去小数部分;整型赋予实型,在整型数后增加小数部分(小数部分的值为0),数值不变,以浮点形式存放;字符型赋予整型,字符型为一个字节(高位为0),而整型为2字节或4 字节,故将字符的ASCII码值放到整型量的低八位中,高位为0。整型赋予字符型,截取低八位赋予字符量。 对于整型数据,存在有符号数和无符号数以及数据长度的不同,赋值时要注意:,1、赋值号左边变量的长度等于或小于其右边数据类型的长度,以补码形式原样赋值或截取后赋值。,2、赋值号左边变量的长度大于其右边数据类型的长度,以补码形式原样赋值或赋值后符号扩展。,如有定义: unsigned short a; /宽度16b short b= -1; /宽度16b,存储形式: 0xFFFF int c= -65538; /宽度32b,存储形式: 0xFFFEFFFE unsigned int d= 65535;/宽度32b,存储形式: 0x0000FFFF, 则有: a=b; /原样(0xFFFF)赋值,a 的值为65535 a=c; /截取c(0xFFFFFFFE)低16位,为0xFFFE,a为65534 b=c; /截取c(0xFFFF0000)低16位,为0xFFFE,b的值为-2 b=d; /截取d(0x0000FFFF)低16位,为0xFFFF, b的值为-1,如有定义: unsigned short a=65535; /宽度16b,存储形式: 0xFFFF short b= -1(0xFFFF); /宽度16b,存储形式: 0xFFFF int c; /宽度32b unsigned int d; /宽度32b ,则有: c=b; /符号扩展,c的值为-1,存储形式:0xFFFFFFFF d=b; /b的存储内容(0xFFFF)原样赋给d,d的值为65535 c=a; /a 的存储内容(0xFFFF)原样赋给c,c符号扩展,值为-1 (0xFFFFFFFF) d=a; /a原样赋值,d值为65535,2.8 关系表达式和逻辑表达式,一 、语言的逻辑值 我们知道,无论是关系表达式和逻辑表达式,其值都是“逻辑型”的,即真或假。但是,C 语言没有专门的逻辑型数据,所以,对于关系表达式和逻辑表达式,C语言约定:其值为逻辑“真”时,用数值“1”表示,其值为逻辑“假”时用数值“0”表示。关系表达式、逻辑表达式的值1、0当然可以参与其它种类的运算,例如算术运算、逻辑运算等。 同时,C语言规定:表达式的值“非0”表示逻辑真,“0”表示逻辑假。由此可以说,C语言的所有表达式都有一个逻辑值“真”或者“假”,都可用来构造一个“条件表达式”,以构成灵活多变的选择、循环条件,这也是C语法的自由之处。,1、6种关系运算符:= = != 2、关系表达式:用关系运算符将表达式连接起来的式子 优先级: (= )( = != ) 结合性:自左至右; 表达式的值:若为真,则结果为1; 若为假,则结果为0。,35 值为: 32 值为: 设x=-2; -3x-1 值为: 设x=1; 2x4 值为:,例如,二、关系运算符和关系表达式,求如下关系表达式的值:,0,0,0,1,算术运算符优先级高于关系运算符 3+(43)*4 值为: 3+43*4 值为,3,1,注意,不能用数学里习惯的关系运算符连用表示区间关系!,2、逻辑表达式:用逻辑运算符将表达式连接起来的式子 优先级: ! & | 结合性:自左至右; 表达式的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年康复医疗器械市场前景展望:需求升级创新产品驱动行业变革报告
- 2025年特色乡村旅游民宿集群项目投资风险评估报告
- 2025年生态旅游项目可持续发展规划与管理最佳实践报告
- 2025年广播媒体融合发展中的新媒体内容监管与合规报告
- 2025年智能建筑系统集成节能降耗技术路线图深度解析报告
- 2025年工业互联网平台可信执行环境(TEE)在智能制造中的应用研究报告
- 2025年机械制造企业服务化转型对市场策略的影响报告
- 江苏扬州市宝应县公车公司招聘笔试题库带答案详解
- 数据中心合作协议的主要内容
- 解析卷四川绵阳南山中学双语学校7年级数学下册第四章三角形章节练习试题(解析版)
- 2025版房地产抵押按揭续贷合同
- 小儿上呼吸道感染
- 2025年CCAA国家注册审核员考试(产品认证基础)历年参考题库含答案详解(5卷)
- 2025-2030中国骨科手术导航机器人医生培训体系与手术量增长关联报告
- 2025年秋季小学四年级上册语文教学计划及教学进度表
- 北京市西城区2024-2025学年七年级下学期期末道德与法治试题(解析版)
- 苏州工业园区外国语学校语文新初一均衡分班试卷
- 《智能建造概论》高职完整全套教学课件
- 2025-2026小学学年度第一学期教学工作安排表:启智育心绘蓝图筑梦前行谱新篇
- GB/T 30807-2025建筑用绝热制品浸泡法测定长期吸水性
- 无限极中医秋季养生课件
评论
0/150
提交评论