我试图打印出素数而非素数的值到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
答案 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开始。