C - 从间隔打印随机数

时间:2013-07-28 15:52:48

标签: c random numbers

这是我的代码,我需要先说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;
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我认为这是您正在寻找的代码。我也拿出了do-while循环。如果polje[10]介于1到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]);

答案 2 :(得分: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之间的所有数字,而不仅仅是前10个数字在1到10之间(根据我的理解)。