東京工芸大学 工学部  電子機械学科 2年 前期 

基礎プログラミング 第1回

http://ffujiki.web.fc2.com/t-kougei/kisoprog/
http://fujiki.tv/t-kougei/kisoprog/
 2017.4.11
藤木 文彦
 


  C言語内容の確認と実習環境の準備


 この科目を受講する人は、基本的に1学年後期の「ソフトウエア基礎論」を受講しているものとして、授業を進めます。ただし、受講していない者(単位を取れていない者)、充分に理解出来ていない者も居ることを考慮しつつ、実用的なプログラミングを行う基礎を学習します。

 ソフトウエア基礎論(1学年後期に受講したはず)の講義内容(確認)

1.コンピュータシステムの概略と操作法
2.C言語とソフトウェアの概略
3.文字の表示
4.計算結果の表示
5.変数の利用法
6.分岐(if文)
7.分岐(switch文)
8.繰り返し(for文)
9.繰り返し(while文)
10.配列(1次元)
11.配列(2次元)
12.関数
13.構造体
14.ポインタ 


 基礎プログラミング(本講義)の内容(予定)

1     C言語ゲンゴソウ復習フクシュウと、実習ジッシュウ環境カンキョウ準備   8    ソートプログラムの技法ギホウ(1)
2    変数ヘンスウカタ算術サンジュツプログラム(1)  9   ソートプログラムの技法ギホウ(2)
 3   変数ヘンスウカタ算術サンジュツプログラム(2)  10   再帰型サイキガタプログラムと関数
 4   配列ハイレツと、探索タンサクプログラム(1)  11   ファイルの入力ニュウリョクとデータの構造
 5   ポインタと、探索タンサクプログラム(2)  12  ファイルの出力シュツリョクとファイルの構造
 6  関数カンスウと、変数ヘンスウ有効ユウコウ範囲  13  ゲームプログラム(1)
7   配列ハイレツ、ポインタと、コンピュータのメモリの関係    14  ゲームプログラム(2)


  授業の進め方


              
 ・座席は、基本的に自由としますが、授業の様子によっては、座席指定を行う事もあります。

 ・講義用のノートは必ず用意してください。毎回このページに書いていない補足説明を行います。

 ・本講義は、講義と実習を織り交ぜて行います。(出題ミスの訂正などもあるかも知れませんので、注意してください。)

 ・演習中には他人の迷惑にならない範囲で、近隣の学生と相談することを認めます。演習中は、必要最小限の座席の移動は認めます。機械の不調と思われる場合には早めに座席を移動し、その旨報告してください。

 ・講義時間中は基本的にこのページを開き、講義に集中する物としますが、必要最小限の検索作業などは認めます。

 ・Webの閲覧などは自由としますが、ゲームや、Youtubeに類する映像を見るなど、明らかに授業の目的と異なる作業は禁止します。節度を持った範囲でのPCメールは構いません。

 ・講義、実習中に、気分が悪くなったり、トイレに行きたくなったりした際は、特に断り無く席を外して構いませんが、不定期に出席を確認しますので、その際に居なければ減点対象となります。

 ・
1限の授業は最後まで受ける事とします。2限の演習は、早く終わり、メールなどで課題を提出した上で、残り30分以内になったら退出して構いません。演習が早く終わって、課題が無くなったら、他人の迷惑にならないように、静かにブラウザを見る、他の授業の課題を行う等しても構いません。

 ・時間内に課題が終わらなかった場合にも、出来たところまでをメールで提出してください。その後自習して残りの課題が出来たら、後日追加で送ってもらえば、その分を評価に加えます。

 ・授業中に質問がある場合は挙手して質問してください。演習中には、適宜教室内を巡回していますので、設問の意図が分からない場合、設問にミスがあると思われる場合、どうしてもヒントがほしい場合、機器の不調と思われる場合などは遠慮無く呼びかけてください。

 ・課題の性質上、提出されるメールは、ほとんど同じ内容の物となると思われます。必要最小限に教え合うことは禁止しませんが、明らかに他人の演習をそのまま丸写ししている、コピーしていると言う疑いがもたれる場合には、別途事情を聞くことがあります。



 授業の進め方 この講義は、 

