情報システム・セキュリティ (CSSS) コース/人工知能・通信ネットワーク (AICN) コース向の「プログラミング」の情報を掲載します。 (シラバス)
演習科目であるため、全回の出席を前提とする。毎週の課題(30%)、小テスト(クイズ)(20%)、 中間試験 (10%)、期末試験(40%)で採点し、授業の目標達成が確認できた者に単位を認定する。
必須課題すべてと、選択(発展)課題の平均提出率分を完璧に解けば満点とする。
演習時間(通常、金曜日 4限)内は、原則として自分の力で解く。(TA・教員に聞くのは良い。)
(ただし、解いている問題に特有ではない C 言語一般に関する質問などは許容範囲とする。)
なお、一部の事前に公開した課題は、演習時間開始 10 分後を締切とすることがある。
演習時間終了後は、人!に相談して解いても良い。 (ただし人の解答のコピペは絶対禁止(コピーさせた側も同罪))
たとえ演習終了後でも、問題を掲示板などに投稿して、不特定多数の人に相談することは禁止する。
2022 年度期末テスト問題(ペーパー)、 2022 年度期末テスト問題(オンライン)、 同解答例、
オンライン試験については、他人との通信が禁止事項となっていますが、 人間と区別がつかないもの (AI など) についても通信は禁止です。
WebCLint (ページが落ちているときは連絡を下さい。) … C 言語初学者向けの静的解析(インデンテーションのチェックなど)用ツールです。
誤って「do の閉じブレースの後は改行せずに while を書いてください。」と指摘することがあります。
「とても短い文で敢えてブレースに囲まない場合(if の対象のなる文を追加するということが考えにくい、イディオム的なカタチの場合)は、改行せず、
if
, while
などと同じ行に書く。」という例外には対応していません。
sqrt
, sin
などの関数呼び出しが、double
型であると認識できず、
%f
書式指定に対して使うと間違いだと指摘します。
「原則として、一行には文を一つしか書かない。」は守っていなくても検知しません。
「閉じブレースの行には閉じブレース以外には何も書かない。(ただし、else
… や do
〜 while
文の while
…
は除く)」をたまに検知しないときがあります。
皆さんのノート PC には「Microsoft Visual Studio Community」
というコンパイラーがインストールされているはずです。
インストールされていない場合は、
Visual Studio
のダウンロードのページから、コミュニティ・エディションをインストールしてください。
なお、Mac の人は gcc
を使いましょう。
インストールするときに、
「C++ によるデスクトップ開発」にチェックをするのを、
忘れないようにしてください。
(Visual Studio のバージョンは 2012 以降をインストールしてください。
2010 以前はデフォルトの文字コードが異なるため、UTF-8
で保存されたソースコードをコンパイルできない可能性があります。)
インストール後「ヘルプ」—「Microsoft Visual Studio のバージョン情報」で、
「インストールされている製品」に
「Visual C++ 20??」が入っていることを確認しておいてください。
エディターは notepad++, サクラエディタ などがありますが Visual Studio Code を推奨します。
C のプログラムの作成とコンパイルの手順というページに、 コマンドプロンプトでのコマンドなどの使用法の説明をまとめました。
Visual Studio Code から cl
コマンドを使う方法をまとめました。
コマンドプロンプトの使い方 (最所研の竹原君に作成してもらいました。)
演習用サーバーでのコンパイル方法 (何らかの事情で自分の PC でコンパイルできないとき参考にしてください。 最所研の竹原君に作成してもらいました。)
C コンパイラーがインストールされていない、借り物の PC で受講しなければいけないときなどは、 いくつかのオンライン実行環境が利用可能です。
ここにリンクをはっていないファイルや、公開日前のファイルは 公開日までに変更する可能性があるので注意してください。
1 〜 8 章のまとめ、グラフィックス関数解説、プログラミング言語 Python、をまとめた PDF
授業用ページは独自のアカウント・パスワードは現在使用していません。 Microsoft アカウント(大学でメールを読むときに使うアカウント)で認証してください。
注意: 設定が変更されたのに、変更が反映されないときは、 いったんログアウトして、 再度アクセスを試みて下さい。
必ず各自で提出したファイルのバックアップを取っておいて下さい。 (自分のノート PC だけではなく、stfile などの大学のサーバのどこかにもバックアップしておいて下さい!!)
この授業で提出してもらうファイルは基本的にバイナリーファイルではないはずです。 バイナリーファイルとは、テキストエディターで読むことができないファイル(画像、音声、ワード、エクセルなど)です。
各個人へのメッセージ を適宜確認して下さい。課題を再提出するときも、最初に提出したときと同じアップロードのページからアップロードしてください。
注意: 以下のプログラムのソースへのリンクで List 99-99 のような Bold 書体は重要な例題、 List 88-88 のような影付き書体は、真似してはいけない例題を表す。
以下の日程でピア・サポートが実施されます。
ピア・サポートとは、ピア・サポーターと呼ばれる上級学生 (学部4年~大学院生)が、 学習相談に訪れた学部1~3年生からの基礎的科目(英語・数学・自然科学)及び 工学専門科目についての疑問・質問に答えるという学習支援制度です。
レポートの書き方や演習科目など、学習について相談がある人は気軽にご利用ください。
【情報システム・セキュリティ、人工知能・通信ネットワーク】 日時と場所: 11月01日(水), 11月17日(金), 12月15日(金), 01月19日(金), 02月02日(金), いずれも 12:30-14:30, 3303教室
これ以前の課題はありません
授業ページ・ログインの確認
Visual Studio Community のインストールの確認(または GCC)
Visual Studio Code のインストール
C/C++ for Visual Studio Code のインストール
(ただし、大勢が一斉に無線 LAN …)
クイズ(10/04 は試験運用です。)、
1 章予習用スライド(§ 1-1 に対応するページを閲読※しておいてください。) ※ 閲読 — 調べながら読むこと
List 1-1 List 1-2 List 1-3 List 1-4 List 1-5 List 1-6 List 1-7
最初は 6201 に入ってください。
評価(再確認)
コンパイル・実行の方法(再確認)
1 章予習用スライド(§ 1-2, § 1-3 に対応するページを閲読しておいてください)
2 章予習用スライド(§ 2-1 に対応するページを閲読しておいてください)
List 1-8
List 1-9
List 1-10
List 1-11
List 1-12
List 1-13
List 1-14
List 2-1
List 2-2
List 2-3
List 2-4
コンパイル・実行の方法(再確認)
プログラミング 受講上の心構え(続き)
課題 (一部の課題は 10/11 16:10 に公開されます)、 アップロード、
2 章予習用スライド(§ 2-2 (教科書 p.30) 以降)、 3 章予習用スライド(§ 3-1 の「入れ子になった if 文」(教科書 p.54)まで)
List 2-5
List 2-6
List 2-7
List 2-8
List 2-9
List 2-10
List 2-11
List 2-12
List 3-1
List 3-2
List 3-3
List 3-4
List 3-5
List 3-6
List 3-7
List 3-8
List 3-9
List 3-10
コンパイル・実行の方法(再確認)
プログラミング 受講上の心構え(続き)
クイズ、
6202 教室も使用できます。
課題 (一部の課題は 10/18 16:10 に公開されます)、 アップロード、
3 章予習用スライド (§ 3-1 の「評価」(教 p.55)〜「初学者が誤りやすい if 文」(教 p.65))
List 3-11 List 3-12 List 3-13 List 3-14 List 3-15 List 3-16 List 3-17 addtime.c maxswap.c List 3-18 chap03/summary1.c
プリントの Q. の答え合わせ (Q 3.1.3, Q 3.1.4, Q 3.1.5, Q 3.1.6)
クイズ、
10/27 はオープンキャンパス前日のため休講です。
11/01 は、12:30-14:30 に 3303 でピア・サポートやってます
3 章予習用スライド(§ 3-2 の「switch 文」(教 p.66)〜 3 章最後まで)
4 章予習用スライド(§ 4-1 の「do 文」〜「後置増分演算子と後置減分演算子」(教 pp.74–81)と「前置増分演算子と前置減分演算子」pp.88–89)
List 3-19
List 3-20
List 3-21
List 4-1
List 4-2
List 4-2a
List 4-3
List 4-4
Visual Studio Code による自動整形の設定
<{BasedOnStyle: Google, IndentWidth: 4, UseTab: Never, AllowShortBlocksOnASingleLine: Empty, AllowShortCaseLabelsOnASingleLine: true, AllowShortIfStatementsOnASingleLine: WithoutElse, AllowShortLoopsOnASingleLine: true, BreakStringLiterals: false}
プリントの Q. の答え合わせ (Q 3.2.1, Q 4.1.1)
クイズ、
4 章予習用スライド(§ 4-2「while 文」 (教科書 pp.82–93)、 § 4-3「for 文」(教科書 pp.94–101))
List 4-5
List 4-6
List 4-7
List 4-8
List 4-9
List 4-10
reverse.c
List 4-11
List 4-12
List 4-13
List 4-14
List 4-15
List 4-16
List 4-17
fact.c
polygon.c
教科書訂正 p.94(for 文の構文図の宣言の後の矢印は ; の後へ、 下から 5 行目「後判定」→「前判定」)
プリントの Q. の答え合わせ (Q 4.1.1, Q 4.2.1, Q 4.3.1, Q 4.3.2)
クイズ、
11/17 は、12:30-14:30 に 3303 でピア・サポートやってます
4 章予習用スライド(「多重ループ」〜
⦅教科書 pp. 102–114⦆)
5 章予習用スライド(〜「配列の初期化」
⦅教科書 pp. 115–121⦆)
List 4-18
List 4-19
List 4-20
List 4-21
List 4-22
comma.c
triangle.c
List 4-18a
List 4-23
diamond.c
List 5-1
List 5-2
List 5-3
List 5-4
List 5-5
List 5-6
「インデンテーションについての約束事」の「Visual Studio Code による自動整形」
プリントの Q. の答え合わせ (Q 4.2.2, Q 4.3.3, Q 4.4.1, Q 4.4.2, Q 4.4.3, Q 5.1.1)
1 回目 | 2 回目 | 3 回目 | 4 回目 | 5 回目 | |
---|---|---|---|---|---|
7 行め | 12345 | 12345 | 12345 | 12345 | 12345 |
9 行め | 1234 | 1234 | 1234 | 1234 | 0000 |
行 | 1 回め | 2 回め | 3 回め | 4 回め | ||||
---|---|---|---|---|---|---|---|---|
i |
fact |
i |
fact |
i |
fact |
i |
fact |
|
9 | 1 | 1 | 2 | 1 | 3 | 2 | 4 | 6 |
11 | 1 | →1 | 2 | →2 | 3 | →6 | 4 | →24 |
10 | →2 | 1 | →3 | 2 | →4 | 6 | →5 | 24 |
①②④⑤⑦⑥⑤⑧③②④⑤⑦⑥⑤⑦⑥⑤⑧③②④⑤⑦⑥⑤⑦⑥⑤⑦⑥⑤⑧③②
①②④⑤⑥⑧⑨⑦⑥⑧⑨⑦⑥⑧⑨⑦⑥③②④⑤⑥⑧⑨⑦⑥⑧⑨⑦⑥③②④⑤⑥⑧⑨⑦⑥③②
教科書訂正 p.103 の下から 2 行め(cotinue → continue)
オンラインテストでは、生成 AI (ChatGPT, Bard, Phind, …) など、人間との通信と紛らわしいサイトは使用禁止
クイズ、
5 章予習用スライド(「配列の要素に値を読み込む」〜「配列のコピー」 ⦅教科書 pp. 122 – 131⦆)
List 5-7 List 5-8 comma2.c List 5-9 List 5-10 List 5-11 List 5-12 List 5-13 List 5-14
全員 6201 に入ってください。後半にテストを実施するので、机の端の席にだけ座るようにしてください。
プリントの Q. の答え合わせ (Q 5.1.2)
(本日はクイズはありません)
2 年生以上と情報システム・セキュリティ (CSSS) コースの 1 年生は 6201 に、 人工知能・通信ネットワーク (AICN) コースの 1 年生は 6202 に入ってください。 やはり、机の端の席にだけ座るようにしてください。
プリント・ルーズリーフはバインダー・綴ひもなどで一冊に綴じること。 バラバラのプリントは持込み不可とする。
紛らわしいので、通信系ソフトなどの通知を切っておくこと。 Windows 11 の場合、画面下の「検索」で(Windows 10 の場合、左下の「ここに入力して検索」で) 「通知」と入力して「通知とアクションの設定」を開き、「通知」をオフにする。
5 章予習用スライド(「多次元配列」〜 ⦅教科書 pp. 132 – 139 ⦆)
6 章予習用スライド(〜「値渡し」 ⦅教科書 pp. 141–151 ⦆)
List 6-1 List 6-2 List 6-3 List 6-4 List 6-5 List 6-6
クイズ、
お知らせ: dec01_1.c へのメッセージに、 中間テスト(ペーパーテスト・オンラインテスト)の得点を通知しました。再挑戦テストは 12/15 (Fri)—ペーパー と 12/22 (Fri)—オンライン に実施予定です。 なお、dec01_1.c を提出していない人は、メッセージを見られない可能性がありますが、dec01_1.c 未提出者は全員再挑戦テスト対象者です。
6 章予習用スライド(§ 6-2「関数の設計」 ⦅教科書 pp. 152–171 ⦆)
List 6-7 List 6-8 List 6-9 List 6-10 List 6-11 List 6-12 cbv.c List 6-13 List 6-14 sentinel.c List 6-15 List 6-16 List 6C-1
プリントの Q. の答え合わせ (Q 6.1.1, Q 6.1.2, Q 6.2.1, Q 6.2.2)
プログラミング 受講上の心構え(再確認)
クイズ、
12/15 は、12:30-14:30 に 3303 でピア・サポートやってます
(← ここ以前の課題の開閉)
7 章をとばして先に 8 章をやります。
6 章予習用スライド(§ 6-3「有効範囲と記憶域期間」
⦅教科書 pp. 172–179 ⦆)
8 章予習用スライド(§ 8-4「再帰的な関数」〜
§ 8-5「入出力と文字」 ⦅教科書 pp. 240–251, p. 253 ⦆)
List 6-17
List 6-18
List 6-19
List 8-7
hanoi.c
(ハノイの塔を試す)
tree.c
(グラフィックス作成ページ)
再帰の例 1
(問: このプログラムの出力結果はどうなるか?)
List 8-8
List 8-9
List 8-10
List 8-11
プリントの Q. の答え合わせ (Q 6.3.1, Q 6.3.2)
プリントの Q. の答え合わせ (Q 8.4.1, Q 8.5.1)
クイズ、
中間テストの範囲は 4 章までです。
プリント・ルーズリーフはバインダー・綴ひもなどで一冊に綴じること。 バラバラのプリントは持込み不可とする。
紛らわしいので、通信系ソフトなどの通知を切っておくこと。
List 7-1
List 7-2
List 7-3
List 7-4
List 7-5
sizeof.c
List 7-10
List 7-11
List 7-12
(x <= 1.0
を x <= 1000.0
に変えてみよう)
List 7-13
printf("%.60f", 0.1)
教科書 p.177 訂正
教科書 p.246 訂正?(円周率)
プリントの Q. の答え合わせ (Q 8.5.1 続き)
プリントの Q. の答え合わせ (Q 7.2.1, Q 7.2.2, Q 7.2.3, Q 7.3.1)
svg.h svg.c — SVG 形式を生成する自家製グラフィックスライブラリー (解説)
svg.h
svg.c
polygon.c
diamond.c
graph.c
FirstSample.c
SimpleSample.c
HSBGrad.c
TurtleSample.c
Windows 上の Visual Studio コマンドプロンプトで、foo.c
というソースファイルをコンパイルする場合、
カレントディレクトリーに作成した foo.c
とライブラリーのソースファイル
svg.c
、ライブラリーのヘッダーファイル svg.h
を置く。
次のコマンドで svg.c といっしょにコンパイルする。
cl foo.c svg.c
gcc foo.c svg.c -lm
これで foo.exe
というファイル(※ gcc の場合は a.out
か a.exe
)ができる。
次のコマンドで実行し、出力を foo.svg
というファイルにリダイレクト
(教科書 p.247)する。
.\foo > foo.svg
.\a.out > foo.svgor
.\a.exe > foo.svg
生成された foo.svg
を Chrome, Firefox などで開く。
start foo.svg
svg.h, svg.c は機能を絞った自家製ライブラリーです。 もう少し本格的なグラフィックスやアニメーションを作成したいときは、 SFML, Allegro, raylib, DxLib (参考: 新・ゲームプログラミングの館)などのライブラリーを調べてみてください。
Python 処理系のインストール、
TIOBE index,
GitHut,
Programming Languages
Influence Network,
課題 (12/22 16:10 より一部公開)、 アップロード、
01/12 は共通テスト前日のため、休講です。
(追加)
インストーラーを起動したら、「Add python.exe to PATH」にチェック ✓ を入れてください。
(チェックを忘れたら、もう一度インストーラーを実行し直して
“Modify” をクリックし “Optional Features” は “Next” をクリックして“Advanced Options” のところで“Add Python to environment variables” にチェックして“Install” すれば修復できます。)
TIOBE index, GitHut, Programming Languages Influence Network,
クイズ、
01/19 は、12:30-14:30 に 3303 でピア・サポートやってます
P 章予習用スライド(「リスト」〜)
なお「高階関数とラムダ式」「ジェネレーター」「エラトステネスのふるい」は、 余裕のある人は読んでおいてください。 (これらは C 言語にはないトピックです。これらから必須問題は出題しません。)
問の答え合わせ
(Q P.6.1 [x * y for x in [1,2] for y in [3,5,7]]
,
Q P.7.1 [(x, y) for x in [1,4,7] for y in [2,5,8] if x < y]
)
クイズ、
01/31 は予習用資料はありません
「プログラミング」の授業の TA でお世話になっている、大山くんからの実験協力依頼の連絡です。お誘い合わせの上、奮って参加しましょう。
修士論文の実験協力の日程をお伝えするため、ご連絡させていただきました。 日程 : 1/31 ~ 2/1まで 1/31に事前アンケートに回答後、演習を行ってください。 2/1 までに、コードレビューを行なう対象を、システム内でお伝えします。 2/1 は、学生同士でコードレビューを行ってください。その後、アンケートに回答お願いします。 詳細につきましては、添付したPDFファイルをご確認ください。 わからないこと等あれば、こちらのメールアドレスまでお願いします。 お手数おかけしますが、よろしくお願いします。
これまでの正解率が低い課題・クイズの解説と、過去問の解説を行う予定です。
カリキュラムアンケート(紙・1 年生のみ)
02/02 は、12:30-14:30 に 3303 でピア・サポートやってます
02/02 は授業時間前に公開する問題はありません。
以前の課題の追加提出・やりなおしも 2/06(火)23:59までに提出してください。
課題に対するコメント(02/07 14:40 公開)、※ ペーパーテストは、持込み不可、 (オンラインテストは、教科書・プリント・ノートなど持込み可)です。
02/02 の課題の採点を 02/07 に公開しています。追加提出・やり直しの締切は 2/13(火曜)23:59 です。 それ以前の週の課題も、追加提出・やり直しの最終締切は 2/13(火曜)23:59 です。 各個人へのメッセージをよく読んで、やり直して下さい。
2 年生以上と情報システム・セキュリティ (CSSS) コースの 1 年生は 6201 に、 人工知能・通信ネットワーク (AICN) コースの 1 年生は 6202 に入ってください。 机の端の席にだけ座るようにしてください。
※ オンラインテストは、教科書・プリント・ノートなど持込み可、 (ペーパーテストは、持込み不可) です。
プリント・ルーズリーフはバインダー・綴ひもなどで一冊に綴じること。 バラバラのプリントは持込み不可とする。
メール, チャット, Messenger, FTP, WinSCP, Slack, LINE などの通信系ソフトは使用禁止である。 人間と区別がつかないもの(AI など)との通信も禁止である。 (通知も切っておくこと—Windows 10/11 で通知設定を変更する)
通信系ソフトを起動していた場合は、不正行為とみなす。
期末試験で合格者が極端に少ない場合に、救済試験を実施する可能性があります。
実施する場合、日程は 2/28(水)14:40–17:50 になります。場所は未定 6201 です。
救済試験を実施する場合、対象者には 2/16(金) までに連絡する予定です。
対象者が出席できない場合は、いかなる理由でも不可となります。 (それに対する救済措置はありません。)
救済試験を実施する場合でも、 期末試験を含む成績が著しく低い人は対象としません。
※ ペーパーテストは、持込み不可、 (オンラインテストは、教科書・プリント・ノートなど持込み可)です。
机の端の席にだけ座るようにしてください。 また、人数が少ないので、前から 5 列目以内に座ってください。
※ オンラインテストは、教科書・プリント・ノートなど持込み可、 (ペーパーテストは、持込み不可) です。
机の端の席にだけ座るようにしてください。 また、人数が少ないので、前から 5 列目以内に座ってください。
着席位置、 オンラインテスト問題、 アップロード、
(← ここ以降の予定の開閉)
以下の教科書の、おおむね第 1 〜 8 章に相当する部分を扱います。
新・明解C言語入門編 第 2 版
柴田 望洋 著
SBクリエイティブ
ISBN978-4-8156-0979-5
索引と
全ソースプログラム(Shift-JIS)
(UTF-8)
は、
是非、ダウンロードページから入手して、
索引は印刷しておいてください。
(注意:
5 章のプログラムの一部が int main(void)
とすべきところを
int main(aoid)
になっているようです。)
ただし、7-2 節 の中の「ビット単位の論理演算」、「シフト演算」、「ビット単位の論理演算の応用」、「オーバーフローと例外」、 8-1 節「関数形式マクロ」、8-2 節「ソート」、8-3 節「列挙体」を除きます。ただし、 8-1 節の中のコンマ演算子は扱います。
上記の教科書や C 言語の標準的な解説書:
プログラミング言語 C 第 2 版 B.W. カーニハン, D.M. リッチー 著 石田 晴久 訳 共立出版ISBN 978-4320026926
※原著 The C Programming Language, 2nd Edition Brian W. Kernighan, Dennis M. Ritchie Prentice HallISBN 978-0131103627
に書かれている事柄で、この授業で取り扱わない(主な)項目は以下のとおりです。
文字列、 ポインター、構造体 (struct)、ファイル入出力、(ここまでは2年生の「中級プログラミング」で扱います。)
ビット演算子、goto 文とラベル、 関数形式マクロ、列挙体 (enum)、 共用体 (union)、ビットフィールド、分割コンパイル、 動的メモリー割当て (malloc と free)、(これらは2年生以降の各授業で必要に応じて紹介します。)