| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 356 人关注过本帖
标题:入门问题!!!找下错,运行结果有问题!!
只看楼主 加入收藏
其实、不想说
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:156
注 册:2011-3-3
结帖率:92.31%
收藏
已结贴  问题点数:20 回复次数:2 
入门问题!!!找下错,运行结果有问题!!
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"

void output( int a[]);
void is_prime( int a[]);
void sort_prime( int a[]);

main()
{
    int a[100];

    output(a);
    is_prime(a);
    sort_prime(a);
    getch();
}
void output( int a[])
{
    int i;

    srand(time(NULL));
    for ( i = 0; i < 100; i++);
    {
        a[i] = rand() % (5000 - 1000 + 1) + 1000;
        printf("%8d", a[i]);
    }
    printf("\n");
}
void is_prime(int a[])
{
    int i, j, flag;
    for ( i = 1; i < 100; i++)
    {
        flag = 1;
        for ( j = 2; j <= (int)sqrt(a[i]); j++)
        {
            if( a[i] % j == 0)
                {
                    flag = 0;
                    break;
                }
        }
        if(flag == 1)
            {
                printf("%8d", a[i]);
            }
    }
    printf("\n");
}
void sort_prime( int a[])
{
    int i, j, min, temp;

    for ( i = 0; a[i] < 1000; i++)
    {
        min=i;
        for(j = 1; a[i] < 1000; j++)
        {
            if( a[min] > a[j] )
                {
                    temp = a[min];
                    a[min] = a[j];
                    a[j] = temp;
                }
        }
    }
    for ( i = 0; a[i] < 1000; i++)
    {
        printf("%8d", a[i]);
    }
}
题目是随机产生1000—5000之间的100个数,找出100数之间的素数输出,再排序素数输出!我用的是TC 2.0
搜索更多相关主题的帖子: void 1000 include 
2011-04-20 21:54
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:20 
is_prime定义成:
bool is_prime (int n); 比较好, 这样的话,再遍历100个随机数,将是素数的元素存入新的数组,最后对新数组排序输出。

程序代码:
#include <stdio.h>
#include <time.h>
#include <stdbool.h> //如果没有stdbool的话, isprime返回一个整数来判断是否质数。


int main (void) {
        srand((unsigned)time(NULL));
        int a[100],b[100];
        int i,j;
        bool isprime (int n);
        void sort (int a[],int n);

        for(i=0;i<100;i++) {
                a[i]=rand()%(5000-1000+1)+1000;
        }

        for(i=0,j=0;i<100;i++) {
                if(isprime(a[i])) {
                        b[j]=a[i];
                        j++;
                }
        }

        sort(b,j);

        for(i=0;i<j;i++) {
                printf ("%i ",b[i]);
        }

        printf ("\n");

        return 0;

}

bool isprime (int n) {
        bool p=true;
        int i;
        for(i=n-1;i>1;i--) {
                if(n%i==0) {
                        p=false;
                        break;
                }
        }
        return p;
}

void sort (int a[],int n) {
        int i,j,temp;
        for(i=0;i<n-1;i++) {
                for(j=i+1;j<n;j++) {
                        if(a[i]>a[j]) {
                                temp=a[i];a[i]=a[j];a[j]=temp;
                        }
                }
        }
}


[ 本帖最后由 ansic 于 2011-4-20 23:01 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-20 22:45
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
程序代码:
main()
{
    int a[100];

    output(a);
    is_prime(a);
    sort_prime(a);  
    getch();
}
void output( int a[])
{
    int i;
    srand(time(NULL));
    for ( i = 0; i < 100; i++);
    {
        a[i] = rand() % 4000+ 1000;  //不知道这句为何要你那样写,但可能会使程序执行出错。
        printf("%8d", a[i]);  //这里输出所有的数,没有顺序的!
    }
    printf("\n");
}
void is_prime(int a[])
{
    int i, j, flag;
    for ( i = 1; i < 100; i++)
    {
        flag = 1;
        for ( j = 2; j <= (int)sqrt(a[i]); j++)
        {
            if( a[i] % j == 0)
                {
                    flag = 0;
                    break;
                }
        }
        if(flag == 1)  //输出素数
            {
                printf("%8d", a[i]);
            }
    }
    printf("\n");
}
void sort_prime( int a[])
{
    int i, j, min, temp;

    for ( i = 0; i < 99; i++)  //条件,优化下
    {
        min=i;
        for(j = i+1; i < 100; j++)   //条件
        {
            if( a[min] > a[j] )
                {
                    temp = a[min];
                    a[min] = a[j];
                    a[j] = temp;
                }
        }
    }
    for ( i = 0; i< 100; i++)  //这里条件你写错了吧
    {
        printf("%8d", a[i]);
    }
}


[ 本帖最后由 qq1023569223 于 2011-4-21 07:05 编辑 ]

   唯实惟新 至诚致志
2011-04-21 06:55
快速回复:入门问题!!!找下错,运行结果有问题!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026711 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved