欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    第2章C语言基础知识.docx

    • 资源ID:847045       资源大小:111.31KB        全文页数:22页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第2章C语言基础知识.docx

    第2章C语言基础知识【本章要点】 C语言的基本数据类型 C语言的标识符、变量和常量 C语言程序的运算符与表达式【学习目标】 掌握C语言的基本数据类型的特点及应用 掌握C语言的标识符、常量和变量的基本知识及应用 掌握C语言的各种运算符及表达式的应用2.1 C语言的数据类型数据类型是数据的基本属性,描述的是数据的存储格式和运算规则。不同类型的数据在内存中所需存储空间的大小是不同的,能够支持的运算、相应的运算规则也不同,因而在学习C程序时必须准确地掌握和运用数据的数据类型。L整型(int)基本类型实型(浮点型)I字符型(Char)C语言的数据类型分类如图2-1所示。J单精度型(float)Y双精度型(double)J长双精度型(longdouble)数组类型数据类型结构体类型(StrUCt)构造类型V共用体类型(Union)I枚举类型(enum)空类型(Void)I指针类型(*)图2-1C语言的数据类型2.1.1 整型数据1 .基本概念整型数据就是整数,整数又分为两大类:有符号型和无符号型。有符号的整数既可以是正数,也可以是负数;不带符号位(只包含0和正数)的整数为无符号整数。整型(int)数据类型可以用4种修饰符的搭配来描述:Signed(有符号)、UnSigned(无符号)、Iong(长型)和ShOrt(短型)。VisualC+6.0环境下整型数据的长度及取值范围如表2-1所示。表2-1整型数据的长度及取值范围数据类型占用字节取值范围整型(int)4有符号整型(Signedint)4无符号整型(UnSignedint)40短整型(Shortint)2-768767有符号短整型(Signedshortin()2-768767无符号短整型(UnSignedshortin()2065535长整型(Iongint)4有符号长整型(Signedlongint)4无符号长整型(UnSignedlongint)40在C语言中,对整型数据类型的说明可以使用简写方式,如表2-2所示。表2-2整型数据的简写方式完整方式简写方式ShOrtint、signedshortintshortsignedintintlongintsignedlongintlongunsignedshortintunsignedshortunsignedintunsignedunsignedlongintunsignedlong2 .整型数据的二进制表示对于整型数据,其数值是以补码的形式存储的。正数的补码与其二进制原码相同。例如整数23,其二进制形式的存储结构如图2-2所示。(在ViSUaIC+6.0环境下,整型数据占4个字节的存储单元,每个字节含8个位。)00000000000000000000000000010111t_最高位为符号位,为0表示正数,为1表示负数图2-2整数23的存储结构若为负整数,将该数绝对值的二进制形式按位取反再加1便可得到该数的补码。例如,求-23的补码的步骤如下。第一步,求出23的二进制形式:第二步,按位取反:第三步,再加1:2.1.2 浮点型数据1 .基本概念在计算机的运算过程中,整型数据并不能适用于所有的应用,有时也需要存储带小数的数,这类数可以用浮点型数据(即浮点数)来表示。浮点数的小数点位置是不固定的,可以浮动。C语言提供了三种不同的浮点格式。 float:单精度浮点数。 double:双精度浮点数。 longdouble:长双精度浮点数。当精度要求不严格时,比如某人的工资,需要保留两位小数,float类型就是很恰当的类型。double类型提供更高的精度,对于绝大多数用户来说己经足够用了。longdouble类型支持极高精度的要求,但很少会用到。2 .浮点型数据的二进制表示浮点型数据与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。例如浮点数58.625的指数形式为58.625=5.8625x0l其中,5.8625称为尾数,10的嘉次1称为指数。计算机在存储浮点数的时候,也要将十进制数转化为二进制数来表示,转化方法是将浮点数分为整数部分和纯小数部分,再将整数部分和纯小数部分分别转化为二进制数。浮点数的存储结构如图2-3所示,分为3个部分:符号位、指数位和尾数。符号位表示数值的正负;指数位用于计算阶码,代表2的幕次;尾数位为有效小数位数。尾数部分占的位数越多,浮点数的有效位越多;指数部分占的位数越多,表示数的范围就越大。符号位I指数位J尾数SEM图2-3浮点数的存储结构例如,浮点数58.625的二进制存储格式如图24所示。SEM01000000111010010000000000000000图2-4浮点数58.625的二进制存储格式二提示: 对于float类型的浮点数,指数位占8位,尾数位占23位。 对于double类型的浮点数,指数位占11位,尾数位占52位。3 .浮点型数据的长度与取值范围单精度浮点数和双精度浮点数由于指数和尾数的位数不同,它们的取值范围也有所不同。浮点型数据的长度及取值范围如表2-3所示。表2-3浮点型数据的长度及取值范围类型说明占用字节有效位取值范围float单精度浮点型467-3.4x0383.4×1038double双精度浮点型81516-1.7×10'3081.7×103°8longdouble长双精度浮点型161819-1.2xlOf12x1049【实例2-1C语言浮点数精度示例。iinclude<stdio.h>voidmain()floatx;*X为单精度类型变量*/doubley;*Y为双精度类型变量*/X=.1234;/*赋予X值*/y=.1234;/*赋予V值*/printf(nx=%fn,x);/*输出X的值*/printf("y=fnu,y);/*输出y的值*/运行结果如图2-5所示。图2-5实例2-1的运行结果从程序的运行结果来看,X显示的结果并不等于赋予它的值,而y显示的结果等于赋予它的值,说明float(单精度类型)数据只能保证前7位是精确的,double(双精度类型)数据的精度可以为1516位。2.1.3字符型数据在C语言中,一个字符型数据在计算机的内存中占据一个字节的存储空间,但计算机并不是将字符本身存储到存储单元中(存储单元只能存储二进制编码),而是将字符所对应的ASCII码值转换为二进制的形式存储到相应的存储单元中。如大写字母A的ASCII码值为65,因此,大写字母A在存储单元中的存储形式实1OlOoOOol-际为整数65的二进制存储形式,如图2-6所示。图2-6大写字母A的存储形式昆提示:C语言是将字符常量当作整数来进行处理的。字符常量与其对应的ASCII码值可以相互替代。字符型数据可以用字符形式输出,也可以用整数形式输出。字符型数据还可以作为整数参加运算。例如:'A'+10相当于65+10,结果为75。通过这种关系,可以进行大小写字母之间的转换运算,大写字母的ASCn码值加上就是其对应的小写字母的ASCII码值,即大写字母=小写字母-O【实例2-2将大写字母转换为小写字母并显示在屏幕上。iinclude<stdio.h>voidmain()(charchi,ch2;chl=,M,;ch2=chl+;printf(ch2=%cnn,ch2);程序运行结果:ch2=m2.2标识符、常量和变量2.2.1 标识符在编写程序时,需要对变量、函数、宏或其他实体进行命名,这些名字称为"标识符”。标识符只可以使用字母、数字和下划线,而且必须以字母或下划线开头。标识符的长度可以是一个或多个字符,最长不允许超过个字符。下面是正确的用户标识符:name、abcl2、person_name下面是不合法的用户标识符:2piece score/student a value int不能以数字开头含有既非字母又非数字的字符含有空格与关键字同名C语言中的标识符区分大小写,因此,sum、Sum和SUM分别代表三个不同的标识符。用户在编程过程中要特别注意的是:标识符不能和C语言系统中的关键字相同(关键字是C语言系统规定的具有特定意义的标识符,见附录A),也不能和用户自定义的函数或C语言库函数同名。2.2.2 常量常量是在程序运行过程中,其值不发生变化的量。在C语言中,常量分为符号常量和直接常量。1 .符号常量符号常量是指用一个标识符表示的常量。符号常量在使用前必须定义,定义的形式如下:!define<标识符><常量>在这里,#define是C语言的预处理命令。在编辑C语言源程序时,可以宜接使用已定义的符号常量,编译时会对程序中出现的符号常量进行替换。【实例2-3了解符号常量的用法。iinclude<stdio.h>!definePI3.1416voidmain()intr=10;floatarea;area=PI*r*r;printf(',area=%fn',zarea);程序运行结果:area=314.1600003>提示:定义符号常量的目的是为了提高程序的可读性,方便程序的调试和修改,因此在定义符号常量时,应尽可能地表达它所代表的含义,如前面定义的Pl就是代表圆周率3.1416。2 .直接常量直接常量是指直接用数值表示的量,如24、3.14、叮,、"string”等。直接常量分为整型常量、实型常量、字符常量、字符串常量、枚举常量等不同类型的常量。1)整型常量可以采用十进制、八进制、十六进制来表示一个整型常量。 十进制:包含09中的数字,但是一定不能以0开头,如15、-255。 八进制:只包含07中的数字,必须以0开头,如017(十进制的15)、0377(+进制的255)。 十六进制:包含09中的数字和af中的字母,以Ox或OX开头,如OxfTHS制的15)、Oxff(十进制的T)、0x7f(十进制的127)。表2-4为整型常量在不同进制下的表示方法。表2-4整型常量的表示方法整型常量进制对应的十进制数值17十进制17017八进制150x17十六进制2317L或171十进制1717LU或171U十进制17:提示:可以在十进制整型常量后面添加"1”或"u”("1”和“u”不区分大小写)来修饰整型常量。若添加"1”(或"L")则表示该整型常量为"长整型",如"171";若添加"u"(或"U'j贝寸表示该整型常量为"无符号型",如,7u"若添加"lu"(或"LU")则表示该整型常量为"无符号长整型",如“171U”。2)实型常量实型常量常用浮点计数法或科学计数法两种方法表示,如231.46、7.36E-7o科学计数法要求字母e(或E)的两端必须都有数字,而且右侧必须为整数。如下列科学计数法均是错误的:e3、2.1e3.2e。3)字符常量字符常量是由一对单引号括起来的单个字符,如,A,、,9,、,$,等均为字符常量。在这里,单引号只起定界作用,不代表字符。在C语言中,一个字符占用一个字节的存储空间,字符在ASCIl表中按照其对应的ASClI码值依次排列。ASCIl表详见附录B。除了能直接表示和在屏幕上显示的字符外,还有一些字符是不能显示、用来表示不可打印的控制字符和特定功能的字符。如实例2-1中的"prinlf("x=%fn”,x);”,其中的“n”就是一个这样的控制字符。这种字符称为"转义字符”。转义字符用反斜杠()后面跟一个字符或者一个八进制或十六进制数表示。表2-5所示为C语言中常用的转义字符。表2-5转义字符转义字符意义ASCII码值n换行10t水平制表符9b退1格8r回到本行的开始13f换页12W反斜杠92V单引号字符39续表转义字符意义ASCII码值"双引号字符340空字符0dddI3位八进制数所代表的字符xhh12位十六进制数所代表的字符3提示: 字符码ddd表示13位八进制数字,可以不用前缀0。如701'代表ASCII值为八进制数101的字符,八进制数101相当于十进制数65,ASCn值为65的字符是大写字母,AL 字符码hh表示12位十六进制数字,不能忽略前缀X。如'x47'代表ASCII值为十六进制数47的字符,十六进制数47相当于十进制数71,ASCIl值为71的字符是大写字母,G'。 单引号和反斜杠必须用转义字符表示。4)字符串常量字符串常量是由一对双引号括起来的字符序列。如“China”、"a”、"123”等都是字符串常量。双引号之间没有任何字符的字符串常量称为空字符串。在C语言中,系统会自动在字符串常量的尾端加入一个字符,0,作为字符串的结束标记,因此,长度为n个字符的字符串常量,在内存中占用n+1个字节的存储空间。例如,字符串常量china有5个字符,则其存储空间为6个字节,其存储形式如图2-7所示。Ch1na0图2-7字符串常量“china"的存储形式在C语言中,处理字符串问题时经常要用到数组或指针,这部分内容将在后续章节中讲述。9注意:不要混淆字符常量与字符串常量。字符常量是由一对单引号括起来的单个字符,占1个字节的存储空间,如,s'、'HOl'等;而字符串常量是由一对双引号括起来的字符序列,如“china",占6个字节的存储空间,其中最后一个字节用来存放字符、0%2.2.3变量1 .变量的定义变量是指在程序运行过程中其值可以改变的量。在程序定义变量时,编译系统就会给它分配相应的存储单元,用来存储数据,变量的名称就是该存储单元的符号地址。在使用变量之前必须对其进行声明,为了声明变量,首先要指定变量的类型,然后说明变量的名字。声明变量的格式如下:类型名变量名表;二提示: 类型名:必须是有效的C语言数据类型,如int、float、double、Char等。 变量名表:可以是相同类型的若干个变量名,变量名之间用逗号隔开。例如:intnumber;*number为整型变量*/floatscore,avg;*scoreavg为单精度实型变量*/通常,变量定义的语句放在函数的开头,也可以放在函数的外部或复合语句的开头。2 .变量的初始化在程序中为变量赋值的时候,编译系统就会根据变量名称找到其对应的存储单元的地址,将所赋的值存放进去。C语言允许在定义变量的同时对变量进行初始化。一般形式如下:类型名变量名=表达式,;例如:inta=3;/*定义a为整型变量,初值为3*/floatpi=3.1416,score;/*定义pi、SCOre为单精度实型变量,Pi的初值为3.1416*/charch=f;/*定义Ch为字符型变量,初值为代,*/也可以对定义的变量的一部分赋初值。例!如:intlength,width=10,area;表示定义length、width和area为整型变量,并且对width赋初值10。若要对几个变量赋同样的值,每个变量应分别赋初值,如写成以下形式:inta=10,b=10zC=IO;而绝不能写成如下形式:inta=b=c=10;2.3运算符与表达式c语言提供了丰富的运算符,除流程控制语句与输入/输出操作之外的绝大多数基本操作都是由运算符来处理的。2.3.1 概述1 .运算符的分类1)按运算符操作对象的数量分类运算符能连接运算对象的个数称为运算符的目。C语言中运算符的目有如下三种。 单目运算符:只能连接一个运算对象,如+、&等。 双目运算符:可以连接两个运算对象,如+、-等。C语言中的运算符大多数属于双目运算符。 三目运算符:可以连接三个运算对象。C语言中只有一个三目运算符,即条件运算符。1 )按运算符的性质分类C语言的运算符极其丰富,根据运算符的性质分类,可分为算术运算符、关系运算符、逻辑:运算符、赋值运算符、条件运算符、逗号运算符、求字节数运算符和位运算符等。2 .运算符的优先级和结合方向优先级是指在使用不同的运算对象进行计算时的先后次序。比如在算术运算符中,乘、除运算符的优先级要高于加、减运算符的优先级。C运算符的优先级共分为15级,1级最高,15级最低。当一个表达式中出现不同类型的运算符时,首先按照它们的优先级顺序进行运算,即先对优先级高的运算符进行计算,再对优先级低的运算符进行计算。当两类运算符的优先级相同时,则要按照运算符的结合性确定运算顺序。圆括号的优先级高于任何运算符。C语言中运算符的优先级关系为:单目运算算术运算关系运算逻辑运算条件运算赋值运算逗号运算。结合方向是指当个运算对象连接两个同一优先级的运算符时,如果先结合左边的运算符,称为“自左向右”的结合方向;如果先结合右边的运算符,称为“自右向左”的结合方向。各类运算符的优先级和结合性详见附录Do3 .表达式由C运算符和运算对象构成的式子称为"表达式"。运算对象可以是常量、变量或函数。单个的常量、变量和函数有时也可以看作表达式。C语言表达式中的所有成分都必须以线性形式书写,没有分式,没有上下标。如数学表达式SinX+ba+b+aba-b转换成C表达式,应写成(Sin(X)+b)(a*b)+(a+b)(a-b)2.3.2算术运算符及算术表达式1 .算术运算符(1) +:加法运算符,或正值运算符,如3+5、+3。(2)-:减法运算符,或负值运算符,如525(3) *:乘法运算符,如3*5。(4) /:除法运算符,如5/3o(5) %:模运算符,或称求余运算符,用于计算两个整数相除后得到的余数,如5%2的值为1。算术运算符的优先级与数学上的规定相同,先乘除后加减,同一级别的一般情况下按自左向右的顺序进行。注意: 对于除法运算符“/",如果两个运算对象都为整数,其意义为"整除",相除的结果为整数,如5/3的结果为整数1,舍去小数部分;如果有一个整数为负数,C语言编译系统将采取"向零取整"的方法,即.53=1,取整后向零靠拢;如果两个运算对象中至少有一个为浮点数,则相除的结果为double型浮点数,如3.0/2的结果为1.5。 对于求余运算符"%",其只能应用于整型数据,且计算结果的符号取决于左操作数的正负号。例如:(-10)%3=-l10%(-3)=l2.算术表达式用算术运算符和括号将运算对象连接起来的符合C语法规则的式子,称为“C算术表达式"。运算对象包括常量、变量、函数等。下面是一个合法的C算术表达式:a*bc-l.5+'a'-sin(×)算术表达式的值就是它的计算结果,算术表达式的类型就是它的计算结果的类型。2.3.3赋值运算符及赋值表达式1 .赋值运算符及赋值表达式在C语言中,"=”称为赋值运算符,它的作用是将一个表达式的值赋给一个变量。由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。一般形式如下:<变量名>=<表达式>赋值运算符的结合性是"自右向左",赋值运算符的左边必须是一个代表某一存储单元的变量名(或是具备变量性质的、代表某存储单元的表达式),赋值运算符的右边可以是任意合法的C表达式。赋值运算的功能是先求出右边表达式的值,然后再把此值赋给运算符左边的变量,也就是把数据放入以该变量名标识的存储单元中。例如:a=10;/*把整型常量10赋给变量a*/a*变量名存储单元>10 + -变量值图2-8变量、 变量值与存储单元的关系变量、变量值与存储单元的关系如图2-8所示。在程序中,可以多次给一个变量赋值,每赋一次值,相应的存储单元中的数据就被更新一次,存储单元总是存放最后一次所赋的数据。隹说明: 赋值运算符的优先级只高于逗号运算符,比其他任何运算符的优先级都低。如对于下列表达式:s=13+2*6+369 先计算赋值运算符右边表达式的值,再把计算的结果赋给变量s。 赋值运算符右边的表达式可以是一个赋值表达式。例如:a=b=5;是合法的。根据赋值运算符"自右向左"的结合性,它等价于a=(b=5),最终的结果是a和b都等于5。2.复合赋值运算符在赋值运算符“="之前加上其他的运算符,可以构成复合的赋值运算符。C语言共有10种复合运算符:+=、-=、*=、/=、%=为复合算术运算符,>>=、«=&=、=I=为复合位运算符。复合运算符是两种运算符的结合,它包含两种运算:赋值运算、和赋值运算符复合的其他运算符的运算。例如:x+=10;/*等价于x=x+10*/x%=3;/*等价于x=x%3*/如果复合赋值运算符的右边是一个表达式,则相当于它含有一对括号。例如:x*=y10-25;/*等价于x=x*(y/10-25);*/可以借助以下步骤来理解其运算规则。(1)将"=”右侧的表达式用括号括起来:(y10-25)o(2)将"="左侧的内容"x*"移到右侧:x*(y10-25)o(3)最后补上“="左侧的变量名:x=x*(y10-25)o2.3.4自增、自减运算符C语言提供了自增和自减运算符。自增运算符+:功能是将变量的值加1。自减运算符一:功能是将变量的值减1。"+"和"一”运算符都是右结合方向的单目运算符,它们既可以作为变量的前缀,又可以作为变量的后缀。例如:对于变量X,+X、-X表示“+"、"-"作为变量X的前缀,x+、X一表示“+,、"一”作为变量X的后缀。粗略地看,+X和X+都是使X的值加1,但是+X和X+的区别在于:+X是先将X的值加1,再使用变量X:而X+则是先使用变量X,然后再将X的值加1。例如下面的语句:x=5;y=+x;执行完语句后,X的值为6,y的值也为6。这是因为语句“y=+x;”等价于“x=x+l;y=x;”°又如下面的语句:x=5;y=x+;执行完语句后,X的值为6,y的值为5。因为语句“y=x+;”等价于“y=x;x=x+l;”°。注意: "+”和"一”运算符只能应用于变量,不能应用于常量或表达式。例如,12+、(i*j)-都是不合法的。 "+,、"一"与单目运算箝具有同一优先级,结合方向都是"自右向左”。因此,对于"-i+"要理解为"-(i+)",而不能理解为"(-i)+",这是因为(T)是表达式,不能做"+"和"一"的操作对象。2.3.5关系运算符及关系表达式1 .关系运算符关系运算符用于关系运算。关系运算是对两个操作对象进行比较的运算,通过比较来判断两个操作数对象之间是否存在一定的关系。C语言中的关系运算符共有6种,都是双目运算符,结合方向都是"自左向右",如表2-6所示。表2-6关系运算符及其含义和优先级关系运算符含义优先级>=大于等于>大于<=小于等于<小于=等于低!=不等于2 .关系表达式用关系运算符将两个表达式连接起来的式子,称为“关系表达式"。关系表达式的值是一个逻辑值,即“真”和“假"。关系表达式所表达的关系如果成立,其值为“真";如果不成立,其值为“假"。在C语言中没有专门的逻辑型数据,而是用O表示"假",非O的值表示“真",通常用1来表示“真"。注意: 关系运算符连接的表达式可以是C语言中任意的合法的表达式。 关系运算符的操作对象可以是字符型数据。如表达式匕Tm,的结果为0,因为字符在存储单元中是按照ASCII码存储的('a'的ASCII码为97,'m,的ASCIl码为109),因而字符型数据的关系运算比较的其实是它们的ASCn码。 若变量x、y都是实型数据,应当避免使用关系运算符"x=y"这样的表达式,因为通常存放在存储单元中的实型数据都是有误差的,因此不可能精确相等,这样会导致关系表达式的值总为0。2.3.6逻辑运算符及逻辑表达式1 .逻辑运算符逻辑运算符用于逻辑运算,也就是"真""假”值的运算。C语言提供的逻辑运算符及其含义和优先级如表2-7所示。表2-7逻辑运算符及其含义和优先级逻辑运算符含义优先级逻辑非&&逻辑与Il逻辑或I低逻辑运算符中的"!”为单目运算符,其余都是双目运算符。2 .逻辑表达式用逻辑运算符将表达式连接起来的式子,称为“逻辑表达式”。逻辑表达式中的操作对象可以是C语言中任意合法的表达式。逻辑运算符主要用于进一步明确关系表达式的关系,逻辑表达式的结果同关系表达式的结果一样,只有“真"和"假"。表2-8所示为逻辑运算规则。表2-8逻辑运算规则ABA&&BAHB!A真真真真假真假假真假假真假真真假假假假真表2-8中的A、B均可以是其他关系表达式。对于由关系表达式和逻辑表达式组成的复杂表达式,为了提高运行速度,编译系统会对下列特殊的情况作不同的处理。1)(表达式1)Il(表达式2)根据语法规则,只要(表达式1)的值为真,不论(表达式2)的值为何值,最终表达式“(表达式I)1(表达式2)"的结果都为真,编译器不会对(表达式2)进行运算,但会检查其语法是否有错误。例如有如下语句:intX=Io,y=20,z;z=(x<y)II(y);printf(,'z=%dn",z);因为表达式(x<y)的结果为真,因而不论后面的表达式为何值,表达式(x<y)(-y)的结果都为真,此时系统不会计算表达式(一y),y的值也不会减少,程序运行后的结果为Z=1、y=20。2)(表达式!)&&(表达式2)根据语法规则,只要(表达式1)的值为假,不论(表达式2)的值为何值,最终表达式"(表达式1)&&(表达式2)”的结果都为假,编译器不会对(表达式2)进行运算,但会检查其语法是否有错误。例如有如下语句:intx=10,y=20,z;z=(x>y)&&(-y);printf(,'z=%dn",z);因为表达式(x>y)的结果为假,因而不论后面的表达式为何值,表达式(x>y)&&(一y)的结果都为假,此时系统不会计算表达式(-y),y的值也不会减少,程序运行后的结果为Z=0、y=20°2.3.7 位运算符及位运算位运算是指二进制位的运算,主要针对整型和字符型数据而言。位运算符的属性如表2-9所示。表2-9位运算符的属性位运算符含义类型结合性优先级按位取反单目自右向左«位左移双目自左向右高»位右移双目自左向右&位与双目自左向右位异或双目自左向右I位或双目自左向右低位运算的结果只有。或1,位运算的规则如表2-10所示。表2-10位运算的规则ABABabA&BABI11O1OOIO11OO10OOOO11O111O1O关于位运算的详细内容,将在第12章中介绍。2.3.8 条件运算符及条件表达式条件运算符是C语言中唯一的三目运算符。由条件运算符和运算对象构成的表达式称为条件表达式,条件表达式由"?"和“:"组成,其结合方向是“自右向左”,一般形式如下:表达式1?表达式2:表达式3;条件表达式的运算过程为:先计算表达式1的值,如果表达式1的值为真(非0),则表达式2被求值,此时表达式2的值就是整个条件表达式的值;如果表达式1的值为假(0),则表达式3被求值,此时表达式3的值就是整个条件表达式的值。【实例2-4】条件表达式示例。linclude<stdio.h>voidmain()inta=12,b=24,c;c=a>b?a+b:a-b;printf(,c=%dn,c);)程序运行结果:c=-12条件表达式是可以嵌套使用的,当多个条件表达式嵌套使用时,每个后续的“:”总是与前面最近且没有配对的"?”相联系。例如:a>b?a:c>d?c:d相当于:a>b?a:(c>d?c:d)如果a=6、b=8、C=I2、d=24,则条件表达式的值为24。2.3.9 逗号运算符及逗号表达式逗号表达式是由逗号“,"将两个表达式连接起来组成的一个表达式。逗号表达式的一般形式如下:表达式1,表达式2,,表达式n;逗号表达式的求解过程为:先计算表达式1,再计算表达式2直至计算表达式n,整个表达式的结果就是表达式n的值。逗号表达式的运算优先级是最低的,结合方向是"自左向右”。【实例2-5】逗号表达式示例。include<stdio.h>voidmain()intx,y;y=(x=3*5,x*3,x+12);printf("y=%dn",y);程序运行结果:y=272.3.10 数据类型的转换double < Hoatlongunsignedint <char、short图2-9自动数据类型转换规则在C语言程序中,若出现包括不同类型的常量和变量的一个表达式,那运算结果会是什高么呢?C语言规定:不同类型的数据在参加运算时,要先转换成相同类型的数据,然后再进行运算。运算结果的类型就是转换后的类型。C语言的数据类型转换分为系统自动进行的类型转换和强制类型转换。1 .系统自动进行的类型转换自动类型转换的规则:取值范围较小的类型向取值范围较大的类型转换,如图2-9所示。注意: 图中指向左侧的箭头表示必须进行的转换。char、short型数据必须要转换为int型,float型数据必须要转换为double型。 纵向箭头表示当运算对象为不同数据类型时转换的方向,由低向高转换。例如,int型数据与double型数据进行运算时,要先将int型转换为double型,然后两个double型数据进行运算,结果为double型。而不是int型先转换为UnSigned型,再转换为IOng型,最后转换为double型。【实例2-6数据类型转换分析。计算表达式120-km,+24.67的值。(1)计算12O-mZ先将字符,m,转换为整数109,再计算120709,计算结果为11。(2)计算11+24.67:由于表达式中有实型数据,因而要先将11和24.67都转换为double型,再进行运算,结果为35.670000。2 .强制类型转换自动类型转换是编译系统自动进行的,不需要用户干预。C语言允许用户根据自己的需要将运算对象的数据类型转换为所需的数据类型。强制转换的形式如下:(类型名)(表达式);功能:强行将表达式的类型转换为所要求的类型。例如:(int)4.2;/*将实型数据4.2强行转换为整型,结果为4*/(float)(x+y);/*将x+y的结果转换为float型*/。注意:强制类型转换之后,原来的变量或表达式的值并未发生改变。例如:floata=3.14;则强制转换表达式(int)a的数据类型为ini型,结果为3;而变量a的数据类型仍然是float型,值仍为3.14。2.4小型实训案例本案例主要应用本章所学的算术运算符以及算术表达式的知识,对一个三位的整数进行分解。1 .实训目的掌握算术运算符及算术表达式的应用。2 .实训内容假定n是一个三位的正整数,将其各位上的数字分解出来,再计算各位数字之和。例如整数n为123,则各位数字之和为1+2+3=6O3 .实训步骤1)分析将n的百位、十位、个位上的数字依次分解出来,再计算它们的和,具体步骤如下。(1)计算n的个位数。利用算术运算符"%",计算n与10的余数,所得的计算结果就是n的个位数:个位数=nS10;(2)计算n的十位数。利用算术运算符“/”关于整数相除的特点,即“两个整数相除的结果仍然为整数”,将n除以10就可以除掉n的个位数,再利用求模运算符(%)与10求余数,所得的计算结果就是n的十位上的数字:十位数=n:IoSI0;(3)计算n的百位数。将n除以100,得到的结果就是n的百位数:百位数=n100;求和。总和=个位数+十位数+百位数;Iinclude <stdio.h> void main () int n,g,s,b,sum;n=123;g=n%10; s=n10%10;b=n100;2)编程实现/*n表示要分解的整数,g表示个位的数字,S表示十位的数字,b表示百位的数字,SUm表示各位数字之和*/*分解出个位上的数字*/*分解出十位上的数字*/*分解出百位上的数字*/sum=g+s+b;rintf(,dn",sum);本章小结本章主要介绍了C语言的数据类型和各类运算符及表达式,这是编写C语言程序的基础。C语言的基本数据类型包括整型、实型和字符型,整型又分为基本整型、短整型、长整型,实型又分为单精度实型、双精度实型。C语言的运算符共分为算术运算符、赋值运算符、逻辑运算符、关系运算符、逗号运算符、条件运算符、求字节数运算符及位运算符等,每一种运算符都有其结合方向和运算优先级。C语言不同类型的表达式是通过不同的运算符构成的,一个常量、变量都可以看作一个表达式。混合表达式在运算时,要按运算符的优先级次序执行,当一个运算符两侧的运算对象的数据类型不同时,系统会遵循"先转换,后运算”的原则,将数据自动转换为同一类型后再进行运算。习题一、选择题1 .若变量a是整型数据,并执行了语句"adA'+1.6;'',则正确的叙述是(),A.a的值为字符CB.a的值是浮点型C.不允许字符型和浮点型相加D.a的值为字符,A'的ASCn码值加12 .下列变量定义中合法的是()。B. double b

    注意事项

    本文(第2章C语言基础知识.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开