
C言語の勉強中で「ランダムな整数値を作成し、その数値が偶数か奇数かを判定するプログラムをif~else 構文を使って作成」したいのですが下記のプログラムでやってみたのですがまだまだ知識不足で完成しません。知識をお借りできればと思っていますのでどなたか教えてください。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
{
int = i;
i = rand();
srand((unsigned)time(NULL));
printf("%d\n",rand());
}
if(i % 2 == 0)
{
printf("偶数である:\n",i);
}
else
{
printf("奇数である:\n",i);
}
return 0;
}
No.1ベストアンサー
- 回答日時:
とりあえず、コンパイルエラーのメッセージくらいは掲示した方がよいかと思われますが…
>int = i;
こんな書式はないかと。
>i = rand();
>srand((unsigned)time(NULL));
疑似乱数生成した後で、その疑似乱数生成の種を変更したところで影響しません。
コンパイルエラーを修正しても何度実行しても結果はおそらく変わらないでしょう。
>if(i % 2 == 0)
コンパイラ次第…かも知れませんが、変数のスコープ外れています。
この回答への補足
エラー表示を乗せ忘れ、大変失礼しました。
int = i;
をとり、実行したところ
エラーE2451 10:未定義のシンボル i(関数main)
1errorsとでてしまいました。
変数のスコープとは何でしょうか?
忙しい中返答ありがとうございます。
ありがとうございました。
i = rand();
srand((unsigned)time(NULL));
これをいれかえましたらできました。理解度が悪くて不愉快にさせて申しわけありませんでした。
次のステップに向けて頑張りたいとおもいますのでまたアドバイスをいただければ嬉しいです。
No.5
- 回答日時:
あれ?
printf("偶数である:\n",i);
の部分は
printf("偶数である:%d\n",i);
としたかったのかな、と思っていたのですが。
rand、srandに関してはもう回答が出ていますが、rand関数はプログラムが始まった時点では毎回同じパターンのランダム値を返すことに注意ですね。
printf("偶数である:%d\n",i);
とやってみたら、
8200
偶数である:1330
と二種類の数字が出てしまったのでわからなくなってしまったので抜きました。
きっと
srand((unsigned)time(NULL));
i = rand();
のつかいかたが悪かったのかと思います。
いろいろありがとうございました。また質問する場合がありましたら語教授お願いします。
No.4
- 回答日時:
#1さんの回答にも目を向けてください。
srandを呼び出すのは、
randを呼び出す「前」です。
No.3
- 回答日時:
変数のスコープとは宣言した変数の有効範囲のことです。
詳しいことは参考書等に乗っているとは思いますが、上の場合
{
int i; /* 修正しました */
i = rand();
srand((unsigned)time(NULL));
printf("%d\n",rand());
} /* ここで i の有効範囲終わり */
と{}でわざわざ囲っているために、変数iがif(i % 2 == 0)まで生きていないということです。
なので、今回はわざわざ{}で囲む必要はありません。
それと、下の二つのprintfの使い方が間違ってますね。
この回答への補足
LOHAさん返答ありがとうございます。
下記のように{}はずして、printfを直し、Wr5さんに支持してもらって直してみたところ実行はできたのですがランダム整数が偶数しか出てこないのですが奇数ですという答えがでないのですが原因はなんでしょうか?
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int i;
i = rand();
srand((unsigned)time(NULL));
printf("%d\n",rand());
if(i %2 == 0)
{
printf("偶数である:\n");
}
else
{
printf("奇数である:\n");
}
return 0;
}
実行結果
22068
偶数である:
使用しているのはborlandです。
No.2
- 回答日時:
>int = i;
>をとり、実行したところ
というのは
>{
>int = i;
>i = rand();
>srand((unsigned)time(NULL));
を
>{
>i = rand();
>srand((unsigned)time(NULL));
と、改悪したわけでしょうか?
C言語では使用する変数は事前に宣言が必要です。
http://ja.wikipedia.org/wiki/%E5%A4%89%E6%95%B0_ …
「iという変数(と思われるモノ)が未定義だ。」というエラーです。
iがint型なのか、char型なのか、何らかのポインタなのか…コンパイラは解りません。
なお、コンパイラの仕様(準拠している言語仕様)次第で、ブロックの先頭でのみ宣言できるか、使用直前でも宣言可能かは変わります。
>変数のスコープとは何でしょうか?
上に掲示したwikiページに書かれてます。
(消されてしまいましたが)int型変数のiはブロック中で宣言されていますのでブロックの外では使用できません。
wikiページに書かれている「寿命」という点では、今回のコードではおそらくほとんどのコンパイラでmain()を抜けるまで存在しているとは思われますが…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 3 2022/11/09 13:27
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
4の倍数を論理演算で表す。。
-
コマンドラインに出力した文字...
-
入力したお金の金額からお札の...
-
scanfに文字が入力されたときに...
-
unsigned int型について
-
C言語 じゃんけんゲーム 非常...
-
勝率をプログラムに
-
C言語の勉強しています。すみま...
-
C言語のじゃんけんゲームのプロ...
-
printfの出力内の文字をdefine...
-
strcmp
-
標準出力先を変える
-
error C2143: 構文エラー : ';'...
-
2進数の乗算と除算
-
Visual Sutdio 2017 でのC言語...
-
2の累乗を計算するプログラム...
-
C言語について
-
C言語で入力した変数の値から三...
-
cshの文字列操作(0埋め)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
c言語で2000年以降カレンダーを...
-
c言語でAからZまでを表示する...
-
【C】fizzbuzzのトリッキーなコ...
-
strcmp
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
コマンドラインに出力した文字...
-
8人分のテストの点数を入力し、...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
(C言語)めちゃくちゃな値にな...
-
cshの文字列操作(0埋め)
-
テキストカーソル位置の取得
-
コマンドプロンプトがすぐ消える
-
printfの出力内の文字をdefine...
-
scanfに文字が入力されたときに...
-
台形の面積を求めるプログラム
-
改行について 1行に何個かづ...
-
WM_CLOSEで閉じれないウィンド...
おすすめ情報