常量和C预处理器

本文参考C Primer Plus第四章

文章目录

  • 符号常量
  • printf()函数和scanf()函数
    • printf()函数
    • 使用printf()
    • printf()的转换说明修饰符

1.符号常量

        C头文件limits.h和float.h分别提供了与整数类型和浮点类型大小限制相关的详细信息。头文件都定义了一系列供实现使用的符号常量。例如,limits.h头文件包含以下类型的代码:

        #define IN_MAX +32767

        #define IN_MIN -32768

        这些符号常量代表int类型可表示的最大值和最小值。如果系统使用32位的int,该头文件会为这些符号常量提供不同的值。如果在程序中包含limits.h头文件,就可编写下面的代码:

        printf("Maxmum int value on this system=%d\n", INT_MAX);

        如果使用4字节的int,limits.h头文件会提供符合4字节int的INT_MAX和INT_MIN。

limits.h文件中的一些明示常量
符号常量含义
CHAR_BITchar类型的位数
CHAR_MAXchar类型的最大值
CHAR_MINchar类型的最小值
SCHAR_MAXsigned char类型的最大值
SCHAR_MINsigned char类型的最小值
UCHAR_MAXunsigned char类型的最大值
SHAR_MAXshort类型的最大值
SHAR_MINshort类型的最小值
USHAR_MAXunsigned short类型的最大值
INT_MAXint类型的最大值
INT_MINint类型的最小值
UINT_MAXunsigned int类型的最大值
LONG_MAXlong类型的最大值
LONG_MINlong类型的最小值
ULONG_MAXunsigned long类型的最大值
LLONG_MAXlong long类型的最大值
LLONG_MINlong long类型的最小值
ULLONG_MAXunsigned long long类型的最大值

         类似的,float.h头文件中也定义一些明示常量,如FLT_DIG和DBL_DIG,分别表示float类型和double类型的有效数字位数。

float.h文件中的一些明示常量
符号常量含义
FLT_MANT_DIGfloat类型的尾数位数
FLT_DIGfloat类型的最少有效数字位数
FLT_MIN_10_EXP带全部有效数字的float类型的最小负指数(以10为底)
FLT_MAX_10_EXPfloat类型的最大负指数(以10为底)
FLT_MIN保留全部精度的float类型最小正数
FLT_MAXfloat类型的最大正数
FLT_EPSILON1.00和比1.00大的最小float类型值之间的差值

2.printf()函数和scanf()函数 

1.printf()函数

        请求printf()函数打印数据的指令要与待打印数据的类型相匹配。例如,打印数据时使用%d,打印字符时使用%c。这些符号被称为转换声明,它们指定了如何把数据转换为可显示的形式。

转换说明及其打印的输出结果
转换说明输出
%a浮点数、十六进制和p计数法(C99/C11)
%A浮点数、十六进制和p计数法(C99/C11)
%c单个字符
%d有符号十进制整数
%e浮点数,e计数法
%E浮点数,e计数法
%f浮点数,十进制计数法
%g根据值的不同,自动选择%e或%f。%e格式用于指数小于-4或者大于或等于精度时
%G根据值的不同,自动选择%E或%f。%E格式用于指数小于-4或者大于或等于精度时
%i有符号十进制整数(与%d相同)
%o无符号八进制整数
%p指针
%s字符串
%u无符号十进制整数
%x无符号十六进制整数,使用十六进制数0f
%X无符号十六进制整数,使用十六进制数0F
%%打印一个百分号

2.使用printf()

#include<stdio.h>
#define PI 3.14159
int main(void)
{
	int number=7;
	float pies=12.75;
	int cost=7800;

	printf("The %d contestants ate %f berry pies.\n",number,pies);
	printf("The value of pi is %f.\n",PI);
	printf("Farewell!thou are too dear for my possessing,\n");
	printf("%c%d\n",'$',2*cost);

	return 0;
}

运行结果: 

         

 3.printf()的转换说明修饰符

表1:printf()的修饰符
修饰符含义
标记

表2描述了5种标记(-、+、空格、#和0),可以不使用标记或使用多个标记

示例:"%-10d"

数字最小字段宽度
如果该字段不能容纳待打印的数字或字符串,系统会使用更宽的字段
示例:"%4d"
.数字

精度
对于%e、%E和%f转换,表示小数点右边数字的位数
对于%g和%G转换,表示有效数字最大位数
对于%s转换,表示待打印字符的最大数量

对于整型转换,表示待打印数字的最小位数

如有必要,使用前导0来达到这个位数
只使用.表示其后跟随一个0,所以%.f和%.0f相同
示例:"%5.2f"打印一个浮点数,字段宽度为5字符,其中小数点后有两位数字

h和整型转换说明一起使用,表示short int或unsigned short int类型的值示例:"%hu"、"%hx"、"%6.4hd"
hh和整型转换说明一起使用,表示signed char或unsigned char类型的值
示例:"%hhu"、"%hhx"、"%6.4hhd"
j和整型转换说明一起使用,表示intmax_t或uintmax_t类型的值。这些类型定义在stdint.h中
示例:"%jd"、"%8jx"
1和整型转换说明一起使用,表示long int或unsigned long int 类型的值
示例:"%1d"、"%81u"
11和整型转换说明一起使用,表示long long int或unsigned long long int 类型的值(C99)
示例:"%11d"、"%811u"
L和浮点转换说明一起使用,表示long double 类型的值
示例:"%Ld"、"%10.4Le"
t和整型转换说明一起使用,表示ptrdiff_t类型的值。ptrdiff_t是两个指针差值的类型(C99)
示例:"%td"、"%12ti"
z和整型转换说明一起使用,表示size_t类型的值。size_t是sizeof返回的类型(C99)
示例:"%zd"、"%12zd"

              

表2:printf()中的标记
标记含义
-待打印项左对齐。即,从字段的左侧开始打印该项
示例:"%-20s"
+有符号值若为正,则在值前面显示加号;若为负,则在值前面显示减号
示例:"8+6.2f"
空格有符号值若为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号
+标记覆盖一个空格
示例:"%6.2f"
#把结果转换为另一种形式。如果是号o格式,则以0开始;如果是%x或%X格式,则以Ox或 OX开始;对于所有的浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g和%G格式,#防止结果后面的0被删除
示例:"%#o"、"%#8.0f"、"%+#10.3e"
0对于数值格式,用前导0代替空格填充字段宽度。对于整数格式,如果出现-标记或指定精度,则忽略该标记


总结:今天学printf()函数就到这里啦,明天再补充一点printf()函数相关知识。scanf()函数也放到明天学吧!一起加油!