调试horner的规则程序

时间:2014-04-04 14:04:03

标签: c++ algorithm compiler-errors

我是初学者,完全糊涂了。 我的c ++代码中出现两个错误:

程序:32:5:错误:重新定义' main' 节目:3:6:注意:以前的定义'主要'在这里

给出n次多项式。多项式的形式为P(x)= anxn + an-1xn-1 + ... + a0。对于给定值k和m,您需要在Horner规则的第m次迭代结束时找到P(k)。 Horner规则中涉及的步骤如下:

Pn(x)= an

Pn-1(x)= an-1 + x * Pn(x)第一次迭代。

Pn-2(x)= an-2 + x * Pn-1(x)第二次迭代。

P0(x)= a0 + x * P1(x)第n次迭代。

通常,Pi(x)= ai + x * Pi + 1(x)和P0(x)是最终结果。程序的输入如下,

第1行包含由空格分隔的整数n,m和k。

第2行包含以空格分隔的系数a,an-1 ...,a0。

INPUT:整数n,m,k和上述系数。

OUTPUT:第m次迭代结束时的P(k)值。

示例输入:

2 2 5

3 2 1

示例输出:

86

约束:

1 <= n,k,m <= 10

0&lt; = ai&lt; = 10

   #include <stdio.h>  
 #include <string.h>  
 int main() {  
   int num, i, j, result, index;  
   char name[11][11];   
   char temp[11];           
   scanf("%d\n", &num);  
   for(i = 0; i < num; i++)  
     scanf("%s\n", name[i]);  
   for(i = 0; i < num; i++) {   
     index = i;  
     for(j = i + 1; j < num; j++) {  
       result = strcmp(name[index], name[j]);  
       if(result > 0)                  
         index = j; 
         }  
     strcpy(temp, name[index]);  
     strcpy(name[index], name[i]);           
     strcpy(name[i], temp);  
   }  
   for(i = 0; i < num-1; i++) {  
     printf("%s", name[i]);  
     printf("\n");  
   }  
   printf("%s", name[num-1]);  
   return 0;  
 }  

#include<stdio.h>

int horner(int [], int, int);
int main()
{
    int n, m, k, i;
    int a[10];
    scanf("%d%d%d",&n,&m,&k);
    for (i=0; i<=n; ++i){
        scanf("%d",&a[i]);
    }
    printf("%d",horner(a,m,k));
    return 0;
}

int horner(int a[], int m, int k){
    if (m==0){
        return a[m];
    }
    else{
        return a[m] + k * horner(a,m-1,k);
    }
    }

2 个答案:

答案 0 :(得分:2)

错误消息似乎已经很好地解决了问题。你有两个主要功能。你只能有一个,所以选择一个并删除另一个。

答案 1 :(得分:1)

Program:32:5: error: redefinition of 'main'

在&#34; Program&#34;,第32行,第5列中,标识符main在同一范围内第二次定义。

Program:3:6: note: previous definition of 'main' was here 

第一个定义是在&#34; Program&#34;,第3行,第6列。

你有。您不能两次定义相同的功能。真的没有什么可补充的。


除了:

  • 使用一致的缩进。总是四个空间是一个很好的规则。如果可以,请避免使用制表符,他们要求遇到麻烦。
  • 始终{}放在ifforwhile的块周围,即使它们只是一行。就个人而言,如果块为空,我甚至会添加它们,添加// EMPTY注释,以明确表示空虚不是由于简单的输入错误造成的。
  • 空白是免费的。它不会减慢您的输入速度,并且 使阅读源变得更加容易。 来源更多比键入更频繁,所以请自己帮忙。

然后是调试101:

  • 切掉一些看起来不像是对你的问题做出贡献的来源(在这种情况下,&#34;重新定义&#39; main&#39;&#34; ;而不是霍纳的规则)。
  • 检查问题是否仍然存在。
  • 删除更多来源,直到找到使您的错误消失的ONE更改。这个问题现在很明显,你找到了一个 minimal 示例来发布像StackOverflow这样的东西。

你可能已经基本上切掉了一切,最终得到了:

int main()
{
    return 0;
}

int main()
{
    return 0;
}
嗯......似乎是什么问题?也许我重新定义了&#39; main()&#39;? ; - )