Linux にログインし、以下の講義ページを開いておくこと

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
Java I 第2回 (4/18)
ファイルやフォルダを検索する ①「スタート」→「検索」→「ファイルとフォルダ」とクリックする。
情報工学基礎(改訂版) 岡崎裕之.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
基礎プログラミングおよび演習 第9回
第5回 ディジタル回路内の数値表現 瀬戸 ディジタル回路内部で,数を表現する方法(2進数)を学ぶ 10進数⇔2進数⇔16進数の変換ができる
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
初年次セミナー 第2回 文字の出力.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
Linux にログインし、以下の講義ページを開いておくこと
Linux にログインし、以下の講義ページを開いておくこと
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング言語入門 手続き型言語としてのJava
Cプログラミング演習.
プログラミング応用 printfと変数.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラムはどこに保存され,どこで実行されるのか?
プログラミング演習I 2003年6月25日(第10回) 木村巌.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
プログラムはどこに保存され,どこで実行されるのか?
第4回 コンピューティングの要素と構成 平成22年5月10日(月)
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
2013年度 プログラミングⅡ ~ はじめてのプログラミング ~.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
2017年度 プログラミングⅡ ~ はじめてのプログラミング ~.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
2014年度 プログラミングⅡ ~ はじめてのプログラミング ~.
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第1章 いよいよプログラミング!! ~文章の表示 printf~
地域情報学 C言語プログラミング 第1回 導入、標準出力、変数 2017年10月13日
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
第5回 プログラミングⅡ 第5回
vc-1. Visual Studio C++ の基本操作 (Visual Studio C++ の実用知識を学ぶシリーズ)
vc-3. ダンプリスト,配列 (Visual Studio C++ の実用知識を学ぶシリーズ)
情報処理Ⅱ 2006年11月24日(金).
情報処理Ⅱ 第7回 2004年11月16日(火).
C言語講習 第0章 Hello, world!.
高度プログラミング演習 (11).
標準入出力、変数、演算子、エスケープシーケンス
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
コンパイラ 2012年10月11日
情報処理Ⅱ 2005年11月25日(金).
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第1章 文字の表示と計算 printfと演算子をやります.
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

Linux にログインし、以下の講義ページを開いておくこと C プログラミング入門 基幹2 (月4) 02: C 言語のコンパイル Linux にログインし、以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/teachers/w483692/CPR1/ 2014-04-07

アンケート結果 単位:人 2014-04-07 C プログラミング入門 基幹2 (月4)

C で書かれたプログラム(ソースコード)をテキストエディタで作成する 端末エミュレータでコンパイルをする できたプログラム(実行ファイル)を実行する うまく動くまで、プログラムを修正する 手順は、講義資料ページに掲載しているので、それを読みながら進めてください 2014-04-07 C プログラミング入門 基幹2 (月4)

C プログラミング体験(1): ソースコード作成 前回ホームに作成したフォルダ CPR1 の中にフォルダ 02 を作成(今日の演習用) 右クリックして、新しいファイルを作成 名前を hello.c とする ダブルクリックして開く。 ただし、初期設定では前回使った gedit ではないエディタが開いてしまうので、まず右クリックしてプロパティを開き、「開き方」で gedit を選択して変更する。 2014-04-07 C プログラミング入門 基幹2 (月4)

Hello, world #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } 環境によって、円マークで表示されたり、バックスラッシュ(\)で書かれる。スライド資料では、バックスラッシュを表示するのが難しいので、円マークで統一します。 2014-04-07 C プログラミング入門 基幹2 (月4)

02 のフォルダ内で、ファイルのない部分を右クリックして、「端末の中に開く」 以下のコマンドを入力する(コンパイル) C プログラミング体験(2): コンパイル 02 のフォルダ内で、ファイルのない部分を右クリックして、「端末の中に開く」 以下のコマンドを入力する(コンパイル) gcc hello.c -o hello -Wall -Wextra 成功の場合は、何も表示されない プログラムにミスがある場合は、エラーメッセージが表示される プログラムを修正して、再度コンパイルをすることを繰り返す(デバッグ) 2014-04-07 C プログラミング入門 基幹2 (月4)

C プログラミング体験(3): 実行 プログラムの実行ファイルを確認 実行 ls コンパイルに成功していれば hello.c のほかに実行ファイル hello が表示される 実行 ./hello 文字列が表示され、コマンドプロンプトが再び表示される 2014-04-07 C プログラミング入門 基幹2 (月4)

1973 年、それまで機械語で書かれていた UNIX の開発を簡単にするために AT&T 研究所の Dennis Ritchie が開発 すでにつくられていたB言語を改良 1978年、Dennis Ritchie と Brian Kernighan が解説書 “The C Programming Language” を出版 (通称 K&R) 2014-04-07 C プログラミング入門 基幹2 (月4)

