第2章数据类型与基本操作文档格式.docx
《第2章数据类型与基本操作文档格式.docx》由会员分享,可在线阅读,更多相关《第2章数据类型与基本操作文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
程序某次的运行结果如下:
5,6↙
maxmum=6
说明:
在例2.1中,变量x、y、z被定义为整型变量,函数max的返回值也被定义为整型。
2.2 常量和变量
2.2.1 常量
就数据本身而言,C语言中的数据有常量和变量之分,它们分别属于不同的数据类型。
值固定不变且不可再被赋值的量被称为常量。
常量分为数值常量和符号常量。
其中,数值常量可以为整型或实型的数,如100,-50,20.125,3.14等;
常量可以用标识符(标识符的定义将在变量部分讲解)代替,符号常量在使用之前必须先定义,其一般形式为:
#define标识符常量
例如:
#definePRICE30
其中#define是一条预处理命令(预处理命令都以"
#"
开头),称为宏定义命令(在后面预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。
符号常量也可以用访问说明符来定义:
constinta=10;
此语句将产生整形常量a,其值不能被程序修改,但可以被其他表达式所使用。
符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。
但使用符号常量的好处是含义清楚,能做到“一改全改”。
例2.2 常量预定义举例。
#definePRICE30/*预定义一个常量*/
main()
intnum,total;
/*定义两个整型变量*/
num=10;
/*给整型变量num赋值*/
total=num*PRICE;
/*计算total的值*/
total=%d"
total);
/*输出total的值*/
}
运行结果如下:
total=300
按照数据类型,常量又可以分为整型、实型、字符、字符串型、指针型以及空类型和复合数据类型,目前只介绍基本类型的常量。
1.整型常量
整型常量就是整常数。
在C语言中,使用的整常数有八进制、十六进制和十进制三种。
1)十进制整常数:
十进制整常数没有前缀。
其数码为0~9。
2)八进制整常数:
C语言规定,八进制整常数必须以0开头,即以0作为八进制数的前缀。
数码取值为0~7。
八进制数通常是无符号数。
3)十六进制整常数:
十六进制整常数的前缀为0X或0x。
其数码取值为0~9,A~F或a~f。
2.实型常量
实型也称为浮点型,因此实型常量也称为实数或者浮点数。
在C语言中,实数只采用十进制。
它有两种形式:
十进制小数形式和指数形式。
3.字符型常量
1)字符常量是用单引号括起来的一个字符。
'
a'
、'
b'
='
、'
+'
?
'
,都是合法字符常量。
在C语言中,字符常量只能用单引号括起来,不能用双引号或其它括号;
字符常量只能是单个字符,不能是字符串;
字符可以是字符集中任意字符。
2)转义字符
转义字符是一种特殊的字符常量。
转义字符以反斜线"
\"
开头,后跟一个或几个字符。
转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。
例如,在前面各例题printf函数的格式串中用到的"
就是一个转义字符,其意义是“回车换行”。
转义字符主要用来表示那些用一般字符不便于表示的控制代码。
如表2.1所示。
转义字符
转义字符的意义
ASCII代码
\n
回车换行
10
\t
横向跳到下一制表位置
9
\b
退格
8
\r
回车
13
\f
走纸换页
12
\\
反斜线符"
92
\'
单引号符
39
双引号符
34
\a
鸣铃
7
\ddd
1~3位八进制数所代表的字符
\xhh
1~2位十六进制数所代表的字符
4.字符串常量
字符串常量是由一对双引号括起的字符序列。
"
CHINA"
、"
Cprogram"
$12.5"
等都是合法的字符串常量。
字符常量'
和字符串常量"
a"
虽然都只有一个字符,但在内存中的情况是不同的。
在内存中占一个字节,可表示为:
a
"
在内存中占二个字节,可表示为:
\0
2.2.2 变量
按照数据类型分,变量也可以分为整型、实型、字符、字符串型、指针型以及空类型和复合数据类型,本小节中只介绍基本类型的变量。
1.变量及定义
其值可以改变的量称为变量。
变量定义必须放在变量使用之前。
一般在函数体的开头部分定义变量。
要区分变量名和变量值是两个不同的概念,如下图所示:
一个变量应该有一个名字,用于指示在内存中的存储单元位置,该位置存储了该变量的数值。
因此变量的名字就是一个标识符。
那么什么是标识符?
C语言中用来标识变量名、常量名、函数名、数组名、类型名、宏名、文件名等的有效字符序列,称之为标识符。
标识符只能由字母或下划线打头,后接字母、数字或下划线的组合。
C语言严格区分大小写
2.不同类型的变量
1)整型变量
变量定义的一般形式为:
类型说明符变量名;
inta,b,c;
(a,b,c为整型变量)、longx,y;
(x,y为长整型变量)、unsignedp,q;
(p,q为无符号整型变量)
2)实型变量
根据数据所占字节大小来分,实型变量可分为:
单精度(float型)、双精度(double型)和长双精度(longdouble型)三类。
表2.3列出了TurboC中各类浮点型量所分配的内存字节数及数的表示范围。
类型说明符
比特数(字节数)
有效数字
数的范围
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为双精度实型量)
3)字符变量
和所有变量定义形式一样,字符变量的定义形式为:
charc1,c2;
其中,char为类型定义符,c1,c2为变量名。
例2.7字符型数据举例。
main()
{charc1,c2;
c1=97;
c2=98;
%c%c\n"
c1,c2);
c1=c1-32;
c2=c2-32;
%c%c"
ab
AB
2.3 运算符和表达式
2.3.1 算术运算符及其表达式
1.基本的算术运算符
基本的算数运算符包括加法运算符"
+"
、减法运算符"
-"
、乘法运算符"
*"
、除法运算符"
/"
、求余运算符(取模运算符)"
%"
。
100%3,即100对3取余数,结果为1。
2.自增、自减运算符
在程序设计中经常会用到对某个变量进行自增或自减操作,C语言中提供了自增、自减运算符。
自增1运算符记为"
++"
,其功能是使变量的值加1。
自减1运算符记为"
--"
,其功能是使变量的值减1。
++i表示i自增1后再参与其它运算;
--i表示i自减1后再参与其它运算;
i++表示i参与运算后,i的值再自增1;
i--表示i参与运算后,i的值再自减1。
2.3.2 赋值运算符及其表达式
1.简单赋值运算符
简单赋值运算符记为"
="
由"
="
连接的式子称为赋值表达式,其一般形式为:
变量=表达式;
2.复合的赋值运算符
在赋值符"
之前加上其它二目运算符可构成复合赋值符。
如+=,-=,*=,/=,%=,<
<
=,>
>
=,&
=,^=,|=等。
a+=5等价于a=a+5
x*=y+7等价于x=x*(y+7)
r%=p等价于r=r%p
复合赋值符这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。
3.逗号运算符和逗号表达式
在C语言中逗号"
"
也是一种运算符,称为逗号运算符。
其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。
其一般形式为:
表达式1,表达式2,…表达式n;
其求值过程是分别求各个表达式的值,并以表达式n的值作为整个逗号表达式的值。
2.3.3 逻辑运算符及其表达式
1.逻辑运算符及其优先次序
C语言中提供了三种逻辑运算符:
&
&
与运算
||或运算
!
非运算
2.逻辑表达式
(a&
b)&
c
逻辑表达式的值是式中各种逻辑运算的最后值,以"
1"
和"
0"
分别代表"
真"
假"
2.3.4 关系运算符及其表达式
在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。
比较两个量的运算符称为关系运算符。
1.关系运算符及其优先次序
在C语言中有以下关系运算符:
<
小于
=小于或等于
>
大于
=大于或等于
==等于
!
=不等于
2.关系表达式
关系表达式的一般形式为:
例如:
a+b>
c-d
x>
3/2
‘a’+1<
-i-5*j==k+1
2.3.5 条件运算符及其表达式
条件运算符为"
:
,它是一个三目运算符,即有三个参与运算的量。
由条件运算符组成条件表达式的一般形式为:
表达式1?
表达式2:
表达式3
其求值规则为:
如果表达式1的值为真,则以表达式2的值作为条件表达式的值;
否则以表达式2的值作为整个条件表达式的值。
条件表达式通常用于赋值语句之中。
例如下述判断语句:
b)max=a;
elsemax=b;
可用条件表达式写为:
max=(a>
b)?
a:
b;
执行该语句的语义是:
如a>
b为真,则把a赋予max,否则把b赋予max。
2.3.6 运算符的优先级
算术运算符
关系运算符
逻辑运算符
赋值运算符
2.4 基本输入与输出
在编写程序时,不可避免地要通过基本输入、输出设备实现人机交互,数据的输入与输出在C语言中是通过库函数来实现的,因此都是函数语句。
在使用C语言库函数时,要用预编译命令
#include
将有关"
头文件"
包括到源文件中。
使用标准输入输出库函数时要用到"
stdio.h"
头文件,因此源文件开头应有预编译命令:
#include<
stdio.h>
或#include"
考虑到printf和scanf函数使用频繁,系统允许在使用这两个函数时可不加#include<
2.4.1数据输出
1.字符数据的输出putchar()函数
putchar函数是字符输出函数,其功能是在显示器上输出单个字符。
putchar(字符变量);
putchar(‘A’);
(输出大写字母A)
putchar(x);
(输出字符变量x的值)
2.格式化输出printf()函数
printf函数称为格式输出函数,其关键字最末一个字母f即为"
格式"
(format)之意。
其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上。
printf函数是一个标准库函数,它的函数原型在头文件"
中。
但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。
printf函数调用的一般形式为:
printf("
格式控制字符串"
,输出表列);
其中格式控制字符串用于指定输出格式。
格式控制串可由格式字符串和非格式字符串两种组成。
格式字符串是以%开头的字符串,在%后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等;
输出表列中给出了各个输出项。
要求格式字符串和各输出项在数量和类型上应该一一对应。
表2.5 给出了格式符和意义。
格式字符
意义
D
以十进制形式输出带符号整数(正数不输出符号)
O
以八进制形式输出无符号整数(不输出前缀0)
X,X
以十六进制形式输出无符号整数(不输出前缀Ox)
U
以十进制形式输出无符号整数
F
以小数形式输出单、双精度实数
E,E
以指数形式输出单、双精度实数
G,G
以%f或%e中较短的输出宽度输出单、双精度实数
C
输出单个字符
S
输出字符串
例2.20格式化输出函数。
main()
inta=15;
floatb=123.1234567;
doublec=12345678.1234567;
chard=’p’;
a=%d,%5d,%o,%x\n"
a,a,a,a);
b=%f,%lf,%5.4lf,%e\n"
b,b,b,b);
c=%lf,%f,%8.4lf\n"
c,c,c);
d=%c,%8c\n"
d,d);
}
a=15,15,17,f
b=123.123459,123.123459,123.1235,1.23123e+02
c=12345678.1234567,12345678.1234567,12345678.1235
d=pp
2.4.2 数据输入
1.字符数据的输入 getchar()函数
getchar函数的功能是从键盘上输入一个字符。
getchar();
通常把输入的字符赋予一个字符变量,构成赋值语句,如:
charc;
c=getchar();
2.格式化输入scanf()函数
scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。
scanf函数是一个标准库函数,它的函数原型在头文件"
中,与printf函数相同,C语言也允许在使用scanf函数之前不必包含stdio.h文件。
scanf函数的一般形式为:
,地址表列);
其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。
地址表列中给出各变量的地址,地址是由地址运算符"
后跟变量名组成的。
例如,&
a和&
b分别表示变量a和变量b的地址。
例2.17scanf函数使用举例。
main(){
inta,b,c;
inputa,b,c:
scanf("
%d%d%d"
a,&
b,&
c);
a=%d,b=%d,c=%d"
a,b,c);
程序某次运行结果如下:
102050↙
a=10,b=20,c=50
例2.18格式化输入函数。
chara,b;
inputcharactera,b:
%c%c"
b);
%c%c\n"
a,b);
MN↙
MN
由于scanf函数"
中没有空格,若输入MN,则结果输出只有M;
若输入改为MN,则可输出MN两字符。
本章小结
本章介绍了数据类型的说明及使用、各种运算符和表达式以及基本的输入输出格式等。
我们在程序设计过程中使用的各种变量都应预先加以定义,即先定义,后使用。
其中,数据类型及表达式,以及输入输出格式是学习的重点。
本章内容丰富,知识点较多,请读者仔细阅读并多做练习,以起到良好的学习效果。