Presentation is loading. Please wait.

Presentation is loading. Please wait.

第6章 基本的程序语句 6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级

Similar presentations


Presentation on theme: "第6章 基本的程序语句 6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级"— Presentation transcript:

1 第6章 基本的程序语句 6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级
6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级 6.4 标准输入/ 输出函数简介 6.5 程序范例

2 6.1 基本数据类型及取值范围 C语言的数据类型可分为: 基本数据类型、构造数据类型、指针数据类型。

3 无符号长整型(unsigned long int) 无符号短整型(unsigned short int)
基本数据类型 整型(int) 字符型(char) 实型 空类型(void) 有符号整型(int) 有符号长整型(long int) 有符号短整型(short int) 无符号整型(unsigned int) 无符号长整型(unsigned long int) 无符号短整型(unsigned short int) 单精度(float) 双精度(double)

4 决定该类数据在内存中的存放长度、数据可执行的操作以及数据的取值范围)
1.C的数据类型: 决定该类数据在内存中的存放长度、数据可执行的操作以及数据的取值范围) 2. 基本数据类型的长度及取值范围 : 表6.1 基本数据类型在不同实现环境中的长度 实现环境 数据类型 字 节 长 度 Turbo C Borland C++ Visual C++ Dev C++ GCC char(字符型) 1 short int(短整型) 2 int(整型) 4 long int(长整型) float(单精度浮点型) double(双精度浮点型) 8 注:数据类型的长度随CPU类型和编译器的不同而不同

5 表6.3 基本数据类型的长度和取值范围(tc编译器,P139)
类型符 长度 取值范围 字符型 char 1 0~255 整型 int 2 -32768~32767 长整型 long int 4 ~ 单精度实型 float 约±3.4*10±38 双精度实型 double 8 约±1.7*10±308 例:验证数据类型的字节长度 6-0   参考:数值数据的表示(P50) 取值范围

6 1.无符号整数(unsigned int) 例1:unsigned i=1 存储形式 取值范围: 0~65535

7 2.有符号整数(int) 例2:int i=1 存储形式 符号位 取值范围: <= 32767

8 例3:int i=-1 原码 原码 补码:取反+1 补码 取值范围: >=

9 总结: 计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码相同,负数的补码是它的反码加1。

10 表6.4 基本数据类型所占字节数及其取值范围

11 6.2 标识符、变量和常量 6.2.1 标识符 标识符就是一个名字,用于标志某个事物,如变量、常量、函数和其他各种用户定义的对象。是由字母、数字、下划线组成且由字母或下划线开头的字符串。

12 如: _sum , sum, stu_name, price30
为合法的标识符。 Number-of-moves (含有非法字符-) piece flag (含有非法字符空格) 5_6_7 (数字开头) 为不合法的标识符。

13 在定义标识符时应注意以下几点: 1. 为了增加可读性,应尽量"见名知意"。 如:sum,area,day,name等等 2. 应尽量避免使用容易混淆的字符。 例如: O(大写字母) o(小写字母) 0(数字) I(大写字母) l(小写字母) 1(数字) Z(大写字母) z(小写字母) 2(数字)

14 3.C语言区分大小写 如:Price 和 price,系统会认为是两个不同的标识符。 4.标识符的长度最长不超过32个字符 5.不能与C语言的关键字(附录A)相同,也不能与用户自定义的函数或C语言库函数同名

15 变量和常量 一、变 量 变量程序执行过程中可以不断改变其值的一种量。变量在内存中占据一定的存储单元,该存储单元里存放变量的值,在程序运行过程中其值可以被改变。 变量名 变量值 x 125 5

16 (通常用小写字母标识变量,大写字母标识常量)
C语言中:变量须先定义(说明),后使用 变量定义形式: 类型关键字 变量名1,变量名2,…,变量名n; 如: int student; student=30; (通常用小写字母标识变量,大写字母标识常量) 则若写成student=30, 则未定义, 编译时指出其错。 可以在说明变量时赋初值 如: int i=9; int a=3,b=6,c=9;

17 注:变量的类型决定了变量的存储空间和取值范围,所以给变量赋值时符合该类型的取值范围
例:了解变量取值范围及C语言特性 

18 二、常 量 常量 程序运行过程中值不能被改变的量。 C语言中,有整型常量、实型常量、字符常量、字符串常量和枚举常量等。

