当前位置:首页 >> 工学 >> 第4章(常量、变量及表达式)

第4章(常量、变量及表达式)


《C语言程序设计》

第四章
数据类型、运算符、表达式及简单 的输入输出函数

第四章
数据类型、运算符、表达式及简单的输入输出函数

数据类型 常量 变量 运算和运算符 运算表达式 简单的输入输出函数

C语言程序的基本标识符

■ 字符集:编程可使用的字符

?英文字母 a ~ z,A ~ Z; ?阿拉伯数字 0 ~ 9; ?特殊符号 (~!%*{}:;<>?/以及空格、换行等)

标识符: 用来标明变量名、函数名、数组名、结构体名、文件 名、类型名等的符识。标识符就是有效字符的序列, 一个名字。用英文!

?保留字(关键字)(见书P43 表4-1 C语言的保留字) ?预定义标识符(库函数名,如:stdio;预编译命令,如:include) ?用户定义标识符 标识符规定: 1. 标识符由字母、下划线、数字三种字符组成,且 第一个字符必须是字母或者下划线。 + * . 汉字等 均不能出现。 2. 字母区分大小写; 3. 标识符不能是关键字。

例:sun,day,month,student_name, c1string_2。

错:

12cd, $123,#11, M.D.Ritchie。 这里所表示的标识符都是错误的。

4.2 数据类型

基本类型

整型 实型(浮点型) 字符型(字符串) 枚举型 数组类型 结构体类型 共同体类型

常量形式 变量形式 单精度型 双精度型

数组 类型相同的数据集合

构造类型

结构体 类型不同的数据集合

指针类型

4.3 常量 程序运行中数值不改变的量 1、整型数 按进制分类: 十进制。例:10 , 35, -1289。 八进制,以 0 开头。 例:010(o是字母)。对应十进制 8 十六进制,以 0x 开头。例:0x10。 对应十进制 16 按字节长度分类:

短型 2个字节。
长型 4个字节。长型常量后加字母L。 例:15L , 0x10, 010。 2、实型(浮点数)数 十进制数形式,由数字和小数点组成。 例:1. 3415926 指数形式, 由尾数、字母e或E和指数组成。

例:1E3 表示: 1乘10的三次方(1?103)。
返回

3、字符型数据
字符常量
即普通字符用单引号括起来。在C语言中,字符型数据 是用ASCII码来表示(储存)的。 例:‘A‘ (65),?a‘ (97)。 在C语言中,字符型数据与整型数据可通用:10+‘R‘ 字符串常量

即一串普通字符用双引号括起来。
例:“ Turbo C ‖,― China ‖。

转义字符

以“ \ ”开头的字符表示特定的含义。
此时字符转变为另外的意义。 例:‘\ n‘ 表示回车换行 , ‘ \ r‘ 表示回车 。

小结
(1)数
类 型 进 制 表 示 范 围

整型数 八、 十、十六 长整型数 八、 十、十六 实型数 十

015, 15, 0x15 -215~ 215-1 015L, 15L, 0x15L -231~ 231-1 123.5, 1.235e+2 10-38~1038

(2)字符常量

单一字符,用‘ ’包围, 如:‘A‘,?8‘

(3)字符串常量 用“”包围的一个或多个字符 ,如 :“ hello‖

注 意
‘A‘和 “A‖不相同!!!

(4)特殊的字符常量(转义字符)
\ 后跟一个字符或一个数字,表示控制代码和用于 功能定义的字符 如: 字符 功能 \n 回车换行 \r 回车 \t 水平制表 \b 退格 \v 垂直制表 \f 换页 \a 响铃警报 \“ 双引号字符 \101 A \x41 A

符号常量
? 对常量命名,即用符号代替常量; ? 先定义后使用; ? 格式: #define 符号常量 常量 例: #define PI 3.1415926 ? 宏定义,不用分号;

? 好处:1. 增强可读性
2. 可维护性,避免多处修改(如:求周长,体积)。

常量与变量
常量的本质 ? 不占据任何存储空间 ? 属于指令的一部分,编译后不再更改 变量:程序运行时可以随时改变 ? 定义变量时,给变量分配存储单元(如:一个字节),如宿舍 号码对应一个房间,变量名对应一段存储空间。 ? 通过变量对内存修改、存取;对变量的存取就是对存储单元的 存取。 ? 要先定义变量的类型,决定占用的内存空间,才能存取。

2.3 变量 2.3.1 变量的数据类型

2.3.2 变量的使用
2.3.3 变量数据的存储与读取 2.3.4 其它变量

返回

变量: 程序运行中其值改变的量。 变量名: 变量的名字。用标识符标识变量名。 标识符:用来标明变量名、函数名、数组名、结构体名、文件名、类
型名等的符识。名字。英文!

标识符规定:标识符由字母(区分大小写)、下划线、数字三种字符
组成,且第一个字符必须是字母或者下划线。 书P5,表1-2,C语言的31个保留字。

例:sun,day,month,student_name, c1string_2。

错:

12cd, $123,#11, M.D.Ritchie。
这里所表示的标识符都是错误的。

