0から99までの数値を1万個発生させ0~99の頻度を調べるプログラムを教えてください。
あと、できればそれを10セットデータをとってその平均を求めるプログラムも一緒にお願いします。

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

A 回答 (4件)

まぁ 一応乱数の取得法だけ。



(int)(rand() / 32768.0 * MAX);

MAXに乱数上限を設定します(但しゼロを基底とする)
100にすれば戻り値0~99でいけるでしょう。
あくまでC言語と仮定しての方法ですが(^^;

あとはどの数値が出たかを
カウントすれば答えになるでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございました。参考になりました。
またいつか、よろしくお願いします。

お礼日時:2001/01/29 17:46

学校の課題だったら自分でやりましょうね。


もしそうでないなら、そう補足してください。

プログラマで飯食ってる人なら、この程度は(表現悪いですが)屁以下でしょう。
    • good
    • 0

OSは?


コンパイルは?

 なにかの課題の様にも見えますが...。サンプルが欲しいだけなのでしょうか?
 ヒントが欲しいのなら、いくらでも出しますが、答えはご自分で解決されるのが良いでしょう。

 んでぇヒント
 1万回のループを作成して、
  その中で乱数を発生させる。
  その後、乱数を表示する。
  この時に、乱数を合計にたしておいて、乱数1セット発生毎に平均を求める関数を呼出し、平均を求める
   平均を求めていたら、平均を表示する。
   平均を表示したら、合計用の変数をクリアする。

以上かなぁ
 乱数は、rand()関数あたりを調べれば出来ると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。どうにかできました。
また、よろしくお願いします。

お礼日時:2001/01/29 17:57

どういう環境(OS)でどんな言語を使ってやりたいとかを


書いていただかなければお答えできません。

この回答への補足

遅くなってすいません。
WindowsでC言語を使ってやりたいです。お願いします。

補足日時:2001/01/29 10:44
    • good
    • 0

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

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

Q入力した数値を0~3乗するプログラム (C言語)

この前学校の授業でやり方がわからなかったことがあるので質問させていただきます。

scanfを使って入力した整数を0~3乗したものを出力するプログラムをかけ

ちなみに7を入力すれば、
7^0=1,7^1=7,7^2=49,7^343
と出力されるようにしなさい

という問題が出ました。

これは掛け算を使って作るのでしょうか?

このプログラムの作り方と解答例をご教授願います。

Aベストアンサー

以下のようにしてください。
--------------------------------------------
#include <stdio.h>
int main(void)
{
int result = 1;
int x;
int i;
printf("x=");
scanf("%d",&x);
printf("x=%d\n",x);
for(i = 0; i < 4;i++) {
printf("%d^%d=%d\n",x,i,result);
result = result * x;
}
return (0);
}
-----------------------------------------
7を入力したときの実行結果
x=7
x=7
7^0=1
7^1=7
7^2=49
7^3=343
--------------------------------------
CentOS release 5.6 (Final)
gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-50)
で動作確認済みです。

以下のようにしてください。
--------------------------------------------
#include <stdio.h>
int main(void)
{
int result = 1;
int x;
int i;
printf("x=");
scanf("%d",&x);
printf("x=%d\n",x);
for(i = 0; i < 4;i++) {
printf("%d^%d=%d\n",x,i,result);
result = result * x;
}
return (0);
}
-----------------------------------------
7を入力したときの実行結果
x=7
x=7
7^0=1
7^1=7
7^2=49
7^3=343
--------------------------------------
CentOS release 5.6 (Final)...続きを読む

Qc言語のプログラムで平均点に一番近い点数表示するには関数を使わないプログラムでは表示できますか?

c言語のプログラムで平均点に一番近い点数表示するには関数を使わないプログラムでは表示できますか?

Aベストアンサー

関数を使わないと何もできない.

Q0除算して、落ちるプログラムと落ちないプログラム

コンパイラ : cc
環境 : Linux

0除算して、落ちるプログラムと落ちないプログラムが
あるのですが、何が違いを生んでいるのでしょうか?

Aベストアンサー

>0除算して、落ちるプログラムと落ちないプログラムが
>あるのですが、何が違いを生んでいるのでしょうか?

「いつ演算しているか?」と「どうやって演算しているか?」により、複雑に違いを生みます。

・いつ演算しているか?
「定数同士の演算式」は、コンパイラの最適化によって「計算済みの定数」に置き換わる場合があります。

