質問15-1:次回のテストに向けて、これを勉強すれば大丈夫というようなページをHPに作ってほしい。
回答:社会に出て必要なのは、あふれる情報の中から必要な情報を認識・抽出し、的確に活用できる能力です。
資料の持込を認めていることですし、自分で創意工夫してみて下さい。
テスト問題は、これから作成しますが、レポート課題ができた皆さんであれば、問題なく解けると思います。
質問14-1:プログラミング基礎を学ぶには今の参考書「Cで学ぶプログラミングの基礎」で十分ですか?
回答:指定した参考書の176頁「付録B この本で習わなかったこと」に書かれているように、幾つか学んでいないことがあります。しかし、プログラミングの基本は、この参考書で十分身につきます。
従って、後は必要に応じて、この参考書で学ばなかったことが書かれている解説書を購入するとよいと思います。
なお、講義で使用したテキストは、参考書で書かれていないことも幾つか説明していますので、参考にして下さい。
質問14-2:船の軌跡のプログラムを実行するときに、なぜ a.out としないといけないのかが分りませんでした。
回答:第1章テキスト、6頁の「1.3 コンパイルと実行」に書かれているように、コンパイルする際に、「-o」オプションを付けて、実行ファイル名を指定しなければ、自動的に「a.out」という実行ファイルが作成されます。
従って、「-o」オプションをつけずに、次のようにコマンドを入力したのではないでしょうか?
fcc ファイル名.c -lm
実行ファイル名を指定したい場合は、次のようにコマンドを入力して下さい。
fcc ファイル名.c -o 実行ファイル名 -lm
質問14-3:復習という位置付けの授業を期待していたのに、内容が発展的だったのできつかった。手順を口頭で説明されてもついていけない。
回答:「手順を口頭で」ということから、内容が発展的といっているのは、Excelの操作方法のことだと想像します。授業中、何度か分らない人がいるかお聞きした際、誰もいないように見えたのですが、手を上げているのを見落としたのかもしれません。すみません。
皆さんには抵抗があるかもしれませんが、できるだけ大きく手を上げて、そして、大きな声で知らせて下さい。
日本人の多くの学生にとって他人の前で自分の意志を伝えることは難しいようですが、大切なことですので、よろしくお願いいたします。
質問13-1:Excel(エクセル)の使い方が分りませんでした。
回答:情報リテラシーでExcelについて習ったと思いますが、同様の質問が多数ありました。次回の講義の際に、説明したいと思います。
質問12-1:プログラム例(P例:7.1-2)では、scanf関数の変数の場所に&bではなくbとなってて、コンパイルも無事に通りますが、&は必要ないのでしょうか。
回答:scanf関数は、キーボードから入力された値を指定された変数の値の保存場所に記録します。通常の変数の場合、この保存場所を表すのに変数名の前に&を付ける必要がありました。しかし、第6章5頁の配列変数のところで習ったように、配列変数の先頭の保存場所(アドレス)は、&b[0]、もしくは、bと記述することができます。
従って、今回のプログラム例では、bは配列変数ですので、&は必要ありません。
質問12-2:#include<string.h> というのは何を示しているのですか?
回答:文字数を数えるstrlen関数などの定義は、string.hというヘッダーファイルに記述されています。従って、このファイルを使用するということを#include<string.h>として、プログラムの最初に書いておく必要があります。
質問10-1:じゃんけんゲームのプログラムは1回じゃんけんをするところまではできました。ただ、10回やったり、相手の手をランダムにしたりすることはまだよく理解できていません。
回答:1回じゃんけんをするプログラムまで完成すれば、第5章の目標としては達成できています。次回、12月16日の授業の際、第6章の残りの説明が予定より早く終わり、時間があるようでしたら授業中に補足説明をしたいと思います。
従って、補足できない場合もありますので、この場合は授業時間外に質問に来て下さい。補足説明をしたいと思います。
質問9-1:(P例:5.1-1)をもとに、割り算の関数を作成することができませんでした。例えば、小数点表示をするところができませんでした。5÷2で、2.000000と表示されたり0.000000と表示されたりしてしまいます。
また、割り算のときは、mainのなかは、double A,B,Dなどと、int a,b,cとは別に変数を宣言したほうがいいのですか?
回答:変数の型に注意しましょう。割り算の答えは、少数となりますから正しい答えを得るためには、答えを代入する変数の型をdouble型にする必要があります。
例えば、次のようなプログラムのように表現します。
#include<stdio.h>
double warizan(int,int);
main()
{
int a,b; double d; scanf("%d%d",&a,&b); d = warizan(a,b); printf("%d / %d = %lf\n",a,b,d);}
double z; z = (double)x/(double)y; return(z);}
質問9-2:割り算の関数を作成する際、intをdoubleに、%dを%lfするとできたのですが、2.500000のように0がたくさん出てきてしまいます。2.50と表示するにはどうすればよいでしょうか?
回答:第3章テキストの2頁を参考にして下さい。小数点部の桁数を指定する表示方法が書かれています。例えば、小数第2位(2.50)まで表示する場合は、%.2lfと記述します。
質問9-3:計算機室ですが、暖房がかかりすぎていたのでボヤーとなってしまいました。だから思考力も少し鈍くなりました。なんとかしてほしいです。
回答:授業後では対応が間に合いません。今後は、授業中に教えて下さい。
質問8-1:第4章までの演習の内容について理解の程度を質問しましたが、次のような結果でした。
回答:
4:大変よく理解している(2名)
3:理解している(15名)
2:少し理解している(23名)
1:理解していない(5名)
正直な気持ちとして、理解度が1の人が5名もいたのは、残念で寂しく思いました。参考書やテキストを持たず、椅子に座っている人たちがいますので、当然といえば当然の結果ですが、悲しく思います。
楽しく人生を過ごすのもつまらなく過ごすのも、決めるのは自分です。自分の意志と行動です。前を向いて歩んでくれることを願います。
なお、この演習に関していえば、今であれば我々スタッフも時間をとる用意があり、補講をすることによって学習の遅れを取り戻せます。遠慮せず、相談に来て下さい。
質問8-2:プログラム例の(P例:4.2-1)から(P例:4.2-3)までの処理の流れを説明して下さい。
回答:下記に処理の流れ図を示します。参考にして下さい。
図 処理の流れ
質問8-3:エラーメッセージが表示されたとき、本の英文と異なり、日本語で表示されるので、本を利用できない。
回答:たしかに指摘されているように表示が異なります。少なくとも参考書にあるエラーは、よくある例です。従って、どのようなエラーがあるのかを知るという意味では役に立つと思いますので、参考にして下さい。
エラーの対処方法については、どこかで説明できるように考えたいと思います。
質問7-1:第1回レポート課題を提出する際に、メールの本文には何を書けばよいのでしょうか?
回答:本文中には、どのような要件のメールか分るように、レポートの提出であることを書いておいて下さい。また、課題を行った感想等について何か思いつくことがあれば書いておいて下さい。
質問7-2:参考書「Cで学ぶプログラミングの基礎」には、プログラムのフローチャートがありませんが、フローチャートを使って説明したほうが、処理の手順を理解しやすいと思います。
回答:コメントありがとうございます。この後のプログラムの作成では、フローチャートを取り入れてみようと思います。
質問7-3:先生のプログラムを打つペースが早いです。説明しながらもう少しゆっくりと教えてほしいです。また、もう少しプログラムの考え方をゆっくり、じっくり教えて下さい。
回答:今日、はじめてプログラムを作ってもらって、作る際の考え方(思考)について、どの程度の習得レベルであるか確認させていただきました。その結果、例題として使用したじゃんけんプログラムの内容は、難しい内容であったことが分りました。3割の人が、特に問題なくできるのではと予想していましたが、実際は、1割程度の人でした。
従って、内容を工夫するとともに、もう少しゆっくりと考え方について説明するように気をつけたいと思います。できるだけ注意して説明したいと思いますが、ペースが速すぎるようでしたら教えて下さい。
質問7-4:プログラムを書く時、スペースを空ける場合と、空けない場合がありますが、そこには何か決まりがありますか。また、ずっと疑問に思っていたのですが、プログラムで行の頭のスペースはいくつ空ければいいのですか?
回答:プログラムを見やすくするため、はじめの{と終わりの}の対応が明確になるように括弧内の文字の先頭を右にずらしています。通常は、スペースキーを複数回タイプするのではなく、タブを使用することが多いようですが、特に決まりはありません。
第4章テキスト7頁のプログラム例(P例:4.2-1)などを参考にして下さい。
質問7-5:if文、switch文を使うメリットは、どんなことがあるのですか?あと、defaultの意味は何ですか?
回答:これらの文は、条件式の判定結果によって、処理する内容を替えることができます。例えば、家庭用のテレビゲームでは、条件によって発生するイベントが異なることをこれらの文を用いることによって表現できます。また、生活面の例では暖房器具が温度設定値と室温の比較からヒーターのONとOFFを切り替えることが挙げられます。
あと、switch文のdefaultは、テキスト2頁の下、処理の説明を参考にして下さい。コンピュータ用語では、defaultは、初期設定を意味しますが、この場合は、該当するcaseの値がない場合、このdefaultに書かれた処理を実行するということです。
質問7-6:最後の復習課題のことでお願いがあります。先生の製作したプログラムが画面が遠いためによく見えませんでした。確認のためにHPに載せてください。
回答:今日、皆さんと一緒に作成した「じゃんけんプログラム」は、次のとおりです。プログラムは、大きく手の入力部と勝負の判定部の二つに分かれます。処理の流れ図を参考にして、プログラムを見て下さい。
図 処理の流れ
#include<stdio.h>
main()
{
int A,B; printf("[0]:グー,[1]チョキ,[2]パー\n"); /* Aさん、Bさんの手の入力 */ printf("Aさん:"); scanf("%d",&A); printf("Bさん:"); scanf("%d",&B); printf("A[%d],B[%d]\n",A,B); /* 勝負の判定 */ if(((A==0)&&(B==1))||((A==1)&&(B==2))||((A==2)&&(B==0))){ printf("Aさんの勝ち\n"); } else{ if(((A==0)&&(B==2))||((A==1)&&(B==0))||((A==2)&&(B==1))){ printf("Aさんの負け\n"); } else{ printf("引き分け\n"); } }}
質問6-1:第1回ドリルの(1)Cが分らなかった。
回答:3ヶ所の間違いがあります。
(1)4行目:scanf関数
(2)5行目:括弧の数
(3)6行目:変数の区切りのカンマ
正しくは、次のとおりです。
#include<stdio.h>
main()
{
int x; scanf("%d",&x); x = (x+x)*x; printf("%d %d %d\n",x,x*10,x*100);}
質問6-2:printfとscanfの、””の区切る文字の範囲の違いがイマイチわからないです。
回答:質問を書いてくださいましたが、この内容だけでは具体的な回答を書くことができません。もう少し分らない点について話を聞かせて下さい。
質問6-3:参考書には見やすいプログラムを心掛けるとはありますが、あの参考書には一般的でない書き方も見られる気がします。例えば、main() と同じ行に { があり、ヘッダーファイルと関数ブロックの後に1行も開いてない等です。
また、この見やすく書くという点は、レポート課題の評価基準に含まれるのでしょうか。
回答:まず、参考書のプログラムの書き方ですが、この著者のような書き方もよく見られる方法です。ただ、初心者には、括弧の始めと終わりの対応が分りやすい、質問のような書き方(テキストの書き方も同じ)がよいと思います。
あと、レポート課題で、プログラムの見やすさを評価に含めるかですが、評価に含める予定はありません。ただし、プログラムを開発する際は、この見やすさによって開発効率が大きく異なってきます。このことはよく覚えておいて下さい。
そしてもう一つ、レポートそのものは人に見てもらうものですから見やすくレポートを書くというのは重要です。
質問5-1:授業の説明もホワイトボードを使って図などで説明してもらえると、もっとよくわかるようになると思います。(後ろにすわる人には見ずらいとは思いますが)口でさらっと言われても、対応しきれません。
回答:できるだけホワイトボードなども使用しながら説明したいと思います。ただし、見えないと意味がありませんので、皆さんのほうでもできるだけ前に座って下さい。
質問5-2:(P例:3.1-1)の printf("x = %05.1lf\n",x); のところの 05 の意味がわかりませんでした。
回答:出力は、x = 012.3 と表示されたと思います。「05」とは、表3.1-1に説明のあるように、フィールド幅が「5」で、「0」があることから空いているフィールドに「0」を付けるという意味です。「.」も1文字として数えます。そして、「.1」より、小数第1位まで表示するということなので、「12.3」は、4文字で、1文字分空いているので、「05」の「0」より、0を空いているところに埋めます。
質問5-3:(P例:3.1-1)のprintf("123.45 = %e\n",123.45);の「%e」のところがよくわかりませんでした。
回答:出力結果は、「123.45 = 1.234500e+002」と表示されたと思います。この「%e」は指数表示で数値を表示するという意味で、この例の場合、「e+002」なので、10の2乗という意味です。
質問5-4:固定長と可変長の説明がよくわかりませんでした。
回答:データファイル等において各レコードの長さが一定の場合を固定長レコードといい、各レコード毎に異なる場合を可変長レコードといいます。
レコードという用語の意味が分からない場合は、調べてみて下さい。自分で調べて知識を増やしていくことも大学生には求められます。なかなか慣れないと思いますが、少しずつ実践していきましょう。
なお、調べても分からない場合は、具体的なデータをお見せしながら説明しますので、教官室に来て下さい。百聞は一見に如かず。
質問5-5:プログラミングの勉強にはそれなりの資質が必要だと聞いていますが、もしそれなりの資質がないと感じたらどうやって練習すればうまくできるようになりますか?
回答:皆さんの能力があれば、国家試験の情報処理で要求される初期のレベルは問題なく修得することができます。地道な方法ですが、はじめの内は予習、復習をして分からない箇所を作らないようにするのが大切です。このときのポイントは、プログラム例などは、実行の前に、実行結果がどのようになるか考えることです。これにより、C言語の理解が深まります。
また、色々とプログラム例の記述を変更して、どのように出力結果などが変わるのか確認していくことも有効な学習方法です。
最初が大切です、がんばって下さい。以下は、演習の内容の説明す。
プログラミングにおいて大切なのは、作業の手順を細かく考えることができる力をつけることです。例えば、次の数字を数の小さい順に並び替えるのは、人間なら簡単にできます。
5,3,4,1,2 -> 1,2,3,4,5
このほとんど無意識に頭の中で行っている作業の手順を計算機の場合は、一つずつ表現していかなければなりません。演習の後半でこのトレーニングをしたいと思います。
今は、処理をC言語で表現するための基本的な記述方法を学んでいるところです。
質問5-6:scanfとprintfの違いを、もう一度、説明して下さい。
回答:scanf関数は、キーボードから数値等を入力する関数で、printf関数は、モニタに数値などの値を出力(表示)する関数です。そして、プログラムを実行した場合、printf関数は、自動的にモニタ上に出力しますが、scanf関数は処理の順番が来るとキーボードからの数値等の入力待ちとなります。従って、数値を入力して「Enter」キーを押すまで、プログラムの処理は止まります。
質問4-1:授業の進行が早いです。専門用語の説明もきちんとしていただけると幸いです。
回答:皆さんの理解度にはかなり幅があります。できるだけゆっくりと説明していくように心がけていますが、もし早すぎてよく分からない点があれば、授業以外にも説明しますので、教官室までいらして下さい。
ご質問の専門用語とは、ビット、コンパイル、排他的論理和などの用語を指すのでしょうか?注意して専門用語の説明をするようにしたいと思います。具体的に何が分らなかったのか今度お教え下さい。
あと、お願いですが、私が既に知っているだろうと思っていることと皆さんの認識との食い違いがでることもあると思いますので、もし分らない用語がでてきたら遠慮せず、質問して下さい。
質問4-2:プログラミングのやり方を少し理解してきたので、楽しくなってきました。でも演算子の種類が多くて苦労します。演算子は全部覚えなければならないのですか。
回答:プログラミングが楽しく感じれるようになって、よかったですね。演習を楽しんで受けてくれるのは大変うれしく思います。
さて、演算子ですが、この演習に関しては、テキストなどを見て分れば問題ありません。ただし、情報処理の国家試験を将来受けようと考えている人は、テキストのプログラム例で紹介した演算子は、プログラムを見たら内容が分るようにしておいて下さい。
質問4-3:質問に関して、次のようなコメントや問い合わせがありました。
・質問は、特にないです。というより、わからないところがよく分かってないので・・・質問できません。
・今まですごくあいまいに授業をうけてきたが、わからないところを聞くだけですごく理解できるようになりました。これからは少しでも疑問に思うことがあればためないで質問したいと思います。
・自分で学習するために、授業で習ったこと以外の内容も質問してよいのですか。
例えば、argv[][]、*argv[]、*argvの違いについてなど。
回答:内容が十分理解できていないのに、何が分らないのか説明できないので、質問できない場合は、直接、教官室のほうに来て下さい。こちらから幾つか質問したりして、理解が不十分な点を明確にしながら説明していくことができると思います。
今の内容は、これからの基礎になる部分ですので、少しでも疑問に思う点があれば、遠慮せずに聞いて下さい。
あと、授業の内容以外の質問でもかまいません。ただし、これは授業時間以外にお願いいたします。ちなみに例としてあげているのは、第6章の配列とポインタのところで習います。まだ、テキストは作成していません。少し待って下さい。
質問4-4:ビット演算子について詳しく説明してほしいです。
回答:2章のテキスト10頁、(P例:2.3-6)を例に説明します。まず、変数xは、signed charの型宣言より、8ビットで表現される整数となります。
以下、各式毎に説明していきます。
@x = ~2; Ax = 1 | 3; Bx = 1 & 3; Cx = 1 ^ 3; Dx = 1 << 3;@は、最後に説明します。
質問3-1:ホームページにあるPDFファイルの授業テキストは、プリントアウトして、手元に持っていたほうがよいのでしょうか?
回答:皆さんに紹介した参考書は、はじめてプログラミングの勉強をする人を対象として書かれています。従って、内容は大変分りやすいものとなっていますが、反面、C言語を学ぶにあたって習得すべき内容が不足しています。
そこで各章のテキストは、参考書で不足している箇所を補足するために作成しています。授業中の説明では、時間の関係から幾つか省略して進めていますが、将来、C言語を用いてプログラミングを行う際に必要となる内容ばかりです。
従って、テキストは印刷し、参考書と一緒に活用していくのが、一番良い方法と考えています。
質問3-2:ホームページのプログラム例をコピーして貼り付けると、やたらと行換えが入っていて、BSで戻すのが、面倒だったのですが、そのまま実行してもよかったのですか?
回答:C言語では、半角スペース、タブ、改行は、無視されます。従って、貼り付けたままの状態で、ファイルを保存し、コンパイル、そして、実行することが可能です。
質問3-3:(P例:2.1-4)について
(1)計算式の3行目で、「3.」とありますが、「3」の後の「.」は、どのような意味があるのでしょうか?
i = d = 100/3.; printf("i= %lg, d= %lg\n",(double)i,d);
回答(1):数値の場合の型は、下記のように判断されます。従って、この場合の計算では、「100」という整数と「3.」という浮動小数点数の計算となり、この答えは、浮動小数点数として処理されます。
3 : 整数 3. : 浮動小数点数 3.0: 浮動小数点数
(2)下記のようにprintf関数の中に「(double)i」と書かれているのですが、「i」のままではいけないのでしょうか?
i = d = 100/3; printf("i= %lg, d= %lg\n",(double)i,d);
回答(2):変数の値をprintf関数を用いて出力する場合、変数の型によって、%dや%lfなどの書式制御文字を使用します。詳しくは、第3章で学びますので、今のところは第2章テキストの2頁、(P例:2.1-1)の変数の型と書式制御文字の対応関係を覚えておいて下さい。
なお、問題の「%lg」は、double型の変数の値を見やすく、例えば、「3.000000」という場合は、小数点以下は不要ですので、「3」と表示します。従って、これに対応するように、整数型である変数「i」をdouble型に変換しています。
ただ、指摘にあるように、まだ学んでいない内容ですので、「%lg」を用いずに、「%d」とし、対応する整数変数を「i」のままにしておくのが分りやすかったと感じています。
次年度のテキストでは、修正しておきたいと思います。ご指摘、ありがとうございました。
質問3-4:(P例:2.1-5)について
下記の計算式の答えが、「x=0, y=0」になる理由が分りません。なぜ、xとyの値が、0になるのでしょうか?
y = d * (x = ((int)2.4 + 2.4)/d);
回答:まず、この式は次のような手順で計算していきます。
(1) (int)2.4 + 2.4) (2) (1)の値/d (3) x = (2)の値 (4) d * (3)の値 (5) y = (5)の値(1)の計算は、第1項の「(int)2.4」が、浮動小数点数である「2.4」を整数型に変換するという意味ですので、値が「2」となります。そして、第2項の「2.4」と足されるので、「4.4」となります。
質問2-1:fccのコマンドがなくなってしまいプログラムをコンパイルできなかった。
回答:第1章のテキストの3頁の中段、「コンパイラの確認」のところにあるコマンドを実行して下さい。Unix環境の設定ファイルを再度、設定することによって、fccのコマンドを使用できるようになります。
質問2-2:演算子と記号は全部覚えなければならないですか?
回答:情報処理の国家試験を受験する場合は、テキストで紹介した演算子の意味を覚える必要がありますが、通常のプログラミングの場合は、資料を見ながら理解できれば結構です。この演習も資料見て意味が理解できれば結構です。
質問1-1:授業についていけてなかったです。この先が不安なんですが、質問ばっかりでも大丈夫ですか?
回答:どんどん質問して下さい。皆さんの分らない点がはっきりと分れば、より皆さんにとって分りやすい説明ができると思います。
また、第1回目の講義の進行スピードですが、電子メールに書いていた人、29人の内、ちょうど良い、少し遅いといった人が13人で、早すぎるという人が13人、その他、3人でした。何か工夫できることはないか考えて見ます。
質問1-2:
(1)Tera Trem Pro とTeraPad を家のパソコンで練習したいのですが、どうすればいいでしょうか?教えてください。
(2)家のパソコンで基礎プログラミング演習の勉強をしたいのですが、どうしたら学校のシステムのようなシステム環境を作ることができますか?
回答:残念ながら大学の教育用システムは、セキュリティの関係から外部のネットワークからの接続を認めていません。そのため自宅のパソコンに「Tera Trem Pro」のソフトウエアをインストールしても大学のUnixサーバに接続することができません。
従って、プログラムのコンパイルができませんので、大学と同じ環境でプログラムの勉強をすることはできません。
私は使用したことがありませんが、下記のようなフリーのコンパイラがありますのでこれを使用するのも一つの方法です。
Borland C++Compiler
http://www.forest.impress.co.jp/lib/stdy/program/progdevenv/borlandcpp.html
参考のために、授業で使用したソフトウエアのダウンロード先を書いておきます。「TeraPad」は、テキストエディタとして良く作られていますので、インストールしておいてもよいと思います。
Tera Term Pro
http://www.forest.impress.co.jp/lib/inet/servernt/netuty/teraterm.html
TeraPad
http://www.forest.impress.co.jp/lib/offc/document/txteditor/terapad.html
質問1-3:TeraPadの使い方がいまいち上手くできなかったです。情報リテラシーのテキストより、もう少し詳しい一覧表みたいなものがあったら助かります。
回答:今度、操作方法で分らなかった点などを詳しく教えてください。テキストを修正したいと思います。
質問1-4:大学での集団教育という枠の中で、本当に一人で作成できるようになるのか、また出来てもどの程度の能力がつくのか疑問です。
回答:情報処理技術者試験に出題されるC言語の問題を解けるように、あるいは、一歩手前の解説の内容が理解できるようになる能力の習得を目指したいと思っています。
当然のことですが、この授業目標を達成するには、予習や復習など、個人の努力が必要です。
質問1-5:授業中の私語がうるさいです。
回答:正直なところ、授業中に話を聞かない、必要な参考書を持ってこないといった不真面目な態度に大変驚かされました。隣の友だちと楽しく話しながら課題をやってもらって結構ですが、説明のときは静かに聴いてほしいと思います。
対応を考えます。
質問1-6:無理かもしれませんができれば113号室も使用して、出来る人と出来ない人に分けたほうが効率はあがると思います。
回答:情報リテラシーでは、収容人数の関係もあって提案のようにクラスを分けている学科もあります。今のところこの講義は、教員は私一人ですので、教室の前後で分けるなど、工夫したいと思います。
質問1-7:ホームページにある復習課題は、宿題としてやってくる必要があるのでしょうか?また、成績の評価にも影響するのでしょうか?
回答:第1回目の講義内容を習得できたか確認するためのチェックとして、復習課題を作成しました。成績評価に加える課題ではありませんが、自分自身の習得の確認のために課題に取り組んでみて下さい。
成績評価に用いるレポート課題の場合は、その旨、皆さんにお伝えします。