1 / 106

第三章 基本数据类型、运算符与输入输出函数

第三章 基本数据类型、运算符与输入输出函数. 3.1 基本数据类型 3.2 常量 3.3 变量 3.4 C 语言的运算符和表达式 3.5 输入输出函数. 基本整型( int ). 带符号. 短整型( short int ). 长整型( long int ). 整型. 整型( unsigned int ). 无符号. 短整型( unsigned short int ). 长整型( unsigned long int ). 基本类型. 字符型( char ). 单精度型( float ). 实型(浮点型).

malory
Download Presentation

第三章 基本数据类型、运算符与输入输出函数

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 基本数据类型、运算符与输入输出函数 • 3.1 基本数据类型 • 3.2 常量 • 3.3 变量 • 3.4 C语言的运算符和表达式 • 3.5 输入输出函数

  2. 基本整型(int) 带符号 短整型(short int) 长整型(long int) 整型 整型(unsigned int) 无符号 短整型(unsigned short int) 长整型(unsigned long int) 基本类型 字符型(char) 单精度型(float) 实型(浮点型) 双精度型(double) 长双精度型(long double) 枚举类型(enum) 数据类型 数组类型 构造类型 结构体类型(struct) 共用体类型(union) 指针类型 其他类型 空类型(void) 3.1 基本数据类型

  3. 3. 2 常量 何谓常量——程序中直接书写的数据; 例如:a=100; b=a+12; 常量类型——以字面形式区分; 例如: 12 (基本整型) 3.5 (实型) 123L (长整型) 'A' (字符型) 符号常量——用标识符代表一个常量。

  4. 3.2 常量 3.2.1 整型常量 整型常量就是整常数,可以用三种进制形式表示: 1.十进制数:以非0数字开头的数。如123,-123等,其每个数字位可以是0~9。 2.八进制数:以数字0开头的数。如0123,-0123等,其每个数字位可以是0~7。 3.十六进制数:以0x(或0X)开头的数。如0xffff,0x1111,-0x123等,其每个数字位可以是0~9、A~F(或a~f)。

  5. 3. 整常量类型 int 型常数:-32768~32767视为int常数; 可赋给int、long型变量。 long型常数: 在 -2147483648 ~ 2147483647之内、但超出 -32768~32767的数及带后缀l / L的视为long型常数;可赋给long型变量。 long intlong -2147483648 -32768 0 32767 2147483647 带后缀 l 或L的数:long

  6. 整型量的溢出 若一个变量无法容纳下要存入的数,这种现象称为溢出,溢出将导致数据存储错误;在运算过程中也有可能产生溢出导致运算结果错,因此程序设计中应避免产生溢出。 例:int a, b; a=65538; b=123*456; printf("a=%d, b=%d", a, b); a=2, b=-9448(溢出的错误结果) YS

  7. 溢出原因: 1) a=65538; 65538=(1 0000 0000 0000 0010 )2 a: 只存入后16位 2) b=123*456; 123×456=56088=( 1101 1011 0001 1000 )2 b: -9448的补码 0000 0000 0000 0020 1101 1011 0001 1000

  8. 解决办法: long a, b; a=65538; b=123*456; /*计算结果有溢出*/ printf("a=%ld, b=%ld", a, b); a=65538, b=-9448 (仍有错) long a, b; a=65536; b=123L*456; printf("a=%ld, b=%ld", a, b); a=65536, b=56088 (正确)

  9. 3.2 常量(续) 3.2.2 实型常量 实型常量在C语言中又称为实数或浮点数。在C语言中,实数只采用十进制。它有两种表示形式: 1.十进制形式。这种形式的数由整数部分、小数点和小数部分组成(注意必须有小数点)。如:1.24,0.345,.222,234.0,333.,0.0等。 2.指数形式。这种形式由三部分组成:实数部分、字母E或e和整数部分。象123x1022可以表示为123E22或123e22。要注意,字母E或e之前必须有数字,之后的数字必须为整数。如e3、2.1e3.5、2.7e、e等都不是合法的指数形式。

  10. 【例】123.0 0.123 -14.2 0.0 0. .123 【例】表示12亿3千万 数学方式——1230000000或12.3×108 程序中——1230000000.0 (小数形式的实常数) 12.3e+8、1.23e9、123e7 (指数形式)

  11. 指数形式说明: 12.3 e+8 指数部分 数值部分 指数部分:e表示以10为底,可大/小写; 8为指数值(幂), 只能是整数; 指数符号为正可省略; 数值部分: 可是小数或整数;

  12. 【例】表示电子质量0.91×10-30 • 小数形式:0.0000 ……0091 • 指数形式:0.91e-30、0.91E-30、91e-32 • 可见:在程序中表示较大或较小数时,采用指数 • 形式简洁、不易书写错。 • 注意: • 一个数可写成多种指数形式,但存储格式一致; • 2) 指数部分不可单独代表常数; • 如表示108:e+8被编译系统理解为变量e加8; • 正确表示:1.0e8、1e8

  13. 3.2 常量(续) 3.2.3 字符常量 C语言中的字符常量是用单引号(‘)括起来的一个字符。如’A’、’x’、’D’、’?’、’3’、’X’等都是字符常量。 C语言中还规定有另一类字符常量,它们以'\'开头,被称作转义字符,意思是将反斜杠(\)后面的字符转变成另外的意义。

  14. C特别规定的转义字符:

  15. 例: 在程序中表示下列字符 字符A : 'A'  '\101'  '\x41' 字符3: '3'  '\63'  '\x33' 单引号: '\'' 空格: ''  '\40'  '\x20' 回车换行: '\n' 不可键入字符≥: '\362'  '\xf2' 例:在程序中表示字符序列ABC、123 "ABC"、"123" 构成字符串常量

  16. 3.2 常量(续) 3.2.4 字符串常量 字符串常量是用双引号括起来的字符序列。如:"string"、"This is my first program!"。C语言规定字符串的存储方式为:串中的每个字符(转义字符只能被看成一个字符)按照它们的ASCII码值的二进制形式存储在内存中,并在存放串中最后一个字符的位置后面再存入一个字符'\0'(ASCII码值为0的字符),这是字符串结束的标志。

  17. 字符串常量 1) 表示——由一对双引号括起来的字符序列; ”How do you do.” 长度:14 ”123.456” 长度:7 ”a” 长度:1 在程序中表示下列字符串: x≥y ”x\xf2y” 长度:3 C:\DOS ”C:\\DOS” 长度:6 ”OK!” ”\”OK!\” ” 长度:5

  18. 2) 存储——双引号内每个字符占用一个字节,所有 字符按顺序连续存储,自动在最后加入字串 结束标志:空字符 例:  0010 0000 0000 0000 空字符:名为NUL的控制字符 其ASCII码值:0 程序中表示:’ \0 ’ 注意:空字符与空格字符是不同的字符。

  19. 3.2 常量(续) 3.2.5 符号常量 C语言允许将程序中的常量定义为一个标识符,称为符号常量。符号常量一般使用大写英文字母表示,以区别于一般用小写字母表示的变量。符号常量在使用前必须先定义,定义的形式是: #define 标识符 常量

  20. 3.3变量 变量——用标识符标识且在程序运行过程中允许被改变的量; C变量命名(C标识符)规则: 由大或小写字母、数字、下划线组成,且第一 个字符必须是字母或下划线。 变量名长度: MS C有效字符为8个,多余部分不予识别; Turbo C隐含有效字符为32个,可自行调整。

  21. 变量命名举例: 合法:sum、SUM、Average、toal、cost_1、_1 非法:for、num-1、2a、8L、ABC# 注意: 1. C变量名中字母可大小写,但有大小写之分, SUM、sum、Sum被视为不同的变量。 2. 有效字符相同的变量名被视为是同一个变量; 如MS C中student_name与student_number。 3. 在实际应用中命名应尽量见名知义。 4. C中变量必须先定义后引用。

  22. 与变量有关的概念: 1) 变量三要素:变量名、变量地址、变量值 2) 变量的地址 (变量的指针) 给变量分配的存储单元第一个字节的地址; 例如:int n, m; n=10; m=25; ┇ ┇ n的地址→ 202 m的地址→204 10 25

  23. 3) 变量被赋值的物理意义是向它的存储单元存数; 4) 变量可多次被赋值,新值将覆盖旧值; 例如:n=10; /*赋值:破坏性的*/ n=45; 5) 变量被引用的物理意义是从它的存储单元中读数; 例如:n=10; m=n+2; /*引用:非破坏性的*/ 6) 两变量内容的交换可借助另一个变量或利用运算 关系实现。

  24. 例如:实现两个变量内容的交换 方法1:利用中间变量实现 int a=5, b=10, t; t=a; a=b; b=t; 方法2: a=a+b; /*5+10=15a*/ b=a-b; /*15-10=5 b*/ a=a-b; /*15-5=10a*/ a b 5 10 10 5 t 5

  25. 3.3 变量 (续) 3.3.2 整型变量 整型变量可分为:基本型、短整型、长整型和无符号型。无符号型又分为无符号整型、无符号短整型和无符号长整型。

  26. 整型变量 分类——分为六类

  27. 在Turbo C中:

  28. 3.3 变量 (续) 3.3.3 实型变量 C实型变量分单精度(float型)和双精度(double型)两类。

  29. 实型变量——分为两类;

  30. 实型量的舍入误差 例:float a, b; a=123456.789e5; /*赋值产生误差*/ b=a+20; /*引用误差的a*/ printf("%f", b); 12345678848.000000 (前7位有效) 理论值应为: 12345678900.0+20=12345678920.0 要精确存储12345678900.0需37bit尾数; 解决办法:double a, b;

  31. 3.3 变量 (续) 3.3.4 字符型变量 字符型变量用来存放单个字符,定义形式如下: char c1, c2; 可对c1、c2赋值,c1='a';c2='b';注意不能将字符串常量赋给一个字符变量。

  32. 字符变量的存储及引用 例:char c1, c2 ; c1=’A’ ; c2=c1; 存储: c1: 若:c1按字符解读——字符A c1按整数解读—— +65

  33. 3.4 C语言的运算符和表达式 3.4.1 算术运算符和算术表达式: 1) 基本算术运算符: + 加 / 取正 (双目运算符 / 单目运算符) - 减 / 取负 (双目运算符 / 单目运算符) * 乘 (双目运算符) / 除 (双目运算符) % 整除取余 (双目运算符)

  34. 注意: • +、-为复用运算符; • 如:int a, b, c; • a=5; • b=a-3; /*减:两个运算目标*/ • c=-a; /*取负:一个运算目标*/ • 2) 两整数相除结果仍为整数 • 如:5/2  2 -5/3  -1 1/2  0 • 要依实际应用情况加以利用或避免。

  35. 3) 求余运算要求两运算元素均为整型,余数仍 为整型; 如:int a, b; a=11%3; /*2 a*/ b=5%a; /*1 b*/ 若有: a=11.0%3; 编译时将视为语法错。

  36. 2) 算术表达式: C表达式——由运算符、括号将运算元素连接起来 的有值的式子。 算术表达式—— 由算术运算符、括号将数值型的运算元素连 接起来,其值为数值量的式子。 其中:运算元素可为常量、变量、函数调用等。 如:28+a sin(1.0)*10+y

  37. 注意: • 为保证表达式运算关系的正确性,需加入必要的括号,并注意括号的层次及配对关系; • 2) 乘号不得省略; • 3) 应避免整型量相除可能带来的不良影响; • 4) 函数调用是以函数的返回值来参与运算的。

  38. 自增、自减运算符 自增1:++ 自减1:– – 含义: ++i 前置自增;先自加1,后引用; i++ 后置自增;先引用,后自加1 ; – –i 前置自减;先自减1,后引用; i– –后置自减;先引用,后自减1 ; 意义:可提高执行效率。 优先级2级、单目、自右而左

  39. 注意: • 只能对变量进行自增、自减运算; • 2) ++、-- 、取负同为二级,结合性:自右而左; • 如: i=3; • j= -i++; /* -3j , i: 4 */ • 3) 自加/减作为函数参数时,注意参数求值顺序; • 如:i=3; • printf("%d,%d", i, i++); • 4, 3 • 3, 3 输出顺序 Turbo C求值顺序 Unix C求值顺序

  40. 3.4 C语言的运算符和表达式 (续) • 算术运算符和算术表达式 注意以下几点: ⑴ 两个整数相除结果为整数,如5/3的结果为1。如果参加运算的两个数中有一个数为实数,则结果是double型。 ⑵ 模运算符%,又称求余运算符,要求%两侧均为整型数据,如7%4的值为3;而且余数的值符号与被除数一致,如-7%-4的值为-3。 ⑶ 运算符“+ +”是操作数加1,而“--”是操作数减1,只适用于变量,不能用于常量或表达式。

  41. 3.4 C语言的运算符和表达式 (续) • 3.4.2 赋值运算符和赋值表达式 • 一、基本赋值运算符 • 二、复合赋值运算符

  42. 赋值运算符和赋值表达式 1. 赋值运算符 =优先级14级、双目、自右而左; 2.赋值表达式 一般形式:变量 = 表达式 其中: 表达式——可是C任何形式的表达式,包括算术、 条件、逗号、赋值等表达式; 特殊形式:单独的常量、变量、函数调用。

  43. 例:b=20 c=sin(1.0) d=pow(2, b)/2 e=a>b a=(b=5) a=b=c=d=0 c=b=a*2; a=(b=10)/(c=2)

  44. 3.赋值运算时的类型转换 被赋值变量的类型与表达式值的类型一致, 直接赋值;不一致系统自动以被赋值变量的类型 为准进行转换,然后赋值。 例:int i=10, j; float f; double d; i=i-5; /* 5i */ j=i+3.56; /*8 j */ f=23; /*单精度23.0 f */ d=j+f; /*双精度31.0 d */

  45. 注意:赋值时的自动类型转换所造成的误差 例:main( ) { float x, y ; /*double x, y;*/ x=123.456781234; y=x+0.111111111; printf(”X=%f,Y=%f\n”, x,y); } X=123.456779, y=123.567894 x、y改为双精度的结果: x=123.45678123400000,y=123.56789234500000

  46. 复合赋值运算符 在赋值运算符前加上其它双目运算符构成; 算术复合赋值运算符: + = 和赋值 -= 差赋值 * = 积赋值 优先级14级、自右而左 / = 商赋值 %= 模赋值 意义:提高编译效率、目标代码的质量。

  47. 例: a=a+3  a+=3 x=x%3  x%=3 x=x*(y+8)  x*=y+8 a=a*b-3 ≠ a*=b-3  a=a*(b-3) 注意:复合赋值运算符针对右边整个表达式。 例:a=6; a+=a*=a-1; /*60 a*/

  48. 3.4.3 关系运算符和关系表达式 1.关系运算符(比较运算符) 六个: < 小于 <= 小于或等于 > 大于 >= 大于或等于 == 等于 != 不等于 6级、双目、自左而右 7级、双目、自左而右

  49. 2.关系表达式 一般形式:<表达式1> <关系运算符> <表达式2 > 表达式1、2的形式:算术、赋值、逗号、关系等任 何C合法的表达式。 关系表达式的值:逻辑值真、假 真——对应关系式成立,用整型量1代表; 假——对应关系式不成立,用整型量0代表; 关系表达式的位置:C任何允许使用表达式的位置。

  50. 如:if (a<0) a=-a; 控制语句表示条件的位置 printf("%d", a>10); 作为函数的参数 k=m!=1赋值表达式的右边 c=c+(g>=60) 表达式的一个运算元素 举例:说明下列关系式的含义 1) i<=5 2) a+b>sqrt(c) 3) a%2==0 4) (c=getchar( ))=='#' 区分:c=getchar( )=='#'

More Related