そしてそれは「処理系依存」なので「それをするコンパイラもあれば、それをしないコンパイラもある」のです。

で、最適化時に「0除算」と判った時に、どういうコードに最適化されるかも「処理系依存」です。

コンパイラによって「0/0」を「除数が何かチェックせず、0は何で割っても0になるから、0/?はすべて0」に最適化してしまう手抜きなコンパイラもあれば「実行時に0除算を行わせ、0で割ったとの実行時例外を、あえて出すようにしている」と言うコンパイラもあります。

つまり「コンパイラによって、コンパイル時に0にされてしまう場合」と「コンパイル時には計算されず、実行時に計算される場合」があるのです。

そしてそれらは「コンパイルオプション」によって変更出来るので、同じプラットフォーム、同じコンパイル環境でも、指定したオプションやデフォルトオプションが何になっているかで、差が出ます。

・どうやって演算しているか?
int同士の割り算、float同士の割り算、double同士の割り算は、すべて「計算の方法」が異なります。

int同士の割り算は、通常、CPUの「除算命令」で実行します。

前述の最適化による「単なる0にする」と言うのが行われていなければ、例外が発生するでしょう。

そして、デフォルトの例外処理ルーチンを書き変えていないなら、ライブラリのデフォルトの例外処理ルーチンが「Floating point exception」などの表示を行ってプログラムを終了します。

float同士の割り算、double同士の割り算は、通常、浮動小数点演算ライブラリが呼ばれます。

ライブラリでは「浮動小数点演算コプロセッサがあるなら、コプロセッサで計算させ、コプロセッサがないならソフトウェアで演算する」と言う処理をします。

コプロセッサに計算させるCPU命令を実行した場合、0除算の演算結果は「0以外/0は無限大(inf)」になり「0/0は非数(nan)」になります。例外は発生しません。

コプロセッサがなく、ソフトウェアで演算した場合も、0除算の演算結果はコプロセッサがある時と同じです(ソフトウェアで「エミュレート」しているのだから、同じにならなくては困る)

>・intの場合、分子の値によっても落ちるかどうかが変わる。

数学的には「非0÷0=符号付の無限大」「0÷0=未定義(非数、数ではない)」です。

つまり、被除数(分子)が「非0」か「0」かで、結果が変わります。

そして、C言語の仕様では「intでの0除算の結果は、処理系に依存する」事になっています。つまり「何が起こるか判らない」のです。

しかし、floatやdoubleは「無限大」や「非数」をサポートしているので、例外は発生したりしません。

ちゃんと、数学の通りに「非0÷0=符号付の無限大」「0÷0=非数」と言う計算結果になります。

