教えてください!! 週1回C言語を勉強しはじめて約3ヶ月ですが、ますます難易度が増し、後1週間で締め切りになるにもかかわらず、文系の私はすでに挫折してしまいそうです。そこで質問があります。次の問題はどのようにプログラムを書いたらいいのですか。是非是非、教えて下さい!!! お願いいたします。ちなみに、「Turbo C」を使っているのですが、本を参考にしてもならっていない、switchやcase などがでできて参考にすることがむずかしいのです。是非、頼らせて下さい。

問題1
0より大きn個(最大100個)のデータを入力し、その合計と平均値を計算して出力する。さらに、n個のデータと平均値の差を出力し、平均値に最も近いデータを探す。

(実行結果例)
データを入力(データの終了は、マイナスを入力)

データ(1) : 30↓(← enter)
データ(2) :100↓
データ(3) :45↓
データ(4) :9↓
データ(5) :-1↓

4個のデータの合計= 184.0000
平均値= 46
データ(1)と平均値の差= 16.0000
データ(2)と平均値の差= 54.0000
データ(3)と平均値の差= 1.0000
データ(4)と平均値の差= 37.0000

平均値と最も近いデータ= データ(3): 45.0000

以下:貰ったヒント
スタート―データ入力(関数1)―合計の計算(関数2)―データ選出(関数3) おわり
indate関数1sum関数2      Prdate関数3
引数void     データの数戻り値、データの数
戻り値データの数合計の結果データの位置

Float x[100]

このQ&Aに関連する最新のQ&A

A 回答 (4件)

自信は全くないです。

「Trubo C」じゃないけど、「C++」で作ったプログラムを参考して見てください。締め切りがあるということは課題みたいなので全部は答えないときます。間違っているかもしれませんし。

#include <stdio.h>
#include <math.h>
void main(void)
{
int a,b,c,d,i,j,sum,mean,min;
float x[100];
a=1;
d=sum=0;min=9999;

//たぶんここで「indate関数」をつかうだと思います。
printf("input date?");
scanf("%f",&x[a]);
while(x[a] > 0)
{
a=a+1;
printf("\n input date?");
scanf("%f",&x[a]);
}
//ここまでの間に

//たぶんここで「sum関数」を使うだと思います。
for (i=1;i<a;i++)
{
合計の計算をしてください。sum=????
}
//ここまでの間に

printf("4個のデータの合計 = %d\n",sum);
//ここで平均を求めてください。合計を入力数で割る。(mean=????/????)
printf("平均値 = %d\n",mean);
for (j=1;j<a;j++)
{
b=x[j] - mean;
printf("データ( %d )と平均値の差=%d\n",j,fabs(c));
if(ここでの条件文は考えてください。最小値ということは            for文の中で最も小さな値です。)
}
d=j;
min=x[d];
}
}

printf("平均値と最も近いデータ( %d )=%f",d,x[d]);

}


このプログラムで私が持っている。Visual C++ 6.0でxampleさんが言っている実行結果通りに出ます。私のような一般人が作ったプログラムなので参考にもならないかもしれませんね。それも「Turbo C」でなく、「C++」ですし。他に誰かが回答していているかもしれませんが、いちおう書いておきました。
    • good
    • 0
この回答へのお礼

他の質問にも答えてくださりありがとうございます。自分なりにやってみているもののなかなかうまくいかず
参考にさせてもらっています。難しいですが楽しいですし、最後まで完成させたいと思います。まあ
締め切りに間に合うかどうかは別にして。とにかくがんばります。

お礼日時:2001/01/23 18:38

ちゃちゃです。



別に間違いではありませんが、
d=sum=0;はあまりお薦めできません。
また、min=9999;と決め打ちするのも
やめたほうがよいです。

while(x[a] > 0)
だと、100個以上入力できちゃいますよ。

課題の提出締め切り後でもよければ
模範解答をお教えしますが、、、(笑)
    • good
    • 0
この回答へのお礼