2.3.1 变量的数据类型 1、整型变量:表示整型数据(整数)的变量。
1)按照存储空间分三种(限制了表达范围): 基本型: int 变量名 2个字节。 短整型: short [int] 变量名 2个字节。 长整型: long [int] 变量名 4个字节。
2)符号(正负号) :

无符号型: unsigned

int变量名 short [int] 变量名 long [int] 变量名

2、实型变量:

表示实型数据(实数)的变量。
单精度型:float 变量名 双精度型:double 变量名 4个字节。 8个字节。

2.3.1 变量的数据类型 3、字符型变量: 表示字符型数据的变量。 char 变量名 1个字节 。

4、字符串数组: 表示字符串型数据的数组。 char 变量名 [ 下标 ] 字符串数组:是一个地址量。字符串数 组表示字符串的第一个字符的地址。

5、表 —— 变量的数据类型、字节长度、位数、数据范围

符 号
带 符 整 号

字 节

位 数

数据类型标识符

数据范围
-128~127 -32768~32767 -32768~32767 0~255 0~65535 0~4294967295 -27~27-1 -215~215-1 -215~215-1 -231~231-1 0~28-1 0~216-1 0~216-1 0~232-1 10-38~1038 10-308~10308

1

8 char

2 16 short [int] 2 16 int 4 32 long [int] 1 8 unsigned char

型 无 符 号 实 带 符 型 号

2 16 unsigned short [int] 0~65535 2 16 unsigned int 4 32 unsigned long [int] 4 32 float 8 64 double

2.3.2 变量的使用
1、变量的定义(声明)
在C语言中,所使用的每一个变量在引用前都须先定义,否则在程
序编译时会发生错误。变量的定义就是按一定的方式为其使用的变量指 定数据类型(标识符 )、变量名(标识符)。在程序编译时,为其分配

存储空间。 变量定义的格式:
[存储类型] 数据类型标识符 变量1,变量2, … 变量n;

例: int a; float b, c, d; char c1,string; 变量的定义意义在于,计算机在编译时,对每一个变量分配对应和固定 的存储单元(地址),为其程序的使用创造必要条件 。

变量定义举例: int i, j number ; float x, y ; char name ; static double u, v ; int a; int a1; [extern] float a2; [extern] char str;

2、变量的初始化
给变量赋初值的过程叫变量的初始化。 C 语言允许在定义变量的同时对变量赋值。 例: int a =3; int b=0,c=0; float f =5.8; char c1=?e‘; char string [10]=―Beijing‖; 注意:没有赋初值的变量,并不意味着该变量中没有数值。此时,对于 静态型(static)变量中的值是0,其它存储类型变量一个随机数。 变量初始化的意义:程序编译完成后,变量已被赋值。

变量的赋值的方法:

(1) 初始化:定义的同时赋值

(2) 先定义,后赋值。

int i=5, j=6; float x=10.1 ; char name=?A‘;

int i; float x=10.1; char name; i=5; x=20.5; name=?A‘; i=?d‘;

3、变量的引用
在程序中使用变量,称为变量的引用。如进行数值计算、数据处理等。 使用变量时,先定义,后引用。 例:

main( ) { int a=55; int b; 对变量的引用 int c; b=45; c=(a+b)/100; printf(―a=%d b=%d c=%d‖,a,b,c); } 结果:a=55 b=45 c=1

2.3.3 变量数据的存储与读取
变量所代表的数据是存储在(计算机)内存中。在使用中往往希

望数据的存储应灵活、多样,以便于编程。

1、变量数据的存储
变量数据的存储形式有:

静态存储 static
extern 动态存储 auto

静态型
外部型 自动型

register 寄存器型 这部分的内容在第五章函数中详细介绍。

2、变量数据的读取
直接读取: 变量名实际代表一个确定的存储单 元。程序编译完成后,变量就与数据存 储单元一一对应。对变量读取操作,就 是到对应的存储单元中读取数据。 变量 内存

a b

数据 1 数据 2 …. 数据 n

间接读取: (指针)变量中存放的是数据内存 的地址,在这种情况下,首先拿存放数 据的地址,然后,再到对应的地址中读 取数据。

变量 地址
a b 2000 2002

内 存

数据 1 数据 2 … 数据 n

2.3.4 其它变量
指针变量(第六章): 类型标识符 *变量名; 数组变量(第四章) : 类型标识符 数组名[下标]; 结构体变量(第八章) : struct 结构体名 { 结构体成员表 } 结构体变量; 联合体变量(第八章) :

union 联合体名 { 联合体成员表列 };

小结
变量说明格式 :

[ 存储类型]

数据类型 变量名

变量名:

? ? ? ?

英文字母、数字、下划线; 首字符必须是字母; 中间不能有空格,一般用小写; 不要和关键字重名。

变量的存储类型: auto- 自动型,使用最多,可缺省不写。 static- 静态型。 register-寄存器型, 少用。 extern - 外部型。

2.4 运算和运算符

2.4.1
2.4.2

运算
运算符

返回

2.4 运算和运算符

2.4.1 运算
运算 运算符 运算量 运算表达式 对数据进行处理的过程 表示各种数据处理的符识 被处理的数据

运算符 + 运算量

