C#编码结构错误,输入(45度)没有输出正确的答案?

时间:2016-03-03 17:04:08

标签: c#

我有一些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);
        }
    }
}

1 个答案:

答案 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)

注意我刚刚转换了你已经做过的事情。在我看来,你的算法有一些更多的缺陷。