いつも考えてくださり嬉しいです。毎日参考図書で授業中です。ただこのままいくと28(日)までには間に合わないと思います(授業は土曜の10時30分です)。
こんなこと断言したくないですが。締め切り後に回答のヒントでもお願いします。何とかやり遂げたいですね。

お礼日時:2001/01/24 16:12

課題ということは、授業としてC言語を受けている以上


文系でも理系でも関係ありません。

最低でも「こういう問題があって、自分でこのようにやってみたのですが結果が合わないのです」程度の努力を見せて下さい。

質問の文章だけではわからないまま、締め切りが近づいて焦っています。としかわからないです。

参考までに、過去に似たような質問を以下にあげておきますね。
それでは頑張って下さい。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=26358
    • good
    • 0
この回答へのお礼

地道にゆっくりながら作成しています。すんなりと作れるようにトレーニング
するのみですね。今は面白さより難しさのほうが多く感じますが、難題なプログラミングを仕上げてみたい!!と思っています。

お礼日時:2001/01/24 15:33

学校の課題とのことなので、答えをお教えすることはあえて避けます。


まず、基本から。
・C言語は大文字小文字を区別します。
Float x[100]ではなくfloat x[100]が正解です。

以下はヒントです。
・数字の入力にはscanfという関数を使用します。
・合計の計算にはforという命令を使って、繰り返します。
・平均値との差はfabsという関数を使う。
・結果の表示にはprintfという関数を使う。

これらを参考に参考書をもう一度読みなおしては如何でしょうか?
    • good
    • 0
この回答へのお礼

Floatは書き間違えました、、、スミマセン。ただいま参考図書と勉強中です。
1つずつ、頑張っていきます!うまく実行できたときは難しくとも楽しいので
早く高度なプログラミングに進めるようにしたいです。

お礼日時:2001/01/24 15:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q「3枚平均」とか「平均枚数」とかを英語にすると?

表題について、お伺いします。

この表現を見かけないので、
論文添削する人に質問したら、以下のように
お答えいただきました。

「3枚平均画像」 = 3-picture averaging image
(つまり、pictureが枚で、imageが画像)

「平均枚数」   = averaging number

というふうに論文で使っております。

なお、当方は画像処理を専門としているので、
画像云々については良いのですが、
「平均する」とか「何個を平均した数」とか
そういった英語の表現には全く疎いものでして・・。

学術的な回答ではなく、英語として
どんな表現があるか、おしえてください。
日常的な会話でも結構です。

Aベストアンサー

(1) たぶん the average image of 3-picture はまずいと思います. 3-picture とくるとそのあとに何か続きそうな感じがする (つまり形容詞的に解釈される) ので, 使うなら #2 にあるように 3-picture average image とした方がよいでしょう.

「英語の専門の方」を知っているわけではないですが, (2) はちょっと危険な気がします. あらかじめ言っておけばいいだけではありますが.

Q【C言語について】 10個の値をキーボード入力で与え、予め決めておいたxの値との差を求めるプログラム

【C言語について】
10個の値をキーボード入力で与え、予め決めておいたxの値との差を求めるプログラムを考えています。

差が最小のものを全て出力したいのですが、上手くできません。
教えて欲しいです。

説明が分かりづらくてすみません。

Aベストアンサー

何が上手くできないの?
C言語のソースすべてかけないの?
そんな分けないよね
書けているところまで書いて

どう上手くいかないのか
何が分からないのか
それぐらい書いてください

Q他の教科は平均以下なのに英語だけ90点以上とってる人がたまにいますがあれはなぜなのでしょうか?

他の教科は平均以下なのに英語だけ90点以上とってる人がたまにいますがあれはなぜなのでしょうか?

Aベストアンサー

英語が得意である。英語の試験の山が当たった。英語の平均点が98点であった。偶然。不正行為を行った。
などが考えられます。

QC言語 入力した数値の平均値の近似値(関数を利用)

double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素の平均を値として返す関数

double average(double a[], int n)

および、double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素のなかで、それら n 要素の平均値と最も近い値を返す関数

double closest_to_average(double a[], int n)

を作成して、main関数で、平均値と最も近い値を出力しろ
という問題をやってみたのですが、私のプログラムでは実行して、数値を入力した後強制終了されてしまいます。

