试图在 C 程序中生成行的问题

issues trying to make rows in c program

#include <stdio.h>
int prime(int limit,int col);
int main(){        
    int limit,col,count,i;

    printf("Table of Primes\n");
    printf("===============\n");
    printf("Upper limit: ");
    scanf("%d",&limit);
    getchar();
    printf("# of columns: ");
    scanf("%d",&col);

    count=prime( limit,col);

    return 0;
}

int prime(int limit,int col){
    int i,j,w;

    for(w=0;w<col;w++){     
        for(i=2;i<=limit;i++){    
            for(j=2;j<=i;j++){    
                if(i%j==0){    
                    break;    
                }    
            }               
            if(i==j){    
                printf("%d ",i);        
            }    
        }
        printf("\n");
    }       
}

上面的代码是求2和用户输入的数字之间的质数个数。 我的工作正常,但我的问题是将代码放入列中(由列数定义) 我和我的老师谈过这个,她说我不必使用二维数组来完成这个。 谁能帮帮我?

另外,配偶的输出如下所示:

 Table of Primes
 ===============
 Upper limit:  175
 # of columns: 5
  2      3      5      7     11
 13     17     19     23     29
 31     37     41     43     47
 53     59     61     67     71
 73     79     83     89     97
101    103    107    109    113
127    131    137    139    149
151    157    163    167    173 

谢谢。

您可以轻松测试列数并打印 newline。函数 prime() 也缺少 return 值,所以我 return w 作为找到的素数。这只是对您的 prime() 函数的轻微调整。

#include <stdio.h>
#include <string.h>

int prime(int limit, int col) {
int i, j, w = 0;
    for (i=2; i<=limit; i++) {
        for (j=2; j<=i; j++) {
            if (i%j == 0) {
                break;
            }
        }
        if (i==j) {
            if (w++ % col == 0)               // test number of columns
                printf("\n");
            printf("%7d", i);                // specify field width
        }
    }
    printf("\n");
    return w;
}

int main(void) {
    prime (173, 5);
    return 0;
}

程序输出:

  2      3      5      7     11
 13     17     19     23     29
 31     37     41     43     47
 53     59     61     67     71
 73     79     83     89     97
101    103    107    109    113
127    131    137    139    149
151    157    163    167    173

我留给你添加多余的装饰。

我建议你为查找素数和显示素数创建单独的函数,这样你就可以更好地控制显示这些素数:

#include <stdio.h>
#include <math.h> // sqrt

int is_prime (int x);
void prime(int limit, int col);

int main ()
{
    int limit, col;

    printf("Table of Primes\n");
    printf("===============\n");
    printf("Upper limit: ");
    scanf("%d",&limit);
    getchar();
    printf("# of columns: ");
    scanf("%d",&col);

    prime(limit, col);

    printf("\n");

    return 0;
}


int is_prime (int num)
{
    int flag;
    int i;
    double p;

    p = sqrt(num);
    flag = 1;

    if (num == 1)
        return 0;

    if (num == 2)
        return flag;

    if ((num % 2) == 0)
        return 0;

    for (i = 3; i <= p; i += 2)
    {
        if ((num % i) == 0)
        {
            flag = false;
            return flag;
        }
    }

    return flag;
}


void prime (int limit, int column)
{
    int i, j, cnt;;

    cnt = 0;
    for (i = 0; i < limit; i++) {
        if (is_prime(i)) {
            printf("%4d ", i);
            cnt++;
            if ((cnt % column) == 0) {
                printf("\n");
            }
        }
    }
}

当然你可以把is_prime改成你自己的功能

你可以保留一个变量来计算打印了多少个数字,然后每次 count 是 col 的倍数时 count % col 将为零,所以这样就可以了

#include <stdio.h>

void prime(int limit, int col);
int readint(const char *const message);

int main()
{
    int limit,col;

    printf("Table of Primes\n");
    printf("===============\n");

    limit = readint("Upper limit");
    col   = readint("# of columns");

    prime(limit, col);

    return 0;
}

int readint(const char *const message)
{
    int value;

    printf("%s> ", message);
    while (scanf("%d", &value) != 1)
    {
        int chr;

        printf("\tinvalid input\n");
        printf("%s> ", message);
        do {
            chr = getchar();
        } while ((chr != EOF) && (chr != '\n'));
    }
    return value;
}

void prime(int limit, int col)
{
    int i, j;
    int count;

    count = 0;
    for (i = 2 ; i <= limit ; i++)
    {
        for (j = 2 ; j <= i ; j++)
        {
            if (i % j == 0)
                break;
        }

        if (i == j)
        {
            count += 1;

            printf("%5d", i);
            if ((count != 0) && (count % col == 0))
                printf("\n");
        }
    }
}

请注意,您的代码不处理无效输入,我在这段代码中补充说,许多人错误地忽略了 scanf() 的 return 值,这是有原因的。