C,随机使用并将它们存储在一个数组中

时间:2016-03-12 00:03:05

标签: c arrays loops random

尝试在60-100之间生成25个随机数并将它们存储在数组中。需要一些确认。这是它的外观吗?

int main () {

int temp[25], i, sum;


srand( (unsigned) time(NULL) );

for (i=0; i <= 25; i++) {

get_value(i);
sum += temp[25];  //Eventually will be added together to find avg

};


}


int get_value(int temp_random) {
    return((rand()%40)+60);

}

3 个答案:

答案 0 :(得分:2)

您通过

调用未定义的行为
  • 使用超出范围的数组下标。
  • 使用具有自动存储持续时间的未初始化变量sum的值,这是不确定的。

sum += temp[25];应为sum += temp[i];
并且循环条件应为i < 25i < (int)(sizeof(temp)/sizeof(*temp))而不是i <= 25

还必须初始化sum

未定义行为的Bisides,您的程序存在以下问题:

  • get_value()返回的内容被丢弃。
  • get_value()未使用且似乎毫无意义的句子temp_random
  • 在声明函数之前使用函数。
  • get_value()将不会返回100,因为rand()%40将只包含0到39之间的数字。

另请注意,不需要属于for循环的块的分号。 (虽然这没有害处)

您的代码应该是这样的:

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

#define GENERATE_NUM 25
#define GENVALUE_MIN 60
#define GENVALUE_MAX 100

int get_value(void);

int main (void) {

    int temp[GENERATE_NUM], i, sum = 0;

    srand( (unsigned) time(NULL) );

    for (i=0; i < GENERATE_NUM; i++) {

        temp[i] = get_value();
        sum += temp[i];  //Eventually will be added together to find avg

    }

    return 0;
}

int get_value(void) {
    return((rand() % (GENVALUE_MAX - GENVALUE_MIN + 1)) + GENVALUE_MIN);

}

答案 1 :(得分:2)

许多问题:

  • 你的get_value参加了一个参赛,但从未使用过它。
  • 您的随机计算不正确。
  • 您的索引i错误,因为它超出范围。
  • 您的for循环以[{1}}结尾,但也不正确。

请参阅此运行代码 - 不要忘记;

#include<limits.h>

答案 2 :(得分:1)

ab之间生成随机数的公式为:rand() % (b-a+1) + a
也就是说,你的for循环应该看起来像这样:

for (i = 0; i < 25; i++) {
    temp[i] = rand() % (100-60+1) + 60;
    sum += temp[i];
}

另外,请注意你在for循环条件(i <= 25)中所做的事情。这将从0(包括)变为25(包括),但数组的最后一个索引是24