19 1. 整型常量 整型常量就是整型常数。 C语言提供了三种形式: (1) 十进制 (2) 八进制: 以0开头 (3) 十六进制:以0x开头

20 整型常量 进制 十进制数值 123 十 0123 八 83 1*82+2*81+3*80=83 -011 八 -9 0x123 十六 291
1*162+2*161+3*160=291 -0x12 十六 -18 例:整型常量的不同进制表示法 

21 2. 实型常量 实型常量就是实数。 (1)浮点记数法: 一个实数的表示包括数字和小数点。 如: , 等

22 一个实数的表示包括整数部分、小数点、小数部分和指数部分。
(2) 科学记数法: 一个实数的表示包括整数部分、小数点、小数部分和指数部分。 如: e-4、16e-3、1E15。 e-4 整数部分 指数部分 小数点 小数部分 例:实型常量的两种表示法 

23 3. 字符常量 字符常量是用一对单引号括起来的单个字符。 如:‘ a ’, ‘ A ’(二者不一样), ‘ 3 ’ 等。 注意:数字3和字符‘3’的区别,前者为整型常量,占2个字节;后者为字符常量,占1个字节,‘3’的值为51。 由于C语言中的字符数据是按整数值存放的,因此,字符数据可以像整数一样在程序中参与运算。(P144表6.8) ‘A’+4 结果为:69 

24 例:6-1.c  在C中,字符型数据与整型数据可以相互赋值和运算。 在C中,字符常量的有效取值为0~127,因此在运算中要注意不要超过其有效范围。

25 4. 转义字符 转义字符:以“ \”开头后接一个字符或n个字符代表了一种特殊字符常量。(P145表6.9) 

26 转义字符 字符形式 功能 \n 换行 \t 横向跳格(跳到下一个输出区< 8列 >) \v 竖向跳格 \b 退格 \r 回车 \f 走纸换页 \\ 反斜杠字符“ \” \' 单引号(撇号)字符 \ddd 3位8进制数所代表的字符 2位16进制数所代表的字符 \xhh

27 例:6-1-1.c  注意 ① 转义字符中的字母只能是小写字母,每个转义字符只能看作一个字符。 ② 表2-12中的\r、\v和 \f对屏幕输出不起作用,但会在控制打印机输出执行时响应其操作。 ③ 在程序中,使用不可打印字符时,通常用转义字符表示。

28 5. 字符串常量 字符串常量是用一对双引号括起来的若干个字符。 如:“ Good Morning!”,” ” 字符串存放时,在最后加上“\0” –– 空字符。

29 G o d M r n i g ! \0 A A \0 于是: 比较: 字符串常量“A” 和 字符常量‘A’ “A” ‘A’
∴ 字符串长度=实际字符个数+1,但最后\0不输出. 比较: 字符串常量“A” 和 字符常量‘A’ “A” ‘A’ A A \0

30 6. 符号常量 C语言允许将常量定义为一个标识符,称为符号常量。 用预处理命令#define”定义符号常量: 如: #define PRICE 30 #define PI

31 例: #define PRICE 30 main ( ) { int num, total; num=10; total=num*PRICE; printf("total=%d",total); } 符号常量(一般用大写,以区分变量) 符号常量的用处: 提高可读性, 降低输入错误的可能性, 保证一致性.

32 6.3 基本运算符、表达式及运算优先级 C语言有丰富的运算功能,先简述之。 1. 算术运算符 , –, , /, % , 等 2. 关系运算符 >, <, = =, > =, <=, != 3. 逻辑运算符 !, &&, ¦¦ 4. 位运算符 <<, >>, ~, ¦, ^, & 5. 赋值运算符 = 等 6. 条件运算符 ? 等 7. 逗号运算符 ,

33 8. 指针运算符 *, & 9. 求字节数运算符 sizeof 10. 强制类型转换运算符 (类型) 11. 分量运算符 •,  12. 下标运算符 [ ] 13. 其它运算符 如函数的调用( )

34 6.3.1 算术运算符 1. 基本的算术运算符 + 加法,正值 如:3+6, +3 – 减法,负值 如:6– 4, –5
算术运算符 1. 基本的算术运算符 + 加法,正值 如:3+6, +3 – 减法,负值 如:6– 4, –5  乘法 如:38 / 除法 如:8 / 5 % 模运算 如:7 % 4 的值为3

