0

这是我的代码,我需要它首先说出 1-10 个数字的数量,然后打印它们是哪些数字。它得到了正确的数字,但不是打印等于 1-10 的数字,而是打印前 10 个数字。

#include <time.h> 
#include <stdlib.h> 
#include <stdio.h>
int main () {
    int i;
    int br = 0, brr = 0, brrr = 0, br1 = 0;
    int polje[50];
    srand(time(NULL));
    for(i = 0; i < 50; i++) {
        polje[i] = rand() % 30 + 1;
        printf("%d ", polje[i]);
    }
    printf("\n");
    for(i = 0; i < 50; i++) {
        if(polje[i] >= 1 && polje[i] <= 10)
            br++;
    }
    printf("Brojevi od 1 do 10 pojavljuju se %d puta a to su ", br);

    do {
        for(i = 0; i < 10; i++)
            printf("%d ", polje[i]);

    } while (polje[i] >= 1 && polje[i] <= 10);

    return 0;
}
4

3 回答 3

1

...然后打印它们是哪些

如果您需要以与它们在 polje 数组中出现的顺序相同的顺序打印数字:

#include <time.h>
#include <stdlib.h> 
#include <stdio.h>
int main () {
    int i;
    int br = 0, brr = 0, brrr = 0, br1 = 0;
    int polje[50];
    srand(time(NULL));
    for(i = 0; i < 50; i++) {
        polje[i] = rand() % 30 + 1;
        printf("%d ", polje[i]);
    }
    printf("\n");
    for(i = 0; i < 50; i++) {
        if(polje[i] >= 1 && polje[i] <= 10)
            br++;
    }
    printf("Brojevi od 1 do 10 pojavljuju se %d puta a to su ", br);

    // changed from here:
    for(i = 0; i < 50; i++) {
        if(polje[i] >= 1 && polje[i] <= 10)
            printf( "%d ", polje[i] );
    }

    return 0;
}

如果您需要在 polje 数组中打印它们的索引(位置):

#include <time.h> 
#include <stdlib.h> 
#include <stdio.h>
int main () {
    int i;
    int br = 0, brr = 0, brrr = 0, br1 = 0;
    int polje[50];
    srand(time(NULL));
    for(i = 0; i < 50; i++) {
        polje[i] = rand() % 30 + 1;
        printf("%d ", polje[i]);
    }
    printf("\n");
    for(i = 0; i < 50; i++) {
        if(polje[i] >= 1 && polje[i] <= 10)
            br++;
    }
    printf("Brojevi od 1 do 10 pojavljuju se %d puta a to su ", br);

    // changed from here:
    for(i = 0; i < 50; i++) {
        if(polje[i] >= 1 && polje[i] <= 10)
            printf( "%d ", i );
    }

    return 0;
}
于 2013-07-28T16:15:51.617 回答
0

如果您想打印 1 到 10 之间的数字,那么这里是您的代码的更正版本:

#include <time.h> 
#include <stdlib.h> 
#include <stdio.h>
int main () {
    int i;
    int br = 0, brr = 0, brrr = 0, br1 = 0;
    int polje[50];
    srand(time(NULL));
    for(i = 0; i < 50; i++) {
        polje[i] = rand() % 30 + 1;
        printf("%d ", polje[i]);
    }
    printf("\n");
    for(i = 0; i < 50; i++) {
        if(polje[i] >= 1 && polje[i] <= 10)
            br++;
    }
    printf("\nBrojevi od 1 do 10 pojavljuju se %d puta a to su \n", br);

    //Change the loop from do-while to for and upto 50 iteration instead 10.
    for(i = 0; i < 50; i++)
        if(polje[i] >= 1 && polje[i] <= 10)
             printf("%d ", polje[i]);

    return 0;
}   

变化:

  • 代替
do {
        for(i = 0; i < 10; i++)
            printf("%d ", polje[i]);

   } while (polje[i] >= 1 && polje[i] <= 10);

for(i = 0; i < 50; i++)
    if(polje[i] >= 1 && polje[i] <= 10)
         printf("%d ", polje[i]);

因为不需要嵌套for loop在里面while loop

  • 改变
 for(i = 0; i < 10; i++)

 for(i = 0; i < 50; i++)

因为您必须打印数组中 1 到 10 之间的所有数字,而不仅仅是 1 到 10 之间的前 10 个数字(根据我的理解)。

于 2013-07-28T17:00:24.020 回答
0

我认为这是您正在寻找的代码。我还取出了 do-while 循环。如果在 1 到 10 之间,它可能会导致无限循环polje[10],因为到测试条件时,i它将永远是 10。

for(i = 0; i < 50; i++)  // changed it from 10 to 50
    if((polje[i] >= 1 && polje[i] <= 10))  // if statement
        printf("%d ", polje[i]);
于 2013-07-28T16:19:32.447 回答