4つの整数型の引数a, b, c, dを入力とした際、1以上の数を持つのみ引数を選び、その平均をdouble型で計算して戻り値とする関数を定義したい。
C言語プログラムのソースコードを完成させよ。ただし、すべての引数が
0以下の場合は「0」を返すこととする。
これでコンパイルして実行しても、0が出力されてしまいます。
原因を教えていただきたいです。
C
1#include<stdio.h> 2int avr(int a,int b,int c,int d){ 3 scanf("%d %d %d %d",&a,&b,&c,&d); 4 int sum=0,count=0,row[4] = {a,b,c,d}; 5 double mean; 6 for(int i=0;i<4;i++){ 7 if(row[i] >= 1){ 8 sum+=row[i]; 9 count++; 10 } 11 if(count == 0){ 12 return count; 13 }else{ 14 mean = (double)(sum / count); 15 return mean; 16 } 17 } 18} 19 20int main(void){ 21 int x,y,z,w; 22 printf("%.3f",avr(x,y,z,w)); 23 return 0; 24}
0より大きく1未満の引数に対してどう扱うか明記されていません。
「double型で計算して戻り値とする」のに、intが戻り値なのは何故でしょう?
(double)(sum / count);は、(double)sum / count;なのでは?
・・・先の例では“整数除算の結果”をdoubleにしているだけ。
int avr(int a,int b,int c,int d)←引数は何処で設定?
scanf("%d %d %d %d",&a,&b,&c,&d);・・・は、題意とちがう・・・引数a, b, c, dを入力・・・main()でするべき。
if(row[i] >= 1){の終端は?
epistemeさん<“4つの整数型の引数”とあるので「0より大きく1未満の引数」はないかと・・・
> 「0より大きく1未満の引数」
scanf()で、%d で読んでるので 1未満はないかと。... いや、そもそも整数なので、0より大きく、1未満はありません。main()で、x, y, z, w と引数を与えているにも関わらず、関数内で、scanf()してのはなぜ? と色々と疑問は付きませんが。
あー、そかそか
回答3件
あなたの回答
tips
プレビュー