【问题标题】:Why does my arithmetic mean function always return 0?为什么我的算术平均函数总是返回 0?
【发布时间】:2018-10-20 20:53:05
【问题描述】:

在下面的代码中,函数calculo() 不返回任何值。它应该返回 contaluno 变量之间的算术平均值,但它总是返回 0。

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

int i;

int calculo(int alunos, int *p) {
    int cont = 0;
    for (i = 0; i < alunos; i++)
        cont += p[i];
    return cont / alunos;
}

int main()
{
    int *p, alunos, media;

    printf("Digite a quantidade de alunos na turma \n");
    scanf("%d", &alunos);

    p = (int*)calloc(alunos, sizeof(int));

    if (p == NULL) {
        printf("Memória Insuficiente");
        return 1;
    }
    srand(time(NULL));
    for (i = 1; i < alunos + 1; i++) {
        *p = rand() % 10;
        printf("Nota do Aluno [%d]: \t %d \n", i, *p);
    }

    media = calculo(alunos, p);
    printf("A Media Aritimetica da turma e:\t %d", media);
    getche();
    free(p);
    return 0;
}

我做错了什么?

【问题讨论】:

  • 您在使用调试器检查值时观察到了什么?你知道整数值除法是如何工作的吗?
  • 为什么这个问题被标记为“C++”,而实际上它并没有一行 C++ 代码,只有一堆陈旧的、粗鲁的 C?
  • @SamVarshavchik 在第 4 行发现了一些 C++ ;)
  • 看看你在数字中的阅读方式以及它们的存储位置
  • 问题只是将数据读入p的一个元素。另请注意,您的函数对cont/alunos 进行整数除法,它总是向零舍入。所以12的平均值(在你的函数中计算为(1 + 2)/2将给出1的结果,而不是1.5

标签: c average


【解决方案1】:
srand(time(NULL));
for (i = 1; i < alunos + 1; i++) {
    *p = rand() % 10;  // <<=========================== here
    printf("Nota do Aluno [%d]: \t %d \n", i, *p);
}

您一遍又一遍地分配给*p aka p[0]。你可能想做的是

srand(time(NULL));
for (i = 0; i < alunos; ++i) {
    p[i] = rand() % 10;
    printf("Nota do Aluno [%d]: \t %d \n", i + 1, p[i]);
}

【讨论】:

  • 成功了,非常感谢!,但我不认为我明白了。如果 p[i] 将数字存储在数组中,那么 *p 会存储什么?
  • 在 C 和 C++ 中,something[index] 只是 *(something + index) 的语法糖 ... 所以与 *(p+0) 相同的 *p 可以读作 p[0]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多