2.4.2 运算符
(1) 算术运算符 (2) 关系运算符 (3) 逻辑运算符 (4) 赋值运算符 (5) 自反赋值运算符 (6) 自增自减运算符 (7) 逗号运算符 (8) 条件运算符 (9) 指针运算符 (10) 地址运算符 (11) 结构体成员运算符 (12) 指向结构体成员运算符 (13) 下标运算符 (14) 圆括号运算符 (15) 大括号运算符 (16) 长度运算符 (17) 数据类型转换运算符 (18)位运算运算符

+、-、*、/、% <、> 、<=、>=、= =、!= &&、||、! = +=、-=、*=、/=、%= + +、- , ?: * & . -> [] () {} sizeof(类型标识符) (类型标识符)〈表达式〉 &、^、|、~、<<、>>

返回

(1) 算术运算符
名称 运算符 运算规则

正 负 加 减 乘 除

+ + * /

取原值 取负值 加法 + 减法 乘法 * 除法 /

注:避免除数为0



%

对于整数,则为整除,余数舍去; 实数则不然。 例: 1/3*3=0 1.0/3.0*3.0=1.0 整除取余 (只适用于整数) 分子>分母 ,结果=余数。例: 12%5 分子<分母 ,结果=分子。例: 2%5

注意:C 语言中乘法、除法运算符的表示与数学中的表示不同。 ( 乘法不 能写成mn, m ×n, m· ;没有乘方运算符。 除法不能写成m ÷n) n

(2) 关系运算符:对两个操作量进行大小比较的运算符
名称
小于 小于等于

运算符
< <=

大于
大于等于 等于

>
>= ==

不等于

!=

注意:C 语言中小于等于 、大于等于、等于、不等于运算符的表示与数学 中的表示(≤ ≥ = ≠)不同。

(3) 逻辑运算符

1. 逻辑运算把一切“非 0” 的数作为真(用1表示),把“0” 数作为假(用0表示)。
逻辑运算是“非 0”和“0”两类数据或真和假两类种状态的运算。 2. 名 称 运算符


与 或

!
&& ||

单目运算符
双目运算符 双目运算符

3. 真值表决定逻辑运算结果!!! ! 非 非0(真) 0 ( 假 ) 0 ( 假 ) 非0(真) A && 与 B 结 果
A 0 假 非0真 0 假 非0真

|| 或
B 非0真 0 假 0 假 非0真 结 果 非0真 非0真 0 假 非0真

0
0

假 非0真 0
假 0 假 0 假 0


假 假

非0真 0

非0真 非 0 真 非 0 真 有假则假,全真则真。

有真则真,全假则假。

(4) 赋值运算符 名称 运算符 赋值 = 格式 : 变量 = 表达式 ; 先计算等号右边的表达式,然后将其值赋给等号左边的变量。 C语言赋值运算符与数学中的等号其含义有着本质的不同。赋值 表示操作,有结果。 例: x = x+10 ; y = x*x+x ; (5) 自反赋值运算符 名称 加赋值 减赋值 乘赋值 除赋值 模赋值 运算符 += -= *= /= %= 例: a + =b a -=b a*=b a/=b a%=b

a=a + b a=a – b a=a*b a=a/b a=a%b

(6) 自增自减运算符:让变量自己加1或者减1

名称 增 1(前缀) 增 1(后缀) 减 1(前缀) 减 1(后缀)

运算符 ++ ++ ---

说 明 先加1,后使用。 先使用,后加1。 先减1,后使用。 先使用,后减1。

例 ++ i i ++ --i i--

自增自减运算仅限用于变量。 自增自减运算不能用于常量或表达式。 单目运算符,结合性为自右向左。 例: int j; i=3; j=++i; 结果 :j的值为4。 i的值为4。 而 int j; i=3; j=i++; 结果:变量j的值为3, 变量i将3赋给j后自加1变为4。

(7) 逗号运算符 ,
(8) 条件运算符 ?: (9) 指针运算符 * (10) 地址运算符 &

(11) 结构体成员运算符 .
(12) 指向结构体成员运算符 ->

(13) 下标运算符

名称
下标

运算符
[ ]

用于数组运算。

详细内容在第四章数组中介绍。
(14) 圆括号运算符 名称 运算符 圆括号 ( ) 例:(3+5)*88-21/7 在函数的定义、引用中也应用圆括号。 详细内容在第五章函数中介绍。

(15) 大括号运算符 名称 大括号 运算符 { }

用于含括函数的函数体、分程序的程序体。
(16) 长度运算符 ( 函数 )

名称
长度

运算符
sizeof

格式: sizeof (数据类型标识符 或表达式 ); 求数据类型或表达式结果值的字节长度。 例: sizeof (int ); 结果:等于2。

(17) 数据类型转换运算符 数据类型转换格式: (数据类型标识符)〈表达式〉 (18) 位运算运算符 名称 按位与 按位或 按位异或 取反 运算符 & 对应的位均为1,该位结果才为1 。测试某位是否为0

|
^

对应的位均为0,该位结果才为0 。设置某位为1
对应的位不同为1,相同为0 。使各位翻转。


<<

逢1变0,逢0变1
相当于乘2的n次方,左边移出的舍去,右边补0 : 例: x=1,则x<<4之后,x=10000,即十进制16; 相当于除以2的n次方,右边移出的舍去,左边补0

左移
右移

>>

