您现在的位置:首页 > >

C语言讲解第二章 基本数据类型、运算符及表达式_图文


2.1 C语言的基本数据类型
著名计算机科学家沃思提出: 程序=数据结构+算法

2.1 C语言的基本数据类型
举 一个例子:以考生各科成绩及总分排队问 题为例子。 ? 成绩的存放 ––– 以数组形式 ? 排队方法 –––– 算法 所以,存放数据的方式直接反映了一种语言的 数据表达能力。 数据的存储方式又称之为:数据类型。

2.1 C语言的基本数据类型
? 程序设计中,每个要使用的变量都要事 先指定它的数据类型! 为什么要指定数据类型?
1.不同类型的数据在内存中占据不同长
度的存储区。 2.不同类型的数据取值范围不同。 3.不同类型的数据有不同的操作。

2.1 C语言的基本数据类型
因此要求在使用变量之前, 必须对

变量的类型进行说明, 即通知编译系
统, 以便为其分配相应的存储单元。

2.1 C语言的基本数据类型
C语言中, 变量须先定义,后使用 如: int student ;

student=30;
则若写成

student=30;
即未定义, 编译时会出错。

2.1 C语言的基本数据类型
C数据类型丰富,分为: 整型 基本类型 字符型 实型 枚举 数组 构造类型 指针类型 空类型 结构体

单精度 双精度

共用体

数据有常量、变 量之分,均为其 中一种类型。

基本数据类型
关键字 int short long unsigned int unsigned short (int) unsigned long (int) 所占位数 16 16 32 16 16 32 取值范围 -32768~32767 -32768~32767 -2147483648~2147483647 0~65535 0~65535 0~4294967295

关键字
float double char

所占 位数
32 64 8

取值范围
-3.4×1038~3.4×1038(7位有效位) -1.7×10308~1.7×10308 (15位有效位) -128~127

unsigned char

8

0~255

例: int a; /* 定义整型变量a */ char b; /* 定义字符型变量b */ a的取值只能在范围-32768~32767之间 b的取值只能在范围-128~127之间;

2.2 常量
什么是常量?
程序运行过程中不能被改变的量。 如程序中: ? 20 ? 整型常量

? 15.8 ? 浮点型常量
'a' ? 字符常量

2.2.1 整型常量
1、整型常量的基本类型

整型数据有三种形式
十进制整数 八进制整数 十六进制整数

2.2.1 整型常量
(1)十进制整数的表示与数学上的表示相同
?

合法的十进制常数如: 256,-321,0
不合法的十进制常数有: 023,25D

?

2.2.1 整型常量
(2)八进制整数的表示以数字0开头(后面出现 的每位上的数字取值是0~7)
?

?

?

合法的八进制数如: 015,0101,017 不合法的八进制数如: 256,0283 例: 0234表示八进制整数(234) 8 ,所对应的十进制 数为 2×82+3×81+4×80 =156

2.2.1 整型常量
(3)十六进制整数的表示以0x开头(后面出现的 每位上的数字取值是0~F)
合法的十六进制数: 0x1f,0xFF,0x201 ? 不合法的十六进制数: 8C,0x3H ? 例: 0x201表示十六进制整数(201)16,所对应的十进 制数为 2×162+0×161+1×160 =513。 (友情提示:十六进制数前导字符0x,x前面是数字0)
?

2.2.1 整型常量
2、整型常量的后缀
?

在一个整型数据后面加一个字母l或L, 则认为是long int型量(长整型)。如342L、 0L、78L等。 长整型123L和基本整型常数123在数值上 无区别,但123L是长整型数,占4个字节, 而123是基本整型,占2字节,在运算和输出 格式上要注意。

2.2.1 整型常量
2、整型常量的后缀
?

无符号也可用后缀表示,整型常量的无 符号数用后缀“u”或“U”来表示。如: 345u,0x38Au,235Lu
思考: 10和10L是否等价 10、010、0x10是否等价

?

2.2.2 实型常量
在C语言程序设计中,实型数据有两种表达形式: (1)十进制数形式。如: 5.734、0.273、.8、224.、0.0等。 (2)指数形式。如: 3 546e3(或546E3)都代表546× 10。 注意: E、e只能表示底数为10的,字母e(或E) 之前必须有数字,且e后面的指数必须为整数。 例:e3 , 32e3.5, .e3, e 错误

