分页: 1 / 1
有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 1:31
由 我就是我2
1公吨等于35273.92盎司。写一个程序,以盎司为单位来读入一盒早餐麦片(喜瑞尔)的重量,算成公吨之后,输出这个重量,同时输出总共需要多少盒麦片,才能凑足1公吨。你的程序应该允许用户任意重复计算。
以下是我写的代码,总觉得有些繁琐,有没有更好的方法来解这个问题呢。本人新手,请各位多多指教。
代码: 全选
#include <iostream>
using namespace std;
int main()
{
const double ton=35273.92;
double weight;
int amount;
while(1)
{
cout<<"please input the weight (ounce)of per cornmeal: ";
cin>>weight;
if (weight>0)
{
amount=ton/weight;
if (amount<1)
cout<<"the number you input is to large\n";
else
{
cout<<"each cornmeal has "<<weight/ton<<" ton"<<endl;
cout<<"you need "<<amount<<" to get 1 ton\n";
}
}
else
cout<<"error,please input a number larger than zero\n";
}
return 0;
}
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 1:47
由 windwhinny
代码: 全选
#include<stdio.h>
int main()
{
int i,n;
double buf;
for(;;)
{
scanf("%d\n",&i);//不确定有没有“\n”
printf("%f\n",(double)i/35273.92);
buf=35273.92/(double)i;
n=buf;
if(buf>(double)n)n++;
printf("%f\n",n);
}
}
用C语言写的
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 2:03
由 我就是我2
scanf("%d\n",&i);//不确定有没有“\n”
没有 \n"
if(buf>(double)n)
这里的布尔值是假的呀,朋友,你刚才才赋值给n=buf。
汗。朋友,你还是有些情况没考虑到。或者是我的想法多了。我考虑了输入的情况比较多。正数、负数、零以及比1 ton=35273.92 还要大的数。
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 2:16
由 我就是我2
windwhinny 写了:代码: 全选
#include<stdio.h>
int main()
{
int i,n;
double buf;
for(;;)
{
scanf("%d\n",&i);//不确定有没有“\n”
printf("%f\n",(double)i/35273.92);
buf=35273.92/(double)i;
n=buf;
if(buf>(double)n)n++;
printf("%f\n",n);
}
}
用C语言写的
经过本人的修改,你写的也能得到正确的输出了,。
代码: 全选
#include<stdio.h>
int main()
{
int i;
double buf,n;
for(;;)
{
scanf("%d",&i);
printf("%f\n",(double)i/35273.92);
buf=35273.92/(double)i;
n=buf;
printf("%f\n",n);
}
}
不排除会输入小数,如果输入小数就会狂闪了。有什么办法解决吗
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 2:18
由 windwhinny
这里要说明一下,n声明的类型是int,buf的类型是double。如果buf为5.5的话,n=buf之后,n只能得到buf的整数位,即为5.所以要用if(buf>(double)n)这一句来确定buf是否有小数位,如果有,就给n加上个1。输入的情况确实是要判断一下,如果输入的是负数,就略过,但我程序里没有写这个判断。
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 2:20
由 windwhinny
n计算的是需要的盒子的数量,但你却声明为double型。。。。n不能有小数的,必须是整数。
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 2:33
由 我就是我2
windwhinny 写了:n计算的是需要的盒子的数量,但你却声明为double型。。。。n不能有小数的,必须是整数。
我知道错了,朋友。
但是我运行你写的程序发觉不对头,爱因斯坦说过,理论不应该和经验发生冲突。
$ ./a.out
25
0.000709
0.000709
当我输入0.2时,就是不停地输出
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000^C
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 2:37
由 我就是我2
不会是到最后我写的能达到目的吧,虽然有点烦
$ ./1.out
please input the weight (ounce)of per one cornmeal: 25
each cornmeal has 0.000708739 ton
you need 1410 to get 1 ton
please input the weight (ounce)of per one cornmeal: 36
each cornmeal has 0.00102058 ton
you need 979 to get 1 ton
please input the weight (ounce)of per one cornmeal: 25
each cornmeal has 0.000708739 ton
you need 1410 to get 1 ton
please input the weight (ounce)of per one cornmeal: 4545
each cornmeal has 0.128849 ton
you need 7 to get 1 ton
please input the weight (ounce)of per one cornmeal:
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 5:27
由 peachcolor
纠缠细节

Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 11:09
由 我就是我2
peachcolor 写了:纠缠细节

朋友,细节决定成败。
一个电脑做不了什么,如果加上一个糟糕的程序员的话,它的(破坏)作用会很大。
写程序要严谨

Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 11:26
由 stlxv
我就是我2 写了:1公吨等于35273.92盎司。写一个程序,以盎司为单位来读入一盒早餐麦片(喜瑞尔)的重量,算成公吨之后,输出这个重量,同时输出总共需要多少盒麦片,才能凑足1公吨。你的程序应该允许用户任意重复计算。
以盎司为单位来读入一盒早餐麦片(喜瑞尔)的重量,算成公吨之后,输出这个重量
直接计算:一盒公吨重量=一盒盎司重量/35273.92
同时输出总共需要多少盒麦片,才能凑足1公吨
直接计算:1/一盒公吨重量,再取整即可
Re: 有没有更好的方法来解这个问题C++
发表于 : 2009-06-26 13:05
由 我就是我2
引用:
以盎司为单位来读入一盒早餐麦片(喜瑞尔)的重量,算成公吨之后,输出这个重量
直接计算:一盒公吨重量=一盒盎司重量/35273.92
引用:
同时输出总共需要多少盒麦片,才能凑足1公吨
直接计算:1/一盒公吨重量,再取整即可
倒数关系,鉴定完毕!
经过修改的代码如下,变量少了,但是提示语是不可少的。感谢帮助过我的朋友
代码: 全选
#include <iostream>
using namespace std;
int main()
{
float weight;
while(1)//无限循环
{
cout<<"please input the weight (ounce)of per cornmeal: ";
cin>>weight;
if (weight>0)//输入是正数的情况
{
cout<<"each cornmeal has "<<weight/35273.92<<" ton\n";
cout<<"you need "<<int(35273.92/weight)<<" to get 1 ton\n";
}
else//输入是非正数的情况
cout<<"error,please input a number larger than zero\n";
}
return 0;
}
这又产生一个问题,如果输入的别的字符,就会无限的输出
以别的字符的ansi码的值作为weight的值。也就是说,
这里需要判断输入的是不是数字
是不是要调用函数来判断才行啊,如果是的话,此函数应该如何定义。新手完全不知道怎么办了。请各位朋友拯救新手于水深火热的苦海之中吧