C语言讲义第02章-变量与表达式.ppt_第1页
C语言讲义第02章-变量与表达式.ppt_第2页
C语言讲义第02章-变量与表达式.ppt_第3页
C语言讲义第02章-变量与表达式.ppt_第4页
C语言讲义第02章-变量与表达式.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 变量与表达式 C语言程序设计 主要内容 简单表达式 变量 数据类型 赋值语句 复杂表达式 基本输入输出函数 小结 2.1 简单表达式 所谓简单表达式就是指由算术运算符连接操作数组成的算术表达 式 2.1.1 算术运算符及其表达式 在C语言中有以下算术运算符: 算术运 算符 操作结合性 +、-取正负 右结合 性 *乘号左结合 /除号左结合 %取余左结合 +加号左结合 -减号左结合 2.1 简单表达式 2.1.2 C语言表达式书写规则 对数学上的表达式和C语言程序中的表达式做了一个对比 : 数学表达式合法的C语言表达式 x * ( - y ) x * y / ( m * n ) sqrt ( fabs ( 5 * x + y ) ) 19 (-b + sqrt ( b * b 4 * a * c ) ) / ( 2 * a ) C语言表达式的书写要遵循一定的规则,规则如下: 乘号用*表示,不能省略; 表达式从左到右在同一基准上书写,无高低、大小之分, 都写在同一行上; 括号必须成对出现,且都用圆括号。 2.2 变量 2.2.1 变量 变量就是指在程序的执行过程中其值可以改变的量。 变量具有三要素:名称、类型和值 变量的命名 C语言规定:标识符只能由字母、数字和下划线三种字符构 成,并且第一个字符必须是字符和下划线,不能使用C语言 中的关键字 C语言大小写敏感 一般地,变量名使用小写字母表示,而大写字母常用来表示 符号常量或自定义的类型名。 在选择变量名和其他标识符时,应尽量注意做到“见名知意 ” 2.2 变量 变量的定义 变量定义的作用是: 为变量指定一个名称及其数据类型,让系统给它分配相应的 存储空间。 确定相应变量的存储方式、数值范围和有效位数。 确定相应变量所允许进行的操作。 变量定义的一般格式为: 数据类型 变量名表; 其中: 变量名表可以包含若干个变量,两者之间用逗号分隔,如 int ix, iy; 数据类型:可以是C语言中的基本数据类型,也可以是用户 自定义的数据类型 2.2 变量 变量赋值与初始化 定义变量的同时对变量进行了初始化(赋初值) 如果在定义时没有为变量赋初始值,使用已定义的变量前,要对它进行初 始化 2.2.2 常量和符号常量 在程序设计语言中,凡是在程序运行过程中其值不变的量,都称为常量 。 整型常量即整型常数,在C语言中整型常量有十进制、八进制和十六进 制三种形式。 十进制整型常量。不能以0开头,由正、负号和09数字组成的常数。 八进制整型常量。以0开头,由07数字组成的常数。 十六进制整型常量。以0x或0X开头,由09数字和字母af(或AF)组成 的常数。 2.2 变量 实型常量:又称为浮点数,只能用十进制来表示,有 两种表示形式:小数形式和指数形式。 小数形式:它由正负号、数字和小数点组成的常数(必须有 小数点,它前面的零可以缺省)。 指数形式(科学计数法):它由数符、尾数(整数或小数) 、阶码标志(E或e)、阶符和整数阶码组成的常数。注意E 或e前面必须有数字,且E后面的指数必须是整数。 2.2 变量 字符常量 在C语言中,字符常量是就用单引号括起来的一个 字符,其值为ASCII码值。 在内存中,字符数据是以与其相对应的ASCII码( 即以整数表示)来存储的,占用一个字节。因此C 语言中字符数据和整型数据之间可以通用 0和0是截然不同的两个数据,前者是字符常量 ,后者则是整型常数。 2.2 变量 除了使用一般字符常量外,C语言还允许用一种特殊形式的字符 常量转义字符常量,即一个以“”开头的特定字符序列,用来 表示ASCII字符集中控制代码及某些用于功能定义的字符。 常用的转义字符如表所示 字符形式含义ASCII码值 0 NULL 或0值 0 a 响铃 7 b 退格键(backspace键) 8 f 走纸换页,将当前位置移到下页开头 12 n 回车换行,将当前位置移到下一行开头 10 r 回车(不换行),将当前位置移到本行开头 13 t 水平制表(跳到下一个Tab位置) 9 v 垂直制表 11 反斜杠字符“” 92 单引号字符 39 ” 双引号字符 34 ? 问号 63 ddd 13位8进制数所代表的字符 0ddd xhh 12位16进制数所代表的字符 0xhh 2.2 变量 例2.1 转义字符的使用 字符串常量 字符串常量是由双引号括起来的一串字符序列 字符串常量与字符常量是不同的,字符串常量中的字符序列 连续存放,并在最后加上0字符作为字符串的结束标志 字符常量是用单引号括起来的一个字符 符号常量 在程序中经常用到某些常量,为方便阅读程序,理解常量的含义 ,一般就把常量定义为符号常量。在C语言中符号常量定义的一 般形式为: #define 符号常量名 常量表达式 例2.2 符号常量的应用,输出圆的面积 2.3 数据类型 根据数据的取值范围、运算属性及存储方式等,C语 言将数据分成不同的数据类型。 C语言提供了丰富的数据类型,可分为基本类型、构 造类型、指针类型和空类型,如图2-2所示 数据类型确定了数据在内存中所占用的空间大小,也 确定了它所表示的数据范围 2.3 数据类型 2.3.1 整型数据 整型数据分为基本整型(int)、短整型(short)和长整型(long) 三种类型,其中每一种类型又分为有符号(signed)和无符号( unsigned)两种类型。不同的整型数据占用的内存空间不同 表列出了TC2.0系统中整型数据的长度、类型标识符和数值范围 类型标识符长度取值范围 整型signed int16位(2字节)-3276832767 即-215(215-1) 短整型signed short int16位(2字节)-3276832767 即-215(215-1) 长整型signed long int32位(4字节) -21474836482147483647即-231(231-1) 无符号整型unsigned int16位(2字节)065535 即0(216-1) 无符号短整型unsigned short int16位(2字节)065535 即0(216-1) 无符号长整型unsigned long int32位(4字节)04294967295 即0(232-1) 原码 1111 1001 100 000 0001 01 1 真值 2n (2n-1) -1 -0 +0 +1 2n-1 补码 100 1001 1111 000 0001 011 2.3 数据类型 整型变量的定义和应用 C语言规定程序中用到的所有变量必须先定义才能使用,即“强制类型定义”。 变量的定义,一般写在一个函数的开头的声明位置 例2.3 整型数据的运用 整型数据的溢出 例 2.4 整型数据的溢出 整型常量的类型 一个整型常量,如果其值在-3276832767之间,则认为它是int型,可以赋值给 int型、short int 型和long int型变量。如果超出了这个范围,则认为它是 long int型,可以将它赋值给一个long int型变量。 在一个整型常量后面加上后缀L或l表示该常量为长整型(long)常量,如123l, 012L,0x4FL。 在一个整型常量后面加上后缀U或u表示无符号整型(unsigned)常量。 2.3 数据类型 2.3.2 实型数据 实型数据即浮点型数据,C的实型数据有单精度(float)型、双精 度(double)型和长双精度(long double)型三种类型。 由于不同的实型数据在内存中所占的存储单元不同,因此所提供 的有效位数也不同,如表所示。 类型 标识 符 数据长 度 取值范围 有效 数 字 单精度 实 型 float 32位(4 字 节) -3.410- 383.41038 67 双精度 实 型 double 64位(8 字 节) -1.710- 3081.7103 08 151 6 长双精 度 实 型 long do ub le 128位 (18 字 节) -1.210- 49321.210 4932 181 9 2.3 数据类型 例 2.5 实型数据的精度误差。 2.3.3 字符型数据 字符型数据类型标识符是用char表示,在内存中占一个字节(8位)。 在内存中字符型数据是以所存字符的相应ASCII码存储。字符ASCII码 值为0255 字符数据的存储形式与整型数据的存储形式类似,因此,字符型数据和 整型数据之间可以通用,但是字符型数据只占一个字节(8位),所以 字符数据只能存放0255范围内的整数。 一个字符型数据既可以以字符形式输出,也可以以整数形式输出。以字 符形式输出时,先将存储单元中的ASCII码值转换成相应字符,然后再 输出。以整数形式输出时,直接将ASCII码作为整数输出。 字符型数据还可进行算术运算,相当于它们的ASCII码值参与运算。 例 2.6 字符变量作算术运算 2.3 数据类型 2.3.4 类型转换 在C语言中,不同类型的数据之间可以进行混合运算 C语言中有两种类型转换方法:自动类型转换和强制类型转换。 自动类型转换 自动类型转换是指在不同类型的数据进行混合运算时,系统会自 动进行数据类型的转换。但要遵循一定的规则,如图所示。 2.3 数据类型 说明: 横向箭头表示必作的转换,即凡是参与运算的char型和 short型数据一律自动转换成int型,float型数据一律自动 转换成double型,转换后如果两个操作数类型相同,作算术 运算,运算结果与转换后的类型相同。 相同类型(除char、short和float型外)操作数作算术运算 的结果为同一类型。 不同类型的数据或经过(1)转换后类型仍不相同,则按照 图中纵向的箭头进行转换,参与运算中的低级别类型直接转 换为参与运算中的高级别的数据类型。即如果一个int型数 据和一个double型数据进行运算,int型数据则直接转换为 double型数据,而不经过中间的转换。 2.3 数据类型 2.强制类型转换 自动类型转换是由编译系统自动进行的。除此之外,C语言还提 供了在程序中进行强制类型转换的方法,即在运算过程中将表达 式根据需要转换成另一个数据类型。一般形式为: (数据类型) 表达式 例如:( int ) x % 2 当操作数为表达式时,则表达式应用括号括起来。例如: int ix = 7, iy = 2; 如果将ix / iy的值转换为double型,应写为:( double ) ( ix / iy ) ,则先计算ix / iy的值,再将此值转换为double型,结果为3;如 果写为:(double) ix / iy,则是先将ix转换成double型,然后再进 行除法运算,其结果为3.5。 2.4 赋值语句 1. 赋值运算符:基本赋值运算符为“=”,其作用是先计算右侧表 达式的值,再将计算结果赋给左侧的变量 赋值表达式 赋值表达式是指用赋值运算符将变量和表达式连接起来的式子。 一般形式为: 变量名 = 表达式 说明: 赋值运算符“=”是将右侧表达式的值赋给左侧的变量,赋 值运算符左侧必须是变量,右侧是表达式 赋值运算符“=”左右两侧的数据类型应一致。如果表达式 的类型与左侧变量的类型不一致时,则先把右侧表达式的值 转换为与左侧变量相同的数据类型,然后再赋值 赋值表达式本身也是表达式,可以作为右侧的表达式出现 2.4 赋值语句 3. 赋值语句 赋值表达式的后面加分号就是赋值语句,赋值语句执行赋值操作 ,一般形式为: 变量名 = 表达式; 4. 复合赋值运算符 基本赋值运算符与算术运算符或位运算符组合在一起构成复合 赋值运算符,如: +=、-=、/=、*=、%=(复合算术运算符) =、 i=3.12; i的值为3。 将整型数据赋给单、双精度变量时,数值不变,但以浮点数 形式存储到变量中。如:float f; f=23; 23.00000存 储到f中。 将一个 double型数据赋给float变量中,截取前面7位有效 数字,放到float变量的存储单元中。 将一个float型数据赋给double型变量时,数值不变,有效 位扩展到16位,在内存中以64位存储。 2.4 赋值语句 5. 类型转换 字符型数据赋给整型变量时,将字符数据(8位)放到整型 变量低8位 若为unsigned char,则高8位补0。 若为有符号 char ,字符的最高位为0,则高8位补0, 字符的最高位为1,则高8位补1。(符号扩展) 11111110 11111111 11111110 11111110 00000000 11111110 C=376 C=376 2.4 赋值语句 5. 类型转换 将一个int、short、long型数据赋给一个char型变量时, 只将其低8位送到char型变量(即截断),如: int i=300; char c; c=i; 00101100 0000000100101100 i=300 c 2.4 赋值语句 5. 类型转换 将unsigned int型数据赋给long int型变量时,不存在符号扩展问 题,只需将高位补0即可。 将unsigned int型数据赋给int型变量时,将其内容直接送到int 型变量中,但如数据范围超过32767,则会出现数据错误。 1111111111111111 unsigned int i=65535 1111111111111111 按int型输出,结果为 -1 2.5 复杂表达式 2.5.1 自增、自减运算符 自增、自减运算符为 + 和 - ,其作用是使变量的值增1或减1,结合方 向是自右至左。 它们的运算对象只能是变量,不能是常量或表达式。 自增、自减运算符使用的格式有两种: 前缀格式:运算符 变量 (如对变量i,+ i或- i) 后缀格式:变量 运算符 (如对变量i,i +或 i - ) 不同之处在于前者是先执行变量加1(或减1)后,再使用变量 的值;而后者是先使用变量的值后,再对变量加1(或减1)。 对于变量i,i + 和 + i均表示“i = i + 1”,两种格式在使用上没有任何 区别,i -和- i也是一样。但是,当自增、自减运算符参与运算时,两 种格式对表达式产生的结果影响是不一样的。 例2.8 自增、自减运算符的应用 例2.9 分析下面程序的运行结果 2.5 复杂表达式 2.5.2 关系运算符与关系表达式 1.关系运算符 关系运算符主要是比较两个操作数的大小,实际上是比较运算。 C语言提供了6个关系运算符: (大于)、=(大于或等于)、=、 =、 或 # include “stdio.h” 2.6 基本输输入输输出函数 2.6.1 字符输入与输出函数 字符输出函数putchar() 格式: putchar( c ) 功能:向标准输出设备(通常是显示器)输出一个字符。 返回值:正常时返回输出字符的ASCII码值;出错则返回-1。 说明: c可以是一个字符常量(包括转义字符)、变量或表达式, 还可以是整型数据。如果c是整型数据,则输出整型数据值 作为ASCII码值对应的字符。使用此函数时,在程序的开头 必须将头文件stdio.h包含进来,即#include 。 例 2.13 输出字符 2.6 基本输输入输输出函数 字符输入函数getchar() 格式:getchar() 功能:从标准输入设备(通常是键盘)上读取一个字符。 返回值:正常时返回读取字符的ASCII码值;出错则返回-1。 说明: 该函数没有参数。使用此函数时,屏幕上回显从键盘上键入 的字符,并且需按回车键结束。同样,使用此函数时在程序 的开头在程序的开头必须将头文件stdio.h包含进来,即 #include 。 例 2.14 字符输入与输出 注意: 该函数是无参函数. 使用此函数时,键盘键入一个字符,该字符显示在屏幕上(回显),必须 按回车键接受该字符. 该函数只能接受一个字符 与该函数相关的函数getch(),使用getch()时,键盘键入一个字符, 无须按回车键,无回显, 2.6 基本输输入输输出函数 2.6.2 格式化输入与输出函数 格式化输出函数printf() 格式:printf (格式控制字符串,表达式表) 功能:按指定格式向输出设备(一般为显示器)输出数据。 返回值:正常时返回实际输出的字符数;出错则返回-1。 与putchar函数相比,printf函数可以输出若干个任意类型的数据,而 putchar函数只能输出一个字符。 说明: 格式控制字符串 格式控制字符串是用英文的双引号括起来的字符串,它的作用是控制输出 表达式的格式和输出一些提示信息。格式控制字符串包含两种信息: “普通字符”:其作用是输出一些提示信息的字符,它包括一般字符和转 义字符,这些字符按原样输出, 2.6 基本输输入输输出函数 格式说明:由“%”和格式字符组成,如%d、%f、%c等,它表示 按指定的类型输出数据。对不同类型的数据应采用不同的格式 字符,否则将会出现错误。格式字符的种类如表所示 格式字符输出格式 d,i十进制有符号整型数,正数不输出符号 o八进制无符号整型数,不输出前导符0 x,X 十六进制无符号整型数,不输出前导符0x,用x则十六进制数 的af以小写形式输出,用X则以大写字母输出 u十进制无符号整型数 c字符形式,只输出一个字符 s字符串形式,直到遇到字符串结束标志0才结束 f小数形式的浮点数,隐含输出6位小数 e,E 指数形式的浮点数,用e时指数以“e”表示(如2.3e+02)用E时 指数以“E”表示(如2.3E+02) g,G 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义 的0,用G时,如果以指数形式输出,则指数以大写表示 %输出百分号 2.6 基本输输入输输出函数 表达式表 “表达式表”指明了要输出的数据,要输出的数据可以是常量、变 量或表达式,可以指定多个输出数据,数据之间用逗号分隔,输 出数据的个数要与格式字符的个数一致。 例2.15 按相应格式符输出数据 例 2.16 按指定格式输出数据 2.6 基本输输入输输出函数 修饰符 在“格式说明”字符中,“%”和上述格式字符间可以插入几种附加格式 说明符,又称为修饰符,它们均为可选项,如表所示。修饰符可以 指定输出域宽及精度、输出对齐方式等,而且它们还可以联合使用 修饰符功能 m 输出数据域宽,数据长度小于m,左补 空格,否则按原样输出 .n对实数表示输出n位小数,第n+1位小 数四舍五入 对字符串,表示原样输出的位数 - 输出数据在域内左对齐,默认为右对 齐 +指定在有符号数的正数前显示正号“+” 0 输出数值时,指定左面不使用的空位 置自动添0 # 在八进制和十六进制数前显示前导0或 者0x l位于d、o、x、u前,指定输出精度为 long型 位于e、f、g前,指定输出精度为 double型 2.6 基本输输入输输出函数 在使用printf函数输出数据时,经常用到以下几种格式 字符: d格式符。输出一个十进制有符号整数,有下面几 种用法: %d,按照整型数据的实际长度输出; %md,m指定了输出数据的宽度,如果数据的位数小于m,则 左端补空格,否则按实际位数输出, %ld,输出长整型数据。 2.6 基本输输入输输出函数 c格式符,输出一个字符。例如 char c1 = B; printf(“%c”, c1); 则输出字符B。 s格式符,输出一个字符串,常有以下几种用法: %s,例如:printf(“%s“, “how do you do. “); 原样输出该字符串 (不包含双引号)。 %ms,m表示输出的字符串占m列,如果字符串本身长度大于m,则m不 起作用将字符串全部输出。若字符串的长度小于m,则在左端补空格 ; %-ms,如果字符串的长度小于m,则在m列范围内,字符串左对齐, 右端补空格; %m.ns,输出占m列,但只取字符串中前n个字符,右对齐,左边补空 格。 %-m.ns,m和n的含义同上,但是输出n个字符左对齐,右边补空格。 如果n大于m,则m自动取n值,即保证n个字符正常输出。 例 2.17 使用修饰符m.n输出字符串 2.6 基本输输入输输出函数 f格式符,用来输出实数(包括单、双精度数),以 小数形式输出,有以下几种用法: %f,不指定数据宽度,按默认格式输出。整数部分全部输出, 并输出6位小数。不足6位的后面补0; %m.nf,指定数据宽度占m列,其中有n位小数,如果数据长度 小于m,则左补空格; %-m.nf与%m.nf基本相同,输出的数据左对齐,右端补空格。 例 2.18 使用修饰符m.n输出实数 例 2.19 使用修饰符+,0输出数据(两者不能联合使用) 例 2.20 修饰符#示例 例 2.21 使用修饰符l输出数据 2.6 基本输输入输输出函数 使用printf函数时应注意: “%d”是格式说明的开始标记符号,它与修饰符、格式字符 一起构成了格式说明部分,其中修饰符可省略。 修饰符、格式字符一般要用小写(E、X、G除外)。 输出转换:当格式字符与输出表达式类型不一致时,自动按 指定格式输出 2.6 基本输输入输输出函数 2.格式化输入函数scanf() 格式:scanf (“格式控制字符串”, 地址列表) 功能:按照指定的格式从键盘读入数据,存入地址列表指定的存储单元 中,并按回车键结束。 返回值:正常时返回输入数据的个数,遇文件结束返回EOF;出错返回 0。 说明: 1.格式控制字符串 格式控制字符串包含两部分:格式控制字符和普通字符。格式字符 有d、i、o、x、u、c、s、f、e等几种,其作用与printf函数中的 相似,只不过后者是用于输出,前者是用于输入 2.地址列表 地址列表是由若干个地址组成的列表,可以是变量的地 址、字符串的首地址、指针变量等,各地址之间用逗号 分隔。 变量的地址用取地址运算符“ 返回值:如果c是英文字母,则返回非零值,否则返回0。使用方法: isalpha(c)。 例如:isalpha(A)返回值为非0。isalpha(54)返回值为0,因为字符 6的ASCII为56。 检查是否大写字母函数isupper 函数原型:int isupper(char c); 返回值:如果c是大写字母,则返回非零值,否则返回0。使用方法: isupper(c)。 例如:isupper( b )返回值为0。isupper( A )返回值为非0。 检查是否数字字符函数isdigit 函数原型:int isdigit(char c); 返回值:如果c是数字字符09,则返回非零值,否则返回0。使用方法: isdigit(c)。 例如:isdigit( 5 )返回值为非0。isdigit(A)返回值为0。 2.6 基本输输入输输出函数 检查是否字母、数字字符函数isalnum 函数原型:int isalnum(char c); 返回值:如果c是数字字符09或是英文字母,则返回非零值,否则 返回0。 使用方法:isalnum(c)。 检查是否可打印字符函数isprint 函数原型:int isprint(char c); 返回值:如果c是可打印字符,其中包括空格字符,则返回非零值 ,否则返回0。 使用方法:isprint(c)。 检查是否可打印字符(空

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论