35 注意: (1) 两个整型数据相除  –5/ 3  – 1 (结果取整) (2)有一个 float –5.0/ 3  – (结果为double型) (3) % 求余(取模)运算,两边须为整型数据。

36 2. 自增、自减运算符 + + 自增1 – – 自减1 + +i: 先使i值+1,再使用i值; 前置自增 i+ +: 先使用i值,再使i值+1; 后置自增 - - i: 先使i值-1,再使用i值; 前置自减 i - -: 先使用i值,再使i值-1. 后置自减

37 如:(1) i=5; j=++i; 结果: (1) j=6,i=6 如:(2) i=5; j=i++; 结果: (2) j=5,i=6 注意: 自增运算符(+ +)和自减运算符(– –)只能作用于变量,不能用于常量和表达式。

38 有关自增/自减表达式使用中的问题说明: (1) 要慎用++、 – –运算符。 例:6-2.c  #include<stdio.h> main( ) { int i=3,j; j=(i++)+(i++)+(i++); printf("i=%d,j=%d\n",i,j); } 实际运行结果:i=6,j=9

39 这是因为运算时是先取i的原值:3 i+i+i=9 然后再把6赋给i值 如果表达式j=(i++)+(i++)+(i++);改为: j=(++i)+(++i)+(++i); 则运行结果: i=6, j=18 先对i进行3次自加, 结果i的值为6,然后三个i值相加为18。

40 如: i+++j, 究竟理解为(i++)+j还是i+(++j)?
(2) 在表达式中,有的运算符为一个字符,有的为两个字符。 如: i+++j, 究竟理解为(i++)+j还是i+(++j)? 一般地: 自左至右尽可能多地将若干字符组成一个运算符。(左结合性) 例:6-3.c  #include<stdio.h> main( ) { int i=3,j=3,m; m=i+++j; printf("i=%d,j=%d,m=%d\n",i,j,m); } 对语句m=i+++j; 系统理解为m=(i++)+j; 运行结果:i=4, j=3, m=6

41 (3) 在函数调用时要注意参数的计算顺序, 如: int i=3; int j=3;
printf("i=%d, i++=%d\n", i, i++); printf("j=%d, j++=%d", j, j++); 输出结果:i=4, i++=3 j=4, j++=3 这是因为:参数的计算顺序从右到左。

42 3. 算术表达式的运算 算术表达式: 用算术运算符和括号将运算对象连接起来,且符合C语法规则的式子。 运算对象: 常量、变量、函数等 优先级: ++,--, , /, %, +, – (P148 表6.10) 结合性: 同一优先级, 自左向右,为左结合性,反之为右结合性。

43 6.3.2 关系运算符和关系表达式 1. 关系运算符及其优先次序 C语言提供了六种关系运算符
关系运算符和关系表达式 1. 关系运算符及其优先次序 C语言提供了六种关系运算符 < <= > >= = = !=

44 优先级为: (P153 表6.12)  <、 >、 <=、 >=为同一优先级, = =、 !=为同一优先级,且前者高于后者。  关系运算符优先级低于算术运算符。  关系运算符优先级高于赋值运算符。 如下图: 算术运算符 (+、-、*、/、%) 赋值运算符 (=) 关系运算符 <、<=、>、>= = =、!=

45 2. 关系表达式的运算 定义:用关系运算符将两个表达式(算术、关系、逻辑、赋值、字符等表达式)连接起来的式子。 如: a>b, a+b>b+c, (a=3)>(b=5) , ' a ' > ' b ', (a>b)>(b<c) 关系表达式的结果值规定为1或0. 1 –– 结果为真 (成立) 0 –– 结果为假 (不成立)

46 a>b为1, a>b>c为0,所以f=0.
成立 1 b+c<a 不成立 0 d=a>b 则a>b值为1, 所以d=1. f=a>b>c a>b为1, a>b>c为0,所以f=0.

47 在使用关系运算符时,应注意以下几点: 1. 数学中在判别x是否在区间[a,b]时,习惯写成ax b。 在C语言中不能写成"a<=x<=b",而应写成 a<=x && x<=b &&是逻辑运算符(下一节介绍)