言語仕様の規格 1978: K&R 1989: ANSI C (C89) 1999: C99 2011: C11 デファクト スタンダード “The C Programming Language” 1989: ANSI C (C89) ISO/IEC 9899:1990 JIS X 3010:1993 1999: C99 ISO/IEC 9899:1999 JIS X 3010:2003 2011: C11 ISO/IEC 9899:2011 C99/C11 に対応した教科書などは最近徐々に増加している デファクト スタンダード 大改訂 現在も C89 の仕様が一般的に使用されている (ANSI C 準拠などと書かれている) 2014-04-07 C プログラミング入門 基幹2 (月4)

講義で学ぶ事項 文法 データ構造 アルゴリズム 標準ライブラリ 主に C89 キーワードや式 コンピュータでのデータの扱い 問題を解く方法 何が提供されているのか どのように使用するのか 主に秋期「C プログラミング」で扱う 2014-04-07 C プログラミング入門 基幹2 (月4)

C のソースコードをコンピュータが理解する機械語に変換するためのプログラム コンパイラで変換を行うことをコンパイルという コンパイラ (compiler) C のソースコードをコンピュータが理解する機械語に変換するためのプログラム コンパイラで変換を行うことをコンパイルという コンパイラは、文法的に正しくないコードに対して、エラーまたは警告を報告する 今日は全員、コンパイルと実行ができるようになってください 2014-04-07 C プログラミング入門 基幹2 (月4)

現在は、 C89 としてソースコードを解釈するが、オプションを付ければ C99 や C11 を使うこともできる GCC について Linux で標準的に使われるコンパイラ 詳しい説明は講義資料ページ参照 現在は、 C89 としてソースコードを解釈するが、オプションを付ければ C99 や C11 を使うこともできる 2014-04-07 C プログラミング入門 基幹2 (月4)

プログラムの様々な名称:全体 ディレクティブ 関数定義 #include <stdio.h> int main(void) { 特殊な指定 #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } ※詳しい解説はあとで。 関数定義 main という関数を 定義している ※数学でいう関数とは  意味合いが異なる  (詳細は次回) 2014-04-07 C プログラミング入門 基幹2 (月4)

プログラムの様々な名称: 関数 #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } 関数名 文 (関数呼び出し) 文 (制御構造) キーワード 2014-04-07 C プログラミング入門 基幹2 (月4)

疑問 #include って何しているの? int とか void って何? 最後の return 0 の意味は? 今後の講義で少しずつ、解説していきます 2014-04-07 C プログラミング入門 基幹2 (月4)

幾つかの関数 (function) で構成される 手続き (procedure) とも呼ばれ、C は手続き型言語と呼ばれる。関数型言語ではない(詳しくは調べてください) main という名前の関数を必ず一つ含む 数学でいう関数とは似ているところもあるが異なる OS はプログラムを実行すると、 main 関数を呼び出す(=実行する) 2014-04-07 C プログラミング入門 基幹2 (月4)

任意の関数名の後に引数列と呼ばれる部分を含む ( ) が付き、そのあとに文が続く 幾つかの文の列が { } に囲まれて書かれる 関数とは プログラムを構成する単位 任意の関数名の後に引数列と呼ばれる部分を含む ( ) が付き、そのあとに文が続く 幾つかの文の列が { } に囲まれて書かれる 上から順に実行される 1つの文は、; (セミコロン) で終わる 複数の文を { } で囲んでまとめたものをブロックといい、キーワードによって特別な制御がされる 関数の詳しい説明は次回以降説明 2014-04-07 C プログラミング入門 基幹2 (月4)

字句(トークン)の区切りが明確なら、自由に空白や改行を入れることが出来る。 書き方のルールをコーディングスタイルという。 フリーフォーマット 字句(トークン)の区切りが明確なら、自由に空白や改行を入れることが出来る。 書き方のルールをコーディングスタイルという。 バグを減らす・他人と共有する・未来の自分が読むためには、読みやすくすることが重要 #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } タブで字下げ 空白で区切り 改行で区切り 2014-04-07 C プログラミング入門 基幹2 (月4)

以下の3つの例はすべて同じプログラムですが、どれが読みやすいですか? フリーフォーマットの例 以下の3つの例はすべて同じプログラムですが、どれが読みやすいですか? #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } #include <stdio.h> int main ( void) { printf( "Hello, world!\n" ); return 0; } #include <stdio.h> int main(void){printf("Hello, world!\n");return 0;} 2014-04-07 C プログラミング入門 基幹2 (月4)

ホワイトスペース (whitespace) タブ (tab) 幅が設定によって可変 改行文字 エディタ上では折り返して表示される 空白類文字 空白、タブ、改行(といくつか)の総称 ホワイトスペース(空白類文字列) 空白類文字の連続 Tab | Enter ↲ 2014-04-07 C プログラミング入門 基幹2 (月4)

