关于指位器的问题!

Home Home
引用 | 编辑 karen7710
2007-06-15 17:15
楼主
推文 x0
题目:
计算学生三科成绩的总和与平均,
(1)学生三科的成绩在main()中输入 (2)学生总和与平均在同一个函式
(3)在main()输出结果

而以下是我打的程式,不知道哪里出问题了,麻烦大大指导我,谢谢^^

#includ ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 GNUGCC
2007-06-15 21:37
1楼
  
int grade(int a,int b,int c);
{
int sum,avg;
sum=a+b+c;
avg=sum/3;
return grade(sum,avg);
}  

grade() 函式的参数可能要增加 2 个为参考值的变数并且只能回传一种变数如果可以的话就不回传值...
可能的情况是改成这样...

void grade(int a, int b, int c, int &sum,int &avg)
{
sum=a+b+c;
avg=sum/3;
}

在主程式先呼叫 grade() 函式之后再拿 sum 和 avg 做输出就可以看到结果了...^^

献花 x0
引用 | 编辑 karen7710
2007-06-16 06:24
2楼
  
因为题目要求要传回值印出来~
所以就不能用void~

献花 x0
引用 | 编辑 GNUGCC
2007-06-16 07:10
3楼
  
可能的做法是回传成绩总和然后增加一个参考值储存平均值...
int grade(int a,int b,int c, int &avg)
{
int j = a + b + c;
avg = j / 3;
return j;
}

目前想到的是只有这样,因为题目要求总和和平均在同一个函式而且必竟函式只能回传一种变数...
不知道其他大大有没有更好的方法...

献花 x0
引用 | 编辑 kevinliao
2007-06-16 12:32
4楼
  
不然用贱招...

复制程式
int grade(int a,int b,int c, bool sum)
{
return (sum ? (a + b + c) : ((a + b + c) /3));
}

然后分别呼叫 grade(a, b, c, true) & grade(a, b, c, false) 各一次...

献花 x0
引用 | 编辑 karen7710
2007-06-16 17:15
5楼
  
依照GNUGCC大大的方式打,为什么无法正确的跑~
复制程式
#include <stdoi.h>
#include <stdlib.h>
void grade(int,int,int);

int main(void)
{
    int a,b,c;
    printf("请输入三科成绩:\n");
    scanf("%d %d %d",&a,&b,&c);
    printf("sum=%d avg=%d\n",grade(j),grade(avg));
    system("pause");
    return 0;
    }
void grade(int a,int b,int c,int &avg));
{
    int j = a + b + c;
   avg = j / 3;
return j;
    
    }


献花 x0
引用 | 编辑 a86980
2007-06-16 17:59
6楼
  
void grade(int a,int b,int c,int &avg));

void 改成 int

至于回传值部份

就多一次呼叫吧

献花 x0
引用 | 编辑 karen7710
2007-06-16 18:47
7楼
  
多呼叫一 次? 表情

献花 x0
引用 | 编辑 a86980
2007-06-16 21:16
8楼
  
下面是引用karen7710于2007-06-16 18:47发表的 :
多呼叫一 次? 表情
就是grate()多使用一次
一次是sum
一次是avg

献花 x0
引用 | 编辑 GNUGCC
2007-06-17 02:41
9楼
  
先呼叫一次 grade() 函式之后把回传的值做总和再把参考值的变数做输出平均...

grade(a, b, c, avg);

回传总和之后再输出 avg, 函式只需呼叫一次...
不知道为什么总觉得这个方法很烂...^^

献花 x0
引用 | 编辑 karen7710
2007-06-17 13:32
10楼
  
以下的程式还是有出现错误~请问要怎么更改呢?
复制程式
#include <stdio.h>
#include <stdlib.h>
int grade1(int,int,int,int);
int grade2(int,int,int,int);

int main(void)
{
    int a,b,c;
    printf("请输入三科成绩:\n");
    scanf("%d %d %d",&a,&b,&c);
    printf("sum=%d avg=%d\n",grade1(j),grade2(avg));
    system("pause");
    return 0;
    }
int grade1(int a,int b,int c,int &j)
{
    int j = a + b + c;
return j;
    } 
int grade2(int a,int b,int c,int &avg)
{
    int avg=j/3;
    return avg;
}  


献花 x0
引用 | 编辑 GNUGCC
2007-06-17 14:01
11楼
  
函式 grade() 要改成这样...

int grade(int a, int b, int c, int *avg)
{
  int sum = a + b + c;
  *avg = sum / 3;

  return sum;
}

在呼叫时回传值为总和,如果要输出平均的话不用再呼叫一次,只要拿在呼叫 grade() 的时候传入 avg 所指向的变数做输出即可, 例如 :

int vge; // 先宣告一个变数储存平均值

// 假设 3 个成绩在 80, 90, 100
cout << "成续总和为 : " << grade(80, 90, 100, &vge) << ", 平均 : " << vge;

献花 x0
引用 | 编辑 karen7710
2007-06-17 21:13
12楼
  
你的意思是改成这样吗?可是还是有出现错误~
复制程式
#include <stdio.h>
#include <stdlib.h>
int grade(int,int,int,int);


int main(void)
{
    int a,b,c;
    printf("请输入三科成绩:\n");
    scanf("%d %d %d",&a,&b,&c);
    printf("sum=%d avg=%d\n",grade(sum),grade(avg));
    system("pause");
    return 0;
    }

int grade(int a,int b,int c,int *avg)
{
    int sum=a+b+c;
    *avg = sum / 3;
    return sum;
}


献花 x0
引用 | 编辑 GNUGCC
2007-06-18 00:45
13楼
  
可能要改这样...

int main(void)
{
int a,b,c, avg;
printf("请输入三科成绩:\n");
scanf("%d %d %d",&a,&b,&c);
printf("sum=%d avg=%d\n",grade(a, b, c, &avg), avg);
system("pause");
return 0;
}

献花 x1
引用 | 编辑 karen7710
2007-06-18 08:35
14楼
  
更改过后还是有错误= ="
复制程式
#include <stdio.h>
#include <stdlib.h>
int grade(int,int,int,int);


int main(void)
{
int a,b,c, avg;
printf("请输入三科成绩:\n");
scanf("%d %d %d",&a,&b,&c);
printf("sum=%d avg=%d\n",grade(a,b,c,&avg),avg);
system("pause");
return 0;
} 
int grade(int a,int b,int c,int *avg)
{
    int sum=a+b+c;
    *avg = sum / 3;
    return sum;
}


献花 x0
引用 | 编辑 gamewalk
2007-06-18 09:02
15楼
  
你 int grade(int,int,int,int) 原型宣告似乎有错 就是第三行那边....最后一个参数应该是 int *

献花 x1
引用 | 编辑 karen7710
2007-06-18 10:28
16楼
  
嗯嗯,原来如此,可以正常执行了^^ 表情

献花 x0