一个C难道,忘高手解答案

时间:2021-02-12 08:51:07
这道题该怎么解?
  下列程序的功能是:读入一个整数 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)

其他都不用改,好象不算是难题吧

#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");
}
唉,我看了一点,就觉得你的程序设计的有点很不合理。
就说你的输出部分吧,找到一个立即输出,然后循环找第二个;
你高的那么复杂干吗??
程序基础设计的书多研究研究吧。
最好是经典好书。入门的就谭浩强的吧,讲的很详细。
不好意思,不让我改动,我已经没有耐心看下去了。。。就给你看了一点错误,里面有没有我还不知道。。。。

#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");
}

#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)

其他都不用改,好象不算是难题吧

#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");
}
唉,我看了一点,就觉得你的程序设计的有点很不合理。
就说你的输出部分吧,找到一个立即输出,然后循环找第二个;
你高的那么复杂干吗??
程序基础设计的书多研究研究吧。
最好是经典好书。入门的就谭浩强的吧,讲的很详细。
不好意思,不让我改动,我已经没有耐心看下去了。。。就给你看了一点错误,里面有没有我还不知道。。。。

#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");
}

#7


谢谢各位!

#8


光谢他们有什么用,快给分啊 :)