关于c的printf和c++的cout输出有关问题
关于c的printf和c++的cout输出问题
关于判断浮点数X和1/2+1/3+1/4+1/5.....+1/n的累加中分数的个数问题
程序如下:
#include <iostream>
using namespace std;
int main()
{
double data=0;
double x;
double i;
while(cin>>x)
{
if(x==0.00){break;}
else if(x>=0.01&&x<=5.20)
{
for(i=2;data<=x;i++)
{
data=data+1/i;
}
cout << i-2 << " card(s)" << endl;
data=0;
}
}
return 0;
}
在这个程序里,输出的是个整数i-2(如:1 2 3 4)
当我把cout << i-2 << " card(s)" << endl;语句
换为printf("%lf card(s)",i);后
输出的是小数i-2(如1.00000 2.00000 3.00000)
想请教一下各位大神这其中的原因。
还有一个问题是:
当我把i换成int类的时候,不管用cout还是printf都不能输出结果,为什么呢?
------解决方案--------------------
当我把i换成int类的时候,不管用cout还是printf都不能输出结果,为什么呢?
1/i是0
cout << (double)(i-2) << " card(s)" << endl;
------解决方案--------------------
第一个问题:
当我把cout << i-2 << " card(s)" << endl;语句
换为printf("%lf card(s)",i);后
输出的是小数i-2(如1.00000 2.00000 3.00000)
因为printf("%lf card(s)",i);中的%1f,f表示输出浮点数,%d或者%i表示输出int,具体如下:
%c character
%d signed integers
%i signed integers
%e scientific notation, with a lowercase "e"
%E scientific notation, with a uppercase "E"
%f floating point
%g use %e or %f, whichever is shorter
%G use %E or %f, whichever is shorter
%o octal
%s a string of characters
%u unsigned integer
%x unsigned hexadecimal, with lowercase letters
%X unsigned hexadecimal, with uppercase letters
%p a pointer
%n the argument shall be a pointer to an integer into which is placed the number of characters written so far
%% a '%' sign
第二个问题:
i改为int的时候,输出结果一直是0,因为1/i=0,
如果1/(float)i就可以,体会一下
------解决方案--------------------
cout,你可以理解为,有什么东西就输出什么,有小数就输出小数,没小数就不输出。
printf的话,要你自己来设定输出的是什么类型,所以有%F或者%d一说
你的程序里面要计算的东西,就是很多分数去相加,但是你把i变成int类型以后,data+1/i,1/i=0,那你每次都是加0,如果1除于浮点数--FLOAT或者DOUBLE,结果就不是0了。
我建议,你马上学调试,一步一步自己调试,才能更快的入门
关于判断浮点数X和1/2+1/3+1/4+1/5.....+1/n的累加中分数的个数问题
程序如下:
#include <iostream>
using namespace std;
int main()
{
double data=0;
double x;
double i;
while(cin>>x)
{
if(x==0.00){break;}
else if(x>=0.01&&x<=5.20)
{
for(i=2;data<=x;i++)
{
data=data+1/i;
}
cout << i-2 << " card(s)" << endl;
data=0;
}
}
return 0;
}
在这个程序里,输出的是个整数i-2(如:1 2 3 4)
当我把cout << i-2 << " card(s)" << endl;语句
换为printf("%lf card(s)",i);后
输出的是小数i-2(如1.00000 2.00000 3.00000)
想请教一下各位大神这其中的原因。
还有一个问题是:
当我把i换成int类的时候,不管用cout还是printf都不能输出结果,为什么呢?
------解决方案--------------------
当我把i换成int类的时候,不管用cout还是printf都不能输出结果,为什么呢?
1/i是0
cout << (double)(i-2) << " card(s)" << endl;
------解决方案--------------------
第一个问题:
当我把cout << i-2 << " card(s)" << endl;语句
换为printf("%lf card(s)",i);后
输出的是小数i-2(如1.00000 2.00000 3.00000)
因为printf("%lf card(s)",i);中的%1f,f表示输出浮点数,%d或者%i表示输出int,具体如下:
%c character
%d signed integers
%i signed integers
%e scientific notation, with a lowercase "e"
%E scientific notation, with a uppercase "E"
%f floating point
%g use %e or %f, whichever is shorter
%G use %E or %f, whichever is shorter
%o octal
%s a string of characters
%u unsigned integer
%x unsigned hexadecimal, with lowercase letters
%X unsigned hexadecimal, with uppercase letters
%p a pointer
%n the argument shall be a pointer to an integer into which is placed the number of characters written so far
%% a '%' sign
第二个问题:
i改为int的时候,输出结果一直是0,因为1/i=0,
如果1/(float)i就可以,体会一下
------解决方案--------------------
cout,你可以理解为,有什么东西就输出什么,有小数就输出小数,没小数就不输出。
printf的话,要你自己来设定输出的是什么类型,所以有%F或者%d一说
你的程序里面要计算的东西,就是很多分数去相加,但是你把i变成int类型以后,data+1/i,1/i=0,那你每次都是加0,如果1除于浮点数--FLOAT或者DOUBLE,结果就不是0了。
我建议,你马上学调试,一步一步自己调试,才能更快的入门