运算符
名称 算术运算符 关系运算符 逻辑运算符 赋值运算符 指针运算符 下标运算符 强制转换符 条件转换运算符 逗号运算符 求字节运算符 位运算运算符 分量运算符 + > & = * [] char int 等 ? : , sizeof << >> ~ | ^ & . -> 运算符号 - * / % < == >= <= != || ! += -= *= /= %= &

运算符优先级 结合性(见附录B)
优先级 运算符 结合规则 1 ( ) [ ] -> . 从左至右 2 ! - - ++ -- - * & sizeof 从右至左 3 * / % 从左至右 4 + 从左至右 5 << >> 从左至右 6 < <= > >= 从左至右 7 == ! = 从左至右 8 & 从左至右 9 ^ 从左至右 10 | 从左至右 11 && 从左至右 12 || 从左至右 13 ?: 从右至左 14 赋值 从右至左 从左至右 15 ,

返回

例 (1) 注意表达式的正确书写:

(4)3x

写出 5<x<10 的c语言表达式: a+b 3*x/(a+b) 5<x<10 错! 5<x&&x<10

的c语言表达式:

(2) 若已知 x=y=5,a=b=10, 下列各式执行后b 与运算:第一个为0, 的值为多少? 则第二个不再计算 x>5&&(b=20)>a 0 b=10 x>5||(b=20)>a x==5||(b=20)>a 1 b=20

1
1

b=10
b=20

x=10&&(b=20)>a

或运算:第一个为非0, 则第二个不再计算
5

(3) 若已知 a=5,b=3,c=2,d=6,则a>b?a:c>d?c:d 的值为多少?

条件运算符的结合性是自右至左,上式相当于a>b?a:(c>d?c:d)

2.5 运算表达式
2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 算术表达式 关系表达式 逻辑表达式 条件表达式 赋值表达式 逗号表达式 混合表达式

返回

运算表达式
2.5.1 算术表达式

用运算符将运算对象连接的算式。

由算术运算符连接常量、变量或表达式构成。

结果是:整数、实数。
优先级:先乘除、后加减。 结合性(双目运算符):自左向右。 例:2*a+b/3 4.0/3*3.14159*R*R*R 1/6*3.14159*D*D 球体积、表面积

求算术表达式的值:1+ 5 * 3 / 4

结果:4

2.5.2 关系表达式
1. 由关系运算符连接常量、变量或表达式构成。

2. 关系表达式的结果:逻辑型
关系不满足,结果为:假(用0表示)。 关系满足, 结果为:真(用1表示) 。 3. 优先级: 1) > < >= <= 优先级同,== 和!=优先级同;而前者的优先级又高于后者。 2) 都比算术运算符优先级低。 4. 结合性(双目运算符):自左向右 5. 例:1) a > b 若:a=300,b=301,则关系表达式结果为:0 2) 5 > (4<5) 结果为:1 3) 若x=10, y=5, 则关系表达式的值 x==y+5 结果为:1 (x=3)<5+y 结果为:1 ** x=y<y+5 结果为:x=1 (运算符的优先级+ < =) 5) 除了整型、实型以外,字符型(ASCII码)也可参与计算: ? a ‘ < ? b ‘ 结果为:1 如:1<0 如: 1>0

2.5.3 逻辑表达式
1. 由逻辑运算符连接常量、变量或表达式构成。
2. 逻辑表达式的结果:逻辑成立结果为真,即等于1。 5&&1 (结果为1) 逻辑不成立结果为假,即等于0。 4&&0(结果为0)

3. 逻辑表达式两边的表达式,先理解成逻辑值(即表达式值为0,则为假0;
表达式值不为0,则为真1),再做逻辑运算。 4. 优先级:!高于&&, &&高于||。

&& 、 ||都比关系运算符低,!比算数运算符高。
5. 结合性:自左向右 例: a>1 && b 例:a +6 || b<0 若 :a=1, b=5, 结果为0。 若 :a=1, b=5, 结果为1。

6. 特殊之处: && 有假则假。 例如:a&&(b=2),若a=0,则b就不计算了,表达式为0 || 有真则真 。 例如:a || (b=2),若a=1,则b就不计算了,表达式为1

条件表达式
由条件运算符连接表达式构成。

条件表达式格式: 表达式 1 ?表达式 2 :表达式 3;
非0 真 0假

表达式1
等于表达式2

等于表达式3

例: a>b ? a : b 结果: a如果大于b表达式等于a, 否则表达式等于b。 例: ! a ? 2*b : b

2.5.5 赋值表达式
由赋值运算符连接常量、变量或表达式构成。 赋值表达式格式: 变量 = 常量、变量、表达式;

注意:左端 只能为变 量!!

自反赋值表达式格式: 变量 += 表达式; 变量 *= 表达式;

变量 -= 表达式; 变量 /= 表达式;

例: int x,y; x=5; y=10; x=10*(y=5);
例: char c1; c1=?a‘; 例:

变量 %= 表达式;

例:

char str[20]=―Microsoft‖;

int a=1,b=1,c=3; a=a+5; a+=5; b=b*5; b*=5; c=c%1; c%=1; c=c/1; c/=1;

赋值运算与自反赋值运算的结合性是自右至左。 例:已知 x=10, 则x+=x-=20的值为: (1) x-=20 x=x-20 x=-10 x=-20

