宿題なのですが

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
女郎花

宿題なのですが

#1

投稿記事 by 女郎花 » 13年前

試験の成績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:宿題なのですが

#2

投稿記事 by 管理人 » 13年前

今から見ますので少々お待ち下さい。

管理人

Re:宿題なのですが

#3

投稿記事 by 管理人 » 13年前

おぉ、かなり正解ですよ。

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

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

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

管理人

Re:宿題なのですが

#4

投稿記事 by 管理人 » 13年前

もしどうしてもわからなければ以下をご覧下さい。

ちなみに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:宿題なのですが

#5

投稿記事 by 女郎花 » 13年前

管理人さま、どうもありがとうございます。
returnはそういうふうになっていましたか。
夜遅くに申し訳ありませんでした。

box

Re:宿題なのですが

#6

投稿記事 by box » 13年前

> int count,point;

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

女郎花

Re:宿題なのですが

#7

投稿記事 by 女郎花 » 13年前

boxさん、ありがとうございます
上手く行きました

管理人

Re:宿題なのですが

#8

投稿記事 by 管理人 » 13年前

あら、メイン関数の中も問題があったのですね、すみません^^;

閉鎖

“C言語何でも質問掲示板” へ戻る