関数の問題について

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

関数の問題について

#1

投稿記事 by mika » 18年前

関数の乱数の問題について教えて下さい。
一度できたのですが、関数が正しくないとのことで返却されてしましました。
どうかお願い致します。

【問題】
乱数を使って1桁の掛け算の問題を出し、答えを入力させ、正解が得られるまで同じ問題を出し続ける
プログラムを作成せよ。
ここでは、入力された答えが正しいか否かを判定する関数を用いること。
関数の仕様は規定しないので、実行例を参照し、各自で適切に作成すること。

※乱数はrand()関数を使用して発生させよ。
※int judge(int a, int b, int c);
という関数を作成し、aとbは乱数で発生させた値、cは入力値とし、
judgeの中で正解か否かを判定し、正解ならば1を不正解ならば0を
返却する、
というようにしてください。
--------------------------------------------------
int judge(int a, int b, int c);
返却値:1:正解
0:不正解
引数 :a:乱数で生成した値1
b:乱数で生成した値2
c:入力された値
処理 :入力された値が引数2と引数2の掛け算結果と
等しいか判定する


【実行例】
7 * 9 = 62 ←7と9は乱数で発生。「7 * 9 = 」までを表示。62を入力
Please retry. ←答えが正しくないので再入力を促す

7 * 9 = 64 ←再び「7 * 9 = 」までを表示。64を入力
Please retry. ←答えが正しくないので再入力を促す

7 * 9 = 63 ←再び「7 * 7 = 」までを表示。63を入力
Right!! ←答えが正しいのでその旨を表示して終了

box

Re:関数の問題について

#2

投稿記事 by box » 18年前

> 一度できたのですが、関数が正しくないとのことで返却されてしましました。

では、そのコードを見せてください。

mika

Re:関数の問題について

#3

投稿記事 by mika » 18年前

>では、そのコードを見せてください。
以下のコードです。

#include <stdio.h>
#include <time.h>

main(){
time_t seed;
int a,b,ans;

time(&seed);
srand(seed);

a=(int)rand()%10;
b=(int)rand()%10;

while(1){
printf("%d * %d = ",a,b);
scanf("%d",&ans);
if(ans==a*b){
printf("Right!!\n");
break;
}else{
printf("Please retry.\n");
}
}
return 0;
}

box

Re:関数の問題について

#4

投稿記事 by box » 18年前

問題文には

>※int judge(int a, int b, int c);
>という関数を作成し、

と書いてあります。
judge関数のコードはないのですか?

mika

Re:関数の問題について

#5

投稿記事 by mika » 18年前

問題文にある「judge関数を使用する・・・」の文章は後から追加されたものです。
なので、使い方が分からなかったのでこのコードにはありません。
すみません、、言葉が足りなくて。

box

Re:関数の問題について

#6

投稿記事 by box » 18年前

>使い方が分からなかった

main関数から他の自作関数を呼び出すコードを書いたことはありますか?
先生に教えてもらったり、教科書に載っていたりしていませんか?

mika

Re:関数の問題について

#7

投稿記事 by mika » 18年前

>main関数から他の自作関数を呼び出すコードを書いたことはありますか?
>先生に教えてもらったり、教科書に載っていたりしていませんか?

今までそういったコードを書いたことはありません。今回が初めてです。
Cは教えてもらったことがありません、独学しています。
参考書はあるのですが、持っている本には呼び出す方法が書いてありませんでした。

box

Re:関数の問題について

#8

投稿記事 by box » 18年前

>参考書はあるのですが

その本に、「関数」についての章はありませんか?

その本に、サンプルコードは載っていますか?載っているとして、
main関数だけでできていますか?

mika

Re:関数の問題について

#9

投稿記事 by mika » 18年前

本にはサンプルはたいしてありません。
載っているのも簡単なもので関数の部分だけです。

でも考えてみてなんとか解決しました。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int judge(int a,int b,int c)
{
if(a*b==c)
{
printf("Right!!\n");
return 1;
}
else
{
printf("Please retry.\n");
return 0;
}
}
int main()
{
int a=0;
int b=0;
int c=0;

srand(time(NULL));
a=rand()%10;
b=rand()%10;

do
{
printf("%d * %d = ",a,b);
scanf("%d",&c);
}while(judge(a,b,c)==0);

return 0;
}

コンパイルして合っていたので、たぶん問題の意図はこういうことだと思うので解決しました。
お騒がせいたしました。ありがとうございます☆

管理人

Re:関数の問題について

#10

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

mikaさん、こんにちは。

お返事が遅くなってしまい、、すみません。

一応、解決されたようですが、関数の使い方はばっちり覚えておいた方がいいです。

もしもまだなんとなくって感じでしたらここより少し上の投稿

「二次方程式の解と一次元配列」のトピにある内容を読んでみてください。

私が後半、関数の使い方を説明しておりますので。

質問者さんの間違いと、それを訂正したプログラムを見比べたり、自分でもプログラムを書いてみたり、関数の使い方を読んでみたりしてみてはいかがでしょうか。

ほかの方への回答を使いまわすようで申し訳ないですがm(_ _)m

閉鎖

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