版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章数据类型、运算符、表达式C语言的词法记号C语言的数据类型常量与变量各类数值间的混合运算运算符和表达式本章介绍C语言的基础,主要包括:-数据类型-运算符和表达式均是程序设计的基本知识为什么讨论这些知识?通常程序要对数据进行操作处理:-处理的对象是 -通过运算符和炭达则行操作【例】计算圆的面积,半径为5cm。 程序如下:main()float area ;;area=3J4*;printf (M%fn area);运算结果是输出圆的面积:78300000程序中用到的数据:area 5、3J4对数据进行的运算:分析:涉及数掲类型的基本知识计算机操作处理时,要完成以下工作:在内存中给半径r和运算
2、结果area开辟存储空间,存 放它们的值。应该留多大的地方来存放它们的值?数据5和3.14与r、area不同,它们是在编写程序 时就给出确定的值,在运算过程中不会改变。这样的数 计算机怎么处理?对整数5和小数3.14 ,计算机存放时是否有区别?3.1 C语言的词法记号引例:/*求得并输出两数相加之和*/#include int Add(int a, int b)return (a b);void main( )/*主函数 */int x, y, sum 0;scanf(%d%d, x, y);/*输入两个整型数x和y*/sum Add(x, y);/*调用函数Add求x和y相加之和*/prin
3、tf(sum = %dn, sum);/*输出x和y相加之和*/C语言的词法单位可分成6类:k关键字(Keyword)又称为保留字(32个)见P365附录B- c语言预先规定的具有固定含义的一些单词 女口:数据突型修饰符int,控制语return等2、标识符(Identifier)-系统预定义标识符,main, pr intf x include等-用户自定义标识符,Add, x, y等3、运算符(Operator)-3单种,详见P365附录B4、分隔符(Separator)-空格、回车/换行、逗号等5、其它符号 1、大花括号“ ”和“”通常用于标识函数体或者一个语句块 -“/*”和“*/”是
4、程序注释所需的定界符-u# 等6、数据(Data)-变量(Var iable)-常量(Constant)1、关键字:又称保留字,指具有特定含义、专门用作系统的 特定成分的一类标识符。不能用作一般标识符,即不允许用作 变”或函数名等。标准C语言中共有3 2个关键字,按用途分为4类:数据类型:in char int等存储类:如auto return等流程控制:如if else switch等运算符:sizeof注意关键字C语言的关键字都是小写的。例如else是关键字,但ELSE就不是关键字关键字:auto break casecharconst continue default dodouble
5、else enumexternfloat for gotoif int long register return short signed sizeof static struct switch typedef union unsigned void volatile while2、标识符定义:用来标识变量、常量、函数等的字符序列组成:-只能由字母、数字、下划线组成,且第一个字母必须 是字母或下划线-大小写敏感 -不能使用关键字长度:最长32个字符命名原则:-见名知意-不宜混淆女口 I与I丄o与0例:判断下列标识符号合法性sum Sum MQJohn day Date 3days studen
6、t_name #33 lotus_l_2_3 char ab above $1233.2 C的数据类型数据是操作的对象,数据类型 救 刑 是数据的外在表现形式,常见雅生 类型如下:(数值类型基本类型I实型字符类型char短整型short整型irrt长整型long单精度型f I oat双精度型doub I eC类 型厂数组结构体struct 构造类型共用体union、枚举类型enum指针类型空类型void数据类型决念一定义类Stypedef1.2.3.数据占内存字节数数据取值范围可进行的操作3. 2.1基本数据类型一一整型U整型数据的分类:大的方面分有符号数(signed)和无符号数(unsig
7、ned)两种 类型。又根据整型数据在内存中所占的字节数(或者根据整型数据能 表示的数的范围大小)分为:基本型短整型长整型i ntshort int long int 这样一共组合成6种.2、整型数在内存中的存放和表示范!不同的编译系统为整型数据分配的字节数是不相同的,Turbo C 2.0为一个int型数据在内存中分配2个字节的存储单元。 VC+ 6. 0则分配4个字节。3岂数类型所占位 数定义类型字表示数的范围基本型16int-32768 +32767符短垂型16short int -32768 +32767号长at型32long int a (231-1 )夭墓本型16unsigned i
8、nt0 65535符短垂型16unsigned short0 65535号长垂型32unsigned long() (232J)3、整型数据的溢出“溢出”是指运算结果过大,而超出了表示范围的一种错 误状态。C编译程序不检测这种错误。例整型数据的溢出说冃#include void main()int a,b;a=32767;b=a+1; printf(“d,%dnab);数值是以补码表示的。i nt 型范围-3276832767,力”发生“溢出” O 改变办法:预先定义b为long类型3. 2. 2基本数据类型一实型数据仁实型(浮点型)程序中有两种表示法十进制小数形式:.12323. 1(2)指
9、数形式:123e31.234e34(e前必须有数字,e后指数必须为整数)规范化的指数形式:在字母e (或E)之前的小数部分中,小数点左边 应有一位(且只能有一位)非零的数字.例如:123.4561.23456e3称为“规范化的指数形式”。2.实型数据的类型单精度实型数据float,分配4丄!双精度实型数据double,分配yte3.实型数据在内存中的存放形式系统把一个实型数,分成小数部分和指数部分,分别存放采 用规范化的指数方式示,如:+0.123456J-2 |丿数符小数指数符号指数VY类型类型符Byte绝对值的范围有效数字单精度型f loa t4-3.4X10-37 3. 4X103867
10、位双精度型doub1e8_仁 7*10-307r. 7X103081516位小数部分指数部分4、实型数据的误差实型数据只能精确表示有限位。当实数真值超出表示法精度时,系统将进行四舍五入保留相应的有效数字。例浮点型数据的舍入误差a=12345678848.000000#include void main() float a,b;a = 123456.789e5;b=12345678848.0000003. 2. 3基本数据类型 字符型数据97字符型:char如:一般用8位来存放一个字符如:普通字符 A 存放的是该字符的ASCII码值(即整数) 可把字符型看作一种特殊的整型例如:字符变量cl存放字
11、符5,,是存放97011000013. 3常量和变量主要内容:-常量-变量3.3.1常量在运行程序的过程中值保持不变的量1整型常量(1)表示方法-十进制:09 :如 100-8 0+123-八进制:0-7,以0开头。如010024 0100 073-十六进制:0-9, AF/af,以Ox或0X开头如0x30x10 0X10 OXFF 0x0a(2)整型常量的类型:-根据值大小默认类型。-整型常量后面加1或L,则认为是long intSy例如:123L、0L、4321、0x10012. 实型常量(1)实型常量的表示方法1、十进制小数形式:.12323. 12、指数形式:123e31.234e34
12、 (e前必须有数字,e后指数必须为整数)类型在数的后面加字母f或F,就为单精度数,否则处理成双精 度数。3. 字符型常量可视字符常量-单引号括起来的单个可 视字符例如:a A v + 、3、等转义字符常量-单引号括起来的与可 视字符组合,例如:含义ASCII代码 n换行,将当前位置移到下一行开头10 t水平制表(跳到下一个Tab位置)9 b退格,将当前位置移到前一列8 r回车,将当前位置移到本行开头13 f换页,将当前位置移到下页开头12a发出铃声7 代表一个反斜杠字符“”92代表一个单撇号字符39代表一个双撇号字符34 d d d1到3位八进制数所代表的字符 x h h1到2位十六进制数所代
13、表的字符例转义字符的使用#include vo i d ma i n ()printf ( ab ct derftgn,/ );printf ( htibbj kn );程序运行输出的运行结果:1 2 3 4 5 6 791011fabncnnngde显示屏上的运行结果:(屏幕也显示了速度快未看清时.新代替旧)f g d e *r回到本行开头,自此输出字符(包括空格和跳格经过的位置)将替代原有的字符*/h j k4. 字符串常量用双引号括起的一个字符序列-例如:UABC n123 na f,nt nGoodIImorning字符串常量的长度:所包含的字符个数 字符串常量的存储方式:C规定:在每
14、一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串内存中是:CHINA” |C H I N A 0注标串结嬴慝它占内存单元不是5个字符,而是6个字符,最后一个字符 为,05。但在输出时不输出,05 ola5是字符常量,“a”是字符串常量,二者不同。 如:假设C被指定为字符变量:char cc二a;c =.c= “CHINA”结论不能把_个字符串常量赋给一个字符变量。5. 符号常量以标识符来代表的常量事先编译预处理命令def i ne定义编译时先由系统替换为它所代表的常量,再进行编译 例如:#define LEN 2.5 main()定义符号常量floata= 2*3.14 *
15、LEN; b=314*LEN*LENprintf(fla=%fb=%fn,ab);3. 3. 2变量1.变量的有关概念在程序运行过程中,其值改变的数据,称为变量,变量用标 识符表ZF,称为变量名。*系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。变量名实际上是一个以一个名字对应代表一个地址,在对程 序编译连接时由编译系统给每一个变量名分配对应的内存地 址。从变量中取值,实际上是通过变量名找到相应的内存地 址,从该存储单元中读取数据。例如金有变量a它的值是510aI 510/变量名变量值J为变量分配的存储单元2变量定义例如:int i;广i为整型变量*/short c,
16、d,e;/*c5d5e为短整型unsigned long p5g; /* p5g为无符号长整型 */ float x5y;/* x3y为单精度型7double z;/* z为双精度型char ch1,ch2;/* ch15ch2为字符型7变量定义位置:一般放在函数开头main() int a,b=2;float data;量定义data=(a+b)*1.2; printfC4data=%fn,data);a= 1 ;可执行语句main() int a,b=2; a=l;float data;data=(a+b)* 1.2; printfCdata=%fad;3 变量的初始化:方法1先定义变量,
17、再赋值方法2定义变量的同时,赋初值int ij; double s;i 二4;j 二 4*i-ll;s=002* 1000.0;注意:若对几个变量赋同一个值,不能写成int a=b=c=5;而应写成 int a=5, b=5, c=5;变量定义和赋初值的作用int a=l, b=3,c ;变量在使用之前一定要有明确的值如果一个变量在一个表达式中使用,那么只有该变量初始化后,表达式才能产生一个有意义的结果。表达式i=i+2有意义,为i已经初始化表达式i=i+2没有意义,因为i没有初始化4.变量的使用:先定义后使用例:/Undefined symbol lstatenf in functionin
18、t student; stadent=19;main-变量概念:其值可以改变的量变量名与变量值变量定义的一般格式:数据类型变量1, 变量初女篡:定纵茹定璟如疇从符量2,变量n;例2floatc=amain() int a,b=2;a=l; float data; data=(a+b)*1.2; printfCdata=%fnint a=1rr例:ioLa尸 2,b,c 二 4;丄r /r1 function main2字节随机数3.4各类数值型数据间的混合运算混合运算:整型(包括int, short, long)、浮点型(包括 float, double)可以混合运算。在进行运算时,不同类型的
19、 数据要先转换成同一类型,然后进行运算.亠运算对象类型不同时转换-仮竽别转换为高级别 例 int i;3. 5运算符和表达式(+ - * / ( - 类 fx fI 17 rLz(x fx 7 /(X 换: 转符符:符符符 符符符符算算算符算算算算数型算算 运运运算运运运运节类运运 术系辑运值件号针字制量标它 算关逻位赋条逗指求强分下其C运算符-学习运算符应注意:运算符功能与运算量关系-要求运算量个数-要求运算量类型运算符优先级别结合方向结果的类型3. 5. 1算术运算符和算术表达式(1) 基本算术运算符:+ - * / % -结合方向:从左向右-优先级:* / % + -(2) (3)(4)
20、说明:-”可为单目运算符时,右结合性-两整数相除,结果为整数-%要求两侧均为整型数据例 5/2 = 2仿 ii例 5%2 = 1-5/2.0 = -2.5-5%2= -11%10 = 15%1= 05.5%2(x)(2)强制类型转换运算符显式转换一般形式:(类型名)(表达式) 例 (int)(x+y)(int)x+y(doub I e) (3/2) (int) 3. 6说明:强制转换得到所需类型的中间变量,原变量类 型不变精度损失问题较高类型向较低类型转换时可能发生例 main() float x;rint i;x=36;i=(int)x; printf(x=%fj=%* / %+ -(2)(
21、3)(4)例 一 i+i=3; prirrtf (“cT, -i+);B注意:不提倡写成i+j的形式,而应写成(i+)+j的形式352赋值运算符和赋值表达式算元符#样伽含义结合性优先级二兀=x=2.5在变量x中保存数值2.5从右向左14(1)赋值运算符作用:将右边的值赋给左边的变量。注意:赋值运算符的左操作数必须是变量(不能是常量或表达式) 一般地,右操作数的类型应与变量的类型相匹配。(2)赋值运算符中的类型转换若赋值运算符的两个操作数类型不一致,编译系统则右 操作数的类型转换为变量的类型,然后再赋值。将较短类型转换为较长类型是安全操作。反之,可能安 全也可能不安全。例:int i;doubl
22、e s;不安全,截去小数部分 i=356; /安全,大多数int类型均可用 double类型精确表示s二3;1 将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.2. 整型数据赋给实型变量,数值不变,但按实数形式存放.3. 字符型数据赋给整型变量时:(1) 字符-无符号整型变量,则存入低8位,高8位补零。(2) 字符-带符号整型变量,则字符高位扩展。4. 将int=long int,进行符号扩展。即:符号扩展,低16位=long的低16位。I ong i nt = i nt则高16位截断。6. 将uns i gned i nt 型-I ong int高位补0。而位数相同部分直接赋值原值传送
23、,但数据大小不能超值。i nt b;b二a;则越界。uns i gned i nt = int如I: uns i gned i nt a二65535uns i gned Iong =long uns i gned short =short非unsigned型T长度相同的unsigned型数据,原样传送 (包括符号位)总体规律:(1)较短类型转换为较长类型是安全操作,但要考虑符号扩展。(2)较长类型转换为较短类型要发生截断,可能安全也可能不安全。例:float f;double d=123.456789el00;f二d;不安全,溢出错误,结果无意义。但并不检测错误不同类型的浮点型数据之间的赋值:
24、double型数据赋给float变量:截取前7位有效数字,且 要避免溢出float型数据赋给double变量:安全整型数据赋值给字符型变量 int i=289;char c;c 二 i;10000000100100001c00100001不安全,i的值超出chare表示 范围,只转换了char能够表 示的较低的位(低8位),结 果无意义。例:int a; long b = 8; a二 b;安全,8在int表示范围内例:int a;long b = 65536; a二b;不安全,b的值超出int a表示范只转换了int能够表示的较低的位(低16位),结果无意义。00000000000000010
25、000000000000000a=00000000000000000unsigned a; int b 二-1;a二b;不安全,负爹均不可用 unsigned表示,结果无意义。111111111111111111111111111111-1a二65535(3)复合赋值运算符在赋值符“=”之前加上其他运算符,可以构成复合的运算符。x %= 3 等价于+ = 3 ”为例来说弄、 ( 它相当于使a进行一次自加 (3)的操作。即先使a加例如:3,再赋给a。a+ = 3 等价于 x *= y + 8 等价于x = x * (y+8)x = x % 3注意1如果“右侧是包含若干项的表达式,则相当于它有括号。 如: X %二 y+3 x %二(y+3)l_T X = X % (y+3)(不要错写成x二x%y+3)C语言规定可以使用10种复合赋值运算符:+ = , = , *=,/=,% =,=,=,&=,/ 9复合赋值运算符的结合性是从右到左。如:a+=a-=a*3分析:此赋值表达式的求解步骤如下: 先进行“a的运算,它相当于a =a a * a,a的值为 1 2 144= 132O 再进行“a+ = 1 3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线上课程设计 动画
- 药学课程设计指南
- 机设课程设计的模板
- 网络服务器配置课程设计
- 捅马蜂窝课程设计
- 智能可穿戴手表课程设计
- 2024年职业生涯规划教案篇
- 药品检验类课程设计论文
- 2024年移动智慧家庭工程师(高级)资格认证考试题库-上(选择题)
- 物流运输行业营销工作总结
- 佛山市顺德区2023-2024学年四上数学期末质量检测模拟试题含答案
- 昆明市公交集团车载视频监控平台升级方案20191025
- 一流课程申报
- 高中体育特长生名校报考路径分析课件
- 主要建筑材料碳排放因子查询表
- 建筑施工室内装饰设计施工图讲解
- 冠寓运营管理手册
- 耳部铜砭刮痧技术评分标准
- 玻璃幕墙施工方案幕墙
- 抗精神疾病药物与麻醉课件
- 数据库原理与应用课后习题答案李春葆 编
评论
0/150
提交评论