一个计算10个人平均成绩的程序,编译没有错误没有警告,运行就出错,
本帖最后由 xiemulin 于 2015-7-3 20:52 编辑一天了没人帮忙,召唤小甲鱼,自己实在是看不出来哪里有问题0.0
源代码如下,麻烦会的帮我看看,指出错误,编译的时候没有警告和错误,但是运行就显示错误然后强制退出了。
#include<stdio.h>
average(int a,int b);
main()
{
int a,i,n=1; int greads;
for(i=0;i<10;i++)
{
printf("请输入第%n位同学的成绩\n",n);
scanf("%d",&greads);
n++;
}
a=average(greads,n);
//printf("平均成绩为%d",a);
}
average(int a,int b)
{
int i,n=0,v=0;
for(i=0;i<10;i++)
n=a+n;
v=n/b;
printf("%d\n",v);
// return(v);
}
#include<stdio.h>
#define n 10//自己调整输入几个人
int main(int argc,char ** argv)
{
double soc;
double sum = 0;
int i;
for(i=0;i<n;i++)
{
printf("Please Input your socer:");
scanf("%lf",&soc);
sum += soc;
}
printf("你输入的成绩为:\n");
for(i=0;i<n;i++)
{
printf("%-10lf",*(soc+i));
}
printf("\n");
printf("总和为:%lf\n平均值为:%lf\n",sum,sum/n);
return 0;
} 牡丹花下死做鬼 发表于 2015-7-3 10:47
并不是要你写一个程序出来,是想要人帮忙看看问题出在哪里 xiemulin 发表于 2015-7-3 12:18
并不是要你写一个程序出来,是想要人帮忙看看问题出在哪里
表示真心不想改 要改很多地方
所以还是自己写一个算了 牡丹花下死做鬼 发表于 2015-7-3 12:38
表示真心不想改 要改很多地方
所以还是自己写一个算了
真有那么难么 xiemulin 发表于 2015-7-3 20:53
真有那么难么
你错的地方真心不少诶~
各种错误 1.printf("请输入第%n位同学的成绩\n",n);%n 改为%d
2.scanf("%d",&greads);改为 scanf("%d",&greads);
3.a=average(greads,n);把 n 改为 n-1
4.n=a+n; 改为 n += a
5.建议把平均数设为 double 型 本帖最后由 ryxcaixia 于 2015-7-3 21:41 编辑
#include<stdio.h>
int average(int a,int b);
void main()
{
int a,i,n=1; int greads;
for(i=0;i<10;i++)
{
printf("请输入第%d位同学的成绩\n",n); // 这里是最关键的, %n是啥占位符? 应该是%d
scanf("%d", &greads);
n++;
}
a=average(greads,n);
//printf("平均成绩为%d",a);
}
int average(int a,int b)
{
int i,n=0,v=0;
for(i=0;i<10;i++)
n = a + n // 马丹 这里的a后面的就是显示不出来
v=--n/b;
printf("%d\n",v);
return v;
} ryxcaixia 发表于 2015-7-3 21:38
#include
int average(int a,int b);
void main()
谢谢啦{:1_1:} 哥斯拉不说话 发表于 2015-7-3 21:37
1.printf("请输入第%n位同学的成绩\n",n);%n 改为%d
2.scanf("%d",&greads);改为 scanf("%d",&g ...
谢谢啦:big #include<stdio.h>
int average(int a,int b);
int main()
{
int i,n=1; int greads;
double a = 0;
for(i=0;i<10;i++)
{
printf("请输入第%d位同学的成绩\n",n);
scanf("%d",&greads);
n++;
}
a=average(greads,n-1);
printf("平均成绩为%lf\n",a);
return 0;
}
int average(int a,int b)
{
int i,n=0;
double v=0;
for(i=0;i<10;i++)
n=a+n;
v=n/b;
printf("lf\n",v);
return(v);
} 哥斯拉不说话 发表于 2015-7-3 21:37
1.printf("请输入第%n位同学的成绩\n",n);%n 改为%d
2.scanf("%d",&greads);改为 scanf("%d",&g ...
这楼正解,都是些小问题可以优化下,函数参数一般就是数组计算的话就用数组名和数组个数2个参数,
int average(int a,int b);改成double average(int a[],int b);
//好像你的函数是有返回值的,在average(int a[],int b);函数前面加double,这个不加有的编译器会警告假设默认返回值int 型,
没用的,编译器不认识它的你写了也白写还不规范,用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 ;
int i ; // int a,i,n=1; int greads; 这里有2个变量a和n可以不用
for(i=0;i<10;i++)
{
printf("请输入第%d位同学的成绩\n",i+1); //printf("请输入第%n位同学的成绩\n",n);这里小问题
scanf("%d",&greads);
}
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; // n=a+n; 这里有点小问题
v = n/b;
printf("%lf\n",v);//这句是在函数内就打印出了平均值,不过你好像是要用平均值返回打印的,打印了2次啊?,好像没用
return(v);
}
错的地方太多了。。。慢慢从头开始多练习把 首先 &greads greads 本身就是一个指向第一个元素的指针&greads 指的是该指针的存贮位置
第二 avarage 这个函数调用了不在域作用下的整型 n 你应该将 i 声明为全局变量
第三 avarage 的参数 int a本身就存在问题,传递数组时,就是在传递指针,是不能声明其数组的长度 nin98 发表于 2015-7-6 22:44
首先 &greads greads 本身就是一个指向第一个元素的指针&greads 指的是该指针的存贮位置
第二 avarage ...
感觉第三条这个”不能声明其数组的长度“太绝对,虽然传递的时候确实是传递的地址,但声明了数组长度也没有错啊,个人理解。 哥斯拉不说话 发表于 2015-7-7 13:17
感觉第三条这个”不能声明其数组的长度“太绝对,虽然传递的时候确实是传递的地址,但声明了数组长度也没 ...
不好意思是我说的太绝对了
这是c+里面说的,如果传递的数组用【】包含了长度,函数内修改数组的长度将造成不可预知的错误 nin98 发表于 2015-7-7 18:18
不好意思是我说的太绝对了
这是c+里面说的,如果传递的数组用【】包含了长度,函数内修改数组的长度将造 ...
原来是这样啊,是我看书太少了{:9_237:}
页:
[1]