どこが間違えているのか教えていただけないでしょうか?
以下が私の作ったプログラムです。

----------------------------------------------------------------------

#include <stdio.h>

double average(double a[], int n)
{
int i;
double sum,avg;
sum=0;
for(i=0;i<n;i=i+1){
sum=sum+a[i];
}
avg=sum/n;
return(avg);
}

double closest_to_average(double a[], int n)
{
int i;
double avg,num1,num2,ans;
avg=average(a,n);
num1=avg-a[0];
if(num1<0){
num1=num1*(-1);
}
for(i=1;i<n;i=i+1){
num2=avg-a[i];
if(num2<0){
num2=num2*(-1);
}
if(num1>num2){
num1=num2;
ans=a[i];
}
}

return(ans);
}

int main (void)
{
int i,n;
double a[100];
double ans;
scanf("%d",&n);
for(i=0;i<n;i=i+1){
scanf("%d",a[i]);
}
ans=closest_to_average(a,n);
printf("%f",ans);
return(0);
}
----------------------------------------------------------------------

ちなみに「3 3.0 5.0 11.0」と入力すれば「5.000」となるはずです。

よろしくお願いします。

double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素の平均を値として返す関数

double average(double a[], int n)

および、double型の配列 a[] と、要素数 n を受け取り、 a の最初の n 要素のなかで、それら n 要素の平均値と最も近い値を返す関数

double closest_to_average(double a[], int n)

を作成して、main関数で、平均値と最も近い値を出力しろ
という問題をやってみたのですが、私のプログラムでは実行して、数値を入力した後強制終了されてしまいます。

どこが間違えているのか教え...続きを読む

Aベストアンサー

前回の質問
http://oshiete.goo.ne.jp/qa/7925962.html
で、c[i]に入力する部分は
for(i=0;i<n;i=i+1)
{
scanf("%lf",&c[i]);
sum=sum+c[i];
}
こうなっていました。

sum=sum+c[i]は、今回は別の関数へ移ったので不要になります。
取り込む変数も c[]からa[]になりました。

それを考えて、今回のプログラムでの入力部分
for(i=0;i<n;i=i+1){
scanf("%d",a[i]);
}
と比較すると、違いがあるのがわかります。


どんなコンパイラを使っているか、わかりませんが
コンパイラによっては、警告表示を高レベルに設定することで、今回のような不具合に「警告」を出すことができます
# 例えば、 gcc なら -Wall オプションを付ける
# Visual Studioなら、「警告レベル」を高いものにする

警告はエラーでは無いので、コンパイル自体は成功します。
実行に影響の無い警告もあります。それは無視してもいいでしょう。
ただ、多くの場合は、実際の動作の不具合に繋るものが多いです。

警告を出すようにして、警告の内容をよく確認した上で、無視する、または、正しく修正する、というのは、勉強の役に立つと思います。

前回の質問
http://oshiete.goo.ne.jp/qa/7925962.html
で、c[i]に入力する部分は
for(i=0;i<n;i=i+1)
{
scanf("%lf",&c[i]);
sum=sum+c[i];
}
こうなっていました。

sum=sum+c[i]は、今回は別の関数へ移ったので不要になります。
取り込む変数も c[]からa[]になりました。

それを考えて、今回のプログラムでの入力部分
for(i=0;i<n;i=i+1){
scanf("%d",a[i]);
}
と比較すると、違いがあるのがわかります。


どんなコンパイラを使っているか、わかりませんが
コンパイラによっては、警告表示を高レベルに設定す...続きを読む

Q【英語】平均値のMODはモッドではなくモードって言うんですか?!

【英語】平均値のMODはモッドではなくモードって言うんですか?!

Aベストアンサー

いくつか誤解がありそうです。

ます、統計における平均値は、AVERAGE です。
おそらく仰っている、「MOD」は、MODE の誤りで、さらにこれは、平均値
ではなく、「最頻値」のことです。
それなら、モードです。

