c - 为什么我的结果输出是0.0000?

标签 c

大家好,这是我在此页面上的第一个问题。我在大学学习 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, &notas3);

关于按值调用和按引用调用的问题

另一个问题是你在每个函数中总是返回 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);

你的教授不可能不知道这一点。

对不起我的工程师

关于c - 为什么我的结果输出是0.0000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50202364/

相关文章:

使用 getchar() 读取输入时 Ctrl-Z 表现异常

_edata 值可以通过 ELF 头或程序头中的信息推断出来吗?

c - strncpy(d, s, 0) 带过去指针

c - C语言中如何取出字符串中的第一个字符?

c - 使用 sigaction 将信号处理行为重置为默认值

c - 将新行写入文件

c - mac 的 win32 等价物是什么?

C: 如何将字符串存储到 “char *myArray[100]” 数组中?

c - 使用 C 将逗号分隔的文本文件数据扫描到数组中

c - 使用 "Bash on Ubuntu on Windows"编译的 C 脚本是否比在 Windows 中直接编译和运行慢?