Comments
Description
Transcript
2015年度 プログラミング入門 第1回講義
Copyright (C) 1999 - 2015 by Programming-0 Group Prog-0 2015 Lec01-3 4/10 4/17 4/24 5/1 5/15 5/22 5/29 6/5 6/12 6/19 6/26 7/3 7/10 7/17 7/24 5/8(金)は水曜時間割 1 コンピュータとは~Helloの表示 2 変数・入出力・演算 3 様々な型・型変換 4 選択(分岐) – if、switch/case 5 ループ(その1) – while 6 ループ(その2) – for – 7 1次元配列 8 フローチャート 9 中間試験 10 スペシャルレクチャ 11 2次元配列 12 2次元配列の復習と応用 13 関数(その1) 14 関数(その1) 15総復習・良いプログラミングのスタイル Copyright (C) 1999 - 2015 by Programming-0 Group プログラミング入門の授業予定 Prog-0 2015 Lec01-1 下に置いてありますから、各自自分のディレクトリにコピーして、 コンパイル・実行してみてください マークのあるサンプルプログラムは /home/course/prog0/public_html/2015/lec/source/ 項目の後の()内は、その 項目の先頭ページを示し ています。 また項目の先頭ページは タイトルの色が薄青(この 色)になっています。 授業情報(2) コンピュータとは(9) コンピュータ言語と実行(15) Helloを表示するプログラム(21) プログラミング入門 第1回講義 2015年度 授業担当 大津山 久田 出村 クラス C1, 2 C3, 4 C5, 6 中里(C5) 北里(C3) 大藤(C1) 演習担当 平田(C6) 三瓶(C4) 小川(C2) Copyright (C) 1999 - 2015 by Programming-0 Group Prog-0 2015 Lec01-4 アルファベットの Lの小文字 数字の1 アルファベットの Lの小文字 Copyright (C) 1999 - 2015 by Programming-0 Group 学外アクセス:上記学内アクセスより最大1時間程度の更新の遅れがあるため 学内では必ず上記学内アクセスURLを使用すること。なお、成績は学内でしか見 られない。 http://www.u-aizu.ac.jp/course/prog0/ 学内アクセス file:///home/course/prog0/public_html/2015/welcome.html 演習課題・電子資料 詳しくはシラバスを参照して下さい 良く知っている人は講義・演習を免除される場合があります ⇨ スキップテストを実施します(P7に詳細) C言語のプログラミング技術の基礎、良いプログラムとはどんなものか? コンピュータとは何なのか? プログラミングとは何なのか? プログラミング入門 では何を学ぶのか? Prog-0 2015 Lec01-2 質問する時には学籍番号と氏名を必ず名乗って下さい [email protected](教員とTA/SA) 演習の質問 授業・演習時間以外の質問はメールにて行なってください [email protected] (教員) 授業の質問等 演習時には演習補助として大学院生のTAと、学部生のSAがいます。 分からない所はどんどん質問して下さい。 TA(Teaching Assistant)/SA(Student Assistant) 教員 スタッフ紹介 1年後期 2年前期 2年後期 C++プログラミング Copyright (C) 1999 - 2015 by Programming-0 Group JAVA アルゴリズムと プログラミング データ構造 Prog-0 2015 Lec01-7 テスト内容:プログラム作成(ペーパーテスト) 持ち込む事が出来るもの:筆記用具のみ Copyright (C) 1999 - 2015 by Programming-0 Group この日時にしか実施しませんから、授業や用事があり参加できない者は上記skipの 認定は行いません。 日時・場所:4月9日(木) 5限 場所:未定 スキップテストの開催要項 skip(2):講義出席(クイズ)・演習(課題提出)が免除されます。 skip(1):講義出席(クイズ)が免除されます。演習課題の提出は必要です。 但し、スキップ認定されても中間・期末試験は必ず受けねばなりません。 単位取得ならびに成績がAになる保証もありません。 免除された時間を生かし、プログラミングスキルの更なる向上を目指して下さい。 テスト成績によって以下の2種類の認定を行います。 充分C言語に関する知識がある人に対して、授業・演習を免除す るスキップテストを行います。(希望者のみ) スキップテストに関して Prog-0 2015 Lec01-5 1年前期 プログラミング入門 プログラミングC 赤矢印は先修条件 ・JAVAプログラミング、 ・アルゴリズムとデータ構造、 ・C++プログラミング の3つのコースは、先修条件として、プロ グラミング入門又は後期プログラミングC が必要です。 プログラミング関連ロードマップ 難しさ Prog-0 2015 Lec01-8 授業の前に.. Prog-0 2015 Lec01-6 1 Copyright (C) 1999 - 2015 by Programming-0 Group 授業をしっかり聞いて、自分のハンドアウトに 記入し、完成させてください ハンドアウトは何箇所か意図的に伏字にな っています。言わば 未完成 です。 予習・復習時には必ず教科書も参照して 下さい(ハンドアウトには必要に応じて 教科書のページを記載してあります) 全てを網羅している訳ではありません ハンドアウト(この書籍の事)は教科書の エッセンスです。 聞きなれない、知らない言葉もどんどん 質問してください。 授業中、つい専門用語(業界?用語)を 使ってしまう事があるかもしれません。 分からない事はその時・その場で 質問してください。 人間の記憶はそう長くは持ちません。 Copyright (C) 1999 - 2015 by Programming-0 Group なお、事故・病欠・忌引き等避けられないもの以外の公休(大会参加など)は 授業・演習ともに欠席扱いとします。但し演習問題は事前に提出が可能なので、 2週間前までに相談してください。 中間試験または期末試験に欠席した 授業または演習の出席回数が全体の2/3に満たない 以下のいずれか一つにでも該当する者には単位を与えません 授業と演習が融合した内容の回があります 課題作成(30点) 一部課題の提出は演習時間内が締め切りとなります 演習(週2コマ) ー 詳しくは演習時に説明があります 期末試験(40点) 中間試験(20点) クイズ提出は出席確認を兼ねます。また遅刻は欠席扱いになります。 クイズ(10点) 毎週授業中に15分のクイズを行う。内容は前回の復習。 コースは以下のような構成で行われ、それぞれ評価を行います。カッコ内 は配点です(合計100点) 授業(週1コマ) 成績配点と出席について ブラックボックス 3 日付、時間の表示 ファイルの一覧の表示 「出力」:コンピュータが処理した結果 2 キーボード デジカメ/Webカメラ Prog-0 2015 Lec01-11 ディスプレイ プリンタ プロジェクター 出力のためのハードウェアの例 マウス 入力のためのハードウェアの例 ハードウェア Prog-0 2015 Lec01-9 ハードディスク SSD ネットワークカード Bluetooth機器 Copyright (C) 1999 - 2015 by Programming-0 Group 無線LAN 通信のためのハードウェアの例 メモリ 記憶のためのハードウェアの例 Copyright (C) 1999 - 2015 by Programming-0 Group 「入力」に応じて違う処理をするために 「プログラム」 が用いられる。 dateコマンド lsコマンド 「入力」:コンピュータへ与える情報 入力に応じて出力が変わる。 コンピュータとは「入力」と「出力」がある ブラックボックス だと考えると分かりやすい。 コンピュータとは? ソフトウェア dateコマンドなど 装置 (ハードウェア) プログラム (ソフトウェア) 6 Prog-0 2015 Lec01-12 ARMなどの組み込み用プロセッサ SH(セガのゲーム機)やMIPS(Nintendo64, PlayStation2など) Intel x86系[Intel Core i7や、AMD Phenom II等の x86互換チップ](WindowsPC, WS, Macなど) PowerPC系(旧Macintosh,ゲームキューブ, Xbox360, PlayStation3など) Sparc(Sun Sparc Workstation) 現在では以下のようなCPUが使用されている どんどん高速化し、現在では3GHzを超える ものもある(1クロックの時間0.33ナノ秒で光 は10cmしか進まない)。 ソフトウェアからの指令を解読して、 計算を実行する。 中央処理(演算)装置 CPU (Central Processing Unit) コンピュータの考える頭脳 Prog-0 2015 Lec01-10 (人間からの指示) lsコマンド lsコマンド コンピュータ 5 ファイルの一覧の表示 ハードウェア Core 2 Copyright (C) 1999 - 2015 by Programming-0 Group Core i7 die photo Core i7 Copyright (C) 1999 - 2015 by Programming-0 Group 4 以下の2つの構成要素からなる 実際にプログラムからの指示を実行する装置 たくさんの「プログラム」 コンピュータの構成 10 Prog-0 2015 Lec01-15 言葉なら ジェスチャー 定規を取って ください 正確に指示を伝えることが出来る。 了解、了解! 何を伝えたいの? 良く分からない! あるきまり( 文法 と呼ぶ)によって記述される。 言語とは Prog-0 2015 Lec01-13 7 CPU に比べてスピードが遅い。 電源が切れると情報は消えて しまう(携帯電話やデジカメで 使用されているフラッシュメモリ は消えない)。 大容量(1GBは当たり前) DRAMの特徴 ソフトウェア(の指令)や必要な データを保管する。 DRAM(Dynamic RAM)という 記憶素子を使用する。 主記憶装置 メモリ コンピュータの記憶する頭脳 Copyright (C) 1999 - 2015 by Programming-0 Group Copyright (C) 1999 - 2015 by Programming-0 Group Copyright (C) 1999 - 2015 by Programming-0 Group Prog-0 2015 Lec01-16 int i; for(i=0;…. main(){ でもコンピュータは直 接理解出来ない でも人間は理解する のが非常に困難 0111 0010 1010 1110 0001 1100 人間が理解しやすい 言葉 高級言語 コンピュータが直接理 解出来る言葉 機械語 Copyright (C) 1999 - 2015 by Programming-0 Group その他にもこの丁度中間に位置 する「アセンブリ言語」というもの もある。(1年後期システム概論 で習う) 人間にもいろいろな言語があるように、コンピュータにもいろ いろな言語がある コンピュータの言語 (コンピュータに対する指令) Prog-0 2015 Lec01-14 皆さんの作るプログラムもここに入る 必要に応じて使用するソフトウェア 9 アプリケーションソフトウェア: MS-DOS/Windows MacOS などなど、コンピュータの資源や働きなどを 配分、協調、管理するのに必要不可欠な ソフトウェア Unix(Linux,BSD,Solaris,Irix,AIX...) 8 基本ソフトウェア (オペレーティングシステム、OS) : ソフトウェアの種類 Prog-0 2015 Lec01-19 gcc xx.c コンパイル a.out ./a.out 実行 12 更に「 ./a.out 」 と入力することで、 このa.outファイルを実行する。 Copyright (C) 1999 - 2015 by Programming-0 Group 「gcc xx.c」(xx.cは作成したcファイルの名前)と入力することで、 このプログラムをコンパイルし、実行ファイルa.outを作成する。 コンピュータ が実行 Copyright (C) 1999 - 2015 by Programming-0 Group 演習ではコンパイラとして「gcc」を使用する。 xx.c (Cプログラムのファイル) 皆さんの演習の場合 Prog-0 2015 Lec01-17 COBOL: 現在でも主に銀行系などのオンラインなどに多く使われている。 LISP: 人工知能などに良く用いられる。 BASIC: パソコンの世界では古くから使われてきた。「Visual Basic」として現在も Windowsでは割と良く使われる。 FORTRAN: 科学計算に良く用いられる。 PL/I: 汎用計算機でのプログラミング言語として一時良く用いられた。 C: 現在最も ポピュラー 11 なプログラミング言語である。 C++: Cにオブジェクト指向の考えを取り入れたもの。「VisualC++」はWindowsの 開発環境として有名。 Java: インターネットへの親和性が高く、機種に依存せずプログラムが作成でき る。携帯電話にも使用されている。 高級言語にはいろいろな種類がある 高級言語 機械語 実行 コンピュータ コンピュータ 13 の普及につれて(それ以上に)C言語は普及した。 Prog-0 2015 Lec01-20 Copyright (C) 1999 - 2015 by Programming-0 Group C++、JavaなどはCの拡張で、基本的な文法はほぼ同じである。 現在では C言語に関するANSI(アメリカ)/ISO(世界)/JIS(日本)の各標 準規格が制定されている(どれも内容は同じ。ANSIが有名)。 つまり現在C言語は世界で一番普及しているコンピュータ言語である。 (人間の言葉で言えば英語みたいなものと言えば分かりやすい) また、ほとんどのコンピュータにC言語のコンパイラが存在する。 現在存在するコンピュータ(パソコンからスーパーコンピュータまで)で稼 働しているソフトウェアのかなりの部分がC言語で作成されている。 やがて Unix Ritchie はC言語でミニコンピュータのオペレーティングシステムである Unixを開発(作成)した。 Copyright (C) 1999 - 2015 by Programming-0 Group インタプリタは高級言語を逐次翻訳して直接実行する。 ただし、実行スピードは遅い。 逐次翻訳・実行 B言語の後継として登場(Dennis Ritchie, 1972 Bell Labs.) C言語 Prog-0 2015 Lec01-18 インタプリタ言語 (Java/BASICなど) その2 コンパイル コンパイラは高級言語を機械語に翻訳する。この機械語プログラムを実行する。 2ステップに分かれていて面倒だが、実行スピードは速い。 コンパイラ言語 (C/FORTRANなど) その1 高級言語をコンピュータに理解させる方法 メッセージは ” で囲む printf("Hello\nWorld"); printfを分けても 改行はされない Prog-0 2015 Lec01-23 Copyright (C) 1999 - 2015 by Programming-0 Group /home/course/prog0/public_html/2015/lec/source/lec01-2.c このハンドアウトでは分りやすくするために全角の「\」を使用している。実際にプログラムを作成する時には半角の 逆スラッシュを使用すること。 注:「\」(逆(バック)スラッシュ)記号は日本語環境では「¥」記号となるので、 本によっては改行を「¥n」と表示しているものもある。 printf("Hello"); printf("World"); HelloWorld Hello World printf("HelloWorld"); 出力 改行文字(p.34)と出力の仕方の違い Copyright (C) 1999 - 2015 by Programming-0 Group \n は表示を改行させる「改行文字」 Prog-0 2015 Lec01-21 上の文の意味:メッセージ(Hello)と改行(\n)をディスプレイに表示する printf("Hello\n"); 14 { から } の中にプログラムを記述する。 3行目以降がプログラム本体。原則として上から 下へ順番に実行。文末にはセミコロン ; が必要。 2行目は、プログラムの最初であることを示す。 (正確には関数mainの始まり) main の前にint、後ろに()を忘れずに。 1行目の#includeと、}前のreturn 0は、後 で勉強する。(今はおまじない) 標準出力(ディスプレイ)にメッセージを出力する はじめての命令文 「printf」 } return 0; 文n; ~ 文2; 文1; int main(){ #include <stdio.h> Cプログラムの基本構造 Prog-0 2015 Lec01-24 Copyright (C) 1999 - 2015 by Programming-0 Group /home/course/prog0/public_html/2015/lec/source/lec01-3.c #include <stdio.h> int main( ){ printf("1+2=%d\n",1+2); return 0; } std1dc1{s1000000}1: gcc lec01-3.c 実行結果 std1dc1{s1000000}2: ./a.out 1+2=3 実行 std1dc1{s1000000}3: (emacsで作成し、ファイル lec01-3.c に保存したとする) 1+2と言う式の値(つ まり3)が計算され、%d の部分に表示される その他の部分はそのま ま表示される。 /home/course/prog0/public_html/2015/lec/source/lec01-1.c Copyright (C) 1999 - 2015 by Programming-0 Group std1dc1{s1000000}1: gcc lec01-1.c std1dc1{s1000000}2: ./a.out Hello 実行 std1dc1{s1000000}3: lec01-1.cをコンパイルする 1+2を計算するプログラム Prog-0 2015 Lec01-22 実行結果 見易さのために、キー入力を青で、 プログラム出力を赤で表示 #include <stdio.h> int main( ){ printf("Hello\n"); return 0; } terminal の画面上に Hello と表示させるプログラム(emacsで作成し、 ファイル lec01-1.c に保存したとする) Helloと表示するプログラム(p.26)