基本数据类型运算符与表达式.docx
- 文档编号:2243716
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:25
- 大小:35.63KB
基本数据类型运算符与表达式.docx
《基本数据类型运算符与表达式.docx》由会员分享,可在线阅读,更多相关《基本数据类型运算符与表达式.docx(25页珍藏版)》请在冰点文库上搜索。
基本数据类型运算符与表达式
第2章基本数据类型、运算符与表达式
数据是程序不可或缺的组成部分,程序处理的对象是数据,编写程序也就是描述对数据的处理过程。
C语言中规定:
任何一个变量和数据都必须遵从“先定义,后使用”的规则,也就是说在程序中出现的任何一个变量和数据都必须先定义它的数据类型,然后才能使用。
2.1常量和变量
1.常量
程序在运行的过程中,其值不能被修改的固定量称为常量。
C语言中有三种常量:
(1)数值型运算常量(如整型常量、实型常量等);
(2)字符型常量(如字符常量、字符串常量);
(3)标识符所定义的符号常量。
符号常量在使用之前必须先定义,其一般定义格式为:
#define常量名常量的值
其中,#define是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令(在后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。
一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。
习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。
例如:
#definePI3.1415926
main()
{
floatr,l,s;
r=2;
l=2*PI*r;s=PI*r*r;
printf(“l=%d,s=%d”,l,s);
}
符号常量定义语句定义在main()函数的上方.切记不要定义在main()函数内部。
2.变量
程序运行过程中,其值可以改变的量叫变量;程序中使用的变量,属于用户自定义标识符。
变量也有类型之分,常用的有整型变量、实型变量、字符型变量等。
变量定义格式:
类型说明符标识符1,…,标识符n
例如:
intx,y,z;(每个变量分配4个字节,VisualC++编译环境下)
floata,b,c,d;(每个变量分配4个字节)
在C语言中,变量必须强制定义,其目的:
(1)凡未被事先定义的,不作为变量名。
(2)每一个变量被指定为一确定的类型,在编译时就能为其分配相应的存储单元。
(3)指定每一个变量为一确定的类型,在编译时据此检查该变量所进行的运算是否合法。
例如,如果变量a,b是整型类型,则可以进行求余运算a%b,而两个实数类型的变量求余是不允许的。
选变量名时,要做到“见名知意”;大小写字母是两个不同的字符,C变量名习惯用小写字母表示。
2.2基本数据类型
2.2.1整型数据类型
【项目任务】
编写程序,定义和使用常见的整型数据。
【程序代码】
/*整型数据类型案例*/
#include
main()
{
intx;
unsignedy;
longz;
x=1000;
y=50000U;/*y的值为无符号整型数*/
z=800000L;/*z的值为长整型数*/
printf("%d,%u,%ld\n",x,y,z);
}
【运行结果】
1000,50000,800000
【知识拓展】
整型类型细化可分为基本整型,短整型,长整型,整型数据还可以分为有符号数和无符号数。
整型数据分为整型常量与整型变量。
本案例中列举了常见的三种整型类型:
基本整型(int),无符号整型(unsigned),长整型(long)。
1.整型常量的表示方法
整型常量就是整常数。
在C语言中,使用的整常数有八进制、十六进制和十进制三种。
(1)十进制整常数:
十进制整常数没有前缀,其数码为0~9。
(2)八进制整常数:
八进制整常数必须以0开头,即以0作为八进制数的前缀。
数码取值为0~7。
八进制数通常是无符号数。
(3)十六进制整常数:
十六进制整常数的前缀为0X或0x。
其数码取值为0~9,A~F或a~f。
整型常数的后缀:
长整型数是用后缀“L”或“l”来表示的。
例如:
(1)十进制长整常数:
158L(十进制为158)、80000L(十进制为800000);
(2)八进制长整常数:
012L(十进制为10)、077L(十进制为63)、0200000L(十进制为65536);
(3)十六进制长整常数:
0X15L(十进制为21)、0XA5L(十进制为165)、0X10000L(十进制为65536)。
无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。
例如,5000u,358u,0x38Au,235Lu均为无符号数。
前缀、后缀可同时使用以表示各种类型的数,如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。
2.整型变量
(1)整型变量的分类:
整型变量的分类及其表示的数据范围如表2-1所示(VisualC++环境)。
表2-1整型变量的分类及范围
类型名称
占用的字节数
数值范围
[signed]int
4
-2147483648~2147483647
[signed]short[int]
2
-32768~32767
[signed]long[int]
4
-2147483648~2147483647
unsigned[int]
4
0~4294967295
unsignedshort[int]
2
0~65535
unsignedlong[int]
4
0~4294967258
(2)整型变量的定义。
变量定义的一般形式为:
类型说明符变量名标识符,变量名标识符,…;
例如:
intx;(x为整型变量)
unsignedy;(y为无符号整型变量)
longz,w,m;(z,w,m为长整型变量)
在书写变量定义时,应注意以下几点:
①允许在一个类型说明符后,定义多个相同类型的变量。
各变量名之间用逗号间隔。
类型说明符与变量名之间至少用一个空格间隔。
②最后一个变量名之后必须以“;”号结尾。
③变量定义必须放在变量使用之前。
一般放在函数体的开头部分。
案例中出现了“/*“和”*/“符号,这是C语言的注释语句。
注释用来向用户提示或解释程序的意义。
程序编译时不对注释作任何处理,但必要的注释是程序的重要组成部分。
注释可出现在程序中的任何位置。
在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待调试结束后再去掉注释符。
“/”和“*”之间不要有空格,也不允许嵌套定义注释,因为当出现了第一个/*,它就会与之后出现的第一个*/匹配,之后如果再有*/出现就成了非法字符,编译器会提示错误。
例如,
#include
main()
{
printf("Hello,world\n");
/*/*printf("It'sOK!
\n");*/
getchar();*/
}
这个程序无法通过编译,因为编译器认为注释的语句是“/*printf("It'sOK!
\n");”语句,最后的“*/”是非法字符。
2.2.2实型数据类型
【项目任务】
编写程序,定义和使用常见的实型数据。
【程序代码】
#include
main()
{
floatx;/*定义单精度类型变量x*/
doubley;/*定义双精度类型变量y*/
x=1.23;
y=123.456;
printf("%f,%lf\n",x,y);
}
【运行结果】
1.230000,123.456000
【知识拓展】
实型也称为浮点型,分为实型常量与实型变量。
1.实型常量的表示方法
(1)十进制数形式:
由数字和小数点及正负号组成。
例如:
23.678,.678,23.
必须有小数点。
(2)指数形式:
由数字、小数点、字母e或E及正负号组成。
例如,3.5E-5,2e3是合法的实数。
e或E之前必须有数字,且后指数必须为整数。
下面不是合法的实数:
345(无小数点)
E7(阶码标志E之前无数字)
-5(无阶码标志)
53.-E3(负号位置不对)
2.7E(无阶码)
2.实型变量
实型变量分为:
单精度(float型)、双精度(double型)和长双精度(longdouble型)三类,如本案例中分别使用类型名float和double进行定义变量x和y。
在VisualC++中,单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。
双精度型占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字,如表2-2所示。
表2-2实型变量的数值范围
类型说明符
比特数(字节数)
有效数字
数的范围
float
32(4)
6~7
10-37~1038
double
64(8)
15~16
10-307~10308
longdouble
128(16)
18~19
10-4931~104932
实型变量定义的格式和书写规则与整型相同。
例如:
floatx,y;(定义x,y为单精度实型变量)
doublea,b,c;(定义a,b,c为双精度实型变量)
2.2.3字符型数据类型
【项目任务】
编写程序,定义和使用字符型数据。
【设计思想】
每个字符都有对应的ASCII码值,字符'a','b'的ASCII码值分别为97和98,将97、98赋给变量c1,c2,再以字符(%c)和整数(%d)的格式输出。
【程序代码】
#include
main()
{
charc1,c2;
c1='a';
c2='b';
printf("%c%c\n",c1,c2);/*以字符的形式输出*/
printf("%d%d\n",c1,c2);/*转换为c1和c2的ASCII码形式输出*/
}
【运行结果】
ab
9798
【知识拓展】
char为字符类型的类型名。
字符型数据和整型数据是通用的。
另外大写字符和小写字母的ASCII值相差码值32,一个小写字母减去32即可得到该小写字母对应的大写字母。
字符型数据包括字符常量和字符变量。
1.字符常量
字符常量是用单引号括起来的一个字符。
例如,'a','b','=','+','?
'都是合法字符常量。
在C语言中,字符常量有以下特点:
(1)字符常量只能用单引号括起来,不能用双引号或其他括号。
(2)字符常量只能是单个字符,不能是字符串。
(3)字符可以是字符集中任意字符。
但数字被定义为字符型之后就不能参与数值运算。
例如,'5'和5是不同的,'5'是字符常量,不能参与运算。
2.转义字符
转义字符是一种特殊的字符常量。
转义字符以反斜线“\”开头,后跟一个或几个字符。
转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。
转义字符主要用来表示那些用一般字符不便于表示的控制代码,如表2-3所示。
表2-3常用的转义字符及其含义
转义字符
转义字符的意义
ASCII代码
\n
回车换行
10
\t
横向跳到下一制表位置
9
\b
退格
8
\r
回车
13
\f
走纸换页
12
\\
反斜线符“\”
92
\'
单引号符
39
\”
双引号符
34
\a
鸣铃
7
\ddd
1~3位八进制数所代表的字符
\xhh
1~2位十六进制数所代表的字符
广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。
表中的\ddd和\xhh正是为此而提出的。
ddd和hh分别为八进制和十六进制的ASCII代码。
例如,'\101'表示代表ASCII码(十进制)为65字母'A','\102'表示字母'B','\134'表示反斜线,'\XOA'表示换行等。
3.字符变量
字符变量用来存储字符常量,即单个字符。
字符变量类型定义的格式和书写规则都与整型变量相同。
例如:
charc1,c2;
每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。
字符值是以ASCII码的形式存放在变量的内存单元之中的。
例如,字符'a'的十进制ASCII码是97,'b'的十进制ASCII码是98。
对字符变量c1,c2赋予'a'和'b'值:
c1='a';
c2='b';
实际上是在c1,c2两个单元内存放的是字符'a'和'b'的ASCII码值,所以也可以把它们看成是整型量。
C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。
在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。
例如:
printf("%d%d\n",c1,c2);
就是输出字符变量c1和c2的ASCII码值。
如果整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。
4.字符串常量
字符串常量是由一对双引号括起的字符序列。
例如,"CHINA","Cprogram","$12.5"等都是合法的字符串常量。
字符串常量和字符常量是不同的量。
它们之间主要有以下区别:
(1)字符常量由单引号括起来,字符串常量由双引号括起来。
(2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。
(3)可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。
(4)字符常量占一个字节的内存空间。
字符串常量占的内存字节数等于字符串中字节数加1,增加的一个字节中存放字符"\0"(ASCII码为0),这是字符串结束的标志。
例如,字符串"Cprogram"在内存中所占的字节为:
C
p
r
o
g
r
a
m
\0
字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。
'a'在内存中占一个字节,可表示为:
a
"a"在内存中占两个字节,可表示为:
a
\0
2.3算术运算符与算术表达式
2.3.1算术运算符和算术表达式的简单使用
【项目任务】
编写程序,学习和使用算术运算符和算术表达式。
【程序代码】
#include
main()
{
inta,b;
a=1,b=2;
printf("a+b=%d\n",a+b);
printf("a-b=%d\n",a-b);
printf("a*b=%d\n",a*b);
printf("a/b=%d\n",a/b);/*/为除法运算符*/
printf("a%%b=%d\n",a%b);/*%为求余运算符*/
}
【运行结果】
a+b=3
a-b=-1
a*b=2
a/b=0
a%b=1
【知识拓展】
算术运算符有+,-,*,/,%:
(1)在“/”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。
例如,1/2的结果为0,要想得到小数可以使用强制类型转换运算符,写成表达式(double)1/2,也可以写成1.0/2,它们的结果都为0.5。
(2)求余运算符“%”要求其运算对象必须为整型。
两个实数类型的变量求余是不允许的。
算术表达式是用算术运算符和括号将操作数连接起来的,符合C语法规则的式子。
例如:
'a'+'b'+a*b/c+2.8
2.3.2强制类型转换
【项目任务】
编写程序,学习和掌握强制类型转换。
【程序代码】
#include
main()
{
floatx;inti;
x=3.6;i=(int)x;
printf(“x=%f,i=%d”,x,i);
}
【运行结果】
x=3.600000,i=3
【知识拓展】
1.强制类型转换形式
(类型名)(表达式)
例如:
(double)(a+b)
表示把a+b的和强制转换为double型。
案例中i=(int)x表示把float型变量x的值强制转换成整型赋值给整型变量i,即把x的值3.6的整数部分3赋值给变量i。
另外,本案例的运行结果也表明强制类型转换得到的是一个所需类型的中间量,原表达式或变量的类型和值并不发生变化,如案例中变量x,(int)x后,x的值与类型不变。
2.各类数值型数据间的混合运算
(1)运算过程:
先自动转换成同类数据,再进行运算。
(2)转换规则:
低字长类型转换成高字长类型。
double←float
↑
long
↑
unsigned
↑
int←char,short
①向左的横向箭头表示即使在同一种数据类型间进行运算时也要进行转换,用于提高精度。
②向上纵向箭头表示当运算对象类型不同时的转换方向。
2.4赋值运算符和赋值表达式
【项目任务】
编写程序,学习和使用赋值运算符和赋值表达式。
【程序代码】
#include
main()
{
intx=0,y=0;
floatm;
x=1;
printf("%d,",x);
y+=2;/*等价于y=y+2*/
printf("%d,",y);
y*=x+4;/*等价于y=y*(x+4)*/
printf("%d\n",y);
m=y;/*整型变量y的值赋予实型变量m的值*/
printf(“%f”,m);
}
【运行结果】
1,2,10
10.000000
【知识拓展】
1.赋值运算符(=)
形式:
变量名=常量或表达式
作用:
将右边常量或表达式的值赋给左边的变量
例如:
x=1;
2.复合赋值运算符
(1)复合赋值运算符:
在赋值符“=”之前加上其他运算符。
(2)共有10种复合赋值运算符:
+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
例如:
y+=2等价于y=y+2,
y*=x+4等价于y=y*(x+4)。
3.赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子即为赋值表达式。
赋值表达式的值为被赋值的变量的值。
例如:
a=b=c=6表达式的值为6
a=(b=4)+(c=6)表达式的值为10
a=(b=4)*(c=6)表达式的值为24
4.类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。
具体规定如下:
(1)实型赋予整型,舍去小数部分。
前面的例子已经说明了这种情况。
(2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
见案例变量的m值。
(3)字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。
整型赋予字符型,只把低八位赋予字符量。
2.5关系运算符和关系表达式
【项目任务】
设a=3,b=2,c=1,求下面关系表达式的值:
c>b;a-b==1;b+c 【设计思想】 定义六个整型变量a,b,c,m,n,k,然后输出这个三个关系表达式的值。 【程序代码】 #include main() { inta=3,b=2,c=1,m,n,k; m=c>b; n=(a-b)==1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 数据类型 运算 表达式