《第2章 华科c语言课件》由会员分享,可在线阅读,更多相关《第2章 华科c语言课件(79页珍藏版)》请在金锄头文库上搜索。
1、华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计第2章 数据类型、运算符和表达式2.1 数据类型 2.2 常量和变量 2.3 运算符和表达式 2.4 位运算 2.5 运算符的优先级 2.6 格式化输入输出函数的进一步讨论 2.7 常见问题分析华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计2.1 数据类型在C语言中,数据类型可分为 :华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计一个字节有多大? 可以表示数字0255保存一个字符(英文字母、数字、符号), ASCII编码两个字节保存一个汉字 GB2312,6763字 GB130
2、00.1,20902字 GB18030,27533字 BIG5,13000字 两个字节保存一个宽字符,UNICODE编码华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计基本数据类型(基本数据类型(Data TypeData Type)int 整数,在目前绝大多数机器上占4个字节 BC31中是2个字节 所占字节数取决于机器字长 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计数据类
3、型修饰符数据类型修饰符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)华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计超出取值范围会怎样?超出取值范围会
4、怎样?BC31中int的范围是-3276832767如果我们给它一个小于-32768或者大于32767的数 会如何呢? 现场编程测验小蛇能吞下小蛇能吞下 大象吗?大象吗?华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计溢出(溢出(OverflowOverflow)造成的危害造成的危害一台安装了Windows 95/98的机器,如果连续运 行49.7天没有重新启动,可能死机 原因: Windows自启动时刻起,有一个计数器,记录系统已 经运行了多少毫秒。这个计数器是个unsigned long 类型的变量 unsigned long的最大值是:4294967295一天有 2
5、4*60*60*1000 = 86400000毫秒 4294967295 / 86400000 = 49.71026961805 当49.7天的时候,此计数器会溢出,引起死机华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计浮点数的陷阱浮点数的陷阱#include main() float f;f = 123.456;if (f = 123.456) printf(“f is equal to 123.456 indeed.“); else printf(“In fact, f is equal to %fn“, f); 运行结果会是什么?float.cfloat.c华中科
6、技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计浮点数的陷阱浮点数的陷阱float的精度低,较易发生精度带来的相等性判断问题 double精度高,这个问题发生的概率小一些,但也存在 解决办法:if (fabs(f 123.456) void main( ) char ch;ch=44; /将ASCII码为44即36的字符赋给chprintf(“ch is %cn”,ch); /输出字符,ASCII码为44对应的字符为 $ 输出结果为: ch is $华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计字符串(字符串(StringString)常数常数用双引号括
7、住的由0个或多个字符组成的字符序 列 “I am a student“ “表示空字符串 转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志 C语言内部用0表示字符串的结束 除注释外,是唯一可以出现中文的地方 “x“和x是不同的 里定义了一系列专门的字符串处理函数华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计变量声明变量声明q变量必须“先定义,后使用” -所有变量必须在第一条可执行语句前定义q声明的顺序无关紧要 q一条声明语句可声明若干个同类型的变量,变量名之 间用逗号分隔 q变量定义后,即占用内存,可向其存入各种数据,并可通过变量名使用数据q声明变量,是初始
8、化变量的最好时机 -不被初始化的变量,其值为危险的随机数 char esc = ; int i = 0; int limit = MAXLINE + 1; float eps = 1.0e-5;华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计常量常量q用const修饰定义的变量为常量 const int i=0;q常量只能在定义时赋值,然后不能再改变其值q常数、常量、宏和枚举,都可以用来表示一个 永远不会改变的数 -前者不建议直接使用,而用后三者代替 -后三者的工作机理是完全不同的,达到的效果也不尽相同华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计
9、符号常量 :使用符号常量的好处是:含义清楚;能做到“一改全改”。 符号常量在使用之前必须先定义,其一般形式为: #define 标识符 常量其中#define也是一条预处理命令(预处理命令都以“#”开头),称为宏定义命令。其功能是把该标识符定义为其后的常量值。 华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计例2.2 采用宏定义的方式定义符号常量 #include #define PI 3.14159 /定义符号常量PI,值为3.14159 void main( ) double radius = 10.0;double perimeter;double area;per
10、imeter = 2 * PI * radius; /使用符号常量area = PI * radius *radius; /使用符号常量printf(“radius=%lf,perimeter=%lf,area=%lfn“, radius,perimeter,area); 输出结果为: radius=10.000000,perimeter=62.831800,area=314.159000华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计C C语言中的运算语言中的运算 q计算机只会计算 q任何事物都要被表示成数字和公式的形式后, 才能被计算机计算(被计算机处理) -事物到数
11、字和公式的转换过程叫数学建模 q因为:事物在计算机内的处理都是一种计算 q又因为:计算就要有操作数、运算法则和计算 结果 q所以:事物在计算机内的处理都有操作数、运 算法则和计算结果 q计算结果你可以留用,也可以忽略华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计算术运算符算术运算符q+,-,*,/加、减、乘、除运算 四则混合运算中,先算乘除,后算加减, 先算左,后算右 q%求余运算华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计关于算术运算符的使用有以下规则 +、-、*、/运算符的运算量可为任何整型或浮点型的常 量、变量、有返回值的函数以及表达式。
12、 (2) 正如在数学中除法运算的除数不能为0一样,在x/y中, 表 达式y的取值也不能为0,否则将出现错误。 (3) %运算符要求运算量必须是整型,且%后面的运算量不 能 为0。 例如: 3 % 5 结果为3 -17 % 5 结果为-2 20 % 10 结果为0华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计(4) 当双目运算符的两个运算量的类型相同时,它们的运算 结果的类型与运算量类型相同。 例如: 17.5 + 2.5 结果为double型20.0 16 / 7 结果为整型2,小数部分被省去 16 .0/ 5.0 结果为double型3.2 (5) 当双目运算符的两个
13、运算量的类型不同时,运算前遵循 类型的一般转换规则将运算量自动转换成相同的类型,运 算 结果的类型与转换后的运算量的类型相同(类型的一般转换 规 则将在本章的后面介绍)。 例如: 15.5 + 5 操作数15.5的类型为double型,运算前将整型数5转换成 double型数5.0,然后进行运算,结果为double型数20.5华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计关系运算符关系运算符 q,=, void main( ) char ch1,ch2;ch1 = a;ch2 = b;printf(“%c = %c-%dn“,ch1,ch2,ch1 = = ch2);p
14、rintf(“%c %c-%dn“,ch1,ch2,ch1 ch2);printf(“%c = %c-%dn“,ch1,ch2,ch1 = ch2);printf(“%c != %c-%dn“,ch1,ch2,ch1 != ch2); 运行结果为: a = b-0 a b-0 a = b-0 a != b-1华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计= = 和和 = =q int a; a = 0; a = 1;q int a; a = 0; a = 1;一定要分清=和=下面用法能起点小作用:q int a=0; if (0 = a) printf(“OK“);q
15、int a=0; if (0 = a) printf(“OK“);编译出错编译出错华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计逻辑运算符逻辑运算符q 逻辑运算也被称为布尔(Boolean)运算,运算结果也 是1和0 q a = 10;b = 20;max = b;c = ( a b ) /*(ab)的结果为0,不再运算右表达式(max=a) */printf(“a = %d , b = %d , c = %d , max = %dn“,a,b,c,max); 运行结果为: a = 10 , b = 20 , c = 0 , max = 20 华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计加一和减一运算符加一和减一运算符自增、自减运算符分别为:+(自增)- (自减) +和-分别都有两种不同的形式:前置式: +i、-i后置式: i+、i-华中科技大学信息学院华中科技大学信息学院C C语言程序设计语言程序设计q前置运算是变量先自增1或自减1后,再参与其他的 运算,即先变后用; 例如:x = 0 ; y = - x + x; 结果为x=-1,y=-2 q 后置运算是该变量先以原来的值参加其它运算, 然后再自