48 2. 在判定两个浮点数是否相等时,由于存储上的误差,可能会得到错误的结果。
如:1.0/15.0*3.0*5.0=1.0 数学中为恒等式 1.0/15.0*3.0*5.0 = =1.0 C语言中结果可能为假 应改为下面的形式: fabs(1.0/15.0*3.0*5.0-1)<1e-5

49 6.3.3 逻辑运算符和逻辑表达式 1. 逻辑运算符及其优先级 三种: && (与)、|| (或)、 ! (非)
逻辑运算符和逻辑表达式 1. 逻辑运算符及其优先级 三种: && (与)、|| (或)、 ! (非) 其运算规则见真值表(P154表6.14) a b !a !b a&&b a||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 总结 真变假、假变真 全真为真 全假为假

50 2. &&和¦ ¦低于关系运算符,!高于算术运算符
优先级定义: ! 高 && || 低 1. !(非)优先于&&(与),&&优先于¦ ¦ 即: !&& || 2. &&和¦ ¦低于关系运算符,!高于算术运算符 ! 高 算术运算符 关系运算符 && || 赋值运算符 低 例: !a&&b || x>y && c ((!a)&&b) || ((x>y)&&c)

51 2. 逻辑表达式 用逻辑运算符将关系表达式、逻辑量连接起来的式子–––逻辑表达式。 以下是逻辑表达式的值及具体的运算。

52 1. 逻辑表达式的值与关系表达式值一样,真为1,假为0。
例1: (1) a=4 则 !a 值为: 在逻辑运算中,非0值参加逻辑运算时被看成1处理. (2) a=4, b=5 a&&b为: 1 (3) a=4, b=5 a || b为: 1 例2: 计算表达式的值 5 > || 2 && < !0 结果:1

53 2. 一个逻辑表达式中的逻辑运算符并不是一定全部执行.
如: a&&b&&c. 则当a=0(假)时, b,c不需判断。当a=1,b=0,则不需判c. 又如: a || b || c. 当a=1时,b, c均不必判别。 例1: 设i=1,则执行表达式i++ || ++i后,i的值: 2 例2: 设i=1,则执行表达式--i&&i--后,i的值: 例:分析复杂逻辑表达式运算的语法规则  

54 例: 判断年号是否为闰年。 闰年必须满足下列条件中的任意一个: (1) 年号能被4整除但不能被100整除。 (2) 年号能被400整除。 设用变量year表示年号 则: 当((year%4= =0&& year% 100 !=0) || year%400= =0) 为1时,year为闰年,否则为非闰年。

55 如果要判别非闰年可在上述表达式前加非(!)运算符.
即: 当!( (year%4= =0 && year%100!=0) || year% 400= = 0) 为1时,year为非闰年。 或者: 当(year%4!=0) || (year%100==0 && year%400!=0) 为1时, year为非润年。

56 6.3.4 位运算符及其表达式 位 运 算 符 含 义 优 先 级 ~ 按位取反 高(14) & 位与 低(8) ^ 位异或 低(7) |
位运算符及其表达式 位运算的作用:直接对变量的二进制按位进行操作 注意:位运算只适合于整型和字符型变量。 位运算符及其含义和优先级如下: 位 运 算 符 含 义 优 先 级 按位取反 高(14) & 位与 低(8) ^ 位异或 低(7) | 位或 低(6) << 位左移 中(11) >> 位右移

57 1. ~ 作用:按位取反 如:a= 则:~a= 2. << 作用:按位左移 如:a= 则:a<<2=

58 3. >> 作用:按位右移 如:a= , b= 则:a>>2= (a为负数) b>>2= (b为正数) 4. & 作用:按位与(1&1=1, 1&0=0, 0&0=0) 如:a= b= 则:a&b=

59 5. | 作用:按位或(1|1=1, 1|0=1, 0|0=0) 如:a= b= 则:a|b= 6. ∧ 作用:按位异或(1∧1=0, 1∧0=1, 0∧0=0) 如:a= b= 则:a∧b=

60 例:计算表达式的值  x=2,y=3, 计算(x&y)<<2 的结果 结果:8

