やりたいこと
20枚のカードから7枚を無作為に選んで結果を表示
その後その七枚の中に 熟慮,熟慮1,熟慮2が含まれていた場合にその3枚をたして確率を求め表示といったようなものを作りたいです。作ろうと思ったきっかけとかはおいといてください。
計算式などを書いたのですが表示されなくて困っております。どなたか途中まででいいので書いてくださると助かります。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i,j;
int 瞬唱の魔道士 = 0,瞬唱の魔道士1 = 0,瞬唱の魔道士2 = 0, ボーラスの占い師 = 0,
ボーラスの占い師1 = 0,ボーラスの占い師2 = 0,修復の天使 = 0,修復の天使1 = 0,
修復の天使2 = 0, 霊異種 = 0, 中略 = 0, 中略1 = 0,灼熱の槍 = 0,灼熱の槍1 = 0,
熟慮 =0,熟慮1 =0,熟慮2 =0,アゾリウスの魔除け= 0,アゾリウスの魔除け1= 0,
アゾリウスの魔除け2= 0;
srand((unsigned int)time(NULL));
for(j = 0; j <= 6; j++){
i = rand() % 20+1;//
//分布を知るためにカウントしていく
if(i == 1)
瞬唱の魔道士++;
if(i == 2)
瞬唱の魔道士1++;
if(i == 3)
瞬唱の魔道士2++;
if(i == 4)
ボーラスの占い師++;
if(i == 5)
ボーラスの占い師1++;
if(i == 6)
ボーラスの占い師2++;
if(i == 7)
修復の天使 ++;
if(i == 8)
修復の天使1 ++;
if(i == 9)
修復の天使2 ++;
if(i == 10)
霊異種 ++;
if(i == 11)
中略 ++;
if(i == 12)
中略1 ++;
if(i == 13)
灼熱の槍 ++;
if(i == 14)
灼熱の槍1 ++;
if(i == 15)
熟慮 ++;
if(i == 16)
熟慮1 ++;
if(i == 17)
熟慮2 ++;
if(i == 18)
アゾリウスの魔除け ++;
if(i == 19)
アゾリウスの魔除け1 ++;
if(i == 20)
アゾリウスの魔除け2 ++;
}
printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士);
printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士1);
printf("瞬唱の魔道士:%d\n", 瞬唱の魔道士2);
printf("ボーラスの占い師:%d\n", ボーラスの占い師);
printf("ボーラスの占い師:%d\n", ボーラスの占い師1);
printf("ボーラスの占い師:%d\n", ボーラスの占い師2);
printf("修復の天使:%d\n", 修復の天使);
printf("修復の天使:%d\n", 修復の天使1);
printf("修復の天使:%d\n", 修復の天使2);
printf("霊異種:%d\n", 霊異種);
printf("中略:%d\n", 中略);
printf("中略:%d\n", 中略1);
printf("灼熱の槍:%d\n", 灼熱の槍);
printf("灼熱の槍:%d\n", 灼熱の槍1);
printf("熟慮:%d\n", 熟慮);
printf("熟慮:%d\n", 熟慮1);
printf("熟慮:%d\n", 熟慮2);
printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け);
printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け1);
printf("アゾリウスの魔除け:%d\n", アゾリウスの魔除け2);
return 0;
}
No.3ベストアンサー
- 回答日時:
#1の補足を見て。
どうやら、日本語を変数に使えるコンパイラだと理解しました。
> - ほかのなにか? 確率の部分が表示されなくて困ってます。
この「表示されない」とは、文字通りの「表示されない」なのでしょうか?
だとしたら、添付されたプログラムに、確率計算している部分も、それを表示している部分もありません。「表示されない」のが正しい動作です。
確率を計算して、それを出力するように、プログラムに追加してください。
もし、計算部分、表示部分が作ってあって、その結果と、予想してる結果とが違うのなら、プログラムに間違いがあります。
どのように計算をやって、どんな結果が出ているのでしょうか?
予想として
(熟慮 + 熟慮1 + 熟慮2) / 7
など と計算していて、「結果がいつも0になる」のではないでしょうか?
あるいは
printf("確率 %f\n", (熟慮 + 熟慮1 + 熟慮2) / 7 ) ;
等とやって、「値が変」なのではないでしょうか?
Cの演算の原則として「整数型+整数型=整数型」「整数型 / 整数型 = 整数型(小数点以下切り捨て)」となります。
・ (熟慮 + 熟慮1 + 熟慮2) は int + int + intなので、intとなります。
・単に「7」と書いた場合、これは int 型の7 になります。
全体でint / int なので、答えは int になります。
確率の性質を考えれば、ほとんどの場合で 0 になります。100%のときだけ 1 です。
小数点以下の値を扱うには、浮動小数点型(double,float)を使用します。
intをこれらの型に変換するには、型変換(キャスト)を用います。
今回の場合、合計は整数のままで問題ないので、割り算をdoubleで行うように
(double)(熟慮 + 熟慮1 + 熟慮2) / 7
とします。 double / int は、自動でdouble / double として計算されます。
printf("確率 %f\n", (熟慮 + 熟慮1 + 熟慮2) / 7 ) ;
こちらの場合、計算結果がintなのは同じですが、別の問題があります。
printfに指定する引数は、 %の書式と一致させる必要があります。しかし、一致していない場合でも、コンパイルエラーにはなりません。(警告が出る場合はありますが、エラーにはなりません)
C言語の仕様の問題で、printfでは、引数の型を判断することができないのです。そのため、%の書式から、その指定した型だと断定して値を取り出そうとします。
%fはdouble型を要求します。それに対して、引数はintです。
このとき、int→doubleの変換は行われません。
intの数値のメモリ上での表現を、そのままdoubleのメモリ上の表現だと解釈してしまいます。
また、一般に、doubleはintよりもサイズが大きいです。intで足りない部分は、メモリの後の領域(そこに、何があるかはわかりません)まで勝手に使ってしまいます。
このため、引数で指定した値とはまったく違う値が出力されることがあります。
確率計算そのものについては、「何に対する何の確率」なのかが不明なので、例示できません。
この回答への補足
double ave( double 熟慮, double 熟慮1, double 熟慮2);
double ave(double 熟慮 ,double 熟慮1, double 熟慮2)
{
double wk;
wk=(熟慮+熟慮1+熟慮2)/60;
return wk;
}
書いてみたり
printf("計算:%d%f\n",(熟慮+熟慮1+熟慮2)/60);
してました
納得のいく回答を書いていらしていたのでベストアンサーにしておきます
No.2
- 回答日時:
一般的なCコンパイラでは、変数名に日本語は使えません。
表示されないどころか、コンパイルもできません。
日本語が使える特殊なコンパイラだとすると、問題無さそうに見えるので、「実行できたけど、その結果を確認できない」ということが考えられます
例: Visual Studioで実行すると。一瞬DOS窓が開いて結果が出力されるが、実行終了と同時にDOS窓が閉じるので、内容を確認できない
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
strcmp
-
printf で二進表示を行いたい。
-
改行について 1行に何個かづ...
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
C言語プログラミング
-
CTRL+Dでループを抜けるには
-
二つの整数値の大小比較
-
%P と %X の違い
-
scanfに文字が入力されたときに...
-
コマンドプロンプトがすぐ消える
-
C言語で、 printf()とwhile文を...
-
C言語
-
BMI値から体型を判定するプログ...
-
分数を表示するプログラム(長...
-
C言語で入力した変数の値から三...
-
ガウスの消去法、後退代入について
-
4の倍数を論理演算で表す。。
-
C言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報