圆的面积和周长的计算公式如下。
圆的面积公式: S = π r 2 。
圆的周长公式: L = 2π r 。
公式中的 r 表示圆的半径,圆周率π的计算是我国古代数学家祖冲之的杰出成就之一。魏晋时期,刘徽提出了计算圆周率的科学方法“割圆术”,计算出π的值近似于3.1416。祖冲之在前人成就的基础上,经过长期的刻苦钻研,反复验算,最终计算出π在3.1415926~3.1415927之间,并给出了π的分数形式,这是当时全世界最精确的圆周率。
本案例要求编写程序计算圆的面积和周长,具体要求如下。
(1)从键盘输入圆的半径。
(2)计算圆的面积和周长并将结果输出到控制台。
针对案例要求,对案例进行分析,具体如下。
(1)用变量定义圆的半径,需要用到常量与变量的相关知识。
(2)在定义变量时,要为变量指定数据类型,并且要为变量命名,需要用到关键字与标识符。
(3)从键盘输入数据,将计算结果输出到控制台,需要调用格式化输入输出函数。
因此,想要顺利完成本案例,需要掌握关键字与标识符、常量与变量、格式化输入输出函数的相关知识。
在C语言中,关键字是指事先定义好并赋予了特殊含义的单词,也称作保留字。它们不能用作变量名、函数名等。C89标准共定义了32个关键字,而C99标准在C89的基础上增加了5个关键字,分别为restrict、inline、_Bool、_Complex、_Imaginary,因此,C99标准中一共有37个关键字,具体如下。
auto register break restrict case return char short const signed continue sizeof default static do struct double switch else typedef enum union extern unsigned float void for volatile goto while if _Bool inline _Complex int _Imaginary long
在上述列举出的关键字中,每个关键字都有特殊的作用。按照用途可将这37个关键字分为5类,具体如下。
(1)数据类型关键字
数据类型关键字用于标识变量或函数返回值的类型。数据类型关键字及其作用如表2-4所示。
表2-4 数据类型关键字及其作用
(续表)
(2)控制语句关键字
控制语句关键字用于控制程序的结构流程。控制语句关键字及其作用如表2-5所示。
表2-5 控制语句关键字及其作用
(3)存储类型关键字
存储类型关键字用于标识变量的存储类型。存储类型关键字及其作用如表2-6所示。
表2-6 存储类型关键字及其作用
(4)特殊关键字
此外,还有一些具有特殊含义的关键字,这些特殊关键字及其作用如表2-7所示。
(5)C99标准中新增的关键字
C99标准中新增了5个关键字,这些关键字及其作用如表2-8所示。
表2-7 特殊关键字及其作用
表2-8 C99标准中新增的关键字及其作用
在编写代码的过程中,经常需要定义一些符号来标记数据,例如变量名、方法名、参数名、数组名等,这些符号被称为标识符。在C语言中,标识符的命名需要遵循一些规范,具体如下。
● 标识符只能由字母、数字和下划线组成。
● 标识符不能以数字作为开头。
● 标识符不能使用关键字。
● 标识符区分大小写字母,例如add、Add和ADD是不同的标识符。
为了让读者对标识符的命名规范有更深刻的理解,下面列举一些合法与不合法的标识符,具体如下。
下面是合法的标识符示例。
area DATE _name lesson_1
下面是不合法的标识符示例。
3a //标识符不能以数字开头 ab.c //标识符只能由字母、数字和下划线组成 long //标识符不能使用关键字 abc# //标识符只能由字母、数字和下划线组成
除此之外,标识符应尽量满足以下几点要求。
● 尽量做到见名知意,例如,使用age标识年龄、使用length标识长度。
● 最好采用英文单词或其组合命名,避免使用汉语拼音命名。
● 尽量避免出现仅靠字母大小写区分的标识符。
● 虽然ANSI C中没有规定标识符的长度,但建议标识符的长度不要超过8。
目前,C语言中比较常用的标识符命名方式有两种:驼峰命名法和下划线命名法,下面分别介绍这两种方法。
(1)驼峰命名法是指使用多个英文单词组成标识符时,混合使用大小写字母区分各个英文单词。驼峰命名法可以分为小驼峰命名法和大驼峰命名法,小驼峰命名法的第一个单词首字母小写,其余单词首字母大写,如seatCount、devNum、getPos。大驼峰命名法的每个单词首字母都是大写,如CamelCase、LastName。
(2)下划线命名法是指使用下划线连接标识符的各组成部分,如my_age、get_position。
常量又称为常数,它是指在程序运行过程中值不可改变的量,例如123、2.6等。
C语言中的常量可分为整型常量、实型常量、字符常量、字符串常量和符号常量,下面分别进行讲解。
(1)整型常量
整型常量是整数类型的常量,又被称为整常数。根据不同的数制,整型常量可分为二进制整数、八进制整数、十进制整数和十六进制整数,具体示例如下。
● 二进制整数:二进制整数以0b或0B开头,如0b100、0B101011。
● 八进制整数:八进制整数以0开头,如0112、056。
● 十进制整数:十进制整数与数学中的书写方式相同,如2、−158、0。
● 十六进制整数:十六进制整数以0x或0X开头,如0x108、−0X29。
(2)实型常量
实型也称为浮点型,实型常量可被称为实数或浮点数,也就是数学中的小数。在C语言中,实型常量采用十进制表示,有两种形式:十进制小数形式和十进制指数形式,具体示例如下。
● 十进制小数形式:由数字和小数点组成(需注意的是,必须有小数点),例如12.3、−45.6、1.0等。
● 十进制指数形式:又称为科学记数法,因为计算机在输入、输出数据时无法表示上标,所以规定以字母e或E表示以10为底的指数,例如12.34e3(代表12.34×10 3 )、−34.87e−2(代表−34.87×10 -2 )、0.14E4(代表0.14×10 4 )等。需要注意的是,e或E之前必须有数字,且e或E后面必须为整数,例如e4、12e2.5等的写法错误。
(3)字符常量
C语言中用单引号(' ')将字符引起来作为字符常量,例如'a'、'Z'、'3'、'? '、'\n'、'\t'。字符常量分为以下两种。
● 普通字符:用单引号引起来的单个字符,例如'a'、'8'、'! '、'#'。
● 转义字符:用单引号引起来的包括反斜杠(\)的一串字符,例如'\n'、'\t'、'\0'等。转义字符表示将反斜杠后的字符转换成另外的意义,通常用来表示不能正常显示的字符。'\n'、'\t'、'\0'这3个转义字符分别表示换行、水平制表符和空字符。
(4)字符串常量
字符串常量是用一对双引号(" ")引起来的字符序列,例如"hello"、"123"、"itcast"等。字符串的长度等于字符串中包含的字符个数,例如,字符串"hello"的长度为5个字符。
字符串常量与字符常量是不同的,它们之间的主要区别有以下几点。
● 字符常量使用单引号界定,字符串常量使用双引号界定。
● 字符常量只能是单个字符,字符串常量可以包含0个或多个字符。
(5)符号常量
C语言中可以用标识符来表示常量,这种常量称为符号常量。符号常量在使用前必须先定义,其语法格式如下所示。
#define 标识符 常量
上述语法格式中,“define”是关键字,前面加符号“#”,表示这是一条预处理指令(预处理指令都以符号“#”开头),该指令称为宏定义。宏定义将在第10章进行详细讲解。
例如,将圆周率(此处取3.14)用PI表示,可写成如下形式。
#define PI 3.14
上述语句的功能是把标识符PI定义为常量3.14,定义后,程序中所有出现标识符PI的地方均用3.14进行替换。符号常量的标识符是用户自定义的。
符号常量有以下两个特点。
● 符号常量的标识符通常使用大写字母。
● 符号常量在作用域内其值不能改变,也不能被再次赋值。
使用符号常量的好处:含义清楚,并且能做到“一改全改”。
除了常量外,有时在程序中还会使用一些数值可以变化的量。例如,用标识符T记录一天中不同时刻的温度值,与常量不同,标识符T的值是可以不断改变的,因此T被称为变量。
变量在程序中经常使用,被存储在内存单元中。为了访问、使用和修改内存单元中的数据,用标识符来标识存储数据的内存单元,这些用于标识内存单元的标识符被称为变量名,内存单元中存储的数据被称为变量的值。
下面通过一段代码介绍程序中的变量,具体如下。
int x = 0,y = 0; y = x + 3;
上述第1行代码的作用是定义名为x和y的变量,并初始化x和y的值为0。此行代码执行后,系统会选取内存中的两个内存单元,将其分别标记为x和y,并将值0存储到标识为x、y的内存单元中,如图2-5所示。
第2行代码的作用是将x与3相加,并将相加结果赋给变量y。在执行第2行代码时,程序首先取出变量x的值并与3相加,然后将x与3相加的结果3赋给变量y。此时变量x的状态没有改变,而y的值变为3。它们在内存中的状态如图2-6所示。
图2-5 x、y变量在内存中的状态
图2-6 与3相加后x、y变量在内存中的状态
数据处理是程序的基本功能,变量是程序中数据的载体,因此变量在程序中占有重要地位。读者应理解程序中变量的意义和功能,在后面的章节中将介绍如何定义、使用不同类型的变量,以及如何在程序中对变量进行运算。
在本案例中,定义了一个float类型的变量radius,表示圆的半径,调用scanf()函数获取从键盘输入的半径值,使用圆的面积和周长计算公式计算出圆的面积和周长,调用printf()函数将计算出的圆的面积和周长输出到控制台。
在本案例中,为了便于书写和计算,π取为3.14。
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 int main() 4 { 5 float radius; //radius表示圆的半径 6 float S; //S表示圆的面积 7 float L; //L表示圆的周长 8 printf("请输入圆半径:"); 9 scanf("%f", &radius); //输入半径值 10 S = 3.14 * radius * radius; //计算圆的面积 11 L = 2 * 3.14 * radius; //计算圆的周长 12 printf("圆面积为:%.2f\n", S); //输出圆的面积 13 printf("圆周长为:%.2f\n", L); //输出圆的周长 14 return 0; 15 }
上述代码的运行结果如图2-7所示。
图2-7 案例2-2的运行结果