情報システム・セキュリティ (CSSS) コース/人工知能・通信ネットワーク (AICN) コース向の「プログラミング」の情報を掲載します。 (シラバス カダサポ)
演習科目であるため、全回の出席を前提とする。毎週の課題(30%)、小テスト(クイズ)(20%)、 中間試験 (10%)、期末試験(40%)で採点し、授業の目標達成が確認できた者に単位を認定する。
必須課題すべてと、選択(発展)課題の平均提出率分を完璧に解けば満点とする。
演習時間(通常、金曜日 4限)内は、原則として自分の力で解く。(TA・教員に聞くのは良い。)
(ただし、解いている問題に特有ではない C 言語一般に関する質問などは許容範囲とする。)
なお、一部の事前に公開した課題は、演習時間開始 10 分後を締切とすることがある。
演習時間終了後は、人!に相談して解いても良い。 (ただし人の解答のコピペは絶対禁止(コピーさせた側も同罪))
たとえ演習終了後でも、問題を掲示板などに投稿して、不特定多数の人に相談することは禁止する。
2023 年度期末テスト問題(ペーパー)、 2023 年度期末テスト問題(オンライン)、 同解答例 ('25/01/15) オンラインの解答例を追加しました、
オンライン試験については、他人との通信が禁止事項となっていますが、 人間と区別がつかないもの (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月15日(金), 12月13日(金), 01月15日(水), 01月31日(金), いずれも 12:30-14:30, 6301 教室
11/01 は 6301 教室、その他は 3303 教室(予定)
授業ページ・ログインの確認
Visual Studio Community のインストールの確認(または GCC)
Visual Studio Code のインストール
C/C++ for Visual Studio Code のインストール
(ただし、大勢が一斉に無線 LAN …)
クイズ(10/02 は試験運用です。)、
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、6202 に別れてもらって構いません。
評価(再確認)
コンパイル・実行の方法(再確認)
課題 (一部の課題は 10/02 16:10 に公開されます)、 アップロード、
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/09 16:10 に公開されます)、 アップロード、
来週・再来週の日程に注意してください。18 日は講義、23 日は演習です。23 日は 6202 は使用できません。
10/16 は月曜振替日です。
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 は使用しません。
この授業の Teams 上のチーム(試験運用)
コンパイル・実行の方法(再確認)
クイズ、
6202 は使用できませんが、6201 以外に 3201 が使用可能です。
課題 (一部の課題は 10/18 16:10 に公開されます)、 アップロード、
10/25 は大学祭前日のため休講です。
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
Visual Studio Code による自動整形について
「設定」(Settings) で C_Cpp.clang_format_style
を検索しても見つからない人は、
「拡張機能」(Extentions) で次がインストールされているか、再確認してください。
なければ、インストールしてください。
これをインストールすると、下の 4 つの拡張機能もインストールされているはずです。
プリントの Q. の答え合わせ (Q 3.1.3, Q 3.1.4, Q 3.1.5, Q 3.1.6)
クイズ、
11/01 は、12:30-14:30 に 6301 でピア・サポートやってます
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
プリントの Q. の答え合わせ (Q 3.1.5, Q 3.1.6, 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 文の構文図の宣言の後の矢印は ; の後へ、
(第 1 版のみ) 下から 5 行目「後判定」 →「前判定」)
プリントの Q. の答え合わせ (Q 4.2.1, Q 4.2.2, Q 4.3.1, Q 4.3.2, Q 4.3.3)
配布プリントに関するアンケート再び(6 章以降分)、 クイズ、
11/15 は、12:30-14:30 に 3303 6301 でピア・サポートやってます
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
行 | 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 |
「インデンテーションについての約束事」の「Visual Studio Code による自動整形」
プリントの Q. の答え合わせ (Q 4.4.1, Q 4.4.2, Q 4.4.3, Q 5.1.1)
①②④⑤⑦⑥⑤⑧③②④⑤⑦⑥⑤⑦⑥⑤⑧③②④⑤⑦⑥⑤⑦⑥⑤⑦⑥⑤⑧③②
①②④⑤⑥⑧⑨⑦⑥⑧⑨⑦⑥⑧⑨⑦⑥③②④⑤⑥⑧⑨⑦⑥⑧⑨⑦⑥③②④⑤⑥⑧⑨⑦⑥③②
教科書訂正 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, Q 5.1.3)
(本日はクイズはありません)
2 年生以上と情報システム・セキュリティ (CSSS) コースの 1 年生は 6201 に、 人工知能・通信ネットワーク (AICN) コースの 1 年生は 6202 に入ってください。 やはり、机の端の席にだけ座るようにしてください。
プリント・ルーズリーフはバインダー・綴ひもなどで一冊に綴じること。 バラバラのプリントは持込み不可とする。
紛らわしいので、通信系ソフトなどの通知を切っておくこと。 Windows 11 の場合、画面下の「検索」で 「通知」と入力して「通知とアクションの設定」を開き、「通知」をオフにする。
中間テストの範囲は 4 章までです。
中間テストに対するコメント (12/04 - ペーパの 1 番の解答が間違っていたので修正しました。)
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
クイズ、
お知らせ: nov29_1.c へのメッセージに、 中間テスト(ペーパーテスト・オンラインテスト)の得点を通知しました。再挑戦テストは 12/13 (Fri)—ペーパー と 12/20 (Fri)—オンライン に実施予定です。 なお、nov29_1.c を提出していない人は、メッセージを見られない可能性がありますが、 nov29_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)
int foo(int n) { return 2 * n + 1; }
double bar(double x) { return x / 2; }
void hey(void) { printf("Hey!"); }
プログラミング 受講上の心構え(再確認)
クイズ、
12/13 は、12:30-14:30 に 3303 6301 でピア・サポートやってます
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
教科書 p.177 訂正
プリントの Q. の答え合わせ (Q 6.3.1, Q 6.3.2)
プリントの Q. の答え合わせ (Q 8.4.1, Q 8.5.1)
クイズ、
連絡:
10月、11月分の問題(11/29 の演習の問題まで)の(再)提出は年内いっぱいで締め切ります(12/31(火)23:59 まで)。
中間テストの範囲は 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.246 訂正?(円周率)
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 (参考: 新・ゲームプログラミングの館)などのライブラリーを調べてみてください。
プリントの Q. の答え合わせ (Q 7.2.1, Q 7.2.2, Q 7.2.3, Q 7.3.1)
Python 処理系のインストール、
TIOBE index,
GitHut,
Programming Languages
Influence Network, 同最新版
課題 (01/08 16:10 より一部公開)、 アップロード、
01/15 は金曜振替日です。
01/15 は、12:30-14:30 に 3303 6301 でピア・サポートやってます
スライドはありません。 自家製グラフィックスライブラリー の解説に目を通して、 サンプルプログラムのいずれかをコンパイル・実行しておいてください。
svg.h
svg.c
polygon.c
diamond.c
graph.c
FirstSample.c
SimpleSample.c
HSBGrad.c
TurtleSample.c
連絡事項
欠席や遠隔参加の連絡が増えていますが、 欠席の場合はできるだけ 創造工学部の欠席届 から申請をお願いします。 遠隔参加の場合は、Teams の当該日のところに投稿してもらうのが一番簡単です。
2023 年度期末テスト問題解答例にオンライン問題の解答例を追加しました
課題 (01/10 16:10 より一部公開)、 アップロード、
01/17 は共通テスト前日のため、休講です。
TIOBE index, GitHut, Programming Languages Influence Network,
プリントの Q. の答え合わせ (Q P.5.1)
クイズ、
P 章予習用スライド(「リスト」〜)
なお「高階関数とラムダ式」「ジェネレーター」「エラトステネスのふるい」は、 余裕のある人は読んでおいてください。 (これらは C 言語にはないトピックです。これらから必須問題は出題しません。)
【再掲】Python 処理系のインストール
VSCode の Python 用拡張について追記しました。
プリントの Q. の答え合わせ (Q P.6.1, P.7.1)
「プログラミング」の授業の TA でお世話になっている、小方さんからの実験協力依頼の連絡です。お誘い合わせの上、奮って参加しましょう。
システム試用実験とアンケートへのご協力のお願い
授業評価アンケート
【再掲】教育評価アンケート(下の QR コードからもアクセス可能)
クイズ、
01/31 は、12:30-14:30 に 3303 6301 でピア・サポートやってます
02/05 は予習用スライドはありません
クイズ、
これまでの正解率が低い課題・クイズの解説と、過去問の解説を行う予定です。
01/31 の課題の採点結果は 02/04(火)23:59 までに提出されたものについては 02/07(金) のオンライン試験までに公開する予定です。
それ以前の課題の(再)提出についても、02/04(火)23:59 までに提出されたものの採点結果は、 02/07 のオンライン試験までに公開する予定です。
その以降は、02/11(火)の 23:59 までに(再)提出された課題を 02/14 までに採点する予定です。
採点は 02/12 〜 02/14 までの間に実施するものが最終となります。01/31 の課題については、 再提出の機会が一度しかないので注意してください。
連絡(重要)
試験を欠席した場合は、追試験願の提出を忘れないようにしてください。
2 年生以上と情報システム・セキュリティ (CSSS) コースの 1 年生は 6201 に、 人工知能・通信ネットワーク (AICN) コースの 1 年生は 6202 に入ってください。 (遠隔での受験は原則としてできません。) 机の端の席にだけ座るようにしてください。
※ オンラインテストは、教科書・プリント・ノートなど持込み可、 (ペーパーテストは、持込み不可) です。
プリント・ルーズリーフはバインダー・綴ひもなどで一冊に綴じること。 バラバラのプリントは持込み不可とする。
メール, チャット, Messenger, FTP, WinSCP, Slack, LINE などの通信系ソフトは使用禁止である。 人間と区別がつかないもの(AI など)との通信も禁止である。 (通知も切っておくこと—Windows 10/11 で通知設定を変更する)
通信系ソフトを起動していた場合、VSCode の AI 系拡張を enable していた場合は、不正行為とみなす。
着席位置、 オンラインテスト問題、 アップロード、
全員 6201 に入ってください。 (遠隔での受験は原則としてできません。) 机の端の席にだけ座るようにしてください。 (机が足りない場合は 6202 から机を持ち込みます。)
※ ペーパーテストは、持込み不可、 (オンラインテストは、教科書・プリント・ノートなど持込み可)です。
期末テスト(ペーパー)問題、期末テスト(ぺーパー・オンライン)解答例
期末試験で合格者が極端に少ない場合に、救済試験を実施する可能性があります。 実施する場合、日程は 2/25(火)- 27(木)のどこかになります。 対象者が多い場合、日程の調整はしません。 場所は未定 です。
救済試験を実施する場合、対象者には 2/18(火) までに連絡する予定です。
対象者が出席できない場合は、いかなる理由でも不可となります。 (それに対する救済措置はありません。)
救済試験を実施する場合でも、 期末試験を含む成績が著しく低い人は対象としません。
(2/18 New) 2/18(火)の 11:13 頃に救済試験対象者にカダサポからお知らせを送信しました。 (クイズ・演習・中間・期末を総合して、40 点以上 60 点未満の人、または、病気などで期末試験を欠席した人が対象です。後者の対象者には追試験として実施します。) そのカダサポのお知らせ(タイトル: 『「プログラミング」救済試験の実施について』)を受け取っていない人は、合格(または不合格)が確定です。
※ ペーパーテストは、持込み不可、 (オンラインテストは、教科書・プリント・ノートなど持込み可)です。
机の端の席にだけ座るようにしてください。 また、人数が少ないので、前から 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年生以降の各授業で必要に応じて紹介します。)