《C语言程序设计:问题与求解方法》——2.11节数据输出—格式化输出函数 printf()的用法...

    xiaoxiao2021-08-19  196

    本节书摘来自华章社区《C语言程序设计:问题与求解方法》一书中的第2章,第2.11节数据输出—格式化输出函数 printf()的用法,作者:何 勤,更多章节内容可以访问云栖社区“华章社区”公众号查看

    2.11 数据输出—格式化输出函数 printf()的用法 变量的值如果不从内存单元中取出来,通过输出设备送到计算机的外部,这个值对外界就不起任何作用,程序本身的运行也就失去了意义。1.变量值的输出格式化输出库函数printf()用来在某些常用的输出设备(PC的显示器或打印机)上输出双引号括住的格式控制串中的字符序列。但是,printf()不仅可以像例题2.3那样,将格式串中的字符序列按照原样输出,还可以通过格式串的设置和控制,输出n个(n≥1)变量的值,其格式为: printf("占位符1占位符2......占位符n*",变量1,变量2,......,变量n) ;“占位符1”的类型要与“变量1”的类型匹配,“占位符2”的类型要与“变量2”的类型匹配,……,“占位符n”的类型要与“变量n”的类型匹配。在上式中使用了位于占位符左右两边的“ *” 号表示:在此处可以出现0个或任意多个按照原样输出的普通字符或者转义字符。占位符也称为格式符,由符号“%”和转换说明符构成。常用的占位符有%d、%f或%c,它们与要输出的变量类型之间的简单对应关系如表2-3所示。

    【例题2.4】示例程序。

    1 #nclude<stdio.h> 2 int main(void) 3 { 4 int num= 123 ; 5 float x=34.678 ; 6 char ch='+'; 7 printf("%d %f %c\n", num, x,ch); //将三个变量的值从对应内存单元中取出来输出 8 return 0; 9 } 程序运行结果为: 123 34.678000 +

    此题的格式控制串是:"%d %f %cn"。注意:在格式串中的三个占位符之间都加了一个空格字符。如果将格式串中的占位符连在一起书写“%d%f%c”,则几个输出项的数据就会紧密地连在一起,即12334.678000+,这是绝对不可取的。本题中由于三个输出变量顺序已定(num, x,ch),所以格式串中的三个占位符之间的顺序绝不能调换。但是,可以在此题的格式串中加入任意多个普通字符(即按照原样输出的非空白字符)和转义字符。如果变量num代表车牌号,x表示车速,而ch表示车辆是否要加油的话,那么,使用以下的printf()函数调用语句来替换以上程序的第7行,会变得更有实际意义:printf("车牌号为:%d,车速是:%f千米/小时,加油标志: %cn", num ,x ,ch);输出结果为: 车牌号为:123, 车速是:34.678000千米/小时, 加油标志: +由此可见,“占位符”所起的作用是为所对应的、要输出的变量的值,在格式串中事先占据一个适当位置。换句话说,在调用printf()函数时,所有输出变量的值都必须插入格式控制串中去,插入的位置是所对应的占位符事先为它占据的,与原样输出的普通字符(还包括必须转义输出的转义字符)结合起来,最终形成输出到显示(或打印机)上的信息。【练习】将例题2.4中第7行的语句printf("%d %f %cn", num, x,ch);分别改为以下的形式,重新编译运行,看看会怎样?错在哪里?

    1)printf("%d %f \n", num, x,ch); 2)printf("%d %f %c\n, num, x,ch");

    2.对浮点型数据更精细的输出控制 对于小数形式的实型量,格式符 %f 默认规定小数点后面一共显示6位。要想改变默认规定的显示位数,可将占位符书写为: %.nf , n是你想要显示的小数点后经过四舍五入的位数。例如,对于以下程序:

    1 #include<stdio.h> 2 main(void) 3 { 4 x=34.6789 ; 5 printf("x=%.2f",x); 6 } 输出结果为: x=34.68 // x=是普通字符

    如想控制数据输出的宽度,可以用%m.nf这种形式。m为数据占据的输出总宽度(包括整数部分、小数部分和小数点)。比如,将以上程序第5行改为“printf(“x=%6.2f”,x);”,那么输出结果为x= 34.68,不足部分将在左边填充空格。3.占位符与变量类型的匹配问题初学者经常犯的编程错误是类型不匹配,如将%d与浮点型数据匹配,将%f 与整型数据匹配。例如,有如下定义“int i ; float x ;”,则以下两条语句都是错误的:printf("%f" , i ); //错! 正确的是: printf("%d" , i ); printf("%d" , x ); //错! 正确的是: printf("%f" , x );格式化输出库函数printf()的功能其实很强大,不仅可用它来输出多个变量的值,还可用它来输出多个表达式的值。它的用法也很复杂,容易用错。比较深入的讲解请参见下一章。有了以上这些必要知识,现在我们终于可以开始编写一个简单程序了。【例题2.5】求住宅的每月物管费用。 已知某住宅小区每平方米每个月的物管费用是1.3元人民币,求86.5平方米的一套住宅每月要交的物管费用是多少。程序分析:每月的单位面积物管费用1.3元是一个常量,很少会改变,我们不妨用常量表示。住宅面积要用一个float型的变量tenement_area来表示,这是因为程序要处理的每套住宅的面积都可能不一样,而且不一定都是整数。该住宅每月应交的物管费用也还要用一个变量来表示。显然还是应该用float类型来定义,该变量不妨用标识符management_cost 来命名。 一套住宅每月的物管费用应当是:1.3×tenement_area。经过上述分析,我们可以编写出如下程序:

    0 #include<stdio.h> 1 int main(void) 2 { 3 float tenement_area=86.5 ; /*定义实型变量时初始化为86.5*/ 4 float management_cost ; /*定义实型变量物管费用*/ 5 management_cost=1.3 * tenement_area ; /* 求出每月物管费用*/ 6 printf("每月物管费用为:%.2f元\n" , management_cost ) ; 7 return 0; 8 }

    【问题】是否可以把第6行语句中的分号、双引号和圆括号改为中文输入法下的分号、双引号和圆括号?请你亲自试一试。运行以上程序,得到的结果是:每月物管费用为:112.45元程序说明:在C语言程序中,我们要使用C字符集中的 “” 替换“ ×” 表示要做乘法运算。这样一来,就可通过第5行的语句management_cost=1.3 tenement_area ; 求出每月要交的物管费用,并且存放在变量management_cost中。因为这条语句的含义是:计算出式子1.3 * tenement_area的值,并把它保存在变量management_cost所对应的内存单元中(这其实是一条本章后面将要详细讲解的赋值语句)。但是,此程序还存在一个亟待解决的问题:这个程序不经过修改,只能计算面积为86.5平方米的住宅每月的物管费用。如果要计算其他面积住宅的每月物管费用,必须在每次运行之前修改程序的第3行并且重新编译。这对于程序的使用者来说非常麻烦—万一程序的编写者不在怎么办?如果在程序每次运行时,能够通过键盘将实际的住宅面积输入变量tenement_area中,那么这个程序每一次运行就可以算出一套实际住宅的每月物管费用,也就可以不必每次都修改程序。所以,在程序运行时,将程序变量需要的当前值,通过键盘输入内存的对应单元中去是非常重要的、必不可少的。这样增加了程序的适应性和灵活性。下面一节将讨论如何调用格式化输入库scanf()函数,在程序运行时,通过键盘输入一个或多个变量的值,解决上述至关重要的问题。

    相关资源:七夕情人节表白HTML源码(两款)

    最新回复(0)