2024年度 プログラミング実習II クラス(2) 連絡事項 ・ 授業のスケジュールは以下の通りです. -------------------------------------------------------------- ■ 授業スケジュール: 火曜日1~2限 -------------------------------------------------------------- 1週: 第3章「変数と式」 4/ 9 [T1][E1] 2週: 第4章「制御の流れ」(1) 4/16 [T2][E2] 3週: 第4章「制御の流れ」(2) 4/23 [T3][E3] 4週: 第5章「関数」(1) 4/30 [T4][E4] 5週: 第5章「関数」(2) 5/ 7 [T5][E5] 6週: 第6章「配列」(1) 5/14 [T6][E6] 7週: 第6章「配列」(2) 5/21 [T7][E7] 8週: 第7章「文字列」 5/28 [T8][E8] 9週: 第8章 「ポインタ」 6/ 4 [T9][E9] 10週: 第1回中間試験・復習 6/11 [--][E10] 11週: 第9章「構造体」 6/18 [T11][E11] 12週: 第10章「ファイル」・乱数 6/25 [T12][E12] 13週: 総合演習 7/ 2 [T13][E13] 14週: 第2回中間試験 7/ 9 [--][--] 15週: 期末試験(定期試験期間中・筆記試験) -------------------------------------------------------------- ・ 当クラスの教員・スタッフは以下の通りです: 井坂 元彦 (4号館2階) isakam@kwansei.ac.jp 宮本 公郎 (4号館4階準備室) iuu08050@kwansei.ac.jp ・ TAによる質問受け クラス(2)の教学補佐(TA)は以下の4名の大学院生です. (括弧内はTAオフィスアワー,研究室にて待機されています) ---- 情報 M2 (巳波研) 佐俣 友基 (月曜4限) isl06471@kwansei.ac.jp 情報 M2 (猪口研) 加藤 潤 (月曜4限) gpn06467@kwansei.ac.jp 情報 M2 (猪口研) 舩本 直弥 (木曜3限) ihn04482@kwansei.ac.jp 情報 M1 (巳波研) 東山 京平 (水曜3限) gqj41965@kwansei.ac.jp ---- ・ 授業用 Slack Slack の URL は以下の通りです. https://kgucsprog2cla-lro9940.slack.com/ TA の方への質問などに活用できます. 授業時間外に質問などがある場合,以下のように対応します. ・ プログラム作成の上での質問や相談に対して,TA の方々が上記の TA オフィスアワ ーの時間帯に対応します. ・ TA の業務は原則,上記のTA オフィスアワーの時間帯に限定しているため,時間を 超過した場合は別の TA が対応します. 教員や実験準備室スタッフも質問に対応しますが,まずは TA に相談して下さい. ・ 質問がある場合は,原則として - Slack の question チャンネルに質問を記入する - Slack で TA にダイレクトメッセージで質問を送る - メールで TA に質問を送る のいずれかを行うようにして下さい. ・ TA は,TAオフィスアワーの時間帯に質問内容に応じて, - Slack 上で回答(question チャンネルまたはダイレクトメッセージ) - Zoom/Teams/Skype などのツールを使用してオンラインで指導 - 研究室にて対面で質問対応 のいずれかで指導します. オンラインで対応する場合の URL は別途質問者に対してされます. ・ 質問をする際には以下に注意して下さい. - まずは教科書をよく読んだ上で,自分で試行錯誤してみて下さい. - 画面をぼんやり眺めているだけでは解決しないため,変数の値を表示する などして,どのような計算が行われているかをよく観察して下さい. printf で変数の値を表示し,動作の様子を点検して下さい. - その上で質問する際に,単に「この問題がわかりません」と聞くのでは教員 やTAも回答ができません.必ず, * どの問題について, * どのように考えてどこまで理解したか * 現状のプログラムはどのようなものか * その上で何がどのようにわからない/行き詰っているか を明確に伝えるようにして下さい. - TA の質問受けは,課題を解く手助けをするもので,解答を提供する目的は ありません.最終的には自分でプログラムを作成することが求められている ことに注意して下さい. ■ レポート作成について ・ レポートの「結果」の欄には,実行結果を貼り付けるよう にして下さい. ・ 1問ごとにレポートを書くようにしましょう. ・ できるだけ,次回の授業で扱う章の予習をしておくことを勧めます. 教科書に目を通すだけでも構いません. 結果的には,演習課題を短時間で解くことができ,効率的になるはずです. ■ プログラムを作成する上で ・ 条件制御やループ処理でわからなくなったら, 紙に書いたり,図を書いたりして整理するとよい! ・ プログラムを書いた後,自分で見直しても,解読するのに時間がかかります コメント分を適宜入れるようにしましょう. ・ /* と */ で囲まれた部分は,プログラムの中身とは認識されません ・ // と書かれた行もコメント文として扱われます. ・ スペースや改行,インデント(タブの使用)などは,読みやすいプログラムを書く上で重要になります. 当面は,素直に教科書に倣ってプログラムを作成することを勧めます. ・ コンパイルエラーがあると,エラーメッセージが出力されます. 誤っている箇所・内容に関して重要な情報が表示されますので,(英語ですが)よく読むようにして下さい. ■ 起こりやすい間違いなど ・ scanf で 2個の整数を受け取る際に,scanf を2回使用することが無難です.       scanf("%d", &s );       scanf("%d", &t ); scanf 1回のみで2個の整数を受け取る場合,%d の間にスペースを入れて下さい.       scanf("%d %d", &s, &t ); コンマが入ると,キーボードからコンマを入れなければなりません.       scanf("%d, %d", &s, &t ); scanf 1回の中で異なる型を扱うことは避けて下さい. int s; double u;       scanf("%d %f", &s, &u ); ・ scanf で実数をキーボードから受け取る際の書式は %lf です(printf と異なる) ・ for( 式1; 式2; 式3 ); としてしまうと,何も起こらずループが終了します. 括弧の後のセミコロンは書かないよう注意して下さい. ・ 意図した動作が得られない場合… printf 文を利用して,変数の値を表示させてみると手がかりがつかめることが多い → 画面を眺めているだけでは解決が困難! ・ printf 文の末尾や,計算をした文の末尾には セミコロン ; が必要です. 抜かしてしまうと,コンパイルが通りませんので,注意して下さい. ・ 変数の初期化を忘れないこと! (変数を宣言しただけでは,でたらめな値が入っている) ・ if ( a == 0 ) を if( a = 0 ) としない! ・ if( x > 5 && y < 3) を if( x > 5 & y < 3) としない! ・ コロン : と セミコロン ; を間違えない! ・ if( x == 5 ) を if ( x == 5); のようにセミコロンをつけない! ・ printf(….); の最後のセミコロンを忘れない! ・ 変数名は通常「小文字」です. ・ printf 文で実数を表示する際の書式を %g とすると,%f や %e の形式で 「見やすいように」自動的に表示形式が決定されます. しかし,例えばデータ群の分散を求めて表示する課題で,小数点以下が切り 捨てられて表示されるといった不自然な表示もありえます. %f を用いて表示することが一般的でもありますので,こちらを優先して 使用する方がよいと思われます. ・ if( 条件式1 ) 文1; else if( 条件式2 ) 文2; で終わってしまうと,条件式1 および 条件式2 がいずれも偽である場合の 処理が与えられず,思わぬ動作を起こすことがあります. このような事態を防ぐため,else を使用することが望ましいです. ・ if 文において,複数の処理を行う場合は, { … } で括る必要がある! if( a > 5 ) printf( “xxxxx \n” ); printf( “yyyyy \n”); は, if( a > 5 ) { printf( “xxxxx \n” ); } printf( “yyyyy \n”); と同じ.2番目の printf は if 文の条件式とは無関係となってしまう. if( a > 5 ) { printf( “xxxxx \n” ); printf( “yyyyy \n”); } ・ if 文の最後に誤ってセミコロンをつけてしまう間違いがよく見られる. if( a > 5 ); printf( “xxxxx \n” ); は, if( a > 5 ) { ; // 空っぽ.何もしないのと同じ. } printf( “xxxxx \n” ); と同じことになり,printf 文が if 文の中に入らない. ・ if, else-if を使用する際には,「それ以外」の場合に対応するように else を含めるようにして下さい.すなわち, if( 条件式1 ) 文1; else if( 条件式2 ) 文2; で終わってしまうと,条件式1 と 条件式2 のいずれも偽となる場合の処理が指示されない恐れがあります. 条件式1 と条件式2ですべての場合が網羅されている場合ならば,プログラムの動作としては正しくなりますが,一般的には if( 条件式1 ) 文1; else 文2; とすることが推奨されます.