资源预览内容
第1页 / 共78页
第2页 / 共78页
第3页 / 共78页
第4页 / 共78页
第5页 / 共78页
第6页 / 共78页
第7页 / 共78页
第8页 / 共78页
第9页 / 共78页
第10页 / 共78页
亲,该文档总共78页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第2章 数据类型、运算符与表达式,哈尔滨工业大学计算机科学与技术学院 苏小红 sxhhit.edu.cn,C语言大学实用教程,内容提要,基本数据类型; 常量和变量; 标识符命名; 常用运算符和表达式; 运算符的优先级与结合性,例2.1:一个简单的C程序例子,#include /*函数功能:计算两个整数相加之和入口参数:整型数据a和b返回值: 整型数a和b之和 */ int Add(int a, int b) return (a + b); /*主函数*/ main() int x, y, sum = 0;printf(“Input two integers:“);scanf(“%d%d“, /*输出x和y相加之和*/ ,并列的两个函数 其中一个是 程序的入口,程序注释,C程序常见符号分类,关键字(Keyword) 又称为保留字,C语言中预先规定的具有固定含义的一些单词 数据类型修饰符int,控制语句return等 标识符(Identifier) 系统预定义标识符,main,printf 等 用户自定义标识符,Add, x, y 等 运算符(Operator) 34种,详见附录2 分隔符(Separator) 空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块 “/*”和“*/”是程序注释所需的定界符 数据(Data) 变量(Variable) 常量(Constant),标识符命名,标识符包含有:变量名,函数名 命名规则( P ),: 由英文字母、数字和下划线组成,大小写敏感 不可以是数字开头 直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合 切忌使用汉语拼音 下划线和大小写通常用来增强可读性 variablename variable_name variableName 不允许使用关键字作为标识符的名字 int, float, for, while, if等 (具体查看附录B C关键字) 某些功能的变量采用习惯命名 如:for语句所采用的循环变量习惯用i, j, k,Windows 风格,UNIX 风格,P45, 2.1,C程序是基本字符的序列。基本字符包括: 数字(09) 大小写字母(az,AZ) 标点符号 特殊字符:空格、换行、制表符(空白字符),起分隔作用。增删空白一般不影响程序的意义,用于各种对象命名。建立定义和使用的联系。 语言里的名字称为标识符。形式:字母/数字的连续序列,字母开头。下划线“_”看作字母 标识符对字母大小写敏感:a和A是不同字母;ABC、Abc、AbC和abc是4个不同标识符标识符示例: abcd sin Beijing C_Programming a3b06 a3b400n while _f2048 sx211_12a abc_ _,数据类型(Data Type),数据为什么要区分类型? 主要目的:是便于对它们按不同方式和要求进行处理。 不同类型的数据代表不同的 数据表示形式 合法的取值范围 占用内存空间大小 可参与的运算种类,数据类型(Data Type),b, B, KB, MB, GB, TB,如何衡量数据类型所占空间大小? bit,中文叫法:位 Byte,中文叫法:字节 Kilobyte(KB),中文叫法: K Megabyte(MB),中文叫法:兆 Gigabyte(GB),中文叫法:G Terabyte(TB),中文叫法:T,1 TB = 1,024 GB,1 GB = 1,024 MB,1 MB = 1,024 KB,1 KB = 1,024 B,1 B = 8 b,b, B, KB, MB, GB, TB,一个位有多大? 只能是“0”或者“1”,这叫二进制 一个字节有多大? 保存一个字符(英文字母、数字、符号) ASCII(美国标准信息交换码)编码 见P427附录D,常用字符与ASCII码对照表 两个字节保存一个汉字 GB编码,基本数据类型,int 整数,在目前绝大多数机器上占4个字节。 TC2中是2个字节 VC中是4个字节 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数,数据类型修饰符,short short int,短整数,一般2个字节长。通常简写为short long long int,长整数,一般是4个字节长。通常简写为long long double,长双精度(高精度)浮点数,一般是10个字节长。 signed 用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),何谓类型溢出(Overflow)?,C语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值,就会产生数值溢出,得到一个不正确的结果。 TC2中int的范围是-3276832767 举例001.c,小蛇能吞下大象吗?,typeoverflow.c,何谓类型溢出(Overflow)?,现象与危害: 溢出后的数值是可预料的,但不同平台会有所不同。当程序从高位计算机向低位计算机移植(比如从64位系统移植到32位系统)时,以前从不出现的溢出问题可能出现。,类型溢出的解决方案?,解决方案: 预先估算运算结果的可能范围,采用取值范围更大的类型。 1+2+3+ 1!+2!+3!+ 13+23+33+ 如果不需要处理负数,则采用无符号类型。 在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。,常数(Constant),整型常数 18、-31 long int型常量: 123l、123L、123456l、123456L unsigned int型常量: 123u、 123U 浮点常数 十进制小数形式: 123.45、456.78 指数形式: 1e-2、4.5e3 /用字母e或者E来代表以10为底的指数 float型常量: 123.45f、 456.78F、1e-2f、4.5e3F long double型常量: 123.45l、 456.78L、4.5e3L 缺省为double 因为字母l和数字1容易混淆,所以当用l做后缀时,常使用大写形式,八进制与十六进制常数,以数字“0”开始的整型常数是八进制数 022、-037 010和10大小不一样 因为八进制并不常用,所以此种表示法比较少见 以“0x”或者“0X”开始的整型常数是十六进制 AF和af用来表示十进制的1015 十六进制的形式比较常用 0x12、-0x1F, -0x1f,字符(Character)常数,字符常数的表示方法 a,A,5,%,$ 单引号内只能有一个字符,除非用“”开头 就是一个普通字符,也可以参与各种数学运算 每个字符具有一个0255之间的数值,可从ASCII表查出 注意:5和整数5的区别 字符的数学运算在密码学内用得比较多 用“”开头的字符为转义字符(用于某些无法通过键盘输入的控制字符) 例如,“n“,代表1个字符,字符常数,转义字符 一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,字符串(String)常数,用双引号括住的由0个或多个字符组成的字符序列 “I am a string“ “表示空字符串 转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志 C语言内部用0表示字符串的结束 除注释外,是唯一可以出现中文的地方 “x“和x是不同的 里定义了一系列专门的字符串处理函数,2.5 变量,什么是变量?一句话,变量是存储数据的值的空间. 变量都会有个名字,这个名字我们叫做标识符。 int i = 1; 变量中的“量”,即变量的值,是在程序执行过程中可以改变、可以赋值的。使用变量的基本原则 变量必须先定义,后使用。变量定义的形式(书上P26): 类型关键字 变量名1,变量名2,所有变量必须在第一条可执行语句前定义,变量声明,声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量 声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数char esc = a;int i = 1,j,k;int sum = 0;float eps = 1.0e-5;,使用变量要注意,不要对变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度,注意!,sizeof到底是什么?,它是一个C语言的关键字,并不是函数 可以用两种形式使用 sizeof(表达式) 一般都使用sizeof(变量名) sizeof(类型) 求出的结果为表达式值所属类型或者类型占用的字节数 现场演示程序,P28, 例2.3,例2.3,#include main() printf(“Data type Number of bytesn“);printf(“- -n“);printf(“char %dn“, sizeof(char);printf(“int %dn“, sizeof(int);printf(“short int %dn“, sizeof(short);printf(“long int %dn“, sizeof(long);printf(“float %dn“, sizeof(float);printf(“double %dn“, sizeof(double); ,P27, 例2.3,为什么要用sizeof获得类型或变量的字长?,因为 同种类型在不同的平台其占字节数不尽相同。比如int在16位、32位和64位系统分别占2、4和8个字节。 现象与危害: 在平台间移植时会出现问题,导致数据丢失或者溢出。 解决方案: 用,并且只用sizeof获得字长。,实型数据提供的有效数字位数 例2.6,#include main() float a;double b;a = 123456.789e4;b = 123456.789e4;printf(“%fn%fn“, a, b); ,1234567936.000000 1234567890.000000,float型数据提供 7位有效数字,double型数据提供 16位有效数字,使用不当导致舍入误差,数据在内存中的存储格式,整型 实型 N=S2j 字符型,所占位数决定 实数的取值范围,所占位数决定 实数的精度,char型与int型之间的关系,例2.5:小写字母转换为大写字母,#include main() char ch = b; printf(“%c, %dn“, ch, ch);ch = b - 32; printf(“%c, %dn“, ch, ch); ,#include main() char ch = b;printf(“%c, %dn“, ch, ch); ch = b - (a - A) ; printf(“%c, %dn“, ch, ch); ,b, 98 B, 66,b, 98 B, 66,相当于97-65,常量(Constant),是一种在程序中保持固定类型和固定值的数据。 可以看成是被固定下来的“特殊变量”。 Consists of: 整型(e.g. 0 67 -2 123L 123u 022 0x12) 缺省为int 实型(e.g. 2.3 1.2e-5 2.73F 2.73L) 缺省为double 字符型(e.g. z 3 $ n ) 用开头的字符为转义字符, 代表1个字符 字符串(e.g. “UKM“ “1“ “5a“ ),
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号