また、「MOD」ということですと、プログラミング等の際に使われる、
「割り算の余り」を指します。
エクセルの関数でも、MOD関数と言うのがあります。
MOD(5,2) ならば、「5を2で割った余り」を意味しますから、MOD(5,2)=1 となります。
これなら、モッドでしょうが、本来は、Moduloの略のようです。

Q配列 平均値と分散値

#include <stdio.h>

void mean_vari(int *s, int n, double *mean, double *variance);

int main(void)
{
int i, n;
int a[]={34, 54, 21, 80, 60, 90, 15, 24, 100};
double heikin, bunsan;

mean_vari(&i,n,&heikin,&bunsan);

printf("平均=%f 分散=%f\n",heikin,bunsan);

return (0);
}

/* 合計を求める関数 */
void mean_vari(int *s, int n, double *mean, double *variance)
{
int i;
int sum=0;/* 合計の初期化 */
double sum2=0;

for (i = 0; i < n; i++)
sum += s[i];
????=sum/(double)????;

for (i = 0; i < n; i++){
sum2 +=????;
}
????=????;
}

平均値と分散値を求めたいのですが、????の部分になりをいれていいかわかりません。 教えてください。

#include <stdio.h>

void mean_vari(int *s, int n, double *mean, double *variance);

int main(void)
{
int i, n;
int a[]={34, 54, 21, 80, 60, 90, 15, 24, 100};
double heikin, bunsan;

mean_vari(&i,n,&heikin,&bunsan);

printf("平均=%f 分散=%f\n",heikin,bunsan);

return (0);
}