-20

(2) x+=-10 x=x+(-10) 例:int x,y,a; x=y=10; y+a=20;



逗号表达式
1. 由逗号运算符连接常量、变量或表达式构成。 2. 逗号表达式格式: 表达式 1 ,表达式 2 ,… 表达式 n;

3. 逗号表达式求解过程,顺序求表达式的值(先求表达式1, 再求表达式2,再求……,直到求表达式n ),整个表达式的 值是最后一个表达式的值。 4. 优先级最低,自左向右结合。 例: 3+5, 6+8; 结果: 14。 例: x = (a = 3,6*3); 结果: x=18。 例: x = a = 3,6*3; 结果: 18。 例: a = 3*5, a*4; 结果: 60。 注意:在逗号表达式中,前后表达式使用同一个变量时, 前一变量的计算结果会影响后面表达式的计算结果。而不 能简单将表达式的值等于最后一个表达式的值。

2.5.7 混合表达式
由各种运算符连接常量、变量或表达式构成。 混合运算应注意三个问题:● 优先级
● 结合性 ● 数据类型的转换

数据类型的转换规则: 由低(字节长度短)向高(字节长度长)转换。


double long unsigned int

float



char, short

数据类型转换的两种形式:
● 显式转换:

显式转换格式: (数据类型标识符)表达式;
例: ( int ) 1.5; 例: (float) 1;

结果:1。 结果:1.0 。

● 隐式转换:

例:

a*b/c+1.5-‘a‘; (ch >=?A‘&& ch <= ?Z‘) ? ( ch+32 ) : ch; 2/10*a*a*a ((year % 4= = 0&&year %100 != 0) || (year % 400= =0));

例:
例: 例:

能被4整除而不能被100整除或能被400整除(判断闰年的条件)。

计算综合表达式时,要注意优先顺序及类型转换。 已知 x=5,y=67,a=7, 则下列表达式的值为:

1)x+y>10&&!!y>=a%2

1

运算符优先次序为 (1)!! (2)%(3)+ (4)> >= 2)x+y>‘A‘&&1>=a%2; x+y>65&&1>= a%2

x+y>65&&1>=1
1&&1 1

简单的输入输出函数
字符输入输出函数 字符串输入输出函数 格式化输入输出函数

返回

理解、使用C 库函数的几个要点:
函数的功能 在使用函数前应首先了解清楚函数的功能。

函数的引用格式

调用(使用)函数的格式。 函数名(实参表)

函数要使用的头文件(包含文件)

*.h

4.10.1 字符输入函数getchar和字符输出函数putchar
1、字符输入函数 getchar
功能: 从键盘上读取一个(键的)字符。 要求: 程序开始要使用预编辑命令 #include <stdio.h>。 函数引用格式: getchar ( ) 例: #include<stdio.h> main( ) { int c; c=getchar ( ); } 例: #include<stdio.h> main( ) { char c; c=getchar ( ); }

2、字符输出函数 putchar 功能: 要求: 向显示终端输出一个字符。 程序开始使用预编辑命令 #include ―stdio.h‖。

函数引用格式:putchar ( ch ) ; 例: #include ―stdio.h‖ main( ) { int c=97; putchar ( c ); } 例: #include<stdio.h> main( ) { char c; c=?a‘; putchar ( c ); }

例:用getchar、putchar函数编一个程序。要求从键盘输入
一个字符,并将其显示在显示器上。 # include <stdio.h>

main ( )
{ char c; c=getchar ( );

putchar ( c );
} 运行程序 B<CR> B

例:用putchar函数输出BOY字母。 #include ―stdio.h‖ main ( ) { char a,b,c; a='B';b='O';c='Y'; putchar(a); putchar(b); putchar(c); }

运行程序 BOY

P72页:字符串输入函数gets和字符串输出函数puts
1、字符串输入函数 gets 功能:从键盘读取一串字符,用回车键结束字符串的输入,并 将其赋给字符串数组str, 即存入str所指向的存储区。

要求: 程序开始要使用预编辑命令 #include <stdio.h>。
函数引用格式: gets (str) ; 例: #include <stdio.h> main( ) { char filename[ 30]; gets( filename ); }

2、字符串输出函数 puts 功能: 将字符串常量或字符串数组str指向的字符串输出 到显示器上。字符数组str指向要输出的字符串。 要求: 程序开始要使用预编辑命令 #include <stdio.h>。

puts (str) ; 函数引用格式:
例: #include <stdio.h> main() { char str[10]=―abc‖; puts( str ); puts( ―ABC‖ ); } 运行结果:abc ABC

例:用gets、 puts函数编一个程序。要求从键盘输入 一个字符串,并将其显示在显示器上。 #include <stdio.h> main ( ) {char str[20]; puts(―Test string I/O‖); gets (str); puts (str); } 运行程序

Test string I/O ABCDEFG <CR> ABCDEFG

4.10.2 格式化输入、输出函数 1、格式化输出函数 printf (―输出格式”,输出项表列); 输出格式: %d 十进制整数 %x 十六进制整数 %f 浮点小数 %c 单一字符 %s 字符串

printf ( ―a=%d, x=%f ‖, a, x);