字下げ・インデント (indentation) ブロックの中を字下げして、読みやすくする 人によって書き方が違う 空白 8 つ 空白 4 つ 空白 2 つ タブ 1 つ 講義資料では 空白 2 つ分 タブと空白は見た目で区別ができませんが必ず使い分けること レポートの評価対象の一つ #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } 2014-04-07 C プログラミング入門 基幹2 (月4)

コメント (comment, remark) /* と */ で囲まれた部分 内容は無視される 入れ子にはできない 内容は無視される ソースコード内に、情報を書き込むために使用 C99 では // で始まるコメントも追加された 行末までがコメントとなる もともと C++ 言語で使われる文法 一般的なコンパイラでは独自拡張として対応 C89 では仕様違反だが、使用しても問題になることはおそらく無い 2014-04-07 C プログラミング入門 基幹2 (月4)

コメントの例 /* * こんにちは世界、と表示するプログラム * by Mochizuki */ #include <stdio.h> /* メイン関数 */ int main(void) { // print a message printf("Hello, world!\n"); // Cool! return 0; } 2014-04-07 C プログラミング入門 基幹2 (月4)

コンピュータの計算の仕組み コンピュータ 記憶装置 CPU 周辺機器 (peripheral) 実行ファイルの中身=機械語 (machine language) 010001000011010101010101011111010101010101010101010101001010111111111100000001010101010110100101 CPU 記憶装置 (memory) 実行 読み書き I/O 制御 コンパイル 周辺機器 (peripheral) ソースコード int main(void) { printf(“... 2014-04-07 C プログラミング入門 基幹2 (月4)

コンピュータが計算する=メモリの読み書き 2つの状態を持つスイッチのようなものがたくさん並んで入っている メモリ(記憶装置) CPU が読み書きする装置 コンピュータが計算する=メモリの読み書き 2つの状態を持つスイッチのようなものがたくさん並んで入っている 状態は変更するまで維持される(記憶) 電気を切ると状態が失われる(揮発性) 数、文字、画像、動画、音声などを記憶する どうやって? 2014-04-07 C プログラミング入門 基幹2 (月4)

状態 1 つ分を bit, 8 つで byte という単位で表現する 例: 4GB のメモリ メモリのサイズ 状態 1 つ分を bit, 8 つで byte という単位で表現する 例: 4GB のメモリ = 4 × 1024 MB = 4 × (1024)2 KB = 4 × (1024)3 byte = 4 × (1024)3 × 8 bit = 68,719,476,736 bit 1 bit … 1 byte (B) 色で、状態 (スイッチの ON/OFF) を表現している 2014-04-07 C プログラミング入門 基幹2 (月4)

メモリ上の表現: 数値 正の整数は 2 進法で表現 負の整数は最上位ビットを符号とみなす 小数 8bit では 0~255 の 256 通り表現可能 負の整数は最上位ビットを符号とみなす 複数の表現がある 小数 IEEE754 などの規格 難しいけどうまくできそうですよね? 正の整数 2進数 00000000 1 00000001 2 00000010 … 254 11111110 255 11111111 ■■■■■■□■■□□■■□□■■□ 253 25 メモリの状態を 0 か 1 とみなして、 8 bit ごとに整数だと思う場合の例 2014-04-07 C プログラミング入門 基幹2 (月4)

メモリ上の表現: 文字 文字それぞれに番号(文字コード)を振る 文字コードにはたくさん種類がある ASCII: アルファベットのコード(右表) JIS 漢字コード: 日本語用の文字コード Unicode: 世界中の文字に番号を振ったコード 1 2 3 4 5 6 7 @ P ` p ! A Q a q " B R b r # C S c s $ D T d t % E U e u & F V f v ' G W g w 8 ( H X h x 9 ) I Y y * : J Z j z + ; K [ k { , < L \ l | - = M ] m } . > N ^ n ~ / ? O _ o 2014-04-07 C プログラミング入門 基幹2 (月4)

メモリ上の表現: 画像 グレースケール画像の場合 サイズをあらかじめ決めておく 1ピクセルの濃淡値を 0~255 で表現 (0:黒, 255:白) メモリの中身 画像は画素の集まりでできている。これをディジタル画像という。 48 52 122 … 1マスは 8bit (1byte) で整数を表したもの カラーの場合は通常 RGB の 3 バイトで1ピクセルを表現 2014-04-07 C プログラミング入門 基幹2 (月4)

どんなデータでも、数値として表すことができれば、メモリやファイルに格納できる データ表現 どんなデータでも、数値として表すことができれば、メモリやファイルに格納できる C 言語では、整数や小数だけでなく、画像のような複雑な構造を持ったデータを簡単に扱える機能がある 以下のデータをどうやってメモリやファイルに格納するか?どうやって探し出すか?を考えるのが秋期の講義の目的 学生の成績情報、回路の配線図、地震のシミュレーション、音楽、パズルの答え、 etc… 2014-04-07 C プログラミング入門 基幹2 (月4)