講義での説明を聞き、演習課題をメールで送る。

ということで進めていきます。
メールの送り先は、大学のアドレスではなく、外部のメールですので、注意してください。

 送付先:  fujiki.kougei@gmail.com


 今日の場合は、次のように授業を進めていきます。

【準備】

■アンケートに回答 −> メールで送る。 タイトル Anq-1

【演習課題1】 −> プログラムのコピーをメールに貼り付けて提出。 タイトル Project0101
【演習課題2】 −> プログラムのコピーをメールに貼り付けて提出。 タイトル Project0102
【演習課題3】 −> プログラムのコピーをメールに貼り付けて提出。 タイトル Project0103


 ここまでやったら12時以降、授業を終了してかまいませんが、余裕のある人は、次の応用課題もやってみてください。

【応用課題4】 −> プログラムのコピーをメールに貼り付けて提出。 タイトル Project0104
【応用課題5】 −> プログラムのコピーをメールに貼り付けて提出。 タイトル Project0105

 さらに興味があれば、 C# で同じことを書くにはどうするかやってみると良いでしょう。

【C#課題1】−> プログラムのコピーをメールに貼り付けて提出。 タイトル Projectcs-0101


index.html へのリンク

   本講義で使用するコンピュータ環境の概略



 本講義では、皆さんが使い慣れていると思われる、Windows 上の VisualStudio を用いて演習を行います。 余裕があれば、サーバ上でのUNIXシステムを使ってのプログラミング法も適宜勉強していきます。

 本講義では、プログラミング言語として、前期には、主として、 ”C++” を、後期には、”C#”を使いますが、これは、C言語の 発展したものとして、標準的なプログラミング言語として使われている物です。


 前期「プログラミング基礎」では、”C++”を使いますが、C++特有の クラス概念などについては、学習範囲としません。また、ウインドウ上へのグラフィック表示なども行わず、基本的にテキストベースとします。そのため、内容としては、オリジナルのC言語との違いはほとんどありません。
 なお、C#でもテキストベースのプログラムができますが、命令の書き方が全く異なりますので、参考に掲げるにとどめます。より進んだ勉強をしたい人はチャレンジして見てください。

 後期「プログラミング応用」では、ウインドウ操作やグラフィックを含めたプログラミングを行いますので、”C#”言語を用います。”C,C++”とは違った、”C#” 特有の書き方を学びます。



  【演習準備】



 最初は、馴れている Windows システムでの授業の進め方について説明しましょう。

1.Windows システムを立ち上げ、ユーザ名、バスワードを入力して、通常の画面を開きます。

2.VisualStudio2015 アイコンを選びます。(ツールまたは、アプリケーションの中にあると思います。)
 (PC実習室によっては、それ以前のバージョンになっているかも知れませんが、基本的な操作法は共通です。)


 年度が替わって、システム環境が変わっている可能性がありますので、具体的な操作については、教室で、プロジェクタ(机上の表示用PC)画面に映しながら説明します。

 本テキストと、操作法が異なる場合がありますので、授業中の注意をよく聞いて下さい。




【 Visual Studioの起動 と C++ の起動】
 

 Visual Studio または、 C++ などのアイコンがあると思いますので、それをクリックするか、スタートメニューから、起動します。
 (方法は、教室で指示します。)

 このような画面が開いたら、 「新しいプロジェクト」を選びます。







 「新しいプロジェクト 」を選んでダブルクリックします。


「C++」 を選び、その後、

表示される ”○○アプリケーション” の中の

”Win32コンソールアプリケーション” を選びます。

 VisualStudio では、プログラム一つ一つに名前を付けるだけでなく、全体を管理するために、「プロジェクト」という形で、管理しますので、まず、その名前を付けます。

 下の名前の所に、

"Project0101"

のような名前を入力してから、
 ”OK”を押します。(0101 は、第1回目の1つめのプロジェクトということ。)
(あらかじめ長い名前が入っていると思いますが、全部消して、上記のような名前だけ入れればよいです。)