/* 合計を求める関数 */
void mean_vari(int *s, int n, double *mean, double *variance)
{
int i;
int sum=0;/* 合計の初期化 */
double sum2=0;

for (i = 0; i < n; i++)
sum += s[...続きを読む

Aベストアンサー

void mean_vari(int *s, int n, double *mean, double *variance)
{
int i;
int sum=0; /* 合計の初期化 */
double sum2=0;

for (i = 0; i < n; i++)
sum += s[i];
*mean=sum/(double)n;

for (i = 0; i < n; i++){
sum2 +=s[i]-*mean;
}
*variance=sum2;
}

とできませんんか?

Q「平均15.6週目に」の英語表記

英語で、「平均15.6週目に」と表記するとき、
at 15.6th week on averageという表現は可能でしょうか?
それとももっと他に適切な表現があるでしょうか?
よろしくお願いいたします。

Aベストアンサー

たとえば「平均15.6週目にxxxxが起こる」という文章を作るとすると、

On average, xxxx happens every 15.6th week.(番号の後にthがあり、weekの後にsがない)
On average, xxxx happens every 15.6 weeks.(番号の後にthがなく、weekの後にsがある)

となります。

いずれも「on average」は文章の最後に使用することが可能です。

なお、on average と on the averageの違いは:
on average: 平均で
on the average:平均的に言うと

という感じでしょうかねぇ。

私の英語はイギリス英語ですが、on the averageのみで使用するのはあまり見たことがありませんね。

Qc言語 配列の値の平均値(小数点以下含む)を計算し表示するプログラム

タイトルのプログラミングの課題を出されたのですがうまく組めません教えてください

Aベストアンサー

全く、これっぽっちも…判らない?

適性ないか授業受けるのが無駄かも知れませんので、考え直した方がいいと思われます。

Q英語の平均評定が3.8以上ってどれくらいの成績をとればいいのですか? またその計算のやり方を教えてく

英語の平均評定が3.8以上ってどれくらいの成績をとればいいのですか?
またその計算のやり方を教えてください。

Aベストアンサー

どのくらいの点数をとればよいかは、テスト次第なので、なんとも言えないですね。
計算の仕方ですが、進学、就職などの評定平均値は、一年の一学期から三年の一学期までで計算します。
「評定平均値」とは、
高1~高3の1学期までの五段階評定をすべてたして、7(高校一年で三回、2年で三回、三年で一回)で割った数です。小数点第2位を四捨五入してください。

Qファイルからデータを読み込み平均値を求めるプログラムについて

ファイルからデータを読み込み平均値を求めるプログラムについて

はじめまして、最近C言語を学習し始めたものです。

ファイルからのデータ読み込みについての質問です。
たとえば、テキストファイルとして以下のような名前とスコアが示してあるファイルがあります。
*************************
佐藤 0.8
伊藤 0.9
西村 0
酒井 -2.5
佐藤 -0.1
・・・  ・・・
・・・  ・・・
西村 0.3
*************************
(名前の繰り返しもあるファイルです)

このようなファイルから読み込みを行って、
左の氏名ごとにスコアの平均値を求めるプログラムを作成したいと考えております。

実行例として「西村」の場合0と0.3の平均値である0.15を求めて表示させたいです。


・プログラムの流れとして
       
テキストファイルを読み込む
    ↓
(テキストファイルの最後になるまで、各文字列(氏名)ごとのスコアの平均値を求める)

◇文字列(氏名)=初めて出た文字列   ←(条件分岐)
yes→文字列の出た回数=文字列の出た回数+1
    文字列.スコア=スコア

no→文字列の出た回数=文字列の出た回数+1
   文字列.スコア=(文字列.スコア+スコア)/文字列の出た回数

終了すると結果をファイルに書き込む

このような流れでプログラムを作りたいと考えているのですが、
特に条件分岐のところをどのようにプログラムで表現したらでしょうか?

回答よろしくお願いします。

ファイルからデータを読み込み平均値を求めるプログラムについて

はじめまして、最近C言語を学習し始めたものです。

ファイルからのデータ読み込みについての質問です。
たとえば、テキストファイルとして以下のような名前とスコアが示してあるファイルがあります。
*************************
佐藤 0.8
伊藤 0.9
西村 0
酒井 -2.5
佐藤 -0.1
・・・  ・・・
・・・  ・・・
西村 0.3
*************************
(名前の繰り返しもあるファイルです)

このようなファイルから読み込みを行って、
左...続きを読む

Aベストアンサー

あなたのおっしゃる条件分岐の部分を1行で書くことは難しいです。
1行で書くことが難しい処理がでてきたら関数化を考えるとよいと思います。
つまり、既に読み込んだ文字列データ群(配列)と今読み込んだ文字列データを引数として渡すと、初めての文字列のときはtrueを既に読み込んだことがある文字列のときはfalseを返す関数を作るのです。
この関数の作り方がわからないときは「探索アルゴリズム」ぐぐってみてください。ヒントが見つかるはずです。探索アルゴリズムにはいろいろありますが、一番単純な線形探索から実装してみることをお勧めします。慣れてきたらハッシュなども考えてみてください。
探索アルゴリズムは整数値を探索するサンプルが最初に出てくると思いますが、今回は文字列比較なので
strcmpを調べてみてください。

追記
あなたのアルゴリズムで
no→文字列の出た回数=文字列の出た回数+1
   文字列.スコア=(文字列.スコア+スコア)/文字列の出た回数

の部分は間違っているように思われます。
例えば
西村 10
西村 10
西村 10
と言うデータの場合、このやり方では、
最初の西村を読み込んだとき、
点数は10となり、
2回目の西村を読み込んだとき、
文字列の出た回数が2回となるので
(10+10)/2
で平均点10となります。ここまではよいのですが、
3回目の西村を読み込んだとき、
文字列の出た回数が3回となり、
(10+10)/3
で答えがおかしくなります。

ファイルを読み込みながら、点数を加えるとともに、出現回数をカウントUPし、
平均の計算は最後に1回計算すればよいのではないでしょうか

あなたのおっしゃる条件分岐の部分を1行で書くことは難しいです。
1行で書くことが難しい処理がでてきたら関数化を考えるとよいと思います。
つまり、既に読み込んだ文字列データ群(配列)と今読み込んだ文字列データを引数として渡すと、初めての文字列のときはtrueを既に読み込んだことがある文字列のときはfalseを返す関数を作るのです。
この関数の作り方がわからないときは「探索アルゴリズム」ぐぐってみてください。ヒントが見つかるはずです。探索アルゴリズムにはいろいろありますが、一番単純な線形探...続きを読む


人気Q&Aランキング

おすすめ情報