求C语言中printf用法,输出m.n格式输出的详解为什么这么写。

/*Authour:AndyCui*//*Date:2014-02-03*//*Time:17:11*//*Content:intputintegera,b,c;outp... /*Authour : Andy Cui*/
/*Date : 2014-02-03*/
/*Time : 17:11*/
/*Content : intput integer a, b, c;
output (float)a/b
PS: keep c decimal place.
a, b <= 1e6, c <= 100.

E.g.
intput: a=1 b=6 c=4
output: 0.1667
*/

#include <stdio.h>

int main()
{

int a, b, c;

number :
printf("Please enter 3 number for A, B, C.\n");
printf("A = ");
scanf("%d", &a);
printf("B = ");
scanf("%d", &b);
printf("C = ");
scanf("%d", &c);

if (a > 1e6 || b > 1e6 || c > 100)
{
printf("Error!\nPlease enter number again!\nA and B must less than 1E6, and C must less than 100!\n");
goto number;
}

double value;

value = (double)a/b;

printf("%.*lf\n", c, value);

return 0;
}
展开
 我来答
ssilspro
推荐于2017-11-26 · TA获得超过2625个赞
知道大有可为答主
回答量:1148
采纳率:0%
帮助的人:1719万
展开全部
  1. 格式修饰符

  2. 最小域宽限定符

  3. 精度限定符

  4. 对齐输出

  5. * 和 # 修饰符


  • 格式修饰符

  许多格式限定符都有修饰符用于稍微改变它们的含义。例如,可以规定最小域宽、小数位数及向左对齐。格式修饰符放在百分号与格式代码之间。

  • 最小域宽限定符

  百分号和格式代码之间的整数称为最小域宽限定符,它保证输出时用空格填充以达到最小域宽。如果串或数字长度比最小域宽长,就被完全打印出来。默认填充为空格。如果想用0填充,那么在域宽限定符前放一个0。

double item = 10.12304;
printf("%f\n", item);
printf("%10f\n", item);
printf("%012f\n", item);

  输出如下:

10.123040
 10.123040
00010.123040
  • 精度限定符

  精度限定符跟在最小域宽限定符后面(如果有),由一个点号后跟一个整数组成,准确含义依赖于它所修饰的数据类型

  当用%f,%e,%E限定符应用精度限定符与浮点数据时,它确定所显示的小数位数。

  如果精度限定符为了%g或%G,则表示有效位数。

  当修饰字符串时,表示最大域宽。如果串大于最大域宽,则舍去多余的字符。

  当修饰整形数时,确定每个数字显示的最小位数。在这种情况下,用0来填充以达到要求的位数。

printf("%.4f\n", 123.1234567);
printf("%3.8d\n", 1000);
printf("%10.15s\n", "This is a simple test.");

  输出如下:

123.1235
00001000
This is a simpl
  • 对齐输出

  默认时,所有输出均为右对齐。但可以通过在百分号后加一个减号来向域左边界对齐。

  • * 和 # 修饰符

  最小域宽和精度限定符可以通过变元而不是常数提供给printf()。为了实现这一点,我们用*作为占位符。当扫描到格式串,printf将*与变元串中的参数按顺序匹配。

printf("%*.*f",  10,  4,  123.3);
//               *  . *   f

  如果g,G,f,E或e前面有符号#,就可以确保即使没有小数位也显示小数点。如果x或X前面有#,那么十六进制数将带0x前缀显示,在o前面加上会使打印的数字前面补0,#不能用于其他任何格式限定符。

  __________________________________________________________________________

  参考文献:

  1. C++参考大全(第四版)

__SOS__求解
2014-02-09
知道答主
回答量:10
采纳率:0%
帮助的人:1.4万
展开全部
m是小数点前几位,如果不足则前补空格,n是表示小数点后几位,不足后补空格
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白色颖光
2014-02-06
知道答主
回答量:16
采纳率:0%
帮助的人:5.2万
展开全部
printf("%m.np",q)
输出时m代表有几位有效数字,n代表几位小数,p代表输出格式(d是整数,f是浮点数,s是字符串等),q代表输出内容的那个东西
m可以不写,直接写点几,比如 .5 控制下的1.123456只能输出1.12345了
更多追问追答
追问
我说的是printf("%.*lf\n", c, value);这句里的*星号意思
追答
这样的话据我所知不需要了,这个算没有要求,连点都不要啊。。。删了吧。。。没看清sorry啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式