2.2.3 符号常量
什么是符号常量?
在程序中,为了书写方便,用标识符代表一个
常量。

〔符号常量的定义〕

#define 标识符 字符串

2.2.3 符号常量
如:可事先规定PI=3.1415926, 就可定

义符号常量PI 代表字符串3.1415926,定
义如下

#define PI 3.1415926
这样在程序中所有PI均代表3.1415926,

是个常量,PI的值在程序执行时不能改变。

2.2.3 符号常量
〔说明〕:
1. define是预编译命令,在编译之前中用对应的 字符串替换程序中的标识符,然后再编译程序。 2. 该定义必须放在程序的开头,每一个定义必须 独占一行,因其不是语句,故尾部不跟分号。 3. 为了与变量区分,一般符号常量用大写表示。

2.2.3 符号常量
例: #define PRICE 30 #include<stdio.h> void main ( ) { int num, total; num=10; total=num*PRICE; printf("total=%d",total); }

显示结果: total=300

当开始编译前,系统先将程序中所有的PRICE 这个单词换成30,再进行编译(翻译成二进制)。

2.2.3 符号常量
例:#include<stdio.h> #define PI 3.14 #define R 10.0-7.0*PI void main() { float s; s=PI*R; printf(“s=%f\n”,s); }

显示结果: s=9.420000

2.2.4 字符型常量
它可分为字符常量和字符串常量两种。 (1) 字符常量 * 字符常量的定义 用一对单引号括起来的单个字符,称为字符 常量。 例如,‘A’、‘1’、‘+’等。 * 转义字符 C语言还允许使用一种特殊形式的字符常 量,就是以反斜杠“\ ”开头,引导的一个字 符或一个数字序列的转义字符

字符形式 功 能 \n 换行 \t 横向跳格(跳到下一个输出区,一个输出区有8列) \b 退格 \r 回车 \f 换页 \\ \? \?? \0 \ddd \xhh 反斜杠字符 单引号字符 双引号字符 空值 1到3位8进制数所代表的字符 1到2位16进制数所代表的字符

2.2.4 字符型常量
〔注意〕:

(1)‘ \ddd?? 表示某ASCII码的一个字符 ?
三位八进制数 [例] ?\ 101 ?–– 表示字母A (2) \ xhh ? 表示某ASCII的一个 字符 二位十六进制数 [例]?\ x 41?–– 表示字母A

2.2.4 字符型常量
〔使用转义字符注意〕:
1) 转义字符多用于printf()函数中,而在scanf()函 数中通常不使用 2) 转义字符常量,如’\n?,?\x86?等只能代表一个 字符

2.2.4 字符型常量
思考下列程序的输出结果?
运行结果: 52 4 52 4

例: #include<stdio.h> main() { int a,b,c; a=5;b=2;c=4; printf(“\t%d%d\n%d\n%d%d\t\b\b%d\n”, a,b,c,a,b,c); }

2.2.4 字符型常量
(2)字符串常量 * 字符串常量的定义
字符串常量是用一对双引号括起来的若干字 符序列。

* 例如: “china” , ”I am a student” , “123.0”

2.2.4 字符型常量
(2)字符串常量 * 字符串长度
字符串中字符的个数称为字符串长度。长度 为0的字符串(即一个字符都没有的字符串)称为 空串,表示为“ ” (一对紧连的双引号)。

* 例如
“How do you do.” “Good morning.” 其长度分别为14和13(空格也是一个字符)。

2.2.4 字符型常量
(2)字符串常量 * 字符串的存储
C语言规定:在存储字符串常量时,由系统在字 符串的末尾自动加一个‘\0?作为字符串的结束标志, 但不显示。 注意:在源程序中书写字符串常量时,不必加 结束字符‘\0?,否则画蛇添足。

2.2.4 字符型常量
(2)字符串常量
如果有一个字符串为“CHINA”,则它在内存
中 的实际存储如下所示:
C H I N A \0

最后一个字符‘\0?是系统自动加上的,该字符 串占用6字节而非5字节内存空间。

2.2.4 字符型常量
* 字符常量‘A? 和字符串常量”A”是不同的
总结,不同之处: (1)定界符不同:字符常量使用单引号,而 字符串常量使用双引号;
(2)长度不同:字符常量的长度固定为1,而 字符串常量的长度,可以是0,也可以是某 个整数;