※下の画面の選択肢などは、教室のPCと違うかも知れませんが、以下の項目は表示されているはずですから、探して選んでください。



 すると、こんな確認画面が開くので、
「完了」 を押して下さい。




 少し待つと、次のような画面になります。
 この画面が、プログラム作成画面です。




 中央が、プログラムを入力する部分ですので、ここにプログラムを入力します。
 次のような2行を入力して下さい。



                  
 int _tmain(int argc, _TCHAR* argv[])
{
        printf("Hello\n");
        getchar();
        return 0;
}



 入力したら、ウインドウ上部にある、次の、  (右向き)印をクリックして下さい。
 これが、プログラムを、コンパイル、実行するためのボタンです。
(他のメニューからも出来ますが、この方法が手っ取り早い)



 次のような画面が出ますから、「はい」を押して下さい。
 「ビルドしますか」の「ビルド」とは、プログラムをコンパイルすることと、ほとんど同じと思っていただいて結構です。




 ここから、しばらく時間がかかりますが、次のような画面(コンソールの左上に「Hello」と表示されているはず。)が出れば成功です。



 何かキーを押すと、この画面が閉じて、プログラムを終了します。

 コンパイル時や、終了後に、編集画面の下の画面に、なにやらいろいろなメッセージが出ますが、基本的に、最後に、「コード 0 で終了しました」と出ていれば、実行は成功した、と言うことです。
 それ以外の場合は、どこかにエラーがあったという事です。(対応法は、別途説明。)



 もしも、プログラムにエラーがあった場合は、たいていの場合、エラーが起きて、ビルトが途中で中断されます。
 「最後に成功したビルドを実行しますか」というメッセージが出ますが、「いいえ」を選んで、終了します。
(直前には、うまく動いていたが、ヘタにいじってしまって、バグが出たような場合には、直前のものを実行してみることもありますが、今回は、そういう物ではないので、中断するために、「いいえ」を選びます。)




 念のために、上のように、「わざとエラーが出るように」プログラムに変更を加えて、 を押して見なさい。


 上記のプログラムが、予定どおりに動くことを確認したら、次に、
 getchar(); 命令は何のために入れたのか、この命令を取り除いた場合にどうなるかを実験して、考察してみなさい。
 考察結果は、次の、メールで、提出する物とします。

 実験、考察が終わったら、「ファイル」メニューから、
「全てを保存」
 を指定した後、
「閉じる」
 で、プロジェクトを終了しなさい。
(次の問題では、新しいプロジェクト名でプログラムを作ってもらいます。)



 【メール提出の練習:アンケートに回答】


 本講義では、出席は、教室の教室入り口のカードチェックの他に、課題のメール提出によって確認します。本日は、メールがちゃんと送れるかどうかの確認を含めて、全員次のようなメールを送ってもらいます。


 演習課題の解答の前に、このページの最後にあるアンケートに答えて下さい。(メールの先頭に書いて下さい。)

 送付先:  fujiki.kougei@gmail.com
 件名:   Anq-1


  次のような内容にします。

 
 学生番号: e0000000   (自分の番号)
 氏名:   工芸 電子     (自分の名前)

 アンケートの回答    2番 (<− 自分の選んだ番号)

 getchar(); 命令は何のために入れたのか。

 解答:
 ×××× だと、 ×××× だから。


 メールがきちんと送れたかどうか、確認のために、メール送付後、5分ほどして、教卓に来て、自分の学生番号と氏名を先生に告げて、確認しなさい。

 (送付後到着まで数分かかる場合があるので、焦らないように)

 5分以上しても、到着していないようなら、宛先にミスがないかどうか、自分のメールの設定が正しいかどうかを確認してみなさい。メールの設定の方法が分からないときは、アシスタントを呼ぶか、先生の手が空くのを待って、先生に聞いて下さい。


 【演習問題1】 


 この後、次の問題を自力でやり、作成したプログラムの内容を、指示のように、コピーしてメールで送りなさい。

 新規プロジェクトを、  "Project0101" という名前で開きなさい。

