c语言-请问这个程序到底出了什么问题???

问题描述

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

/*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”,为什么???

解决方案

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

解决方案二:

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:%dn",max);
}

解决方案五:

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

解决方案六:

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

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

时间: 2024-10-26 17:39:16

c语言-请问这个程序到底出了什么问题???的相关文章

程序问题-请问这个程序到底那里出了问题?

问题描述 请问这个程序到底那里出了问题? import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; public class Sample implements Serializable{ public String s; public static void main(String[] args)thro

指针-请问这道程序到底错在什么地方?

问题描述 请问这道程序到底错在什么地方? #include int mian() { int i, a[10], *p ; p = a; printf("please input 10 number:"); for (i = 0; i < 10; i++) scanf("%d",p++); p = a; for (i = 0; i < 10; i++, p++) printf("%d",*p); printf("n"

c语言-求助这个程序到底哪里的问题?

问题描述 求助这个程序到底哪里的问题? #include #include #define thestacksize 100 #define stackincrement 10 #define overflow -1 #define ok 1 #define error 0 typedef struct{ char top; char *base; int stacksize; }sqstack; int initstack(sqstack s){ s.base=(char)malloc(the

请问这个程序哪里出错了?java写文件和读文件

问题描述 //=============================写文件packagefier;importjava.io.*;publicclasswrite{publicstaticvoidmain(String[]args){write("E:\123.txt","hello");}publicstaticvoidwrite(Stringpath,Stringcontent){Strings=newString();Strings1=newString(

c语言-请问此c程序哪里出错了。。谢谢

问题描述 请问此c程序哪里出错了..谢谢 要求将输入的两个字符串连接起来. #include #include char s1[80],s2[80]; int main() { void f(); printf("say sth:"); gets(s1); printf("say sth. again:"); gets(s2); f(); } void f() { int i; strcat(s1,s2); for(i=0;i<=80;i++) printf(

各位大神,请问vs性能调试工具是仅仅能对c#语言编写的程序调试吗?

问题描述 各位大神,请问vs性能调试工具是仅仅能对c#语言编写的程序调试吗? 最近写了一个c++程序,但耗内存特别大,所以想做一下性能分析,看看到底是那个 地方占了内存,刚好vs有一个性能分析工具,请问vs的性能分析工具是不是可以分析 所有语言程序写的代码? 解决方案 我试过,可以对c++ 进行性能调试的,应该是可以的

语言求助-输大神看一下我写的宿舍管理系统到底出啥问题了!急,马上要交了!!!

问题描述 输大神看一下我写的宿舍管理系统到底出啥问题了!急,马上要交了!!! 原本只要一个结构体的,但我弄复杂了,求大神帮下忙!这个程序主要是输入时总会得不到正确的链表,我试了好久也没成功,都快崩溃了!简单地用DOS系统运行和其他编程软件运行结果都不同! 学生宿舍管理系统设计 功能:实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号.房间号.面积.所容纳人数.已入住人数等,系统以文本菜单形式工作. 基本要求: 实现宿舍基本信息的录入.修改.删除. 实现宿舍信息的浏览.查询 实现安排学生入住.

c语言-C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数、负数和零分块求和,

问题描述 C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数.负数和零分块求和, 对一组无规律数据按正数.负数和零分块求和,即要求将序列中相邻的正数.零及负数分块累加输出,格式要求: 源数据: 2,3,8,6,0,0,-2,-1,-4,0,5,6,7,-5,-2,...(共100个) 整理输出为: 2,5,13,19,0,0,-2,-3,-7,0,5,11,18,-5,-7...(共100个) 以下程序哪里出了问题?我搞了2星期,总是得不到完整输出: int main(

c++-请问我的程序到底哪里不符合?

问题描述 请问我的程序到底哪里不符合? 杭电acm1003 #include using namespace std; long int input(long int x, int p1[]) { long int j = 0; while (j { cin >> p1[j]; j++; } return j + 1; } void compare(long int y, int p2[], int a) { long int start = 1; long int end = 1; long