關於指位器的問題!

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