四、字符串和格式化输入/输出
3. 常量和C预处理器
■符号常量
■创建常量
float taxrate;
taxrate = 0.015;
■C预处理器
#define TAXRATE 0.015 /*明示常量*//* 编译时替换,程序中所有TAXRATE替换为0.015 */
/*格式为: */ #defin NAME value
/* pizza.c -- 在比萨饼程序中使用已定义的常量 */
#include <stdio.h>
#define PI 3.14159
int main(void)
{
float area, circum, radius;
printf("What is the radius of your pizza?\n");
scanf("%f". &radius);
area = PI * radius * radius;
circum = 2.0 * PI * radius;
printf("Your basic pizza parameters are as fllows:\n");
printf("circumference = %1.2f, area = %1.2f\n", circum, area);
return 0;
}
//What is the radius of your pizza?
//6.0
//Your basic pizza parameters are as fllows:
//circumference = 37.70, area = 113.10
■定义字符和字符串,前者用引号,后者用双引号。
#define BEEP '\a'
#define TEE 'T'
#define ESC '\033'
#define OOPS "Now you have done it!"
3.1 const 限定符
/* 限定一个变量为只读 */
const int MONTHS =12; // MONTHS 在程序中不可更改,值为 12
//只读值,可以计算中使用,可以打印,但不可更改值
3.2 明示常量
■limits.h 头文件中的一些明示常量
明示常量 | 含义 |
---|---|
CHAR_BIT | char 类型的位数 |
CHAR_MAX | char 类型的最大值 |
CHAR_MIN | char 类型的最小值 |
SCHAR_MAX | signed char 类型的最大值 |
SCHAR_MIN | signed char 类型的最小值 |
UCHAR_MAX | unsigned char 类型的最大值 |
SHRT_MAX | short 类型的最大值 |
SHRT_MIN | short 类型的最小值 |
USHRT_MAX | unsigned short 类型的最大值 |
INT_MAX | int 类型的最大值 |
INT_MIN | int 类型的最小值 |
UINT_MAX | unsigned int 的最大值 |
LONG_MAX | long 类型的最大值 |
LONG_MIN | long 类型的最小值 |
ULONG_MAX | unsigned long 类型的最大值 |
LLONG_MAX | long long 类型的最大值 |
LLONG_MIN | long long 类型的最小值 |
ULLONG_MAX | unsigned long long 类型的最大值 |
■float.h 头文件中的一些明示常量
明示常量 | 含义 |
---|---|
FLT_MANT_DIG | float 类型的尾数位数 |
FLT_DIG | float 类型的最少有效数字位数(十进制) |
FLT_MIN_10_EXP | 带全部有效数字的float 类型的最小负指数(以10为 底) |
FLT_MAX_10_EXP | float 类型的最大正指数(以10为 底) |
FLT_MIN | 保留全部精度的float 类型最小正数 |
FLT_MAX | float 类型的最大正数 |
FLT_EPSLLON | 1.00 和比 1.00 大的最小 float 类型之间的差值 |
// defines.c -- 使用 limit.h 和 float 头文件中定义的明示常量
#include <stdio.h>
#include <limits.h> // 整型限制
#include <float.h> // 浮点型限制
int main(void)
{
printf("Some number limits for this system:\n");
printf("Biggest int: %d\n", INT_MAX);
printf("Smallest long long: % 11d\n", LLONG_MIN);
printf("One byte = %d bits on this system.\n", CHAR_BIT);
printf("Largest double: %e\n", DEL_MAX);
printf("Smallest normal float: %e\n", FLT_MIN);
printf("float precison = %d digits\n", FLT_DIG);
printf("float epsilon = %e\n", FLT_EPSILON);
return 0;
}
//Some number limits for this system:
//Biggest int: 2147483647
//Smallest long long: -9223372036854775808
//One byte = 8 bits on this system.
//Largest double: 1.797693e+308
//Smallest normal float: 1.175494e-38
//float precison = 6 digits
//float epsilon = 1.192093e-07