アプリ版:「スタンプのみでお礼する」機能のリリースについて

大学に入ってからC言語を授業で習い始めました。なので、すごい初歩的なことですが丁寧に教えてくださると嬉しいです。いくつか分からないことがあるので教えてください。
 
1・よくprintf("");なので%dや%fを使いますが、これはint(整数)の時が%dで、double(小数点付)の時に%fを使えばいいのか。
2・mul(呼び出す)、return(戻る)の意味、使い方
3・if(aaaa%4==0){
if(aaaa%100!=0)printf("閏年である。\n");
else{if(aaaa%400==0)printf("閏年である。\n");
else printf("閏年ではない。\n");
の意味は、もしaaaaが4で割り切れ、100で割り切れなかったら閏年で、そうではなく100で割り切れ400で割り切れたら閏年である。という意味でいいのか。
4・andとor,whileの使い方が分からない。
5・授業でやったことなのですが、
# include<studio.h>
 int passWordInput();
main(){
   int a, pw=1234,
a=passWordInput();
if(a==pw)printf("ok\n");
else{a=passWordInput();
if(a==pw)printf("ok\n");
else{a=passWordInput();
if(a==pw)printf("ok\n");
else printf("Byw!!\n");
}
}
}
int passWordInput(){
int wk;
printf("パスワード:");scanf("%d",&wk);
return wk;
}

がよく分かりませんでした。特にwkが出てくるあたりからです。

一応全て自分なりに本とか見てみましたが、あまり理解出来なかったので詳しい回答をしてくださると嬉しいです。よろしくお願いします。

A 回答 (5件)

大学でC言語を勉強しているのでしたら、言語仕様がわかるようなリファレンス本を購入して手元に置くことをお勧めします。


ちなみに、私は
内田智史,他3名共著:「C言語によるプログラミング スーパーリファレンス編」,オーム社, 2000
を手元に置いて参照しています。

> 1・よくprintf("");なので%dや%fを使いますが、これはint(整数)の時が%dで、double(小数点付)の時に%fを使えばいいのか。

%d で intを扱い、%fでdoubleまたはfloatを扱う、というイメージで結構です。もっと丁寧な説明は、ここを参照してください。
http://www9.plala.or.jp/sgwr-t/c/sec05.html

> 2・mul(呼び出す)、return(戻る)の意味、使い方

mul というキーワード(予約語)はありません。何かの勘違いではありませんか?
return は、それを含む関数の実行をそこで終わらせて、制御を呼び出し元に返します。

> 3・if(aaaa%4==0){ (以下略)

さらに、「100で割り切れ、400で割り切れなかったらうるう年ではない。」という意味も含まれています。

> 4・andとor,whileの使い方が分からない。

C言語に and と or というキーワードはありません。論理式で使いたいのであれば、and(論理積) は && 、or(論理和) は || を使います。
while は繰り返し制御を行うときに使います。例えば、

a=0;
while( 3 > a ){
printf("a=%d\n",a);
a++;
}

と書けば、a の値が3より小さい間だけ while の{ } で囲まれた中身が繰り返し実行されます。この例では a++(a=a+1と同じ)が3回繰り返された時点でa=3となるため、3 > a が成り立たなくなり、while のループから抜けます。

> 5・授業でやったことなのですが、

このプログラム全体が何をしようとしているかは、わかりますね?
わからないのは関数の作り方ですか? それとも、scanf ですか?

関数int passWordInput()の中で使用している int wk; の wk は暫定的に値を入れておくだけの変数です。work(作業用変数)という意味で wk という名前になっているだけです。 return が何かは先ほど説明したとおりで、ここではこの関数から抜けるときに、この関数が wk の値を返します。言い換えれば、main関数のなかのa=passWordInput();で、aに先ほどscanfで取り込んだwk の値が入ります。

異常の説明でまだ不明確なところがあれば、また質問してください。

この回答への補足

回答ありがとうございます。やっぱり手元に本があった方がいいですか。今度本屋さんでInterestさんの勧めてくださった本もあわせて見てみます。
5の質問ですが、プログラム全体が何をしようとしているのかは分かります。分からないのは、関数の作り方です。説明不足ですみませんでした。

補足日時:2005/07/15 10:40
    • good
    • 0

printfで使用する%dや%fには、桁数や精度、符号部分の空白を出力するか、など色々あるので、一度きちんと調べることをお奨めします。



ところで、%dや%fはscanfでも同じ意味を持っています。
ですから、関数passWordInputの中の
scanf("%d", &wk);
は、キーボードで入力した数値を変数wkに格納しているのです。
wkの前にある'&'は変数のアドレスを取得するもので、
この辺りはポインタを勉強しないと分からないので、
今は「おまじない」と思ってください。

それで、関数passWordInputは所謂パスワードのような、
"abcde"のような文字列の入力を受け付けるものではありません。
C言語での文字列比較はある関数を使う必要があり、
それによる混乱を避けるために数値を「パスワード」としているのでしょうが、
逆に混乱させているような気がします。
    • good
    • 0
この回答へのお礼

回答してくださりありがとうございます。分かりやすく自分が疑問になっていた部分が解決されました。

お礼日時:2005/07/18 09:28

既に概ね回答が出揃っているようですので、andとorについてだけ解答します。



andやorは<iso646.h>ヘッダで定義されるマクロです。andは&&に、orは||に定義されます。ちなみにビット単位での論理積・論理和は、bitand, bitorというマクロになります。なお、これらのマクロはC++では同じ意味の予約語になっています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。根本的な意味が分かってよかったです。

お礼日時:2005/07/18 09:25

1.その通りです。

%fはdoubleだけではなくfloatのときにも使います。
double型をscanfで読み込むときは%fではなく%lfなので注意してください。

2. mul(呼び出す)というのは、関数の呼び出しのことだと思います。あらかじめ用意されている関数や、自分で作った関数を使用する場合、「関数名(引数)」といった形で書きます。
return(戻る)というのは、戻り値のことだと思います。
これはわかりにくいかもしれませんが、関数を実行した後に、returnで指定された値を、その関数を呼び出した関数に返します。

3. 括弧の対応がわかりません。if文やfor文などを書く時は、開き括弧だけでなく閉じ括弧の方もきちんと書くようにしてください。
括弧の位置や、括弧を書くか書かないかでは全然違う意味になることもあります。
閏年の話のようなので、恐らく
if(aaaa%4==0){
if(aaaa%100!=0) printf("閏年である。\n");
else {
if(aaaa%400==0) printf("閏年である。\n");
else printf("閏年ではない。\n");
}
}
だと思います。以下は↑の表記が正しいとした上での話です。これは、
・aaaaが4で割り切れ、かつ100で割り切れないときに閏年である。
・もしくは、aaaaが4で割り切れ、かつ400で割り切れれば閏年である。
・aaaaが4で割り切れ、かつ上二つ以外の条件では閏年ではない。(つまり100で割り切れ、400で割り切れなかったら閏年ではない)
という意味です。

4. andとorというのは論理演算のことだと思います。
これは、計算結果が1(真)か0(偽)のどちらかしかない計算で、whileやif文等で分岐条件を指定するときに良く使います。
andの場合、(条件式1) && (条件式2) (C言語ではandを&&と表記します)と書くと、条件式1と条件式2が成り立つときに、1(真)となります。
or(C言語では||と表記)の場合は、条件式1か条件式2のどちらかが成り立つ場合、真となります。
論理演算自体の意味がわからないのでしたら、検索エンジンで「論理演算とは」あたりのキーワードで検索すると山ほど見つかると思いますので、そちらを参考にしてください。
while(){}は、()内の条件が成り立つ間、{}の中に書かれている内容を繰り返す文です。

5. このプログラムでは、2で説明した関数呼び出しと戻り値を使用していますね。
a=passWordInput(); で、関数passWordInput()を呼び出しています。
こうすることで、int passWordInput() の{}内に書かれている文を実行します。
passWordInput()では、scanfでパスワードを読み込んでいます(読み込んだ値はwkに入る)
で、return wk;とすることで、passWordinput()がmain()に戻り値(wk)を返します。
この場合、 a=passWordInput(); としているので、aに戻り値(wkの値)が入ります。
その下からのif文では、pwとaが一致しているかどうかを比較しています。
一見ややこしいように見えますが、
・aとpwが一致したらokを出力して終了し、一致しない場合、もう一度 a=passWordInput(); を実行する。
・再度aとpwを比較し、一致したらokを出力して終了する。
・それでも一致しない場合、更にもう一度 a=passWordInput(); を実行し、またまたaとpwを比較し、一致したらokを出力して終了し、そうでない場合はByw!!を出力して終了する。
という意味です。

長くなりましたが参考になれば。
    • good
    • 0
この回答へのお礼

お礼が遅くなりましてすみません。とても分かりやすい回答でした。今まで括弧をフィーリングでつけていたので今度からはちゃんと対応するようにつけていきます。C言語は難しいですが、興味はあるのでこれからも頑張って勉強していきたいです。回答ありがとうございました。

お礼日時:2005/07/18 09:23

1.はそんなかんじ。




2.は関数の基本的なところかな。

Cは関数の集まりでできている。
通常まずmain()が呼び出され、その中で他の関数を必要により呼び出していく。
5.を参考にすれば
int passWordInput(){
int wk;
printf("パスワード:");scanf("%d",&wk);
return wk;
}
の部分が関数の宣言の部分。
でこれをmain()関数のなかで、

a=passWordInput();

などとして呼び出している。

passWordInput()関数の中で

return wk;として戻り値wkを返していいる。

よってa=passWordInput();でその結果がaに代入されている。

あとは#1さん参照^^;;
    • good
    • 0
この回答へのお礼

ありがとうございます。これからテスト期間に入ってC言語のテストが危ないので回答を下さって本当に助かりました。

お礼日時:2005/07/15 10:49

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