2.2.4 字符型常量
(3)存储要求不同:字符常量存储的是字符 的ASCII码值,而字符串常量,除了要存储 有效的字符外,还要存储一个结束标 志’\0?。
“A”存储方式为 65 \0 但‘A?存储方式为:65

2.3 变量
?

程序运行过程中,数据的两种状态: 变量 常量

变量的要素: (1)变量名。 每个变量都必须有一个名字──变量名, 变量命名遵循标识符命名规则。
?

2.3 变量
(2)变量类型(int , float, double等) (3)变量值。 在程序运行过程中,变量值存储在内存 中。在程序中,通过变量名来引用变量的值。
注意:变量名和变量值两个不同的概念

2.3.1 变量名
? ?

?

变量名用标识符来表示 合法的标识符 day, sum, _total, name12 不合法的标识符 if, printf, 23name, ab#

2.3.2 变量类型
?

在C语言中,要求对所有用到的变量,必须先定 义、后使用 [定义格式] 变量类型 [例子] int a,b,c; float f; char d;

?

变量名;

?

2.3.2.1 整型变量
1、根据数值的范围将整型数据分成三类: ? 基本整型,以int 表示 ? 短整型,以short int 表示,或以short表示 ? 长整型,以long int 表示,或以long 表示 对以上三类还可以加上signed( signed可 以省略)或 unsigned, 分别表示有符号数或无符号数

2.3.2.1 整型变量
2、定义方法 例如: int a , b, c ; 等价于:

int a ; int b ; int c ;

2.3.2.2 实型变量
1、实型数据的分类: ? 单精度,以float表示 ? 双精度,以double表示

2、定义方法 float a ,b, c ; double a ,b, c ;

2.3.2.3 字符型变量
1、字符型数据类型标识符为char 2、定义方法 char a ; 3、字符型变量当中存放的值是一个字符,而 C语言中的字符表示是用单引号括起来的 一个字符。 如’A?、’y?、’*’、’! ?、’+?等。 注意,’e? 和 ’E? 是不同的字符量。

2.3.3 变量值
?

? ?

变量必须先有确定的值后才能参加各种相 应的操作。 变量通过赋值语句获得一个值

例如: int i ; i=10 ;
结果:10

/* 定义为整型变量 i */ /* 给i赋以整数10 */

(思考?若i=10换成语句 i=10.2 ,输出 i, 结果是什么…)

2.3.3 变量值
又如: float j ; j=10.5 ;

/* 定义实型变量 j */

(思考?若j=10.5换成语句j=10, 输出j的值, 显示应为…)
是一个实数10.0 在%f的输出格式前提下,输出结果:10.000000

2.3.3 变量值
又如: char i ; i=?a?; 字符变量只占一个字节单元。 注意: i=“a”; i=“abc”; 单个字符的字符串或者是多个字符的字 符串都不能赋给字符变量

2.3.3 变量值
?

变量也可以通过输入语句获得一个值 int a; scanf(“%d”,&a);

2.3.3 变量值
?

变量可用初始化的方法获得一个值
?

在定义变量的同时进行赋初值的操作为变量初 始化。

例:
int a=3;
相当于:

int a; a=3;

再如: float f=3.56; char c=?a?;

2.3.3 变量值
?

可以对被定义的变量的一部分赋初值。 如: 相当于 int a,b,c=5; int a,b,c; c=5;

2.3.3 变量值
?

对几个变量赋予相同的初值时 如: 相当于 int a=3,b=3,c=3; int a,b,c; a=b=c=3;

思考:int a=b=c=3; 是否正确?

【巩固练习】
1,C语言规定:在一个源程序中,main()函数的位置: A、必须在最开始; B、必须在系统调用的库函数的后面; C、可以任意; D、必须在最后;

2,请选出作为C语言的合法标识符的一组标识符: A、void ,define , WORD B、a3_b3 , _123 , IF C、For , -abc ,Case D、2a ,DO ,sizeof

2.4 基本运算符
运算符: 运算的符号表示。 C语言有丰富的运算功能,先简述之

[C运算符]
1. 算术运算符 + , – , ? , / , % , ++ , --

2. 关系运算符
3. 逻辑运算符

> , < , = = , > = , <= , !=
! , && , ||

2.4 基本运算符
4. 位运算符
5. 赋值运算符