>floatやdoubleはどうやってこの情報(inf, nan)を持っているのかが次の疑問になりました(- -;

IEEE754(IEEE二進化浮動小数点数演算標準)の仕様に従った、浮動小数点の数値は「正負の符号」「指数部」「仮数部」の3つで出来ています。

そして、それぞれ3つの部分の値がどうなっているかで、以下のようになっています。

・符号が0、指数部が0、仮数部が0=正の0
・符号が1、指数部が0、仮数部が0=負の0
・符号が0、指数部が0、仮数部が非0=正の非正規化数
・符号が1、指数部が0、仮数部が非0=負の非正規化数
・符号が0、指数部が0以外かつ最大値以外、仮数部が任意=正の正規化数
・符号が1、指数部が0以外かつ最大値以外、仮数部が任意=負の正規化数
・符号が0、指数部が最大値、仮数部が0=正の無限大(inf)
・符号が1、指数部が最大値、仮数部が0=負の無限大(inf)
・符号が0、指数部が最大値、仮数部が非0=非数(nan)
・符号が1、指数部が最大値、仮数部が非0=非数(nan)

このように「指数部と仮数部の値」によって「無限大」「非数」を表現しています。

>0除算して、落ちるプログラムと落ちないプログラムが
>あるのですが、何が違いを生んでいるのでしょうか?

「いつ演算しているか?」と「どうやって演算しているか?」により、複雑に違いを生みます。

・いつ演算しているか?
「定数同士の演算式」は、コンパイラの最適化によって「計算済みの定数」に置き換わる場合があります。

そしてそれは「処理系依存」なので「それをするコンパイラもあれば、それをしないコンパイラもある」のです。

で、最適化時に「0除算」と判った時に、どういうコー...続きを読む

Qc言語のこのプログラムなんですが平均点に一番近い学生、のとこがどうプログラムすればいいのか分からない

c言語のこのプログラムなんですが平均点に一番近い学生、のとこがどうプログラムすればいいのか分からないのですがfor文ですか?
どういう風なプログラムになりますか?

Aベストアンサー

forを使うのは当然ですね。
まあ、データ列がどういう状況になってるか知らないですが方針は基本的に次の通り。

1. forを回して得点の平均点を得る。
2. もう一丁forを回して(得点-平均点)の絶対値が一番小さいヤツをピックアップする。

forを回すか回さないか以前に、

「アナタが実際にそれを手作業で行う時どうするのか」

と言うのがそのまま答えになります。

Q0x8, スペース, 0x8をプログラムで組むと

『scanfを使わずに_getch()でキーボードからファイル名を入力していき、入力した文字をprintfで表示する流れについて質問です。
表示された文字をバックスペースで消していっても打ち込んだ文字は消えないですよね?
間違ったファイル名を入力してしまった際に文字が残っているので、正しく入力し直しても間違ったファイル名となってします。
一度打った文字を消す方法はありますでしょうか?


以前このような質問をさせていただき、_getch()で得た文字のキーボード上での削除の仕方は分かりました。
今度はそのやり方をプログラムで作るとしたら、どう組んでいけば良いのか教えて頂けないでしょうか。
できればそのプログラムを教えて頂けたら嬉しいです。

今現在書いてるプログラムのgetchを使っている部分です。
ファイルがオープンできたら別の処理に移行しますが、その関数は長くなるので省略しています。

#include <stdio.h>
#include <conio.h>

int main() {

int key;
int i;
char file_name[256] = { 0 };
FILE *fp;
errno_t e;

while(1)
{
i = 0;
// エンタキーが押されるまで入力を続ける
do
{
printf("%c", key);
file_name[i] = key;
key = _getch();
i++;
} while(key != 0x0d);

printf("\n");

if(e = fopen_s(&fp, file_name, "rb") != 0) {
printf("ファイルが存在しません\n");
return 0;
}
else {
// 成功したらプログラムの処理をする関数に移行
return 1;
}
}
}

『scanfを使わずに_getch()でキーボードからファイル名を入力していき、入力した文字をprintfで表示する流れについて質問です。
表示された文字をバックスペースで消していっても打ち込んだ文字は消えないですよね?
間違ったファイル名を入力してしまった際に文字が残っているので、正しく入力し直しても間違ったファイル名となってします。
一度打った文字を消す方法はありますでしょうか?


以前このような質問をさせていただき、_getch()で得た文字のキーボード上での削除の仕方は分かりました。
今度はそ...続きを読む

Aベストアンサー

#include <stdio.h>
#include <conio.h>

int main() {

int key;
int i;
char file_name[256] = { 0 };
FILE *fp;
errno_t e;

while(1)
{
i = 0;
// エンタキーが押されるまで入力を続ける
do
{
key = _getch();
if (key == '\b') { //このif文と次の行のif文を1行にまとめて
if (i) { //if ((key == '\b') && (i)) {にするとバグるので注意
printf("\b \b");
i--;
}
} else if (key != '\r') {
printf("%c", key);
file_name[i] = key;
i++;
}
file_name[i] = '\0';
} while(key != '\r');

printf("\n");

if(e = fopen_s(&fp, file_name, "rb") != 0) {
printf("ファイルが存在しません\n");
return 0;
}
else {
// 成功したらプログラムの処理をする関数に移行
return 1;
}
}
}

#include <stdio.h>
#include <conio.h>

int main() {

int key;
int i;
char file_name[256] = { 0 };
FILE *fp;
errno_t e;

while(1)
{
i = 0;
// エンタキーが押されるまで入力を続ける
do
{
key = _getch();
if (key == '\b') { //このif文と次の行のif文を1行にまとめて
if (i) { //if ((key == '\b') && (i)) {にするとバグるので注意
printf("\b \b");
i--;
}
} else if (key != '\r') {
printf("%c", key);
file_name[i] = key;
i++;
}
file_name[i] = '\0';
} while(key != '\r');

printf("\n");

if...続きを読む


人気Q&Aランキング

おすすめ情報