Project0101

 
 画面上に、整数の1から10までを表示するプログラムを作りなさい。



 作ったプログラムの以下の部分を、「コピー&ペースト」して、メール本文に添付して送りなさい。
 コピーは、そのままでは、うまくできませんので、以下を参照してください。

 

 演習結果をメールで提出する準備

 演習に先立って、実行画面のコピーペーストの方法を説明します。

  VisualC++ の実行画面に表示されている文字は、(なぜか)普通の画面の文字のように、コピー出来ませんが、それをコピーして、実行結果としてメールで提出してほしいので、切り取り方を説明します。

 まず、下の画面のように、実行結果表示ウインドウの、タイトルバーの部分(ウインドウ上部の青くなっている部分)に合わせて右クリックし、まず、「編集」−>「全てを選択」を選びます。(結果だけで良いときは、「範囲指定」でも良い。)



 すると、下図のように、表示された部分の色が反転しますので、再度マウスをタイトルバーに合わせて、「編集」−>「コピー」を選択します。




 これで、画面の表示がテキストとしてコピーされましたので、後は、エディタなどに保存して置いて下さい。
 結果をメールで送るように指示がある場合も、一旦、エディタにコピーして、整形してからメールに貼り付けて送ったほうが良いでしょう。
 従って、演習の間には、エディタ(「TeraPad」など。自分の使いやすいエディタでよい。)を開いておくほうが良いでしょう。



 メールは、次のような形式とします。


 メールの件名は、 "Project0101" とします。

 
 学生番号: e0000000   (自分の番号)
 氏名:   工芸 電子     (自分の名前)


int _tmain(int argc, _TCHAR* argv[])
{
......................  (ここは、自分で書いたプログラムの部分を入れる)

return 0;
}


 【演習問題2】 



 新規プロジェクトを、  "Project0102" という名前で開きなさい。

Project0102

 
 3から999までの3の倍数を全部足した結果を画面に表示するプログラムを作りなさい。


 作ったプログラムの自分で書いた部分とその直前直後を、「コピー&ペースト」して、メール本文に添付して送りなさい。
 メールの内容は、課題2と同様に、番号氏名と、プログラム本文のコピペとします。

 メールの件名は、 "Project0102" とします。

 【演習問題3】 


 新規プロジェクトを、  "Project0103" という名前で開きなさい。

Project0103

 
 画面上に、次のように、 "*" が、1つから、5個まで並んだものが表示されるプログラムを作りなさい。
 
*
**
***
****
*****


 作ったプログラムの自分で書いた部分とその直前直後を、「コピー&ペースト」して、メール本文に添付して送りなさい。
 メールの内容は、課題2と同様に、番号氏名と、プログラム本文のコピペとします。

 メールの件名は、 "Project0103" とします。






 本日の基本演習はここで終わりです。


 12時を過ぎて、全部課題が終わったら退出して構いません。
 12時前に課題が終わった人、もっと十分に練習したい人は以下の【応用演習問題】を行いなさい。(点数には加算しませんが、プログラムの勉強としてやってみるとよいでしょう。)


 【応用演習問題4】 

応用課題なので、時間が無ければやらなくて構いませんが、時間があれば、出来るだけやって下さい。

 新規プロジェクトを、  "Project0104" という名前で開きなさい。

Project0104

 
 100以下の7の倍数を画面に表示するプログラムを作りなさい。


 作ったプログラムの自分で書いた部分とその直前直後を、「コピー&ペースト」して、メール本文に添付して送りなさい。
 メールの内容は、課題2と同様に、番号氏名と、プログラム本文のコピペとします。

 メールの件名は、 "Project0104" とします。


 【応用演習問題5】 


 新規プロジェクトを、  "Project0105" という名前で開きなさい。

Project0105

 
 0から99までを次のように画面に表示するプログラムを作りなさい。


 
 0 1 2 3 4 5 6 7 8 9    
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99


 作ったプログラムの自分で書いた部分とその直前直後を、「コピー&ペースト」して、メール本文に添付して送りなさい。
 メールの内容は、課題2と同様に、番号氏名と、プログラム本文のコピペとします。

 メールの件名は、 "Project0105" とします。





  【アンケート調査項目】