<< , >> , ~ , | , ^, &
= ,复合赋值运算符

6. 条件运算符
7. 逗号运算符 8. 指针运算符

? :
, * , &

2.4 基本运算符
9. 求字节数运算符 sizeof (类型)

10. 强制类型转换运算符

11. 分量运算符 12. 下标运算符
13. 其它运算符

? , ?, []
如函数的调用( )

2.4 基本运算符
表达式: 是由操作数和运算符组成的序列。 运算符分哪几种?
? ? ?

一元运算符 二元运算符 三元运算符

2.4.1 算术运算符
[基本算术运算符]
+ 加法,正值。 如: 3+6, +3 – 减法,负值。 如: 6 – 4, –5 * 乘法。 / 除法。 如: 3*8 如: 8 / 5

% 求余。 --

如: 7 % 4 的值为3

++ 自加。 如:i++ , ++i

自减。 如:i-- , --i

2.4.1 算术运算符
说明: 1、两个整型数据相除,结果为整数 如:求12/24= 0 改成:12.0/24=0.5 2、 求余数运算a%b, 其中a和b只能是整型,

表达式结果的正负符号以a的为准
例如: -5%3=-2 5%(-3)= 2 3%(-5)= 3 -5%(-3)= -2

2.4.2 自增与自减运算符
+ + 自增1 – – 自减1

例: #include<stdio.h> main()

{ int i=1;
i++; printf(“%d”,i); }

(1) 单独使用时(作为语句)
i++;
等 价

++i;

等 价

i=i+1;

2.4.2 自增与自减运算符
?

例: #include<stdio.h> 最容易混淆的是“i++”和“++i”作为表达式 main()
或表达式的一部分的时候

{ int i=3,j,k=2;

j=i++;

//i++作为表达式的一部分

printf(“%d,%d”,i,j);

j=++k;

//++k作为表达式的一部分

printf(“%d,%d”,k,j);

}

若int i=3;

(2) j= ++i ;
( i=i+1; j=i; )
i=4;

(3) j= i++ ;
( j=i; i=i+1; )
j=3; i=4;

j=4;

说明: 这里的+ +i, i++都会将i变为4,但有区别: ++i: 先将i值+1,整个表达式再使用i值; i++: 整个表达式先使用i值,再将i值+1.

2.4.2 自增与自减运算符
〔综述〕

? i++在使用i的值之后,再使i的值加1, 因此执行完i++后,整个表达式的值为i, 而i的值变为i+1。 int i=15; j=i++; printf(“%d”,j);
printf(“%d”,i);

结果:15 结果:16

〔综述〕 ? ++i在使用i之前,使i的值加1,因此 执行完++i后,整个表达式和i的值均为 i+1。 int i=15; j=++i; printf(“%d”,j); 结果:16 printf(“%d”,i); 结果:16

2.4.2 自增与自减运算符

2.4.2 自增与自减运算符
例:
#include<stdio.h> main() { int i=3,j=4; printf ("%d,%d\n", i++,i); printf (“%d,%d\n", ++j,j);
运行结果: 3,4 5,5

}

2.4.2 自增与自减运算符
同理: – –i, i – –,均使i值–1,但: – – i: 先使i值–1,整个表达式再使用i值; i – –:整个表达式先使用i值, 再使i值–1

2.4.2 自增与自减运算符
运行结果: 例 #include<stdio.h> x=6 y=x--: x=5,y=6 void main()

{ int x=6, y; printf("x=%d\n",x); /*输出x的初值*/ y = x--; /*后置运算*/ printf("y=x--: x=%d,y=%d\n",x,y); }

2.4.2 自增与自减运算符
思考题:如果将案例 “y=x--;” 语句中 的后置运算改为前置(y=--x;),程序运 行结果会如何?

2.4.2 自增与自减运算符
[注意事项]
? ++和– –运算法只能用于变量,不得用于常量和表达 式. 如 5++, (a+b)++均为不合法.

? ++和--运算符的优先级别一样,结合方向都是“自 右向左”,例如-k++相当于-(k++)
? 尽量避免再多项表达式中对同一变量连续使用++ 和--



友情链接: 医学资料大全 农林牧渔 幼儿教育心得 小学教育 中学 高中 职业教育 成人教育 大学资料 求职职场 职场文档 总结汇报