61 6.3.5 条件运算符 条件运算符 ? : 条件运算符为三目运算符。 一般形式: 表达式1 ? 表达式2 : 表达式3
条件运算符 条件运算符 ? : 条件运算符为三目运算符。 一般形式: 表达式1 ? 表达式2 : 表达式3 运算规则: 先判表达式1, 若非0,则值为表达式2的值,否则为表达式3的值。 例:取两个数中的最大值 max=a>b? a:b; 当a>b. max  a. 否则maxb

62 优先级和结合性: 1. 优先级 例1: max=(a>b? a:b)  max=a>b? a:b
算术运算符 高 关系运算符 ?: 赋值运算符 低 例1: max=(a>b? a:b)  max=a>b? a:b 例2: max=a>b? a:b+1  max= a>b? a:(b+1)

63 2. 条件运算符结合性为从右至左. 如: a>b? a:c>d ? c:d 相当于 a>b? a:(c>d? c:d) 设 a=1,b=2,c=3,d=4,则 表达式的值为:4

64 例: 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。 6-4 .c 
main ( ) { char ch; scanf ("%c", &ch); printf("%c", ch); } ch=(ch>='A' && ch<='Z')? (ch+32):ch;

65 6.3.6 逗号运算符和逗号表达式 逗号表达式一般形式: 表达式1, 表达式2 其计算规则:
逗号运算符和逗号表达式 逗号表达式一般形式: 表达式1, 表达式2 其计算规则: 先计算表达式1,再计算表达式2,最后值为表达式2的值。 例:a=35, a  4 注:优先级最低 则: 先计算3  5, a15, a  4=60,结果为60。

66 又如: (a=35, a  4), a+5 (1) 3  5=15a (2) a  4=60 (此时a值仍未变) (3) a+5a 即 20a. 结果为20(作为逗号表达式的值) 扩展形式: 表达式1, 表达2, …,表达式n, 结果为表达式n的值

67 6.3.7 数据类型的转换 C语言允许双精度、单精度、整型及字符数据之间混合运算。
数据类型的转换 C语言允许双精度、单精度、整型及字符数据之间混合运算。 如:10+'a'+1.5–  'b'是允许的。但有一个规则:先转换成同一类型,再计算。 有二种方法进行数据类型转换: 1. 系统自动 2. 强制

68 1. 系统自动转换 转换方法: double  float 高低 long unsigned int  char, short 图中“  ” 表示必定转换(即使是同一类型)。如'a' +' b',先转换为int。结果为 int。 图中“  ” : 表示低, 高型数据运算时,均先转换为高型。

69 例: 10+' a'+if –d /e 其中: i –– int f –– float d –– double e –– long 则运算时: (1) if: 转为double, 结果为double (2) d /e : 转为double (3) 10+'a': 转为int, 结果为int (4) (3)+(1) : 转为double (5) (4) - (2) 转为double

70 例1:   (数据丢失) 结论:两边类型若不一致,赋值时要进行类型转换。 转换规则: 1. [整型变量]=[实型数据] 舍弃实数的小数部分 2. [实型变量]=[整型数据] 数值不变, 以浮点数存储 

71 2. 强制类型转换 用强制类型转换运算符将一个算术表达式转换为所需类型。 形式: (类型名) (表达式) 例如: (double) a 将a转换为double (int) (x+y) 将x+y转换为int 注: 优先级最高 (float) (5%3) 将5%3转换为float 例2: 6-6 (较长的数据类型强制转换为较短的数据类型)

72 6.3.8 复杂表达式的计算顺序 C语言共有各类运算符47个,按优先级可分为11个类别共15个优先级。
复杂表达式的计算顺序 C语言共有各类运算符47个,按优先级可分为11个类别共15个优先级。 运算符的优先级与运算方向:P158表6.15

73 自反赋值运算符(复合赋值运算符) 在" ="号之前加一个其它运算符。 例: a+=3; 等价表达式: a=a+3 x=y+8; 等价表达式: x=x (y+8) x%=3; 等价表达式: x=x%3 C语言规定:凡是二目运算符均可构成复合运算符。

74 赋值表达式说明: <变量> = <表达式>  <表达式>又可以是一个赋值表达式。 例: x=(y=10) 相当于 y=10;x=y 由于赋值号为右结合性,于是" ( ) "可省略, 即为:x=y=10; 又: a=5+(c=6) c=6, a=11 a=(b=4)+(c=6) b=4, c=6, a=10

