鱼C论坛

 找回密码
 立即注册
查看: 2079|回复: 8

为何结果如此诡异??

[复制链接]
发表于 2014-3-23 16:29:49 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 欣欣celin 于 2014-3-23 20:40 编辑

#include "stdio.h"
double average(double n[10] );  //声明均值计算函数
void main()
{
    int score[10] = {85, 80, 76, 56, 45, 95, 77, 93, 52, 86};
    double avg;
    avg = average( score );  //调用上叙函数

    printf("%d\n", avg);
}
double average(double n[10] )  //定义求均值的函数
{
    int i=0;
    double s, z;    //S代表成绩之和,Z代表均值
    for( ; i<10; i++)
    {
        s += n;        
    }
    z = s / 10;
    return z;
}

以上代码是要计算10科成绩的平均值,但运行结果却是1243068 ,
调试时,发现数组score[10]的数据根本传不进n[10] ,事关S,Z,N[ i ]显示的值一直是一堆负数
为何会出现这种现象??以上代码错了吗??求各路大神指点一二,感激不尽{:7_148:}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-23 16:29:50 | 显示全部楼层
#include "stdio.h"
double average(double n[10] );  //声明均值计算函数
void main()
{
        //1 首先这里要申明为double才可以
    double score[10] = {85, 80, 76, 56, 45, 95, 77, 93, 52, 86};
    double avg;
    avg = average( score );  //调用上叙函数

        //2 然后。因为是double类型。。所以用lf
    printf("%lf\n", avg);
}
double average(double n[10] )  //定义求均值的函数
{
    int i=0;
        //3 要初始化。。不然是随机数
    double s = 0, z;    //S代表成绩之和,Z代表均值
    for( ; i<10; i++)
    {
        s += n[i];        
    }
    z = s / 10;
    return z;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-23 17:03:31 | 显示全部楼层
double average(double n[10] );  
这个函数的参数类型是double [10]
而调用处avg = average( score );     score的类型是int [10]
它们是不同的,所以会发生“无法预知”的后果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-23 17:10:56 | 显示全部楼层

可是,改成这样之后
double score[10] = {85, 80, 76, 56, 45, 95, 77, 93, 52, 86};
运行的结果是1889785610{:7_154:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-23 17:20:37 | 显示全部楼层
#include "stdio.h"
float average(float n[10] );  ///声明均值计算函数
void main()
{


    float score[10] = {85.0, 80.0, 76.0, 56.0, 45.0, 95.0, 77.0, 93.0, 52.0, 86.0};
    float avg = 0.0;
    avg = average( score );  //调用上叙函数

    printf("%f\n", avg);
}
float average(float n[10] )  //定义求均值的函数
{
    int i=0;
    float s = 0.0 , z= 0.0;    //S代表之和 Z代表均值
    for( ; i<10; i++)
    {
        s += n[i];        
    }
    z = s / 10.0;
    return z;
}
//程序我已经改了,你看看,要注意初始化变量,以及变量之间类型的转化,要注意!再交流啊!呵呵!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-23 17:28:15 | 显示全部楼层
额。。。才发现。。比楼上慢一点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-23 17:46:20 | 显示全部楼层


#include "stdio.h"
double average(int n[10] );  //声明均值计算函数
void main()
{
    int score[10] = {85, 80, 76, 56, 45, 95, 77, 93, 52, 86};
    double avg;
    avg = average(score);  //调用上叙函数

    printf("%lf\n", avg);
}
double average(int n[10] )  //定义求均值的函数
{
    int i=0;
    double s=0, z=0;    //S代表成绩之和,Z代表均值
    for( ; i<10; i++)
    {
        s += n[i];        
    }
    z = s / 10;
    return z;
}


函数中有误 s += n[i]; 变量应该赋值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-3-23 20:45:59 | 显示全部楼层
感谢各路大神赐教,{:7_169:}终于搞掂了,运行结果74.5 终于可以收工了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-24 00:31:19 | 显示全部楼层
s没有赋初值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表