我有一些c#代码(如下**)但我似乎无法输出正确的答案?输入为45(度),输出应为255.102(米),我的答案是错误的,因为输出读数为413.2653。
我必须承认我认为我的代码(结构)实际上是错误的而不是算术?
整个代码如下:
**
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sums
{
class Program
{
static void Main(string[] args)
{
//prompt the user for angle in degrees
Console.Write("Enter initial angle in degrees: ");
float theta = float.Parse(Console.ReadLine());
//convert the angle from degrees to radians
float DtoR = theta * ((float)Math.PI / 180);
//Math.Cos
DtoR = theta * (float)Math.Cos(theta);
//Math.Sin
DtoR = theta * (float)Math.Sin(theta);
//t = Math.Sin / 9.8
DtoR = theta / (float)9.8;
//h = Math.Sin * Math.Sin / (2 * 9.8)
DtoR = theta * theta / (2 * (float)9.8);
//dx = Math.Cos* 2 * Math.Sin / 9.8
DtoR = theta * 2 * theta / (float)9.8;
//result
Console.Write("Horizontal distance {0} Meters. \r\n ", DtoR, theta);
}
}
}
答案 0 :(得分:1)
两者,结构和算术似乎都错了。
您将输入的值从度数转换为该行中的弧度:
float DtoR = theta * ((float)Math.PI / 180);
所以现在DtoR
具有正确的弧度值。但你没有使用,因为我们可以在那一行看到:
DtoR = theta * (float)Math.Cos(theta /* <- this is wrong! */);
Math.Cos
需要弧度,但是你传递的theta
仍保持度数值。你也可以在以下几行中做到这一点。
第二个问题是,您不使用任何结果! theta
的值永远不会更改,因为您没有为其分配任何值。您只需将值分配给DtoR
,但不要使用除最后一个值之外的这些值。
在最后一行中,您输出DtoR
(您也传递theta
,但它不在格式字符串中)。这是您在使用用户输入的原始DtoR
值之前在行中计算的theta
值。
从您的评论(代码中),我尝试重写您的代码:
//convert the angle from degrees to radians
float DtoR = theta * ((float)Math.PI / 180);
//Math.Cos
float cos = (float)Math.Cos(DtoR);
//Math.Sin
float sin = (float)Math.Sin(DtoR);
//t = Math.Sin / 9.8
float t = sin / (float)9.8;
//h = Math.Sin * Math.Sin / (2 * 9.8)
float h = sin * sin / (2 * (float)9.8);
//dx = Math.Cos* 2 * Math.Sin / 9.8
float dx = cos * 2 * sin / (float)9.8;
//result
Console.Write("Horizontal distance {0} Meters. \r\n ", dx)
注意我刚刚转换了你已经做过的事情。在我看来,你的算法有一些更多的缺陷。