在2d 10x10表中打印值,以C为单位

时间:2015-06-17 01:15:08

标签: c arrays

我试图打印出素数而非素数的值到10x10表格上。数组令人困惑,似乎无法得到它,但我假设我需要一个数组。如果值不是素数,则预期输出上的双XX只是空格。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j;


    for (i = 2; i <= 101; i++)
    {
        for (j = 2; j <= i; j++)
        {
            if ( i % j == 0)
            {   
                printf(" ");
                break;
            }
         }
         if( i == j)
         {
            printf("%d", i);
         }
    }
    return 0;
}

预期产出:

02 03 XX 05 XX 07 XX XX XX 11  
XX 13 XX XX XX 17 XX 19 XX XX  
XX 23 XX XX XX XX XX 29 XX 31  
XX XX XX XX XX 37 XX XX XX 41  
XX 43 XX XX XX 47 XX XX XX XX  
XX 53 XX XX XX XX XX 59 XX 61  
XX XX XX XX XX 67 XX XX XX 71
XX 73 XX XX XX XX XX 79 XX XX
XX 83 XX XX XX XX XX 89 XX XX
XX XX XX XX XX 97 XX XX XX 101

3 个答案:

答案 0 :(得分:3)

什么?不,不,不,你不必做所有这些复杂的事情。

只需使用双循环: http://coliru.stacked-crooked.com/a/bc57bd52c29a419f

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j;
    int my_array[10][10];

    //Fill the array
    for (i = 0; i < 10; ++i) {
        for (j = 0; j < 10; ++j) {
            my_array[i][j] = 10*i + j;
        }
    }

    //Print out the array
    for (i = 0; i < 10; ++i) {
        for (j = 0; j < 10; ++j) {
            printf("%d ", my_array[i][j]);
        }
        printf("\n");
    }


    return 0;
}

确保您获得正确的索引。它应该相对简单;永远不要访问10个元素数组的第10个索引;它是0-9并确保您打印出正确的值。

答案 1 :(得分:2)

分而治之:计算&#34;它是一个主要的&#34;和&#34;打印阵列&#34;作为单独的问题。

关键是将任务分解为可管理的部分 - 构建解决方案 - 而不是实现这些部分。使用像I_MAX这样的常量,而不是使用像101这样的裸幻数。使用print_array(),想一想如何打印1个元素并将其包装成10的循环。然后将该循环包装成停止的内容当所有数字都被打印出来时。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define I_MIN 2
#define I_MAX 101

// OP all ready has code for IsPrime() - here is an alternative
bool IsPrime(int i, const bool *set) {
  if (i <= 3) {
    return i >= 2;
  }
  int divisor = 2;
  for (;;) {
    if (i % divisor == 0) {
      return false;
    }
    if (i / divisor <= divisor) {
      return true;
    }
    // get next prime
    while (!set[++divisor])
      ;
  }
}

void print_array(const bool *set, int min, int max) {
  int width = 10;
  for (int i = min; i <= max;) {
    for (int w = 0; w < width; w++) {
      // Print the number
      if (set[i]) printf("%02d ", i);
      else fputs("XX ", stdout);
      i++;
      if (i > max)
        break;
    }
    fputc('\n', stdout);
  }
}

int main(void) {
  bool set[I_MAX + 1];  

  // Populate the set
  for (int i = 0; i <= I_MAX; i++) {
    set[i] = IsPrime(i, set);
  }

  // display the set
  print_array(set, I_MIN, I_MAX);
  return 0;
}

答案 2 :(得分:1)

如果只是格式问题,看起来你错过了行之间的换行符。在外部for循环结束之前添加:

if((i -1) % 10 == 0) printf("\n");

此条件每10次迭代打印一个换行符。需要-1,因为外部循环从2开始。