下列程序的功能是:读入一个整数 k(2<=k<=10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,
则应输出:2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include "conio.h"
#include "stdio.h"
IsPrime(int n);
{
int i,m;
m=1;
for(i=2;i<n; i++)
if !(n%i)
{
m=0; break;
}
return (m);
}
main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");scanf("%d",&k);
printf ("\n\nThe prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((!(k%j))&& (IsPrime(j))) printf ("\n %4d",j);
printf ("\n");
}
huyicheng11@163.com
我的QQ是:1639535
8 个解决方案
#1
IsPrime(int n);
--> IsPrime(int n)
for(i=2;i<n; i++)
--> for(i=2; i<=n/2; i++) //只是为了提高效率,原语句没错
if !(n%i)
--> if (n%i == 0)
其他都不用改,好象不算是难题吧
--> IsPrime(int n)
for(i=2;i<n; i++)
--> for(i=2; i<=n/2; i++) //只是为了提高效率,原语句没错
if !(n%i)
--> if (n%i == 0)
其他都不用改,好象不算是难题吧
#2
#include "conio.h"
#include "stdio.h"
IsPrime(int n);
{
int i,m;
m=1;
for(i=2;i<n; i++)//不用i<n,只要i<(n/2)就足够算出来了,当然仅仅耗时少了而已
if !(n%i)//if 语句时这么扩的吗????if(!n%i)
{
m=0; break;//在这里就没有输出的。你应该找到一个就输出一个,然后继续for循环查找下一个因子;你这样break只会超到最后一个因子,而且没法子输出。
}
return (m);//老兄return(m)有用吗?如果m==0,早break
}
main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");scanf("%d",&k);
printf ("\n\nThe prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((!(k%j))&& (IsPrime(j))) printf ("\n %4d",j);
printf ("\n");
}
唉,我看了一点,就觉得你的程序设计的有点很不合理。
就说你的输出部分吧,找到一个立即输出,然后循环找第二个;
你高的那么复杂干吗??
程序基础设计的书多研究研究吧。
最好是经典好书。入门的就谭浩强的吧,讲的很详细。
不好意思,不让我改动,我已经没有耐心看下去了。。。就给你看了一点错误,里面有没有我还不知道。。。。
#include "stdio.h"
IsPrime(int n);
{
int i,m;
m=1;
for(i=2;i<n; i++)//不用i<n,只要i<(n/2)就足够算出来了,当然仅仅耗时少了而已
if !(n%i)//if 语句时这么扩的吗????if(!n%i)
{
m=0; break;//在这里就没有输出的。你应该找到一个就输出一个,然后继续for循环查找下一个因子;你这样break只会超到最后一个因子,而且没法子输出。
}
return (m);//老兄return(m)有用吗?如果m==0,早break
}
main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");scanf("%d",&k);
printf ("\n\nThe prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((!(k%j))&& (IsPrime(j))) printf ("\n %4d",j);
printf ("\n");
}
唉,我看了一点,就觉得你的程序设计的有点很不合理。
就说你的输出部分吧,找到一个立即输出,然后循环找第二个;
你高的那么复杂干吗??
程序基础设计的书多研究研究吧。
最好是经典好书。入门的就谭浩强的吧,讲的很详细。
不好意思,不让我改动,我已经没有耐心看下去了。。。就给你看了一点错误,里面有没有我还不知道。。。。
#3
我没有仔细看程序,也许程序有其他功能也不知道。。。。
#4
vc用什么函数清屏??
#5
clr()吧
#6
#include "conio.h"
#include "stdio.h"
int IsPrime(int n)
{
int i,m;
m=1;
for(i=2;i<n; i++)
if(n%i==0)
{
m=0;
break;
}
return (m);
}
void main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");
scanf("%d",&k);
printf ("The prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((k%j==0) && (IsPrime(j)))
printf ("\n %4d",j);
printf ("\n");
}
#include "stdio.h"
int IsPrime(int n)
{
int i,m;
m=1;
for(i=2;i<n; i++)
if(n%i==0)
{
m=0;
break;
}
return (m);
}
void main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");
scanf("%d",&k);
printf ("The prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((k%j==0) && (IsPrime(j)))
printf ("\n %4d",j);
printf ("\n");
}
#7
谢谢各位!
#8
光谢他们有什么用,快给分啊 :)
#1
IsPrime(int n);
--> IsPrime(int n)
for(i=2;i<n; i++)
--> for(i=2; i<=n/2; i++) //只是为了提高效率,原语句没错
if !(n%i)
--> if (n%i == 0)
其他都不用改,好象不算是难题吧
--> IsPrime(int n)
for(i=2;i<n; i++)
--> for(i=2; i<=n/2; i++) //只是为了提高效率,原语句没错
if !(n%i)
--> if (n%i == 0)
其他都不用改,好象不算是难题吧
#2
#include "conio.h"
#include "stdio.h"
IsPrime(int n);
{
int i,m;
m=1;
for(i=2;i<n; i++)//不用i<n,只要i<(n/2)就足够算出来了,当然仅仅耗时少了而已
if !(n%i)//if 语句时这么扩的吗????if(!n%i)
{
m=0; break;//在这里就没有输出的。你应该找到一个就输出一个,然后继续for循环查找下一个因子;你这样break只会超到最后一个因子,而且没法子输出。
}
return (m);//老兄return(m)有用吗?如果m==0,早break
}
main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");scanf("%d",&k);
printf ("\n\nThe prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((!(k%j))&& (IsPrime(j))) printf ("\n %4d",j);
printf ("\n");
}
唉,我看了一点,就觉得你的程序设计的有点很不合理。
就说你的输出部分吧,找到一个立即输出,然后循环找第二个;
你高的那么复杂干吗??
程序基础设计的书多研究研究吧。
最好是经典好书。入门的就谭浩强的吧,讲的很详细。
不好意思,不让我改动,我已经没有耐心看下去了。。。就给你看了一点错误,里面有没有我还不知道。。。。
#include "stdio.h"
IsPrime(int n);
{
int i,m;
m=1;
for(i=2;i<n; i++)//不用i<n,只要i<(n/2)就足够算出来了,当然仅仅耗时少了而已
if !(n%i)//if 语句时这么扩的吗????if(!n%i)
{
m=0; break;//在这里就没有输出的。你应该找到一个就输出一个,然后继续for循环查找下一个因子;你这样break只会超到最后一个因子,而且没法子输出。
}
return (m);//老兄return(m)有用吗?如果m==0,早break
}
main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");scanf("%d",&k);
printf ("\n\nThe prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((!(k%j))&& (IsPrime(j))) printf ("\n %4d",j);
printf ("\n");
}
唉,我看了一点,就觉得你的程序设计的有点很不合理。
就说你的输出部分吧,找到一个立即输出,然后循环找第二个;
你高的那么复杂干吗??
程序基础设计的书多研究研究吧。
最好是经典好书。入门的就谭浩强的吧,讲的很详细。
不好意思,不让我改动,我已经没有耐心看下去了。。。就给你看了一点错误,里面有没有我还不知道。。。。
#3
我没有仔细看程序,也许程序有其他功能也不知道。。。。
#4
vc用什么函数清屏??
#5
clr()吧
#6
#include "conio.h"
#include "stdio.h"
int IsPrime(int n)
{
int i,m;
m=1;
for(i=2;i<n; i++)
if(n%i==0)
{
m=0;
break;
}
return (m);
}
void main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");
scanf("%d",&k);
printf ("The prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((k%j==0) && (IsPrime(j)))
printf ("\n %4d",j);
printf ("\n");
}
#include "stdio.h"
int IsPrime(int n)
{
int i,m;
m=1;
for(i=2;i<n; i++)
if(n%i==0)
{
m=0;
break;
}
return (m);
}
void main()
{
int j,k;
clrscr();
printf ("\nPlease enter an integer number between 2 and 10000:");
scanf("%d",&k);
printf ("The prime factor(s) of %d is (are):",k);
for (j=2;j<=k;j++)
if ((k%j==0) && (IsPrime(j)))
printf ("\n %4d",j);
printf ("\n");
}
#7
谢谢各位!
#8
光谢他们有什么用,快给分啊 :)