75  赋值表达式可以包含复合的赋值运算符。 例: a + = a – =aa (设a12) 步骤: aa144. a – =a a a=a –a a=12 –144= –132 a + = –132  a = a+(–132) = –264 例: (复杂表达式的计算顺序)

76 6.3.9 C语言基本语句结构 一. 表达式语句 表达式加上一个分号“;”. 如: i=i+1; i++; x+y;
其函数调用也可理解为表达式语句. printf (“a=%d\n”,a); 空语句 ; 任何事情都不做.

77 二. 复合语句 用{ } 括起来的一系列语句。 如: { z=x+y; t=z/100; printf ("%f", t); }

78 三. 控制语句––由控制结构组成的语句 共有5种控制语句: (1) if ( ) ~ else ~ (条件) (2) switch ( ) ~ (多分支) (3) for ( ) ~ (循环) (4) while ( ) ~ (循环) (5) do ~ while (循环) ( )表示条件, ~表示语句

79 四、转向控制语句––改变程序流程(结合控制语句)
(1) continue ; (结束本次循环) (2) break ; (中止整个循环或switch结构) (3) goto  <标号> ; (转移) (4) return ; ( 函数返回)

80 6.4 基本输入/输出函数简介 C语言本身无输入/ 输出语句, 通过调用系统提供的一组标准输入/输出函数函数实现,如printf等。

81 6.4.1 printf 函数––格式化输出函数 C语言中使用得最多的一种输出函数,它可按格式一次输出多个不同类型的数据。
输出表列 ––– 用“ ,”号隔开的变量或表达式序列,其变量的值按对应的格式控制符所指定的格式输出。

82 格式控制序列–––用双引号“ ...”括起来的格式符序列。
格式控制序列由格式说明符和普通字符组成。 1. 格式说明符: 由%接格式字符组成 如: %f, %d等 2. 普通字符: 原样输出 例: a=3; b=4; printf("a=%d, b=%d", a, b);  结果: a=3,b=4

83 二、格式字符 不同类型的数据输出,用不同格式字符:(P162表6.16) 1. d格式符––十进制整数输出。 (1) %d: 按数据的实际长度输出。 (2) %md: m是字段宽度修饰符,表示输出字段宽度。若实际位数<m,左边补空格。 如: int i=12345; printf("i=%10d\ni=%d", i, i); 例 6-7 

84 (3) %ld: 输出长整数 例: long a= ; printf(" %ld", a); 如直接用%d,则将出错。 如要指定宽度, 则用%mld即可。

85 2. o格式符––– 按八进制形式输出. int a= –1; printf(" %d, %o", a, a);
– 1的补码形式 注: 连符号位一起组成八进制数输出 则输出结果: –1,

