鱼C论坛

 找回密码
 立即注册
查看: 2131|回复: 16

一个计算10个人平均成绩的程序,编译没有错误没有警告,运行就出错,

[复制链接]
发表于 2015-7-3 10:00:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 xiemulin 于 2015-7-3 20:52 编辑

一天了没人帮忙,召唤小甲鱼,自己实在是看不出来哪里有问题0.0
源代码如下,麻烦会的帮我看看,指出错误,编译的时候没有警告和错误,但是运行就显示错误然后强制退出了。
#include<stdio.h>
average(int a[10],int b);
main()
{
        int a,i,n=1; int greads[10];
        for(i=0;i<10;i++)
        {
               
                printf("请输入第%n位同学的成绩\n",n);
                scanf("%d",&greads[i]);
                n++;

        }
a=average(greads,n);
//printf("平均成绩为%d",a);

}
average(int a[10],int b)
{
        int i,n=0,v=0;
        for(i=0;i<10;i++)
                n=a[i]+n;
        v=n/b;
        printf("%d\n",v);
//        return(v);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-3 10:47:32 | 显示全部楼层
#include<stdio.h>

#define n 10//自己调整输入几个人

int main(int argc,char ** argv)
{
        double soc[n];
        double sum = 0;
        int i;
        for(i=0;i<n;i++)
        {
                printf("Please Input your socer:");
                scanf("%lf",&soc[i]);
                sum += soc[i];
        }
        printf("你输入的成绩为:\n");

        for(i=0;i<n;i++)
        {
                printf("%-10lf",*(soc+i));
        }
        printf("\n");

        printf("总和为:%lf\n平均值为:%lf\n",sum,sum/n);


        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-3 12:18:52 | 显示全部楼层

并不是要你写一个程序出来,是想要人帮忙看看问题出在哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-3 12:38:03 | 显示全部楼层
xiemulin 发表于 2015-7-3 12:18
并不是要你写一个程序出来,是想要人帮忙看看问题出在哪里

表示真心不想改 要改很多地方
所以还是自己写一个算了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-3 20:53:02 | 显示全部楼层
牡丹花下死做鬼 发表于 2015-7-3 12:38
表示真心不想改 要改很多地方
所以还是自己写一个算了

真有那么难么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-3 21:30:32 | 显示全部楼层

你错的地方真心不少诶~
各种错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-3 21:37:56 | 显示全部楼层
1.  printf("请输入第%n位同学的成绩\n",n);  %n 改为%d
2.  scanf("%d",&greads);  改为 scanf("%d",&greads[i]);
3.  a=average(greads,n);  把 n 改为 n-1
4.  n=a+n; 改为 n += a[i]
5.  建议把平均数设为 double 型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-3 21:38:29 | 显示全部楼层
本帖最后由 ryxcaixia 于 2015-7-3 21:41 编辑

#include<stdio.h>
int average(int a[10],int b);
void main()
{
        int a,i,n=1; int greads[10];
        for(i=0;i<10;i++)
        {

                printf("请输入第%d位同学的成绩\n",n); // 这里是最关键的, %n是啥占位符? 应该是%d
                scanf("%d", &greads[i]);
                n++;

        }
        a=average(greads,n);
        //printf("平均成绩为%d",a);

}
int average(int a[10],int b)
{
        int i,n=0,v=0;
        for(i=0;i<10;i++)
                n = a[i] + n // 马丹 这里的a[i]后面的就是显示不出来
        v=--n/b;
        printf("%d\n",v);
   
        return v;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-4 08:44:45 | 显示全部楼层
ryxcaixia 发表于 2015-7-3 21:38
#include
int average(int a[10],int b);
void main()

谢谢啦{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-4 08:45:23 | 显示全部楼层
哥斯拉不说话 发表于 2015-7-3 21:37
1.  printf("请输入第%n位同学的成绩\n",n);  %n 改为%d
2.  scanf("%d",&greads);  改为 scanf("%d",&g ...

谢谢啦:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-4 09:26:57 | 显示全部楼层
#include<stdio.h>
int average(int a[10],int b);
int main()
{
        int i,n=1; int greads[10];
                double a = 0;
        for(i=0;i<10;i++)
        {
               
                printf("请输入第%d位同学的成绩\n",n);
                scanf("%d",&greads[i]);
                n++;

        }
        a=average(greads,n-1);
       printf("平均成绩为%lf\n",a);
       return 0;

}
int average(int a[10],int b)
{
        int i,n=0;
                double v=0;
        for(i=0;i<10;i++)
                n=a[i]+n;
        v=n/b;
        printf("lf\n",v);
        return(v);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-4 17:39:16 | 显示全部楼层
哥斯拉不说话 发表于 2015-7-3 21:37
1.  printf("请输入第%n位同学的成绩\n",n);  %n 改为%d
2.  scanf("%d",&greads);  改为 scanf("%d",&g ...

这楼正解,都是些小问题可以优化下,函数参数一般就是数组计算的话就用数组名和数组个数2个参数,
int average(int a[10],int b);  改成double average(int a[],int b);
//好像你的函数是有返回值的,在average(int a[],int b);函数前面加double,这个不加有的编译器会警告假设默认返回值int 型,
[10]没用的,编译器不认识它的你写了也白写还不规范,用b来表示数组成员个数
#include<stdio.h>
const int SIZE=10 ; //define SIZE 10 也行,数组成员用这个的话以后想改起来方便点
double average(int a[],int b);   //average(int a[],int b) 省略10 加上double 明了些

int main()
{
        int greads[SIZE] ;
        int i ;                    // int a,i,n=1; int greads[10]; 这里有2个变量a和n可以不用
        for(i=0;i<10;i++)
        {

                printf("请输入第%d位同学的成绩\n",i+1); //printf("请输入第%n位同学的成绩\n",n);这里小问题
                scanf("%d",&greads[i]);
                

        }
        
        printf("平均成绩为:%lf",average(greads,SIZE));//可以子界用函数的返回值打印,少用个变量
        return 0 ; 
}
double average(int a[],int b)   //这里加个double,平均值应该是浮点数嘛,用double合适些
{
        int i  ;      //int i,n=0,v=0;  这里把总和设为double型好些,以防两个int用地板除(/)被截断丢失精度
        double v ,n = 0.0  ;
        for(i=0;i<b;i++)
                n += a[i];   //   n=a+n; 这里有点小问题
        v = n/b;
        printf("%lf\n",v);  //这句是在函数内就打印出了平均值,不过你好像是要用平均值返回打印的,打印了2次啊?,好像没用
        return(v);
}



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

使用道具 举报

发表于 2015-7-6 16:03:00 | 显示全部楼层
错的地方太多了。。。慢慢从头开始多练习把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-6 22:44:06 | 显示全部楼层
首先 &greads   greads 本身就是一个指向第一个元素的指针  &greads 指的是该指针的存贮位置
第二 avarage 这个函数调用了不在域作用下的整型 n 你应该将 i 声明为全局变量
第三 avarage 的参数 int a[10]本身就存在问题,传递数组时,就是在传递指针,是不能声明其数组的长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-7 13:17:14 | 显示全部楼层
nin98 发表于 2015-7-6 22:44
首先 &greads   greads 本身就是一个指向第一个元素的指针  &greads 指的是该指针的存贮位置
第二 avarage ...

感觉第三条这个”不能声明其数组的长度“太绝对,虽然传递的时候确实是传递的地址,但声明了数组长度也没有错啊,个人理解。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-7 18:18:54 | 显示全部楼层
哥斯拉不说话 发表于 2015-7-7 13:17
感觉第三条这个”不能声明其数组的长度“太绝对,虽然传递的时候确实是传递的地址,但声明了数组长度也没 ...

不好意思是我说的太绝对了
这是c+里面说的,如果传递的数组用【】包含了长度,函数内修改数组的长度将造成不可预知的错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-7-7 19:45:51 | 显示全部楼层
nin98 发表于 2015-7-7 18:18
不好意思是我说的太绝对了
这是c+里面说的,如果传递的数组用【】包含了长度,函数内修改数组的长度将造 ...

原来是这样啊,是我看书太少了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 04:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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