2、格式化输入函数

scanf (―输入格式”,输入项地址表列);

scanf ( ―%d%f ‖, &a, &x);
格式化输入输出函数可以将各种类型的数据从计算机中 输出到显示器上、从键盘上将数据输入到计算机中。

1、格式化输出函数 printf
格式符

常量、变量、 表达式

引用格式: printf( ―输出格式”,输出项表列 );

功能: 按照指定的格式,将输出项表列的各项,输出到显示器上。

要求:

程序开始要使用预编辑命令 # include <stdio.h>。

printf ( ―a=%d, x=%f ‖, a, x);
输出格式 用于规定相应输出项的格式。输出格式用格式符来说明。 是由一系列格式转换说明符(简称格式符)组成。 用双引号括起来的字符串,包含两种信息: ①格式说明。用于规定相应输出项的格式,用格式符来说明, 如上面printf函数双引号中的%d、%f等。 ②普通字符。即需要原样输出的字符。如上面printf函数双引号 中的a=、b=、逗号。 输出项表列 ● 是指定要输出的数据, 可以是变量、常量或表达式。 ● 多个变量、常量或表达式时,用逗号“ ,”分隔。 ● 输出变量、常量或表达式的个数要与格式符个数相同、 前后顺序一一对应。

格式符:%[ + ] [ - ][0] [m] [ .n ][ l] <数据类型说明字母 > ● % 是格式符的开始标识记号。 ● 数据类型说明字母 %d %f %e 指定输出项输出数据的数据类型和格式。 带符号十进制整数输出。 以小数形式输出,含6位小数。 以指数形式输出,其中尾数部分6位小数,指数3位,正负号1

位,e1位。

%s
%c %x

以字符串输出。
以单个字符输出。 以十六进制整数输出。

%o
%u %g

以八进制整数输出。
无符号十进制整数输出。 以%e %f 格式中输出长度较短的一种格式输出,不输出无

意义的0。

数据类型说明字母 %d 带符号十进制整数输出 例:

main ( ) { int a=123, b=12345; printf (―%d, %d\n‖, a,b); } 2-007 程序结果:123, 12345 %f 以小数形式输出,含6位小数。 单精度输出数据有效位7位。 双精度输出数据有效位16位。 main( ) 例: { float a=111111.111; float b=222222.222; printf (―%f\n ‖,a+b); } 6 位小数 运行结果:333333.328125

2-008

数据类型说明字母
%e 以指数形式输出, 其中尾数部分6位小数,指数3位,正负号1位,e1位 例:
2-009

main ( ) { printf (―%e‖,123.456); } 运行结果:1.234560e+002
6 位小数 3位指数

%c

以单个字符输出

例:

2-010

%s
2-011

以字符串输出

main ( ) { char c=?a‘, ; int i=97; printf (―%c, %d\n‖,c,c); printf (―%c, %d\n‖,i,i ); } 运行结果:a, 97 a, 97 例: main ( ) { printf (―%s\n‖, ―Beijing‖); } 运行结果:Beijing

格式符:%[ + ] [ - ][ 0][ m] [ .n ][ l] <数据类型说明字母 > ●[m] [ . n ] 指定输出数据的长度 输出整数: m表示输出项输出数据(字符)的总长度。 无 .n 部分 输出实数: m表示输出项输出数据(字符)的总长度。 例: main( ) { int x=123; printf (― %3d ‖,x); } 运行结果 123

n 表示输出项输出数据的小数部分数据(字符)的长度。
%7.4表示输出的数据共占7个字符 例: main( ) { float pi=3.14159; 位置 ,其中小数占4个字符位置。 printf (―%7.5f‖, pi);
}
运行结果

输出字符:

3.1416
例: main( ) { char str[20]= ―Beijing‖; printf (― %5.3s ‖,str); } 运行结果 Bei

m表示输出项输出数据字符的总长度。 n表示输出项输出数据字符的实际个数。

格式符:%[ + ] [ - ][ 0][m] [ .n ][ l] < 数据类型说明字母 > ● 0 对输出项数据空位置填数字0或空白(空格)。 例: main( ) 指定0,输出显示时填0。 { int x=456; printf (―%05d\n‖, x ); 不指定0,输出显示时填空白(空格)。 printf (―%5d\n‖ ,x ); } 运行结果 00456 2-004 456 ●[ + ][ - ] 指定输出项输出数据的输出位置。 例: main( ) { char str[10]=―ABCD‖; printf (―%+5s\n‖,str); 数据(字符)的输出位置右边靠齐。 printf (―%-5s\n‖,―ABCD‖); 指定“-”时,输出项输出数据 } 运行结果 ABCD (字符)的输出位置左边靠齐。 2-005 ABCD 指定“+”或缺省时,输出项输出

格式符:%[ + ] [ - ][0][m] [ .n ][ l ]<数据类型说明字母 > ● l 对输出项输出数据的数值, 指定输出的精度和类型。

对整型数

d (十进制), x (十六进制), o (八进制), u (无符号十进制)。 l: long 型精度。 h: short 型精度。 缺省时, int 型精度。 e (指数形式), f (小数形式), g。 l: double 精度。 缺省时, float 精度。 main( ) { long x=12345678; printf (―%ld\n‖,x); } 运行结果 12345678