86 3. x格式符–––以十六进制形式输出整数. 例: int a= –1; printf("%x, %o, %d”, a, a, a) 输出结果: ffff, , –1

87 printf ("a=%d, %o,%x,%u\n", a, a, a,a);
例: main( ) { unsigned int a=65535; int b= –2; printf ("a=%d, %o,%x,%u\n", a, a, a,a); printf ("b=%d, %o,%x,%u\n", b, b, b,b); } 运行结果为: a= –1, , ffff, 65535 a=65535 b= –2, , fffe, 65534 b= –2

88 5. c格式符–––输出一个字符. char c=' a'; printf("%c", c); 注: (1) 若有一整型变量,其值在0~255之间,则可以字符形式输出. (例 6-8 ) (2) 一个字符型变量亦可以一个整型数据输出. (例 6-8 ) 也可以指定输出字符宽度和对齐方式,如: printf (“%-3c", c)

89 6. s格式符–––用来输出一个字符串. 例: printf("%s", "CHINA"); 结果: CHINA 允许一定的编辑即允许%ms, %–s, %m.ns, %–m.ns四种形式, 每一形式的意义如下: (1) %ms, 输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出。若串长小于m,则左补空格。

90 (2) %–s, 对齐方式修饰符,默认右对齐,加”-”左对齐。
(3) %m.ns,输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。 (4) %–m.ns,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则m自动取n值,即保证n个字符正常输出。 例 6-9 

91 7. f格式符–––以小数形式输出单、双精度实数,有以下几种形式:
%f %m.nf %–m.nf %lf %f, 不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。 %m.nf, 指定输出的数据共占m列,其中有n位小数。如果值长度小于m,则左端补空格。 %–m.nf, 与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。 %lf, 精度型,输出double型数据。 例 6-9 

92 8. e格式符–––以指数形式输出单,双精度实数基本形式: %e
例: printf (" %e ", ) 结果: e+02 可有%m.ne和%–m.ne的形式 9. g格式符––根据实数大小自动选择f格式,或e格式输出单双精度实数。

93 6.4.2 scanf 函数––格式化输入函数 形式: scanf(格式控制序列, 地址表列) 格式控制序列–––同printf(…..)
地址表列 –––变量的地址或字符串首地址。 用&(变量名)表示取<变量名>的地址 如:&a, &b等等。 功能: 在标准输入装置(键盘)上按指定格式 输入各种类型的数据

94 例: 从键盘输入三个整数并输出( 6-10 or  )
注意:  变量地址: &变量名  “格式控制”字符串中,若还有除格式说明以外的其它字符,则在输入数据时应输入与这些字符相同的字符。如: scanf(“%d%d”,&a,&b); 12 scanf(“%d,%d”,&a,&b); , 2  scanf(“%d:%d:%d”,&m,&n,&p); 1:2:3  scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); a=1,b=2,c=3 例: 6-10 

95  用“%c”格式输入字符时, 空格和转义字符都为有效字符。
eg:scanf(“%c%c%c”,&c1,&c2,&c3); 输入: abc时

96 格式字符: 1. 字段宽度修饰符 例如:int a, b scanf(" %3d%3d ", &a, &b); printf("a=%d, b=%d", a, b) 则当输入 后 显示: a=123, b=456 2.输入格式字符没有u和g(其他同于输出格式字符),对于输入unsigned型数据,不用%u,而用%d, %o, %x.

97 3. 在%后加“ *”表示跳过相应的数据 scanf("%2d %*3d%2d", &a, &b); 则当输入为12  345  67↙ 则a b67 4. 输入数据不能规定精度. scanf (" %7.2f ", &a);是错误的

98 6.4.3 字符输出函数 C语言专门为字符提供了专用的字符输出函数,常用的字符输出函数:P170表6.19
函 数 原 型 函 数 功 能 int putc(int ch,FILE *stream); 将ch所对应的字符输出到stream指定的 文 件流中(stdout表示屏幕) int putch(int ch); 将缓冲区中ch所对应的字符输出到屏幕 int putchar(int ch); 将ch所对应的字符输出到屏幕 例: 了解字符函数的功能(  )

99 6.4.3 字符输入函数 C语言专门为字符提供了专用的字符输入函数,常用的字符输入函数:P171表6.20 函 数 原 型 函 数 功 能
int getc(FILE *stream); 从指定的输入流stream中读取字符(stdin表示键 盘) int getch(); 将键盘读取的字符放入缓冲区,键盘输入的字符 不显示在屏幕上 int getchar(); 将键盘读取的字符放入缓冲区,键盘输入的字符 会显示在屏幕上

100 注意: 1.使用getch()函数输入字符后,输入的字符不会显示在屏幕上。 2.用字符输入函数接收字符时,并不是从键盘输入一个字符后立即响应,而是将输入的内容先读入缓冲区,待输入结束后再一并执行。 3.与scanf()输入函数不一样,字符输入函数将空格符、制表符、换行符也作为字符接收。 例: 了解字符函数的功能(  )

101 程序举例 例1: 输入三角形三边, 求三角形面积。(6-13.c) 例2: 输入三个整数, 输出最大值。(6-14.c)
例3: 输入一个字符,用该字符组成X形状的图案。(6-15.c) 例4: 输入半径,输出圆的面积,保留小数点后两位。(6-16.c)

102 本章小结: 1.基本数据类型及取值范围。 不同类型的变量有不同的取值范围。 2.基本表达式的意义 算术表达式、关系表达式、逻辑表达式
3.复杂表达式的优先级和表达式的意义 任何复杂表达式都是基本表达式的组合。 4.几组输入/ 输出函数

103 作业: P181 题6.45,题6.50


Download ppt "第6章 基本的程序语句 6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级"

Similar presentations


Ads by Google