请问这个程序到底出了什么问题??? 2C

/*The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?求最大质因数*/
#include
int ifprime(int x){//判断是否是质因数
int i;
if(x<=1)
return 0;
else if(x==2)
return 1;
else{
for(i=2;i<=(x-1)/2;i++){
if(x%i==0)
return 0;
}
return 1;
}
}
void main(){
int i,x,a[1000],j=1,k,max=0;
int ifprime(int);
printf("please input the number:");
scanf("%d",&x);
for(i=2;i<=(x-1)/2;i++){
if(x%i==0){
if(ifprime(i))
a[j++]=i;
}
}
for(k=1;;k++){
if(a[k]>max)
max=a[k];
}
printf("the largest prime factor is:%d/n",max);
}
编译组建都没有问题,但运行就会出现“Access Violation”,为什么???

c

6个回答

for(k=1;;k++){
if(a[k]>max)
max=a[k];
}这个是个死循环,会无限给数组a添加成员,造成了数组越界

lalala513
lalala513 求教: 改为 for(k=1;k<=1000;k++){ if(a[k]>max) max=a[k]; } 后程序运行结果还是不对,能帮我看一下这个程序到底哪里有问题吗?
5 年多之前 回复
for (k = 1;; k++){
    if (a[k]>max)
        max = a[k];

这里k没有上限
而你的a最大只有1000

for循环中没有对条件进行判断,它当然会无限循环

 /*The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?求最大质因数*/
#include <stdio.h>
int ifprime(int x)
{
    //判断是否是质因数
    int i ;
    if(x<=1)
    return 0 ;
    else if(x==2)
    return 1 ;
    else 
    {
        for(i=2;i<=(x-1)/2;i++)
        {
            if(x%i==0)
            return 0 ;
        }
        return 1 ;
    }
}
void main()
{
    int i,x,a[1000],j=1,k,max=0 ;
    int ifprime(int);
    printf("please input the number:");
    scanf("%d",&x);
    for(i=2;i<=(x-1)/2;i++)
    {
        if(x%i==0)
        {
            if(ifprime(i))
            a[j++]=i ;
        }
    }
    for(k=1;k<1000;k++)//擦,循环条件都没有
    {
        if(a[k]>max)
        max=a[k];
    }
    printf("the largest prime factor is:%d\n",max);
}

CSDN的这一块的排版太差了啊

求教:
改为
for(k=1;k<=1000;k++){
    if(a[k]>max)
        max=a[k];
}

后程序运行结果还是不对,能帮我看一下这个程序到底哪里有问题吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