有没有更好的方法来解这个问题C++

软件和网站开发以及相关技术探讨
回复
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

有没有更好的方法来解这个问题C++

#1

帖子 我就是我2 » 2009-06-26 1:31

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;
 }
上次由 我就是我2 在 2009-06-26 12:52,总共编辑 1 次。
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
windwhinny
帖子: 618
注册时间: 2007-09-26 17:34

Re: 有没有更好的方法来解这个问题C++

#2

帖子 windwhinny » 2009-06-26 1:47

代码: 全选

#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语言写的
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 有没有更好的方法来解这个问题C++

#3

帖子 我就是我2 » 2009-06-26 2:03

scanf("%d\n",&i);//不确定有没有“\n”
没有 \n"
if(buf>(double)n)
这里的布尔值是假的呀,朋友,你刚才才赋值给n=buf。

汗。朋友,你还是有些情况没考虑到。或者是我的想法多了。我考虑了输入的情况比较多。正数、负数、零以及比1 ton=35273.92 还要大的数。
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 有没有更好的方法来解这个问题C++

#4

帖子 我就是我2 » 2009-06-26 2:16

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);
}
}
不排除会输入小数,如果输入小数就会狂闪了。有什么办法解决吗
上次由 我就是我2 在 2009-06-26 2:26,总共编辑 1 次。
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
windwhinny
帖子: 618
注册时间: 2007-09-26 17:34

Re: 有没有更好的方法来解这个问题C++

#5

帖子 windwhinny » 2009-06-26 2:18

代码: 全选

if(buf>(double)n)
这里要说明一下,n声明的类型是int,buf的类型是double。如果buf为5.5的话,n=buf之后,n只能得到buf的整数位,即为5.所以要用if(buf>(double)n)这一句来确定buf是否有小数位,如果有,就给n加上个1。输入的情况确实是要判断一下,如果输入的是负数,就略过,但我程序里没有写这个判断。
头像
windwhinny
帖子: 618
注册时间: 2007-09-26 17:34

Re: 有没有更好的方法来解这个问题C++

#6

帖子 windwhinny » 2009-06-26 2:20

n计算的是需要的盒子的数量,但你却声明为double型。。。。n不能有小数的,必须是整数。
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 有没有更好的方法来解这个问题C++

#7

帖子 我就是我2 » 2009-06-26 2:33

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
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 有没有更好的方法来解这个问题C++

#8

帖子 我就是我2 » 2009-06-26 2:37

不会是到最后我写的能达到目的吧,虽然有点烦
$ ./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:
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
peachcolor
帖子: 898
注册时间: 2006-05-20 14:03

Re: 有没有更好的方法来解这个问题C++

#9

帖子 peachcolor » 2009-06-26 5:27

纠缠细节 :em20
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 有没有更好的方法来解这个问题C++

#10

帖子 我就是我2 » 2009-06-26 11:09

peachcolor 写了:纠缠细节 :em20
朋友,细节决定成败。
一个电脑做不了什么,如果加上一个糟糕的程序员的话,它的(破坏)作用会很大。
写程序要严谨 :em01
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

Re: 有没有更好的方法来解这个问题C++

#11

帖子 stlxv » 2009-06-26 11:26

我就是我2 写了:1公吨等于35273.92盎司。写一个程序,以盎司为单位来读入一盒早餐麦片(喜瑞尔)的重量,算成公吨之后,输出这个重量,同时输出总共需要多少盒麦片,才能凑足1公吨。你的程序应该允许用户任意重复计算。
以盎司为单位来读入一盒早餐麦片(喜瑞尔)的重量,算成公吨之后,输出这个重量
直接计算:一盒公吨重量=一盒盎司重量/35273.92
同时输出总共需要多少盒麦片,才能凑足1公吨
直接计算:1/一盒公吨重量,再取整即可
PHP是最好的语言!不服来战!
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 有没有更好的方法来解这个问题C++

#12

帖子 我就是我2 » 2009-06-26 13:05

引用:
以盎司为单位来读入一盒早餐麦片(喜瑞尔)的重量,算成公吨之后,输出这个重量
直接计算:一盒公吨重量=一盒盎司重量/35273.92
引用:
同时输出总共需要多少盒麦片,才能凑足1公吨
直接计算:1/一盒公吨重量,再取整即可
倒数关系,鉴定完毕!

经过修改的代码如下,变量少了,但是提示语是不可少的。感谢帮助过我的朋友 :em01

代码: 全选

#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的值。也就是说,这里需要判断输入的是不是数字
是不是要调用函数来判断才行啊,如果是的话,此函数应该如何定义。新手完全不知道怎么办了。请各位朋友拯救新手于水深火热的苦海之中吧
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
回复