【发布时间】:2018-10-20 20:53:05
【问题描述】:
在下面的代码中,函数calculo() 不返回任何值。它应该返回 cont 和 aluno 变量之间的算术平均值,但它总是返回 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进行整数除法,它总是向零舍入。所以1和2的平均值(在你的函数中计算为(1 + 2)/2将给出1的结果,而不是1.5。