c - 为什么我的结果输出为 0.0000?
问题描述
嘿,人们这是我在这个页面上的第一个问题。我在大学里一直在学习 C,我必须完成一项活动,其中插入 3 个不同学生的姓名、姓氏和 4 个年级。之后,我必须计算平均成绩、最高和最低成绩,并将这些结果打印在屏幕上。
程序编译正确,没有错误,但是当打印结果时,程序说平均成绩,最高和最低成绩都等于0.000000。
我真的不知道问题是什么,如果有人可以检查它并以任何方式帮助我,我会很感激。
(对不起,如果您不理解变量名,我来自阿根廷,它们是西班牙语)
#include <stdio.h>
#define N 50
struct alumno
{
char nombre [N];
char apellido [N];
float nota1;
float nota2;
float nota3;
float nota4;
} alumno1, alumno2, alumno3;
struct notas
{
float prom;
float nmax;
float nmin;
} notas1, notas2, notas3;
float promedio (struct alumno a, struct notas b)
{
b.prom = (a.nota1 + a.nota2 + a.nota3 + a.nota4)/4;
return b.prom;
};
float notamaxima (struct alumno a, struct notas b)
{
if ((a.nota1>a.nota2) && (a.nota1>a.nota3) && (a.nota4>a.nota4))
{
b.nmax=a.nota1;
}
else if ((a.nota2>a.nota1) && (a.nota2>a.nota3) &&
(a.nota2>a.nota4))
{
b.nmax=a.nota2;
}
else if ((a.nota3>a.nota1) && (a.nota3>a.nota2) &&
(a.nota3>a.nota4))
{
b.nmax=a.nota3;
}
else if ((a.nota4>a.nota1) && (a.nota4>a.nota2) &&
(a.nota4>a.nota3))
{
b.nmax=a.nota4;
}
return 0;
};
float notaminima (struct alumno a, struct notas b)
{
if ((a.nota1<a.nota2) && (a.nota1<a.nota3) && (a.nota1<a.nota4))
{
b.nmin=a.nota1;
}
else if ((a.nota2<a.nota1) && (a.nota2<a.nota3) &&
(a.nota2<a.nota4))
{
b.nmin=a.nota2;
}
else if ((a.nota3<a.nota1) && (a.nota3<a.nota2) &&
(a.nota3<a.nota4))
{
b.nmin=a.nota3;
}
else if ((a.nota4<a.nota1) && (a.nota4<a.nota2) &&
(a.nota4<a.nota3))
{
b.nmin=a.nota4;
}
return 0;
};
int main ()
{
struct alumno;
struct notas;
printf ("Ingrese nombre del alumno:\n");
fgets (alumno1.nombre, N, stdin);
printf ("Ingrese apellido del alumno:\n");
fgets (alumno1.apellido, N, stdin);
printf ("Ingrese la primera nota del alumno:\n");
scanf ("%f", &alumno1.nota1);
printf ("Ingrese la segunda nota del alumno:\n");
scanf ("%f", &alumno1.nota2);
printf ("Ingrese la tercera nota del alumno:\n");
scanf ("%f", &alumno1.nota3);
printf ("Ingrese la cuarta nota del alumno:\n");
scanf ("%f", &alumno1.nota4);
promedio (alumno1, notas1);
notamaxima (alumno1, notas1);
notaminima (alumno1, notas1);
printf ("El promedio del primer alumno es %f\n", notas1.prom);
printf ("La nota maxima del primer alumno es %f\n", notas1.nmax);
printf ("La nota minima del primer alumno es %f\n", notas1.nmin);
printf ("Ingrese nombre del alumno:\n");
fgets (alumno1.nombre, N, stdin);
printf ("Ingrese apellido del alumno:\n");
fgets (alumno1.apellido, N, stdin);
printf ("Ingrese la primera nota del alumno:\n");
scanf ("%f", &alumno2.nota1);
printf ("Ingrese la segunda nota del alumno:\n");
scanf ("%f", &alumno2.nota2);
printf ("Ingrese la tercera nota del alumno:\n");
scanf ("%f", &alumno2.nota3);
printf ("Ingrese la cuarta nota del alumno:\n");
scanf ("%f", &alumno2.nota4);
promedio (alumno2, notas2);
notamaxima (alumno2, notas2);
notaminima (alumno2, notas2);
printf ("El promedio del segundo alumno es %f\n", notas2.prom);
printf ("La nota maxima del segundo alumno es %f\n", notas2.nmax);
printf ("La nota minima del segundo alumno es %f\n", notas2.nmin);
printf ("Ingrese nombre del alumno:\n");
fgets (alumno1.nombre, N, stdin);
printf ("Ingrese apellido del alumno:\n");
fgets (alumno1.apellido, N, stdin);
printf ("Ingrese la primera nota del alumno:\n");
scanf ("%f", &alumno3.nota1);
printf ("Ingrese la segunda nota del alumno:\n");
scanf ("%f", &alumno3.nota2);
printf ("Ingrese la tercera nota del alumno:\n");
scanf ("%f", &alumno3.nota3);
printf ("Ingrese la cuarta nota del alumno:\n");
scanf ("%f", &alumno3.nota4);
promedio (alumno3, notas3);
notamaxima (alumno3, notas3);
notaminima (alumno3, notas3);
printf ("El promedio del tercer alumno es %f\n", notas3.prom);
printf ("La nota maxima del tercer alumno es %f\n", notas3.nmax);
printf ("La nota minima del tercer alumno es %f\n", notas3.nmin);
return 0;
}
解决方案
我认为你在这里使用的功能没有做任何改变
float promedio (struct alumno a, struct notas b)
您发送给函数的所有参数都需要是这样的地址类型
void promedio (struct alumno *a, struct notas *b)
.
.
.
promedio (&alumno3, ¬as3);
关于按值调用和按引用调用的问题
另一个问题是你总是在每个函数中返回 0
为什么不使用 'void' 或者返回计算结果,并且结果必须被参数接受
float notamaxima (struct alumno a, struct notas b)
{
if ((a.nota1>a.nota2) && (a.nota1>a.nota3) && (a.nota4>a.nota4))
{
return a.nota1;
}...
}
b.nmax = notamaxima (alumno1, notas1);
你的教授不可能不知道这一点。
对不起我的英语
推荐阅读
- python - 尝试将 R 对象文件加载到 python numpy 数组中时出现内存错误
- c - 使用数组和 strcat 将字符附加到字符串
- javascript - 在提供的 Ext.window.Window 中设置禁止编辑字段
- javascript - 在单选按钮悬停时显示 div
- azure - 在开发测试实验室中从取消配置的 Linux VM 映像创建 VM 时出现 DNS 问题
- powershell - 优化代码以在word文档中搜索多个关键字
- html - 水平下拉菜单未在一行中显示两个单词
- sql - 通过分组和检查非空将多行合并为一行
- html - HTML 和 CSS 弹性盒
- python - 在一个窗口中重复交替显示两个图像