(この文書をコピー・ペーストして、当てはまる物を残して、他を消してください。なお、回答は強制ではありません。回答したくない或いは、判断出来ない項目は、項目ごと文書を削除してください。)

1.1年後期のプログラミング入門の単位は取ってありますか。
 (はい、いいえ)

2.C言語に関しては、充分に理解していると思いますか。
 (充分理解している、ある程度は理解している、あまり自信はないがそれなりには理解している、ほとんど理解出来なかった)

3.C言語の以下の項目について、どのくらい理解していますか。マニュアルがあれば、ほぼ大丈夫なら ○、一応は理解したつもりだが、まだちょっと不安があるなら △、あまり理解出来ていないと思うのであれば × を選びなさい

 変数の型宣言 ( ○ △ × )
 printf 文( ○ △ × )
 if else 文( ○ △ × )
 for wile 文( ○ △ × )
 配列( ○ △ × )
 ポインタ( ○ △ × )
 関数( ○ △ × )

4.現在持って居る、C言語の教科書、参考書の名前を、憶えている限り全て書いてください。(複数記述可)書名や、著者、出版社が分かると良いのですが、うろ覚えの時は、何色のどんな感じの本だったと言うような記憶でも構いません。




5.自分専用のPC(或いは、家族共用でも必要に応じて使えるPC)は持って居ますか。持って居る場合は、1日平均何時間くらい使っていますか。
 (はい、いいえ)(平均  時間くらい)

6.普段PCでインターネットやメールなどを使っていますか。(除携帯・スマホ等)
(ほぼ毎日、週に数回程度、たまにしか使わない)

7.普段、携帯やスマホ等でインターネットやメールなどを使っていますか。
(ほぼ毎日、週に数回程度、たまにしか使わない、使った事が無い)


8.C言語以外で習ったことのある言語、使った事のある言語があったら書いてください。必ずしもそのプログラムが上手に出来る、と言う事でなくても構いません。(記述式、幾つでも)


9.自分でブログを書いたり、ホームページを持って居たりしますか。
 (ホームページなども自分で作って居る、特に積極的にはホームページは作っていないが学校の課題程度にはやったことがある、ブログくらいは書いたことがある、特に何もしていない)

10.SNS,掲示板,チャット,オークション,メッセンジャー系などで、普段使っている物があったら、差し支えない範囲で教えてください。(以下にある物以外ももちろん可)
(Twitter,LINE, mixi, GREE,Facebook,2ちゃんねる, Yahoo知恵袋,はてな,SKYPE 他いくつでも)





(ゲーム等に関しても、後日改めてアンケートをとりたいと思います。)

 以上です。ご苦労様でした。






 


 
C# での同じプログラムの書き方。
 


 同じプログラムを、C#で書くときには、かなり違う書き方になります。

 VisualStudio 起動後、新規プロジェクトで、 「C#」の「コンソールアプリケーション」を選びます。

 プロジェクト名を、たとえば、


 Project-cs0101

などとします。( cs は、 C Sharp の略と思います。)




画面への文字出力





                  

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello,this is C#\n");
            Console.ReadLine();
        }
    }
}


実行すると次のようになります









 プログラム実行時に起きるエラーへの対処法

「MSVCR90D.dll が見つからない」

 というエラーが出る場合があります。

 これは、VisualC++のバージョンの違いの整合性がとれていないためではないかと思われますが、なぜ、一部の人にだけ、時々現れるのかは分かりません。

 とりあえずの対応法として、 Visual C++ のプログラム画面の上のバーから、次のいずれか(または全部)の処理をするということが掲げられていました。

 実際の方法は、教室で指示します。

【対応法】

・[プロジェクト]→[プロパティ]→[リンカ]→[インクリメンタルリンクを有効にする]
・[プロパティ]→[マニュフェストツール]→[FAT32次善策の使用]
・[プロジェクト]→[プロパティ]→[C/C++]→[コード生成]→[ランタイムライブラリ]
  →[マルチスレッドデバッグ(/MTd)]

 (よく似た選択肢があるので、注意すること!)

 他のプログラムでも再度エラーが出る場合がありますので、その場合は、上記(特に 赤字の部分 を行ってください。)