对实型数

例:

2-006

如果不指定 l 输出产生错误。

2、格式化输入函数 scanf
格式符 变量地址

引用格式: scanf (―输入格式”, 输入项地址表列); 功能: 从标准文件,即键盘上,按输入格式为指定的输入项变量 要求: 程序开始要使用预编辑命令 #include <stdio.h>。

输入格式: 用于规定输入项输入数据的格式。输入格式用格式符来 输入项表列: 是由若干个变量的地址组成。一般情况下,在每个 变量前加地址运算符&。 有多个输入项变量地址时,从键盘上输入的各个数 据之间可用空格键、回车键或TAB键作分隔符,进 行分隔。

格式符:

%[m][ l] < 数据类型说明字母 >

格式符:%[m] [ l] < 数据类型说明字母 > ●数据类型说明字母:d、o、 x、c 、s 、e 、f 含义与printf 相同。 ●l: 指定输入项输入数据的精度。 d (十进制), x (十六进制), o (八进制), u (无符号十进制)。 指定 l, 表示输入项输入数据为long 型精度。 指定 h, 表示输入项输入数据为short 型精度。 缺省时,int型精度。 对实型数 e (指数形式), f(小数形式), g。 指定 l, 表示输入项输入数据为double精度。 缺省时, float精度。 ●m: 指定输入项输入数据的长度。含义与 printf 中相同。

对整型数

scanf函数在输入多个数据时非常容易出错。我们看一个例子: [例] 用scanf函数输入多个数据。 (1) 10 #include <stdio.h> 20 main( ) 30 { int a,b,c; 40 scanf(―%d%d%d‖,&a,&b,&c); 50 printf(―a=%d,b=%d, c=%d‖,a,b,c); 60 } 行号为40的语句要求为变量a、b、c输入数据。 前面我们说了,输入多个数据时,可以用空格键、回车键或TAB键 作分隔符进行分隔,故: 5 6 7<回车> 或者5<回车> 6<回车> 7<回车> 或者5<tab> 6<tab> 7<回车> 这三种输入方法都可以,输出结果是a=5,b=6,c=7

(2)但是如果scanf的双引号里有“,”、“:”、“;”、“ ” (空格)、“a=‖等等的普通字符, 我们在输入的时候一定要原样输入,否则可能会发生严重的错误。 #include <stdio.h> main( ) { int a,b,c; scanf(―a=%d;b=%d;c=%d‖,&a,&b,&c); printf(―a=%d,b=%d, c=%d‖,a,b,c); } 这里,输入时就应该为 a=5;b=6;c=7<回车>

例题
例: 例:

main( ) { int a ; scanf(―%d‖,&a); printf(―%d‖,a); }
运行程序

main( ) {char c; scanf(―%c‖,&c); printf(―%c‖,c); }
运行程序

543 <CR> 543

a<CR> a

例:

main( ) { int a,b,c; scanf(―%d%d%d‖,&a,&b,&c); printf(―%d%d%d‖,a,b,c); }
运行程序

scanf(―x=%d,y=%d‖,&x,&y); 则输入形式为: x=10,y=29<CR>

例:

5<CR > 6<CR > 7<CR> 或5 6 7<CR> 567

main( ) { int x, y; float z; scanf(―%d,%d,%f‖,&x,&y,&z); printf(―%d %d %f‖,x,y,z); }
运行程序

35,45,2.5 <CR> 35 45 2.500000

例: 在键盘上输入一个大写字符, 将它转换成 小写后输出。

#include<stdio.h> main( ) {char a,b; ‘A‘ ASCII码为 65 a=getchar( ); ‘a‘ ASCII码为 97 ‘a‘- ?A‘ = 32 putchar(a); 将大写转换成小写 putchar(?\n‘); 将字母大写转换成小写加32, 将字母小写转换成大写减32。 b=a+?a‘-?A‘; printf("a=%c b=%c\n",a,b); printf("a=%d b=%d\n",a,b); }
运行程序

M<CR> M a=M b=m a=77 b=109

例:

已知三角形的三个边长。用面积公式:S ? 其中: s=1/2(a+b+c)。求三角形的面积。

s(s ? a)(s ? b)(s ? , c)

#include<stdio.h> c #include<math.h> main( ) { float a,b,c,s,area; printf(‖Enter a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("a=%7.2f b=%7.2f c=%7.2f\n",a,b,c); printf("s=%7.2f area=%7.4f\n",s,area); }
运行程序

a
b

Enter a,b,c: 5.0,6.0,7.0 <CR> a= 5.00 b= 6.00 c=7.00 s= 9.00 area=14.6969

例:求方程ax2+bx+c=0的实根。

#include<stdio.h> #include<math.h> main( ) { float a,b,c,disc,x1,x2,p,q; printf("enter a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); disc=b*b-4*a*c; p= -b/(2*a); q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf("a=%7.2f b=%7.2f c=%7.2f\n",a,b,c); printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); }

例: 指出下列程序在执行过程中各个变量的取 值。

main( ) { int x=315; char ch=?a‘,c; float f=3.5; c=x; x=f; f=c; f=x; }

