【问题标题】:C - Printing random numbers from intervalC - 从间隔打印随机数
【发布时间】:2013-07-28 15:52:48
【问题描述】:

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

【问题讨论】:

  • 请尝试用英文变量名重写
  • 呃您的代码看起来应该打印前十个数字。我看不出你在哪里告诉它只打印 1 到 10 之间的数字。
  • 你应该把rand() % 30 + 1;换成(rand() % 30) + 1;%的优先级低于+
  • @h3nr1x,这绝对不是真的。 % 与(二进制)*/ 具有相同的优先级 - 即高于 +
  • @CarlNorum 你是对的,对不起,大错特错,我的错

标签: c random numbers


【解决方案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;
}

【讨论】:

    【解决方案2】:

    我认为这是您正在寻找的代码。我还取出了 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]);
    

    【讨论】:

      【解决方案3】:

      如果您想打印 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]);
      

      因为不需要在while loop 中嵌套for loop

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-10
        • 2012-12-23
        • 2023-03-03
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多