这题目一看,很多小伙伴可能觉这玩意肯定一遍过,然而,我当时也是这么想的,但现实是,磨了几天才写出来。这次我们选择先分析题:
首先我们来思考,我们要输入两个整数但求的却是小数,要怎么处理呢?
有两种方法:
1.我们可以在a/b的时候在a面前乘以1.0来使a变成小数(因为在c语言中,‘/’号有这样的法则,整数除整数等于整数,且是属于去尾的那种,而只要除号两端任意一端有小数,都可以为小数。)所以我们可以写这样的代码:
#includeint main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
printf("%.10f\n",1.0*a/b);
}
return 0;
}
嗯,这里有几点注意的:首先是输入,在scanf中你是怎样输入的,就要用怎样的格式:比如我输入a b中间隔了一个空格,那么在scanf的引号里也要是%d %d的格式,而如果我们如果输入的是啊a,b那么输出也要变%d,%d。这是要注意的,还有一个就是多组输入,一般我们就是用上面这个方法,可以学一下,具体的理论我也不太清楚。
这里有一点特别要注意的:养成经常打换行符的好习惯,我这么久都过不了就是因为没打换行符,也就是'\n',除非题目格式特殊要求,不然一般都是要打换行符的。
好,继续介绍第二种方法。强制转化。我们可以在a或者b的前面加一个括号里面写上double。也可以过,如:
#includeint main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
printf("%.10f\n",(double)a/b);
}
return 0;
}
这也是可以的,当然,同样的你也可以在b前面加也可以,但是不可以这样(double)(a/b)这样是错误的,因为它这样的话就会让a/b先计算出去小数尾的整数;再加小数点。同样这样也是错的。(这里提一嘴,%f这里变为%.10f的意思是保留十位小数).
拓展一个小知识:这里为什么不用float类型呢?那是因为错了,到底为什么错了呢?重点来了:因为float为单精度浮点类型y十进制的有效位数为7位,double双精度类型的十进制的有效位数为16位,这就说明白了刚刚为什么float不行。
最后想在激励一下自己:
林清玄:"人也要像珍珠贝一样,养成重塑伤口的本事。转化成生命的创伤,使它变成美丽的珍珠。”愿每一个受过伤的孩子都能坚强的重新站起来,去努力追寻心中的光·。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前名称:我的刷题之旅1-创新互联
链接URL:http://lswzjz.com/article/dsigjo.html