欢迎来到163文库! | 帮助中心 精品课件PPT、教案、教学设计、试题试卷、教学素材分享与下载!
163文库
全部分类
  • 办公、行业>
  • 幼教>
  • 小学>
  • 初中>
  • 高中>
  • 中职>
  • 大学>
  • 各类题库>
  • ImageVerifierCode 换一换
    首页 163文库 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    《C语言与程序设计教程》课件第2章.ppt

    • 文档编号:8095422       资源大小:693KB        全文页数:192页
    • 资源格式: PPT        下载积分:15文币     交易提醒:下载本文档,15文币将自动转入上传用户(momomo)的账号。
    微信登录下载
    快捷注册下载 游客一键下载
    账号登录下载
    二维码
    微信扫一扫登录
    下载资源需要15文币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    优惠套餐(点此详情)
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、试题类文档,标题没说有答案的,则无答案。带答案试题资料的主观题可能无答案。PPT文档的音视频可能无法播放。请谨慎下单,否则不予退换。
    3、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者搜狗浏览器、谷歌浏览器下载即可。。

    《C语言与程序设计教程》课件第2章.ppt

    1、第第2章章 C语言程序设计基础语言程序设计基础 2.1 C语言基本符号与基本数据类型 2.2 常量 2.3 变量2.4 运算符与表达式 2.5 数据的输入/输出 2.1 C语言基本符号与基本数据类型语言基本符号与基本数据类型2.1.1 C语言基本符号语言基本符号程序是由一个个字符组成的,任何程序语言都规定了该语言所允许使用的字符集合。C语言使用的全部字符是ASCII码字符集(见附录1),它包括256个字符,每个字符都对应着一个不同的序号(码值);前128个字符为标准的ASCII码字符,其中序号为0、1、2、31以及127的字符为控制字符,它们用于完成规定的功能操作;序号从32到126的96个字

    2、符是文字字符,它们用于显示和打印;其中(1)序号从4857:数字0、1、2、3、4、5、6、7、8、9。(2)序号从6590:26个大写英文字母A、B、C、X、Y、Z。(3)序号从97122:26个小写英文字母a、b、c、x、y、z。(4)其他一些可打印(显示)的字符,如各种标准符号、运算符号和括号等:(5)一些特殊字符,如空格符、换行符、制表符(跳格)等。空格符、换行符、制表符等统称为空白字符,它们在程序中的主要作用是用来分隔其他成分;即通过加入一些空白字符把程序排成适当的格式,以增加程序的可读性。序号由128至255的ASCII码字符都是特殊的字符,对于不同的计算机,它们所代表的字符不同。

    3、此外,C语言在字符串常量和注释中还可以使用汉字等其他图形符号。由一个或多个字符组成具有确切含义并相对独立的字符串称之为单词符号。单词符号是一个程序语言的基本语法符号。C语言的单词符号分为专用符号、关键字和标识符等类别。1.专用符号专用符号常用的C语言专用符号见表2.1,其中的每一个符号都有独立的含义。其中,双字符号=、=、&、都是一个独立的整体,不能将其分开书写。表表2.1 常用的常用的C语言专用符号表语言专用符号表2.关键字关键字关键字是程序设计语言自身保留下来用以表达特定含义的单词集合。C语言的关键字共有32个(见表2.2),它们可以命名语句功能(如for、if、do等)、定义数据类型(如

    4、int、float、struct等)、还有某些运算符(如sizeof)等作用。由于关键字具有程序语言中预先定义好的特殊意义,因此只能在程序需要的地方使用,而不允许重新定义关键字,改变其原有的含义。表表2.2 C语言关键字语言关键字3.标识符标识符在程序中,常常用具有一定意义的名字来标识程序中的变量名、函数名和数组名,以便在程序中根据名字访问它,而程序中各种名字都是用标识符来表示的。C语言中关于标识符的规定如下:(1)一个标识符是字母开头的字母和数字字符的一个连续序列,其中不得有空白字符,C语言特别规定下划线字符“_”也作为字母看待。(2)标识符中同一字母的大小写是有区别的,即看做不同的字符。(

    5、3)标识符不能与关键字同名。例2.1 以下4组用户定义标识符中,全部合法的一组是_。A)_main B)if C)txt D)int enclude -max REAL k-2 sin y-m-d Dr.Tom _001 _2010 Date 3COM sizeof解 在C语言中,标识符是以字母或下划线开头并由字母、数字或下划线组成的字符序列,并且不能与C语言中的32个关键字同名。因此选项B中的-max和y-m-d中的“-”不是下划线,即不属于字母、数字和下划线,因此都不是标识符;而选项C中Dr.Tom同样出现标识符不允许出现的字符“.”,而且3COM中不是由字母或下划线开头,因此都不是标识符

    6、;选项D中出现了C语言中的关键字int和sizeof,因此也不是标识符,只有选项A正确。4.分隔符分隔符C语言的分隔符主要有空格、逗号和分号。C语言中单词与单词之间可以用一个或多个空格进行分隔,语句与语句之间用一个分号“;”进行分隔,逗号“,”则用于程序定义同类型变量之间、函数参数表中参数之间以及输入输出语句中各个参数之间的分隔。2.1.2 C语言的数据类型语言的数据类型数据是计算机处理的对象,程序所描述的就是数据及对这些数据的处理步骤。数据的性质是通过数据类型来反映的,高级语言程序中的每一个数据都必须隶属于某一种数据类型。数据类型从本质上定义了该类型的取值范围和可施加于它们的全部运算。C语言

    7、根据数据的特点将其分为基本类型、构造类型、指针类型和空类型四类(见图2-1),并通过这些数据类型可以构造出其他数据类型和数据结构。图2-1 C语言的数据类型数据类型除了指定数据的取值范围和可施加的运算外,还指明了该数据在内存中的存放方式及所占内存的大小(字节数)。在此仅介绍基本类型,其他数据类型将在后续章节中逐步进行介绍。C语言基本类型包括:整型、单精度型、双精度型和字符型四种。此外,还可通过类型修饰符来扩充基本类型的含义,以便更准确地适应各种需要。修饰符有long(长型)、short(短型)、signed(有符号)和unsigned(无符号)四种,这些修饰符与基本类型的类型标识符int、fl

    8、oat和double组合可表示不同的数值范围及数据所占内存的大小。表2.3给出了基本类型标识符、各数据类型所占内存空间字节数和所表示的数值范围。表表2.3 基本类型的分类及特点基本类型的分类及特点注意,在早期的16位微机和Turbo C中,短整型和无符号短整型数据占1个字节,整型和无符号型数据都占2个字节,长整型和无符号长整型占4个字节。而现在32位微机的VC+6.0环境中,短整型和无符号短整型数据占2个字节,整型、无符号型、长整型及无符号长整型数据都占4个字节。了解数据所占空间的办法是采用sizeof运算符来进行检测,如sizeof(long int)则得到long int类型所占字节数。2

    9、.2 常常 量量常量是在程序运行过程中,其值恒定不变的量。常量可分为直接常量和符号常量。直接常量也就是日常所说的常数,包括数值常量和字符型常量两种;符号常量则是指用标识符定义的常量,从字面上不能直接看出其类型和值。C语言中常量的分类如图2-2所示。图2-2 C语言的常量2.2.1 整型常量、实型常量及符号常量整型常量、实型常量及符号常量 1.整型常量整型常量在C语言中,整型常量有十进制、八进制和十六进制三种表示形式。(1)十进制整型常量的表示与数学上的整数表示相同。十进制整型常量没有前缀,由09的数字组成。以下各数是合法的十进制整型常量:386 -567 65535 2010以下各数是非法的十

    10、进制整型常量:029(不能有前导0)23A(含有非十进制字符)(2)八进制整型常量的表示形式是以数字0为前缀,后面跟由07的数字组成的八进制数。八进制数通常是无符号数。以下各数是合法的八进制整型常量:016(十进制为14)0102(十进制为66)0177777(十进制为65535)以下各数是非法的八进制整型常量:356(无前缀0)02A6(含有非八进制字符)-0128(出现了非八进制数8和负号)(3)十六进制整型常量是以0 x或0X为前缀(0 x或0X中x或X的前面是数字0,其后跟由09、AF或af的数字组成的十六进制数。以下各数是合法的十六进制整型常量:0 x2A(十进制为42)0 xA0(

    11、十进制为160)0 xFFFF(十进制为65535)以下各数是非法的十六进制整型常量:5AF(无前缀0 x)0 x32H(含有非十六进制字符H)在程序中是根据常量的前缀来区分各种进制数的。因此,在书写常量时要避免因前缀弄错而造成结果的不正确。整型常量中的长整型数据可用L(或l)做后缀表示。例如:158L(十进制为158)077L(十进制为63)0XA5L(十进制为165)整型常量中的无符号型数据可用U(或u)做后缀表示。例如:358u 0 x38Au 0235U 0XA5Lu 386LU2.实型常量实型常量C语言中的实型常量只能用十进制形式表示,不能用八进制或十六进制表示。实型常量只有两种进制

    12、表示形式:小数形式和指数形式。(1)小数形式由数字和小数点“.”组成(必须有小数点)。例如:-1.85 .426 728.0.345 0.0都是十进制小数形式的实数,小数点前或后可以没有数字。(2)指数形式由十进制数加阶码标志“e”或“E”以及阶码组成,其一般形式为:aEn 或 aen其中,a为十进制数,n为十进制整数(n为正数时“+”可以省略),其值为a10n。以下是合法的实数:1.234e+12(等于1.2341012)3.7e-2(等于3.710-2)78E3(等于78103)以下是非法的实数:e-5(阶码“e”前无数字)58.+e5(符号位置不对)2.7E(无阶码)6.4e-5.8(阶

    13、码为小数)因此,在阶码“e”或“E”前后必须有数字且“e”或“E”后的数字必须是整数。注意,一个实数在用指数形式输出时,是按规格化的指数形式输出的,即小数点前面只有一位非0数字。例如2041.567e11的输出为:2.041567e+014;0.001234e-4的输出为1.234e-007。另外在C语言中,实型常量默认为双精度型(即double型),若实型常量后面跟后缀F(或f),则为单精度型(即float型)。3.符号常量符号常量在程序中,可以定义一个符号来代表一个常量,这种相应的符号称为符号常量。符号常量实际上就是给值常量起了一个名字。例如,用PI代表圆周率,即3.14159。使用符号常

    14、量,一是可以增加程序的易读性:在程序中若定义一些具有一定意义的符号常量时,则很容易了解其含义,即“见名知义”;例如用PI代表圆周率、Name代表姓名等。二是提高了程序的通用性和可维护性:使用符号常量可以使该常量的修改变得十分方便;例如,一个程序中如果多处出现某个常量,若需修改该常量则对程序所有出现该常量的地方都要进行修改,这种修改比较麻烦且容易遗漏;如果使用符号常量,则只需修改其定义即可,即一改全改,不会出现遗漏。C语言中是在程序的开始处用编译预处理命令#define(将在第9章介绍)来定义符号常量的。符号常量的定义形式如下:#define 符号常量名 常量例如:#define PI 3.14

    15、159#define NUM 35#define Name“Liu yu”注意,#define与#include一样是宏命令而不是C语言语句,故其命令行末尾不能加分号“;”。当程序被编译时,宏命令首先被编译预处理,即用符号常量名后面的常量来替换程序中所有出现的这个符号常量名。此外,符号常量一旦定义,就不能在程序中其他地方给这个符号常量再进行赋值。例如“PI=5.286”;是错误的。2.2.2 字符常量与字符串常量字符常量与字符串常量1.字符常量字符常量用一对单引号“”括起来的一个字符,称为字符常量。例如,a、0、A、*都是合法的字符常量(注意,a和A是不同的字符常量)。字符常量在内存中存储的并

    16、不是字符本身,而是字符的代码,称之为ASCII码。如a的ASCII码是97,而A的ASCII码则是65。除了以上形式的字符常量外,C语言还定义了一些特殊的字符常量,即以反斜杠字符“”开头的字符序列,称为转义字符。转义字符是一种特殊的字符常量,即将“”后的字符或字符序列,改变其字符原有的含义而转化为特定的含义,故称“转义”字符。例如转义字符n不再表示字母“n”而作为“换行”符使用。常用的转义字符如表2.4所示。表表2.4 转义字符及其含义转义字符及其含义使用字符常量时需要注意以下几点:(1)字符常量只能用单引号“”括起来,而不能用双引号或其他括号。(2)字符常量只能是单个字符。(3)字符可以是字

    17、符集中的任意字符,但数字被定义为字符型之后就以ASCII码值参与数值运算;如6的ASCII码值为54是与数字6不同的;6是字符常量,而6是整型常量。非法的字符常量如下:197(9不是八进制数中的数字)1673(转义字符中的八进制数最多3位)ab(作为十六进制数少了标识x)ab(字符常量只能是单个字符)m(字符常量只能用单引号括起来)注意,ddd中的ddd为13位八进制数。由于1个八进制数要占用3个二进制位,所以3个八进制数共占用9个二进制位。为了要用1个字节(8位二进制位)放下这3个八进制数,则头一个八进制数不应大于3;这样,3个八进制数恰好占用一个字节(8位),也即是一个字符的长度。同样,x

    18、hh中的hh为12位十六进制数。由于1个十六进制数要占用4个二进制位,所以2个十六进制数恰好占用1个字节,也即一个字符的长度。2.字符串常量字符串常量用一对双引号“”括起来的字符序列称为字符串常量,例如,以下是合法的字符串常量:CHINAThis is a C Program.1020376*(表示一个空格)(表示什么字符也没有)n (表示一个转义字符“换行”)ab 由上例可知,字符串中可以是任意字符,包括转义字符,但字符串中出现双引号字符时则必须使用转义字符“”表示。字符串常量在内存中存放时,系统仅存放双引号之间的字符序列;也即将这些字符按顺序以其ASCII码值存放(包括空格符)。为了表示字

    19、符串的结束,系统自动在字符串的最后加上一个字符串结束标志,即转义字符0(ASCII码值为0)。因此,长度为n个字符的字符串常量在内存中要占用n+1个字节的空间。例如,字符串“C program”的长度为9,但在内存中所占的字节数为10,其内存中的存储如图2-3所示。图2-3 “C program”在内存中的存储再如,字符常量A与字符串常量A在内存中的存储方式如图2-4所示。图2-4 字符A与字符串A的存储比较字符常量与字符串常量的区别如下:(1)定界符不同。字符常量使用单引号“”,而字符串常量使用双引号“”。(2)长度不同。字符常量的长度恒定为1,而字符串常量的长度可以是0,也可以是某个整数。

    20、(3)存储不同,字符常量存储的是字符的ASCII码值,而字符串常量除了要存储字符串常量中每个字符的ASCII码值外,最后还要存储字符串结束标志0字符。2.3 变变 量量2.3.1 变量的概念、定义与初始化变量的概念、定义与初始化1.变量的概念变量的概念程序运行过程中,其值可以变化的量称为变量。由于变量的值在不断变化,用一个具体的值已无法来表示变量。因此变量必须用名字(标识符)标识。程序语言中的变量具有如下特点:(1)程序中的每一个变量在计算机内存中都有相应的内存单元,用来存放该变量不断变化的当前值;对一个变量的访问就是对其内存单元中当前值进行访问,给一个变量赋值就是把值送入该变量对应的内存单元

    21、中,即成为这个变量的“当前值”。(2)由于内存单元长度的限制,允许放入值的大小也是有限的,故变量值的变化范围也是有限的。因此,每个变量都有三个特征:一是它有一个变量名,变量名的命名方式应符合标识符的命名规则,例如,可用name、sum作为变量名;二是变量有类型之分,因为不同类型的变量占用的内存单元(字节)不同,存储的方式也不同(如后面介绍的整型变量和实型变量其存储方式是不同的),故每个变量都有一个确定的类型,例如,整型变量、实型变量、字符变量等;三是变量可以存放值,程序运行过程中用到的变量必须有确切的值,也即变量在使用前必须赋值,变量的值存储在该变量对应的内存单元中,在程序中是通过变量名来引用

    22、变量的值。需要注意的是:变量名和变量值这两个概念的区别。如图2-5所示,在程序运行过程中从变量x里取值,实际上是通过变量名x找到存放其值的内存单元,然后由这个内存单元中取出值(即30)来。图2-5 变量名与变量值示意 此外还要注意的是变量名和变量地址。每个变量都对应一个变量地址,这个变量地址就是变量定义时系统分配给该变量的内存单元的首地址。我们可以通过取地址运算符“&”得到变量对应的变量地址,如变量x的变量地址就是“&x”。读取一个变量的值可以通过变量名获得,但将一个值赋给变量时就可能需要通过变量地址来完成。2.变量的定义与初始化变量的定义与初始化在C语言程序中,常量可以不经过定义就直接使用,

    23、而用到的所有变量都必须先定义后使用。变量是程序中的重要成分,对变量的(定义)说明不仅是给变量起名字,而且指出了该变量所具有的数据类型,系统根据数据类型为这个变量分配相应大小的内存单元。没有定义(说明)过的变量,在程序中不得使用。变量的处理原则是:先定义(说明),再赋值,然后使用。每个变量的定义只有一次,赋值以后的变量可以在其定义范围内随意引用,变量的值也可以随意更改,但任何时刻变量只有一个确定的当前值(即最后一次放入的值)。变量定义的一般形式如下:数据类型标识符 变量名1,变量名2,变量名3,变量名n;其中,“”表示可选项。例如:int a;/*定义a为整型变量*/int m,n;/*定义m和

    24、n为整型变量*/float x,y,z;/*定义x、y、z为单精度实型变量*/char ch;/*定义ch为字符型变量*/变量定义应注意以下几点:(1)允许在一个数据类型标识符之后定义和说明多个相同类型的变量,各变量名之间用逗号“,”隔开。(2)数据类型标识符与变量名之间至少用一个空格隔开。(3)最后一个变量名后必须以分号“;”结束。(4)变量的定义必须放在使用变量的语句之前,一般放在函数体的开头部分。(5)在同一个函数中的变量不允许同名,即不允许重复定义。例如,下面的定义是非法的:int x,y,z;float a,b,x;/*变量x被重复定义*/在定义变量的同时可以给变量赋初值,称为变量的

    25、初始化。变量初始化的一般形式为:数据类型标识符 变量名1=常量1,变量名2=常量2,变量名n=常量n;例如:int m=3,n=5;/*定义m和n为整型变量,并分别赋予了初值3和5*/float x=0,y=0,z=0;/*定义x、y、z为单精度实型变量,并都赋了初值0*/char ch=a;/*定义ch为字符型变量并赋初值字符a*/例2.2 输入任意两个整数,输出它们的和、差、积。#includevoid main()int a,b;/*定义a、b为整型变量*/printf(Input a,b=);/*输出提示信息Input a,b=*/scanf(%d,%d,&a,&b);/*由键盘输入a

    26、和b的值*/printf(%d+%d=%dn,a,b,a+b);/*计算a+b并输出结果*/printf(%d-%d=%dn,a,b,a-b);/*计算a-b并输出结果*/printf(%d*%d=%dn,a,b,a*b);/*计算a*b并输出结果*/程序运行结果:Input a,b=5,85+8=135-8=-35*8=402.3.2 整型变量、实型变量与字符型变量整型变量、实型变量与字符型变量1.整型变量整型变量整型变量的基本类型符为int,可根据数值的范围将整型变量定义为基本整型变量、短整型变量或长整型变量:(1)基本整型变量用int表示。(2)短整型变量用short int表示,或用s

    27、hort表示。(3)长整型变量用long int表示,或用long表示。由表2.3可知,在VC+6.0环境中,基本整型int和长整型long变量所占的字长都是4个字节,它们值的变化范围为-231(231-1),也就是-214783648214783647;短整型short变量所占字长是2个字节,它的值的变化范围为-3276832767。整型变量根据是否有符号可以分为有符号(signed)和无符号(unsigned)两种类型。为了充分利用变量值的范围,可以将整型定义为无符号的unsigned类型,如无符号基本整型变量用unsigned表示,无符号短整型用unsigned short表示,而无符号

    28、长整型则用unsigned long表示,无符号整型变量值的变化范围为:04294967295(见表2-3)。如果既不指定为signed也不指定为unsigned,则系统默认为有符号signed类型,如上面的基本整型int、短整型short和长整型long都是signed类型。例2.3 通过库函数sizeof获得int、short、long、unsigned int、unsigned short和unsigned long等数据类型所占内存的字节数。#includevoid main()printf(int=%dn,sizeof(int);printf(short=%dn,sizeof(sho

    29、rt);printf(long=%dn,sizeof(long);printf(unsigned int=%dn,sizeof(unsigned int);printf(unsigned short=%dn,sizeof(unsigned short);printf(unsigned long=%dn,sizeof(unsigned long);运行结果:int=4short=2long=4unsigned int=4unsigned short=2unsigned long=4注意,Turbo C的整型数据占2个字节,短整型数据占1个字节,无符号整型数据占2个字节,无符号短整型数据占1个字节

    30、,这和VC环境下的整型数据表示是不同的。有符号整型数据的存储中,最高位是符号位(为0表示正,为1表示负),其余为数值位,无符号整型数据的存储中是没有符号位的,即内存单元全部用于数值表示;这也是有符号整型数据和无符号整型数据值的变化范围不同的原因。例如,10的有符号表示和无符号表示如图2-6所示。图2-6 有符号和无符号整数表示示意实际上,整型数据在计算机中的存储形式是以补码来表示的。一个正整数的补码和该数的原码(即该数的二进制形式)相同;一个负整数的补码则是将该数绝对值(即正整数)的原码按位取反后再加1而得到。例如,10的补码如图2-7所示。图2-7 10的补码表示而-10的补码则如图2-8所

    31、示。图2-8 -10的补码表示补码的表示主要是为了方便计算机的加、减法运算,即所有的加、减运算在计算机中都是进行加法运算,这也是计算机硬件中只有加法器而没有减法器的原因。例如,10-10可由图2-7和图2-8得到10+(-10)的结果如下:2.实型变量实型变量实型数据与整型数据在内存中的存储方式完全不同,实型数据是按指数形式存放的。系统把一个实数分成小数部分和指数部分来分别存放。例如123.5678在内存中的存放形式如图2-9所示。图2-9 实数在内存中的存放形式由于实数采用小数点“浮动”这种存放方式,故实数又称为浮点数(注:图2-9是早期浮点数的存储形式,这种存储形式更便于说明问题。目前浮点

    32、数采用的是IEEE 754标准,指数部分不含阶符且全部采用正指数表示,如8位二进制数所表示的指数范围为十进制数-126127;为处理负指数的情况,IEEE 754要求指数加上127后再存储,输出运算结果时指数再减去127)。实型变量分为单精度(float)、双精度(double)和长双精度(long double)三种(见表2.3)。实型变量是用有限的内存单元进行存储的,因此存储实数的位数总是有限的。当实数表示的位数较多时,存放不下的后面那些数字将被舍去,由此会产生一些精度误差。例2.4 通过库函数sizeof获得float、double和long double三种数据类型所占内存的字节数。#

    33、includevoid main()printf(float=%dn,sizeof(float);printf(double=%dn,sizeof(double);printf(long double=%dn,sizeof(long double);运行结果:float=4double=8long double=8单精度实数只能保证7位有效数字(十进制),双精度实数只能保证15位有效数字(十进制),多余位数的数字将因舍入误差而变得没有意义。例如:float a=12345.678;float b=12345.6789;变量a和b的有效数值都是12345.67。在内存中存储时,a为12345.6

    34、77734,而b为12345.678711,忽略无效位后,两者相等。由于实数存在舍入误差,则在使用中应注意以下几点:(1)不要试图用一个实数去精确表示一个大整数。(2)由于实数在计算和存储时会产生误差,因此实数一般不要进行“相等”判断,而是判断两数差的绝对值小于某一个很小的数时就认为两者相等。(3)避免直接将一个很大的实数与一个很小的实数相加或相减,否则会“丢失”这个很小的实数。(4)根据实际要求来选择单精度或双精度。例2.5 实数的误差。#includevoid main()float a;a=123456.789e5;printf(a=%fn,a);运行结果:a=12345678848.0

    35、00000即一个很大的实数会产生存储误差。3.字符型变量字符型变量字符型变量用来存放字符常量,且只能存放一个字符。例如:char c1,c2,c3,c4,c5;c1=a;正确c2=a;错误c3=abc;错误c4=107;正确c5=6;正确将一个字符常量存入到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放入到内存单元中。例如:char c1,c2;c1=a;c2=b;字符a的ASCII码值为十进制数97,字符b的ASCII码值为十进制数的98。在内存中,变量c1和c2的值97.98实际上是以二进制形式存放的(如图2-10所示)。图2-10 c1和c2在内

    36、存中值的存储由于字符型数据在内存中是以ASCII码值存储的,因此它的存储形式与整型数据的存储形式是类似的。所以,字符型数据和整型数据之间的转换就很容易;也即字符型和整型可以通用,字符型数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,先将内存中的ASCII码值转换成对应的字符,然后再输出;以整数形式输出时,则按整数存储方式直接将ASCII码值作为整数输出。字符数据还可以参与算术运算,此时相当于对它们的ASCII码值进行算术运算,即先将其由1个字节转换为4个字节(一个整型数据的长度),然后再进行运算。此外,可以将一个整型数据赋值给字符变量(仅将该数据的最低的1个字节赋给了字符变量

    37、);也可以将字符数据赋给一个整型变量(但由于字符型只占一个字节,故作为整数其范围为0255(无符号数时)和-128127(有符号数时)。注意,char型字符数据值的范围为-128127,当将128255之间的数赋给一个char型变量时,则是将该数作为有符号数(即默认为-128-1之间的数)赋给这个char型变量的,而且这个数是不可显示的。如果确实需要将128255之间的数赋给一个字符型变量,则可将该变量定义为unsigned char型。例2.6 字符型和整型可以相互赋值。#includevoid main()int k;char ch;k=b;/*将字符b赋给整型变量*/ch=66;/*将整

    38、数66赋给字符变量ch*/printf(%d%cn,k,k);/*以整型和字符型方式输出整型变量k的值*/printf(%d%cn,ch,ch);/*以整型和字符型方式输出字符变量ch的值*/运行结果:98 b66 B此外要说明的是,在C语言中没有专门的字符串变量,字符串常量如果要存放在变量中是通过字符数组的方式实现的(见第4章)。2.4 运算符与表达式运算符与表达式2.4.1 C语言运算符简介语言运算符简介我们已经介绍了数据类型、常量和变量的概念,那么如何对这些数据进行处理呢?这就需要用代表一定运算功能的运算符将运算对象(即数据)连接起来,并按C语言的语法规则构成一个表达运算过程的式子,即表

    39、达式来进行数据处理。1.C语言运算符的种类及功能语言运算符的种类及功能C语言的运算符十分丰富,应用也非常广泛,可以按运算功能和运算对象个数来进行分类。(1)运算符按照功能分类。运算符可按其功能大致分为5类:算术运算符、关系运算符、逻辑运算符、位运算符和特殊运算符。算术运算符 +-*/%+-关系运算符 =!=逻辑运算符 !&|位运算符|&赋值运算符 =复合赋值运算符(+=-=*=/=%=)条件运算符?:逗号运算符 ,指针运算符 *&求字节运算符 sizeof 强制类型转换运算符 (类型标识符)分量运算符 .-下标运算符 其他 如函数调用运算符()(2)运算符按照其连接运算对象的个数分类。运算符可

    40、按其运算对象的多少分为单目运算符、双目运算符和三目运算符。单目运算符的运算对象有1个,双目运算符两侧各有2个运算对象。单目运算符(仅对1个运算对象进行操作)。!+-(取负运算)*(指针运算)&(指针运算)sizeof(类型标识符)例如,求负数单目运算符“-”和强制类型转换运算符“(类型标识符)”:-5 (float)双目运算符(对2个运算对象进行操作)。+-*/%=!=&|&(位运算)|=复合赋值运算符(+=-=*=/=%=)例如:乘法双目运算符“*”和求余双目运算符“%”2*3 3%5 三目运算符(对3个运算对象进行操作)。?:例如:ab?a:b其含义是:如果ab则结果为a值,否则为b值。其

    41、他。().-2.C语言运算符的优先级及结合性语言运算符的优先级及结合性运算符除了各自的功能及可连接的运算对象个数外,彼此之间还存在着优先级和结合性。按优先级从高到低可将运算符分为15个等级,如表2.5所示。表表2.5 运算符的优先级与结合性运算符的优先级与结合性(1)优先级。求解表达式时总是先按运算符的优先次序由高到低进行操作。优先级是用来标识运算符在表达式中的运算顺序的,相当于加括号。(2)结合性。当一个运算对象两侧的优先级相同时,则按运算符的结合性来确定表达式的运算顺序。运算符的结合性分为两类:一类运算符的结合性为“从左到右”,大多数运算符都是这种结合性;另一类运算符的结合性为“从右到左”

    42、。例如:3-5*2,按运算符的优先次序先乘后减,即表达式的值为-7;又如3*5/2,因5的两侧“*”和“/”优先级相同则按结合性处理,由于算术运算符的结合性为“从左到右”,故先乘后除,表达式的值为7。一般来说,单目运算符、三目运算符和赋值运算符(包括组合算术运算符和组合位运算符)的结合性是从右到左,而其他双目运算符的结合性基本上都是从左到右。2.4.2 算术运算符与算术表达式算术运算符与算术表达式1.基本算术运算符基本算术运算符基本算术运算符按操作数的个数是一个还是二个分为单目运算符和双目运算符两类:(1)单目运算符:+(取正)、-(取负)。(2)双目运算符:+(加)、-(减)、*(乘)、/(

    43、除)、%(求余)使用基本算术运算符要注意以下几点:(1)加、减、乘、除和求余运算都是双目运算符,结合性都是从左向右;取正(+)、取负(-)是单目运算符,结合性是从右向左,并且其优先级高于+、-、*、/、%等双目运算符。(2)除法运算符“/”的运算结果与运算对象有关。当除数和被除数均为整数时,除的结果也是整数;这种整除的方法是舍去结果的小数部分,只保留结果的整数部分。例如,7/4结果为1,4/5结果为0。(3)求余运算符“%”要求参与运算的两个操作数均为整型,求余运算所得结果的符号与被除数的符号相同。设a和b是两个整型数据,并且b0,则有a%b的值与a-(a/b)*b的值相等。例如,5%3的结果

    44、为2;-5%3的结果为-2;5%-3的结果为2。2.自增和自减运算符自增和自减运算符C语言中有两个特殊的算术运算符,即自增运算符“+”和自减运算符“-”;这两个运算符都是单目运算符,且都具有右结合性,并且运算对象只能是整型变量或指针变量(用于指针变量在第6章介绍)。“+”的功能是使变量的值增1,“-”的功能是使变量的值减1。这两个运算符可以有以下4种表示方式:(1)+i 变量i值先加1后再参与其他运算;(2)-i 变量i值先减1后再参与其他运算;(3)i+变量i先参与其他运算,之后i值再加1;(4)i-变量i先参与其他运算,之后i值再减1。使用自增、自减运算符应注意以下几点:(1)自增、自减运

    45、算符的运算对象只能是整型变量,不能是常量或表达式。例如:6-、+(a=2*b)、+(-i)等都是错误的。(2)自增、自减运算符的结合性为:前置时(即+或-位于变量之前)是自右向左的,后置时(即+或-位于变量之后)是自左向右的。例如,x=-k+等价于x=-(k+),即先用变量k的当前值求负后赋给x,然后k再加1;该表达式不等于x=(-k)+,因为这样+的运算对象就是表达式“-k”了,这是(1)中指出的错误。(3)如果两个运算对象之间连续出现多个运算符,则C语言采用“最长匹配”原则;即在保证有意义的前提下,从左到右尽可能多地将字符组成一个运算符。因此,i+j就被解释成(i+)+j。同样i+j被解释

    46、成(i+)+j,但这种解释是没有意义的,因此是错误的;而i+j被解释成(i+)+)+j也是没有意义的,正确的写法应是(i+)+(+j)。下面,我们通过几个例子来了解自增、自减运算符的作用。例2.7 变量自增、自减运算后的输出。#includevoid main()int i=3;printf(%dn,i+);printf(%dn,i);i=3;printf(%dn,+i);printf(%dn,i);运行结果:3444从程序的运行结果来看,i+是变量i先参加运算(在此是输出其值),然后再加1,因此第1个printf语句输出的i值为3,然后i值增1变为4,故第2个printf语句输出的i值为4。

    47、也即,可以将i+的“+”操作看做运算级别最低的操作,即它所在的表达式其他操作都结束后,再给i执行加1操作。+i是先使变量i值增1然后再参加运算,因此第3个printf语句是先给i值加1,即i值由3变为4,然后再输出,即输出值为4;第4个printf语句输出的i值没有发生变化也为4。因此,可将+i的“+”操作看做运算级别最高的操作。例2.8 变量连续自增后的输出。#includevoid main()int i=5;printf(%dn,(i+)+(i+)+(i+);printf(%dn,i);i=5;printf(%dn,(+i)+(+i)+(+i);printf(%dn,i);运行结果:15

    48、8228解 对于i+,我们可以将+看做运算级别最低的操作,即i值先参加表达式的其他运算然后再给i增1,因此(i+)+(i+)+(i+)是先将3个i值相加后的结果15输出,然后再对i执行三次“+”操作,即i值由5变为8;也即第1个printf语句的输出是15,而第2个printf语句的输出是8。对于i+i,是先使变量i值增1然后再参加运算。但是计算机中执行加法运算的部件是累加器,而累加器一次只能对两个数实施加法运算,故(+i)+(+i)+(+i)是分解为两步进行的:第一步先计算前面两个(+i)+(+i)(见图2-11(1);然后第二步将计算的结果再与第三个(+i)进行相加(见图2-11(2)。图

    49、2-11 (+i)+(+i)+(+i)分两步操作示意实际操作如下:(1)先计算前面两个(+i)+(+i):执行第1个+i给i加1,即i值由5变为6;执行第2个+i给i加1,即i值由6变为7;执行i+i操作,即7+7=14,因此,前面两个(+i)+(+i)的结果是14。(2)将第(1)步的结果与第3个+i相加:执行第3个+i给i加1,即i值由7变为8;将第(1)步的结果值14与这个i值8相加结果为22。因此,最终(+i)+(+i)+(+i)的结果是22,i值为8;也即第3个printf语句输出的结果为22,第4个printf语句输出的结果为8。注意,不同的C编译器的解释是不一样的,上面是VC+6

    50、.0环境下的运行结果。对Turbo C来说,则是先执行三次自增运算,即i值由5变为8,然后将这个i值8相加两次,即结果为24。3.算术表达式算术表达式算术表达式是由常量、变量、函数和算术运算符组合起来的式子。1个算术表达式有一个确定类型的值,即求解算术表达式所得到的最终结果。算术表达式求值过程是按运算符的优先级和结合性规定的顺序进行。例如,(x+y)*2-z,sin(x)/2+3等都是算术表达式。当一个算术表达式中存在多个算术运算符时,各个运算符的优先级与常规算术运算相同,即先乘、除和取余,然后再计算加、减。同级运算符的计算顺序从左向右,当然也可以用圆括号“()”来改变表达式计算的先后顺序。例


    注意事项

    本文(《C语言与程序设计教程》课件第2章.ppt)为本站会员(momomo)主动上传,其收益全归该用户,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!




    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库