ページ 11

宿題なのですが

Posted: 2007年1月25日(木) 01:51
by 女郎花
試験の成績0~100点の範囲の整数を読み込む関数inputDataを作り、平均点を書き出すプログラムを作りなさい。入力の終端では関数 inputDataは-1を戻すことにします。

入力部分を関数に分ける目的は関数が戻す値を終了時の-1と正常な点数0~100に制限し、main関数側では平均値計算に専念できる様にすることです。


#include<stdio.h>
 
/*
inputData関数の仕様
戻り値:
 1)0~100の数値が入力されたらその値を戻す
 2)入力が数値に変換できない場合は-1を戻し、入力の終端を知らせる
例外:
 範囲外の数値が入力されたら警告をだし再度入力を繰り返す。
(上記1,2の何れかが成立するまで関数にとどまり処理を繰り返す)
*/
int inputData(void)
{
・・・・
}
 
int main(void)
{
  double total;
  int count,point;
  while(1){
     point=inputData();
     if(point==-1)break;
     total=total+point;
     count++;
  }
  if(count==0)printf("データが無いので平均点は計算できません");
  else printf("平均点=%3.1f\n",total/count);
  return 0;
  }



上記のプログラムの・・・・のとこを考えなければならないのですが自分は下記のように
考えたのですが上手くいきません。どうかご教授願えないでしょうか


int i,n;
while(1){
   printf("データを入力してください");
   i=scanf("%d",&n);
   if(i==1&&0<=n&&n<=100)
{
   return n;
   break;
}
else if(scanf("%d",&n)!=1)
{
  return -1;
  break;
}
  else
{
     printf("もう一度入力してください");
}

Re:宿題なのですが

Posted: 2007年1月25日(木) 03:38
by 管理人
今から見ますので少々お待ち下さい。

Re:宿題なのですが

Posted: 2007年1月25日(木) 03:52
by 管理人
おぉ、かなり正解ですよ。

めちゃくちゃおしいです。

おかきになったelse ifでくるっています。

ちょっと確かめてみてはいかがでしょう?

Re:宿題なのですが

Posted: 2007年1月25日(木) 03:57
by 管理人
もしどうしてもわからなければ以下をご覧下さい。

ちなみにreturnは行うとその時点で関数を抜け、main関数に処理が戻りますからbreak以下はおこなわれません。
ですからreturnの後に何かかいてもしかたないので、消しましょう。

#include<stdio.h> 
 /* 
inputData関数の仕様 
戻り値: 
	1)0~100の数値が入力されたらその値を戻す 
	2)入力が数値に変換できない場合は-1を戻し、入力の終端を知らせる 
例外: 
	範囲外の数値が入力されたら警告をだし再度入力を繰り返す。 
(上記1,2の何れかが成立するまで関数にとどまり処理を繰り返す) 
*/ 
int inputData(void){
	int i,n;
	while(1){ 
		printf("データを入力してください\n"); 
		i=scanf("%d",&n);
		if(i==1&&0<=n&&n<=100)
			return n;
		else if(i!=1) 
			return -1; 
		else
			printf("もう一度入力してください");
	}
}
	 
int main(void) 
{ 
	double total; 
	int count,point; 
	while(1){ 
		point=inputData(); 
		if(point==-1)
			break; 
		total=total+point; 
		count++; 
	} 
	if(count==0)
		printf("データが無いので平均点は計算できません"); 
	else 
		printf("平均点=%3.1f\n",total/count); 
	return 0; 
}

Re:宿題なのですが

Posted: 2007年1月25日(木) 08:22
by 女郎花
管理人さま、どうもありがとうございます。
returnはそういうふうになっていましたか。
夜遅くに申し訳ありませんでした。

Re:宿題なのですが

Posted: 2007年1月25日(木) 10:06
by box
> int count,point;

countはゼロで初期化しておく必要があります。

Re:宿題なのですが

Posted: 2007年1月25日(木) 13:58
by 女郎花
boxさん、ありがとうございます
上手く行きました

Re:宿題なのですが

Posted: 2007年1月25日(木) 15:45
by 管理人
あら、メイン関数の中も問題があったのですね、すみません^^;