基本上,一个程序可以找到最大的素数因子。不知道逻辑是否正确因为我无法运行它来测试它。我知道这很长。但请原谅我。
//largest_prime.c
#include <stdio.h>
int main() {
int num,large;
int prime(int);
int lprime(int);
printf("Enter number: ");
scanf("%d",&num);
large = lprime(num);
printf("Largest Prime = %d\n",large);
return 0;
}
int lprime(int num) {
int i=num-1,large;
while (i!=-1) {
if (num%i==0) {
if (prime(i)==1) {
large=i;
i=-1;
}
i--;
}
return large;
}
int prime(int num) {
int prime,i=num-1;
while (i!=-1) {
if(num%i==0) {
if(i!=1) {
i=-1;
return 0;
}
else
return 1;
}
i--;
}
}
我使用GCC在终端(我使用Mac)输出这个:
largest_prime.c: In function ‘lprime’:
largest_prime.c:26: error: nested functions are disabled, use -fnested-functions to re-enable
largest_prime.c:39: error: syntax error at end of input
我尝试了-fnested-functions来重新启用。我明白了:
largest_prime.c: In function ‘lprime’:
largest_prime.c:39: error: syntax error at end of input
请帮助!
答案 0 :(得分:10)
lprime缺少尾随'}'(实际上我相信你在尾随'}时丢失了)
答案 1 :(得分:6)
return large;
编译器推断出你正在lprime
内开始一个新的函数声明
嵌套函数错误
答案 2 :(得分:3)
函数不能嵌套在ISO C中;允许一些编译器扩展允许然后不是解决方案;只是让你的代码有效C.你的缩进风格对你没有帮助;但是每个功能的最后一行不在左边缘的事实应该响起警钟。以下编译但不是没有警告(添加了标记的行):
//largest_prime.c
#include <stdio.h>
// Forward declarations
int lprime(int num) ; //********************
int prime(int num) ; //********************
int main() {
int num,large;
printf("Enter number: ");
scanf("%d",&num);
large = lprime(num);
printf("Largest Prime = %d\n",large);
return 0;
}
int lprime(int num) {
int i=num-1,large;
while (i!=-1) {
if (num%i==0) {
if (prime(i)==1) {
large=i;
i=-1;
}
i--;
} //********************
}
return large;
}
int prime(int num) {
int prime,i=num-1;
while (i!=-1) {
if(num%i==0) {
if(i!=1) {
i=-1;
return 0;
}
else
return 1;
}
i--;
}
}
警告是:
main.cpp(34) : warning C4101: 'prime' : unreferenced local variable
main.cpp(46) : warning C4715: 'prime' : not all control paths return a value
我还没有执行代码,所以它是否正常工作是由你决定的。