質問*-*:下記のswithc文のプログラムについて2つ質問があります。
#include<stdio.h>
main()
{
int x,y; scanf("%d",&x); switch(x) { case(01):case(0111): printf("80%以上\n"); break; default: printf("15%以上\n"); }}
(1)キーボードから「1」を入力した場合と「111」の値を入力した場合の実行結果を比べると、「1」の場合は「80%以上」と表示されるのに、「111」の場合は「15%以上」となってしまいます。なぜなのでしょうか?
(2)case:case:と並べる以外に、caseの項目を増やす方法って、ありますか?
回答:
(1)の理由は、整数を10進数として表現しているのか、8進数で表現しているのかの違いです。テキスト第3章3頁の表3.2-1を参照して下さい。「%d」は、10進数での入力を要求しています。これに対し、case(01)やcase(0111)の値は、先頭に「0」がつくので、8進数となっています。従って、「0111」は、10進数の場合、1*8*8+1*8+1となり、「73」となります。
(2)複数の条件を満たす場合の表現は、上のプログラムのようにcase:case:とならべて下さい。
質問8-1:includeとかmainとかはなぜプログラミングの時に打つのかよく分かりません。
回答:C言語のプログラムには、main関数が必要です。プログラムは、main関数の中に書かれた処理を順次、実行していきます。従って、必ずソースファイルのどこかにmain関数が書かれていなければなりません。また、printf関数等の関数を使用するためには、ヘッダーファイルと呼ばれるprintf関数等の定義を書いたファイルを読み込む必要があります。このための読み込みをincludeで行っています。
質問8-2:問題4の条件演算子の箇所を、if文に書き換えて見たんですけど、失敗でした。下記のプログラムを作ったんですが、実行してみたら、どんな数字を入れても「当たり」と「エッ」が一緒に出てきます。どこが間違えているのでしょうか?
#include<stdio.h>
main()
{
int n,x,y; y=7; n=0; ++n; scanf("%d",&x); if(x=y){ printf("当たり\n"); } if(x>y){ printf("アラ(^_^?\n"); } else{ printf("^。^?)エッ\n"); }}
回答:間違いのヒントを書いておいきます。これを参考に考えてみましょう。
代入演算子(=)と等価演算子(==)の違いを確認しましょう。値が等しいかどうかを判定する際に、よく間違えて代入演算子を使用しています。しかし、プログラムとしては、間違いではないので、コンパイルの際に、エラーメッセージはでません。
質問6-1:問題2のDの答えの意味がわかりませんでした。
回答:変数xは、int型ですが、変数の前に(double)を付けることにより、double型に型を変換できます。従って、(double)x/8.0は、double型とdouble型の計算なので、答えはdouble型となり、0.5となります。このため、0.5==0.0となり、等しくありませんから、偽である場合の8が選ばれ、d=8となり、dに8が代入されることになります。
質問6-2:条件演算子(x?y:z)について、数で扱うときは、いまいちよくわからないです。xが0でなければyとなりそれ以外はz・・・などで、出てくる1と0の扱いが理解できてないのかと思います。
回答:xの場所には、通常、関係演算子や等価演算子を用いた真偽の判定処理が入ります。例えば、3<5 というような判定処理です。この処理の結果は、1、あるいは、0となり、1が真を、0が偽を意味します。
従って、条件演算子(?:)の説明では、1と0の数値を用いて、説明しました。正確には、xの場所に、0以外の数値を書くことができます。0以外の数値は、真と判定され、yの処理を実行します。試しに負の数を入れてみて下さい。
質問6-3:テレビの早期復旧お願いします。席からホワイトボードまで距離があって見えるけど見づらいのでお願いします。
回答:情報処理センターに再度、修理をお願いいたしました。もう少しお待ち下さい。
質問5-1:質問ですが、11月1日にやった第3章の内容で、ブランクやタブや改行が読み込まれないのはなぜかをもう一度説明して欲しいです。例えば、例3・2−1と例3・2−2の内容がまだ理解できていません。
回答:複数個のデータを入力する際、各データの区切りを何で表すか決めておく必要があります。C言語では、このデータの区切りを標準で表すものとして、スペース、タブ、改行があります。
質問5-2:あと授業で少し気になるとこがあります。私は席が後ろのほうなのですが、背の高い院生の方が通路にたってて板書が見えないときがあるので少し困ってます。
回答:私が説明するときは、通路に立たないように連絡しました。授業中なかなか発言しにくいかもしれませんが、何か問題あれば、教えて下さい。
質問5-3:今回の課題はヒントを見てもすごく難しかったです。数学とは違った考え方をしなければいけないところがまたやり難いです。さらに答えがわかってからも、なかなかコンパイルできませんでした。しかし、コンパイルされるように試行錯誤している間に変数の型や演算子の意味がだんだんわかるようになりました。
コンパイルして正しく実行できたときは感動しました。
回答:テキストや参考書を見ながら課題をできるようになれば、ある程度の実力がついたといえます。将来的に情報処理の国家試験を受けようと思っている人は、別ですが、テキストを見れば課題を解くことができるように、努力を続けて下さい。
復習が大事です。
質問5-4:今回の課題は難しかったので先生の回答を見てそれを参考に作りましたこれからどんどん難しくなっていくと思うとちょっと不安ですが、がんばりたいと思います。
回答:だんだんと授業の内容が難しくなり、不安であるという感想を書いている人が何人かいました。分からないことを次回までに解決するように復習を続けていれば大丈夫です。
それでも分からないところがあれば、遠慮せず、質問に来て下さい。
質問4-1:はじめてプログラムの勉強をするので不安であったという意見が多数ありました。
・プログラミングの知識がまったくない状態で授業を受け始めたので、最初はまったくわからず、ついて行けないかと思ったけれど、基本操作を覚えたので、前回の授業から先生の説明になんとかついて行けるようになりました。
・以前は、授業について行くのが、大変でした。しかし、、最近は授業の内容を理解できるようになりました。授業の後に、必ず復習をしていくことが、いかに重要かが分かりました。今後も、この調子でがんばっていきたいです。
・プログラミングの理解度ですが、授業で教えてもらうことがほとんど、初めてのことばかりです。最初のときに、補講をして頂いたり、復習したり、また講義のときに院生の方に教えて頂いたおかげで、やっとコンパイルや実行がわかるようになりました。講義もだいぶついていけるようになりました。復習をやってこれからもがんばっていこうと思います。
回答:初回の授業の際にお伝えしましたが、プログラミングに必要な知識を習得するためには、復習が必要不可欠です。そして、分からないことを次の週までに解決しておくことが重要なポイントです。
分からないことがあれば、遠慮せず質問に来て下さい。必要であれば補講を行うことも可能です。
質問4-2:時々授業のスピードがはやすぎてついて行けない時があります。もう少しスピードダウンしていただけるとありがたいです。
回答:できるだけゆっくりと説明するようにしていきたいと思います。もし説明が分からなかったり、早すぎるようであれば、教えて下さい。
最近の傾向として、授業中にこのような発言をすることに抵抗を感じる人がいますが、ビジネスでは内容の確認をするということは、とても重要なことです。
質問4-3:プログラムや設定をやり直すたびにそのアプリケーションを閉じたり開いたりしなければならなかったのが、面倒くさいしややこしいと思いました。ネット用のアプリケーションのように「更新」というボタンがあればいいのに、と思います。
回答:次のように準備して授業を受けると手間が少しは省けると思います。
(1)講義の前に、テキストの印刷、あるいは、PDFファイルのダウンロードをしておく。
(2)講義の開始時に、次のアプリケーションを全部、起動しておく。
・Internet Explorer
・TeraPad
・Tera Term Pro
・Acrobat Reader(テキストを印刷していない場合)
(3)TeraPadで、あらかじめ文字コードを変換したソースファイルを作成しておく。あるいは、既にあるソースファイルを開いておく。
(4)授業中、新しいプログラムを作成するのは、既に開いているソースファイルを修正することとし、修正が終われば上書き保存する。TeraPadは、閉じない。なお、文字コードの変換はあらかじめ終わっているので、上書き保存で問題ない。
(5)Tera Term Proによるコンパイルでは、2回目以降に「!f」を使用する。これは、Tera Term Proを起動してから使用したコマンドで、「f」からはじまるコマンドを実行してくれる。簡略なコマンド入力の方法です。ソースファイルの名前を変更しなければ、一度、「fcc」のコマンドを入力させすれば、あとは、「!f」のコマンドで、コンパイルできます。
質問4-4:後期が終わるころには、家で自分でプログラミングしてHPなどつくってみたいです。
回答:プログラミングを使用するとより高度なホームページを作成することができますが、私が作成している講義のホームページ程度であれば、少し勉強すれば作れるようになります。
大学の計算機環境を使用して、作成したホームページを公開することもできます。興味があれば、ご連絡下さい。簡単なホームページの作成であれば、お教えすることができます。