315的二进制形式为: 0000000100111011。 其赋给字符变量 c 取低八位即: 00111011。 所以 c 的值为: 59。 x 的值为: 3。 f 的值为: 59.0。 f 的值为: 3.0。

例:

main( ) { char str[10]; scanf(―%s‖,str); printf(―\n%s‖,str); }
运行程序

字符串数组前不要加地址符 &,因 为字符串数组名表示的是字符串的第 一个字符的地址,地址量。

How are you ? <CR> How are you ?






更多相关文档:

第4章(常量、变量及表达式)_图文.ppt

第4章(常量变量及表达式) - 《C语言程序设计》 第四章 数据类型、运算符、

2 第4章(常量、变量及表达式)分析_图文.ppt

2 第4章(常量变量及表达式)分析 - 《C语言程序设计》 第四章 数据类型、

第4章 数据类型、常量、变量及表达式.ppt

第四章 数据类型、常量变量及表达式本章内容及要求: 1 2 3 4 熟悉VB程

第4章(常量、变量及表达式)_图文.ppt

第4章(常量变量及表达式) - 《C语言程序设计》 第四章 数据类型、运算符、

《C语言程序设计》第4章(常量、变量及表达式)_图文.ppt

《C语言程序设计》第4章(常量变量及表达式) - 《C语言程序设计》 第四章

第四章 常量、变量和表达式_图文.ppt

第四章 常量变量表达式 - 第四章 常量变量表达式 4.1 常量 JavaScript有三种基本类型的常量: 数值型、字符串型和布尔型。 ? 4.1.1 数值型 一.整数 ...

第4章 常量和变量_图文.ppt

第4章 常量变量_计算机软件及应用_IT/计算机_专业资料。常量变量 ...其中,star和end都是整型表达式。他们指定了要 引用的子字符串在字符串中的起始...

第4章 1常量变量表达式上机.doc

第4章 1常量变量表达式上机 vfpvfp隐藏>> 1.用 store 或=,在 VFP 的命令窗口中定义如下的内存变量: A 为字符串"ABC" A1 为数值型数据 56 A2 为 1998 ...

第四章类型表达式_图文.ppt

第四章、第七章 数据类型和表达式一 C语言的数据类型 二 常量变量变量赋初值 四 各类数值型数据间的混合运算 五 C语言的运算符和表达式 一、 C语言的...

第4章 数据类型和表达式_图文.ppt

第4章 数据类型和表达式_数学_自然科学_专业资料。C语言 计算机程序设计 封面 ...? 格式:变量=值(常量变量表达式) 例如:x=-x; 定义时初始化(必须为常量...

第4章数据类型、运算符、表达式及简单的输入输出函数_图文.ppt

《C语言程序设计》 第四章数据类型、运算符、表达式及简单 的输入输出函数 第四章数据类型、运算符、表达式及简单的输入输出函数 数据类型 常量 变量 运算和运算符...

第4章 数据类型、运算符与表达式_图文.pdf

第4章 数据类型、运算符与表达式 - 石油大学VB课件,实试题,考题... 第4章 数据类型、运算符与 表达式§4.1 §4.2 §4.3 §4.4 §4.5 基本数据类型 常量变量...

第4章数据类型、运算符与表达式解读_图文.ppt

第4章数据类型、运算符与表达式解读 - 第4章 数据类型、运算符与表达式 主要内容 本章介绍构成Visual Basic应用程序的基本元素, 包括数据类型、常量变量、内部...

vb程序设计教程(第三版)刘炳文第4章_图文.ppt

vb程序设计教程(第三版)刘炳文第4章 - 第4章 数据类型、运算符与 表达式 Visual Basic中的语句由不同的“基本元 素”构成,包括数据类型、常量变量、内 部...

VB 第4章 数据,表达式与简单程序设计.ppt

VB 第4章 数据,表达式与简单程序设计_计算机软件及应用_IT/计算机_专业资料。第...顺序结构语句 本章重点:变量常量的定义及使用、运算符和表达式 的使用及常用...

VB教程第4章_图文.ppt

第4章 数据类型、 数据类型、运算符与 表达式 Visual Basic中的语句由不同的“基本元 中的语句由不同的“ 中的语句由不同的 构成,包括数据类型、常量变量、...

第四章 数据类型、运算符与表达式_图文.ppt

第四章 数据类型、运算符与表达式 - 第四章 数据类型、运算符与表达式 本章主要任务: (1)掌握各种常用数据类型的数据在内存中的存放形式; (2)理解变量常量...

vb第4章1_图文.ppt

vb第4章1 - 本节内容: 1.课本4.1小节 2.数据类型 3.常量变量 4.运算符与表达式 5.常用内部函数 1 第4章 编程基础 4.1编程基础 【问题与任务】编写程序...

第4章 数据、表达式_图文.ppt

第4章 数据、表达式_数学_自然科学_专业资料。第四章 数据、表达式 与简单程序...4.3 VB数据类型 4.3.1 4.3.2 4.3.3 数据类型 常量 变量 4.3.1 数据类型 ...

第4章 TSQL语言基础1_图文.ppt

常量变量、表中的列、 函数的自变量与函数值、过程参数及返回代 码、表达式...1.1 数据类型 1.2 常量 湖北国土资源职业学院信息工程系 第4章 T-SQL语言...

更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com