鱼C论坛

 找回密码
 立即注册
查看: 2186|回复: 9

想求问c语言中各类型输出的不同。

[复制链接]
发表于 2013-6-18 12:29:58 | 显示全部楼层 |阅读模式
1鱼币
例1:
#include <stdio.h>
void main()
{       
        printf("%f,%d\n", 1.0/3*3,1.0/3*3);    //这里的值不是等下0.99999999····
}

结果为:1.000000 , 0              问%f有四舍五入功能吗?         


例2:
#include <stdio.h>void main(){                printf("%d,%f,%lf,%g",1.0/3*3,1.0/3*3,1.0/3*3,1.0/3*3);        }

结果为:0 ,0.000000 ,0.000000 ,5.29981e-315                问为什么先输出%d后输出%f,接着后面的怎么都结果不一样了?

求解释~~~谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-18 13:57:26 | 显示全部楼层
格式控制包括格式说明和格式字符。
格式说明由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。不同类型的数据用不同的格式字符。
格式字符有d,o,x,u,c,s,f,e,g等。


%d整型输出,%ld长整型输出,

%o以八进制数形式输出整数,

%x以十六进制数形式输出整数,

%u以十进制数输出unsigned型数据(无符号数)。

%c用来输出一个字符,

%s用来输出一个字符串,

%f用来输出实数,以小数形式输出,

%e以指数形式输出实数,

%g根据大小自动选f格式或e格式,且不输出无意义的零。

PS:转自http://blog.csdn.net/cfanlwn/article/details/5053794
有时不太确定可以自己上机实验的  
#include<stdio.h>
void main(){
        double s;
        s=7/9.0;
        printf("%6f",s);
}
运行结果是:0.777778
说明是按四舍五入的。

PS:转自http://zhidao.baidu.com/question/410902198.html

许多文档或网上相关的知识有很多,可以下点功夫找找。
(专业不是学C的,只是很久之前学过点基础,所以上网找了下)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-18 22:48:00 | 显示全部楼层
1. printf函数是个不定参数的函数,其实际参数个数以及类型由第一个参数中的%f,%d等来解释
2. printf中%f和%lf含义一致,其实后面参数中的所有float类型也都会被自动提升为double类型(但是注意啊,scanf就会区别float和double)
3. printf("%d\n", 1.0);中,第二个参数是8个字节的double类型,但函数第一个参数中却使用了%d所以只取最低4个字节的内容作为这个要显示的int的内容。至于取出的为什么是0,这个涉及double在内存中的表示,为了不岔开话题,我们暂时相信这个double的最低4个字节全部都是0(想实证的话自己去查IEEE754长浮点数的标准)
4.当然如果printf居然还有其它输入参数,就会继续使用刚才double剩下的4个字节。。。
5. 兄弟啊,不要纠结于这样的问题了,考试不是最终的目的,成为能够解决实际问题的程序员才是我们最终的目标。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-19 13:28:54 | 显示全部楼层
3L正解!
实际运用 谁会无聊去这么写!;P
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-19 13:33:13 | 显示全部楼层

前面还是听得还是有点模模糊糊。最后一句话,比较实在。说得对考试不是最终的目的。
谢谢版主的答复。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-19 19:27:36 | 显示全部楼层
其实要看看编译器的~~
我之前在linux下用gcc的话,printf的%d可以把小数部分不要。
不过用vc就之前按类型来了~~%d的话就会打出不是你想要的数字。
所以在vc要严格类型~~
二楼有写分类~~
如果你想四舍五入可以这样:
double a = 5.156;
int b = ( int )( a + 0.5);
printf( "%d\n", b );
这样子就是四舍五入~~
希望对你有用~~一起学习~~{:7_155:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-20 09:35:38 | 显示全部楼层
是哈 我差点也纠结于这样的问题了  恩 格式字符在实际用到的时候在具体分析就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-27 16:06:52 | 显示全部楼层
呵呵,新人求支持
呵呵,新人求支持
呵呵,新人求支持
呵呵,新人求支持:loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-29 22:12:06 | 显示全部楼层
找本手册查一下就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-23 12:25:25 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表