题目:请设计输出实数的格式,包括:1、一行输出一个实数;2、一行内输出两个实数;3、一行内输出三个实数。实数用"%6.2f"格式输出
程序一
#include <stdio.h>
#define NL "/n" /*注意与#define NL putchar('/n')的区别与使用方法,详见程序二*/
#define PR printf /*宏定义输出函数printf用字符PR代替*/
#define F "%6.2f"
#define F1 F NL
#define F2 F F NL
#define F3 F F F NL
#define SC scanf /*宏定义输入函数scanf用字符SC代替*/
#define FS "%f" /*宏定义实型格式符用FS代替*/
void main()
{
float a,b,c;
SC(FS FS FS,&a,&b,&c); /*注意宏名与宏名之间用空格隔离或者是分写成3条独立的语句,不能使用逗号*/
PR("Source a,b,c:"F F F NL,a,b,c); /*同上。注意宏名与宏名之间用空格隔离或者是分写成4条独立的语句,不能使用逗号。下同*/
PR("Output one floating number each line:");
PR(NL F1 F1 F1,a,b,c);
PR("Output two floating numbers:");
PR(NL F2 F1,a,b,c);
PR("Output three floating numbers:");
PR(NL F3,a,b,c);
}
程序二
#include <stdio.h>
#define NL putchar('/n') /*注意区分程序一中的字符串格式*/
#define PR printf
#define F "%6.2f"
#define F1 F /*程序一中加上了宏名NL,因为程序一中的NL字符串是"/n",而本程序中的NL字符串是putchar('/n'),程序编译时,main函数中的输出语句宏展开后语句就如printf("%6.2f"putchar('/n'),a),这样的语句就违背了C语言的语法规则*/
#define F2 F F /*如果在本宏定义的末尾加上宏名NL,main函数中的输出语句宏展开后语句就如printf("%6.2f""%6.2f"putchar('/n'),a,b),这样的语句就违背了C语言的语法规则。下同*/
*/
#define F3 F F F
#define SC scanf
#define FS "%f"
void main()
{
float a,b,c;
SC(FS FS FS,&a,&b,&c);
PR("Source a,b,c:"F F F,a,b,c);
NL;/*宏名NL的字符串是putchar('/n'),因此不能写成PR(NL)或者printf(NL),如果错写成PR(NL)或者printf(NL),宏展开后就成了printf(putchar('/n')),这是不符合C语言的语法规则的。下同*/
PR("Output one floating number each line:");
NL;
PR(F1"/n"F1"/n"F1,a,b,c);
NL;
PR("Output two floating numbers:");
NL;
PR(F2,a,b);
NL;
PR(F1,c);
NL;
PR("Output three floating numbers:");
NL;
PR(F3,a,b,c);
}
说明:注意区分两个程序段的异同