任务1 计算圆的面积——整型与实型数据、常量与变量
工作任务
在C语言中,整型、实型数据如何描述,什么是常量,什么是变量?在解答这些问题之前,先看一道数学问题。
已知圆的半径r,求圆的面积s。
思路指导
已知:圆的半径r,整型。计算中用到圆周率PI的值为3.14,它是实型数据,并且在运算中值不可变。
微课视频
计算圆的面积——常量、变量,整型、实型数据
输出:圆的面积s,实型数据。
处理:利用圆面积公式,求得圆面积。
相关知识
(一)标识符
标识符就是程序用到的元素的名称。在程序中使用的变量名、常量名、数组名、函数名、标号等统称为标识符(变量、常量、数组、函数等将在后续章节介绍)。C语言中的标识符分为两大类,一类是系统标识符,另一类是用户标识符。
1.系统标识符
系统标识符又称为关键字,是由C语言规定的具有特定意义的字符串,通常也称为保留字。C语言中的关键字详见附录1。用户自定义的标识符不应与关键字相同。C语言的关键字分为以下几类。
(1)类型说明符。用于定义和说明变量、函数或其他数据结构的类型,如上一单元中用到的int、double等。
(2)语句定义符。用于表示一个语句的功能。如if…else就是条件语句的语句定义符。
(3)预处理语句。用于表示一个预处理语句,就是在编译前先进行处理。如前面各例中用到的include。
2.用户标识符
用户自定义的标识符称为用户标识符。C语言规定,标识符只能是由字母(A~Z、a~z)、数字(0~9)、下画线组成的字符串,并且其第一个字符必须是字母或下画线。
例如,_fen、aaa、a2、book、BOOK、h2h都是合法的标识符。
【思考】以下标识符合法吗?
在使用标识符时还必须注意以下几点。
(1)标识符是区分大小写的。例如,BOOK和book是两个不同的标识符。
(2)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便阅读理解,做到“见名知意”。
(3)标识符不能和关键字相同。关键字是C语言预先定义的、有固定含义的标识符,不能重新定义,也不能用作他用。
(二)常量和变量
1.常量
在程序的运行过程中,其值不能被改变的量就是常量。在C语言中,常量也有不同的表现形式。
(1)直接常量。就是通常说的常数,从表面形式即可判断它属于哪种数据类型。
例如,234是整型,5.89是实型,'7'是字符型等。
(2)符号常量。是指用编译预处理语句#define规定一个标识符代表一个常量。在程序之前定义符号常量,通常常量名用大写字母标识。
常量声明格式一般为
例如,求圆的面积,可以定义PI为常量,值为3.14,常量声明方式为
例2.1 符号常量的使用
程序中用#define命令定义常量PRICE代表10,在本程序中出现的PRICE都代表10。
2.变量
变量是指在程序执行过程中其值可以改变的量,变量具有三要素:名称、类型和值。认识变量应从这3个要素入手。每个变量都有一个名称,称为变量名。变量在计算机内存中占据一定的存储单元,存储单元中存放着变量的值。事实上,对变量名的使用就是对其值的使用,至于它的存储单元号并不需要关心。在C语言中,变量必须遵循“先定义,再赋值,后使用”的原则。
(1)定义变量。
在C语言中,使用变量前必须先定义。定义变量的形式如下。
其中,方括号中的内容为可选项,可以同时定义多个相同类型的变量,之间用逗号分隔,如int a,b,c;。
(2)初始化变量。
变量的初始化是指在定义变量的同时就给它赋一个初值。初始化变量的格式如下。
例如,float x=4.5;、char ch1='t',ch2='h';等都是合法的初始化变量语句。
(3)给变量赋值。
给变量赋值是指把一个数据传送到系统给变量分配的存储单元中。定义变量时,系统会自动根据变量类型为其分配存储空间。但是如果此变量在定义时没有被初始化,那么它的值就是一个无法预料的、没有意义的值,所以通常要给变量赋予一个有意义的值。给变量赋值的一般形式如下。
例如:
对于赋值语句,有如下说明。
①“=”在C语言中是赋值符号,不是等号。C语言中判断两个数值是否相等用比较运算符“==”表示。
②赋值运算是把“=”右边表达式的值赋给“=”左边的变量。因此,像a=a+1这样的在数学中认为是不成立的表达式,在C语言中却是认可的,它表示将a原来的值加上1后再赋给a。
③允许辗转赋值,即允许一个表达式中包含多个“=”。例如:
表示先把1赋给变量z,再把z的值赋给变量y,最后将y的值赋给变量x。
(三)C语言的数据类型
程序、算法处理的对象是数据。数据以某种特定的形式存在(如整数、实数、字符),而且不同的数据还存在某些联系(如由若干整数构成的数组)。
C语言中的数据是有类型的,数据的类型简称数据类型。例如,整型数据、实型数据、字符型数据、字符数组类型(字符串)分别代表我们常说的整数、实数、字符、字符串。C语言提供的数据类型如图2-1所示。
图2-1 C语言的数据类型
数据类型是按被定义变量的性质、表示形式、占据存储空间的多少、构造特点来划分的。对于不同的数据类型,编译系统会分配大小不同的内存单元,以存放不同类型的数据,因此每一类型的数据必然有一定的取值范围。
在C语言中,数据类型可以分为基本数据类型、构造数据类型、指针类型、空类型四大类。本单元介绍C语言的基本数据类型。
基本数据类型最主要的特点是,其值不可以再分解为其他类型。在C语言中,基本数据类型可以分为整型、字符型、实型。
1.基本数据类型——整型数据
整型数据包括整型常量、整型变量。整型常量就是整型常数。C语言中使用的整型常数有八进制、十六进制和十进制3种。
(1)整型常量。
①八进制整型常数。
八进制整型常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。
以下各数是合法的八进制数。
015(十进制为13)、0101(十进制为65)、0177777(十进制为65535)
以下各数是不合法的八进制数。
256(无前缀0)、03A2(包含了非八进制数码)、−0127(出现了负号)
②十六进制整型常数。
十六进制整型常数的前缀为0X或0x。其数码取值为0~9、A~F或a~f。
以下各数是合法的十六进制整常数。
0X2A(十进制为42)、0XA0(十进制为160)、0XFFFF(十进制为65535)
以下各数是不合法的十六进制整常数。
5A (无前缀0X)、0X3H(含有非十六进制数码)
③十进制整型常数。
十进制整型常数没有前缀。其数码为0~9。
以下各数是合法的十进制整常数。
237、−568、65535、1627
以下各数是不合法的十进制整常数。
023 (不能有前导0)、23D(含有非十进制数码)
(2)整型变量。
整型变量可分为以下几类。
①基本型:类型说明符为int。
②短整型:类型说明符为short int。
③长整型:类型说明符为long int或long。
④无符号型:类型说明符为unsigned。
无符号型又可与上述3种类型匹配而构成以下3种类型。
无符号基本型:类型说明符为unsigned int或unsigned。
无符号短整型:类型说明符为unsigned short。
无符号长整型:类型说明符为unsigned long。
各种无符号类型由于省去了符号位,不能表示负数。各类型的数据占内存字节数与编译器有关,表2-1列出了在32位编译器环境下,各类整型数据的表示范围及占用的字节数。
表2-1 整型数据表示范围及占用字节数数的范围
声明整型变量的例子如下。
给整型变量赋值,可以采用如下两种方式。
2.基本数据类型——实型数据
(1)实型常数。
实型常数又称为浮点型数据,按其能够表示的精度和范围,又分为单精度实型(float)、双精度实型(double)。单精度型数值的有效数字为6~7位,双精度型数值的有效数字为15~16位。
①十进制小数由数字和小数点组成。小数点前表示整数部分,小数点后面表示小数部分。例如,0.234、123.23、.345都是合法的表示形式。
②指数形式又称科学表示法。这种表示形式包含数值部分和指数部分。数值部分的表示方法同十进制小数形式,指数部分是一个可以是正数或负数的整型数据,这两部分用e或E连接起来。例如,1e12、10e−2、1.23E+2等都是合法的指数表示法。用指数形式表示很大或很小的数据比较方便。
(2)实型变量。
C语言提供的实型变量有单精度型、双精度型。各种类型实数的表示范围和占用字节数见表2-2。
表2-2 实型数据表示范围及占用字节数
实型数据的表示方法有两种形式:十进制小数形式和指数形式。
十进制小数形式:由数字0~9和小数点组成。
例如,0.0、21.0、0.12、100.0、−12.1等均为合法实数。
指数形式:由十进制数,加阶码标志“e”或“E”以及阶码(只能是整数,可以带符号)组成。一般形式为aEn,其值为a×10n。
例如,3.1e5(3.1×105)、2.5E −2(2.5×10−2)
注意:e大小写皆可,e前面的数字不能省,就是1也不能省,后面的数字一定要是整数。
实型变量定义的格式和书写规则与整型相同。
例如:
给实型变量赋值,例如:
或
任务实施
已知半径,求圆的面积,程序代码如下。
运行结果如图2-2所示。
图2-2 任务1运行结果
特别提示
(1)允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔,如int a,b。
(2)变量说明必须放在变量被使用之前。一般放在函数体的开头部分。
(3)分隔符。在C语言中采用的分隔符主要有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字和标识符之间必须有一个以上的空格符作间隔,否则会出现语法错误,例如,把int a;写成inta;,则C编译器会把inta当成一个标识符处理,其结果必然出错。
(4)注释符。C语言的注释符分为单行注释和多行注释。以“//”开头的为单行注释,其后一行为注释内容;以“/*”开头并以“*/”结尾为多行注释,在“/*”和“*/”之间的即为注释内容。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置,用来向用户提示或解释程序的意义。
利用注释调试程序,也是在调试程序过程中经常使用的调试方法。可将暂不使用的语句用注释符括起来,使编译跳过不做处理,待调试结束后再去掉注释符。