SlideShare a Scribd company logo
1 of 84
C/C++ ゼミ (1) プログラムの原理、C言語の原理 2008.4.12
agenda ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
プログラムの原理
プログラムとは ,[object Object],[object Object],[object Object]
プログラム言語 Via http://www.itmedia.co.jp/enterprise/articles/0703/26/news021.html
0と1 ,[object Object],[object Object],[object Object],[object Object]
マシン語 ,[object Object],[object Object],[object Object],[object Object],[object Object]
アセンブリ言語 ,[object Object],[object Object],[object Object],[object Object]
高級言語 ,[object Object],[object Object],[object Object],[object Object],MOV AL, 61 a = 61
プログラム言語 Via http://www.itmedia.co.jp/enterprise/articles/0703/26/news021.html
プログラム言語はさらに進化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
プログラム言語 Via http://www.itmedia.co.jp/enterprise/articles/0703/26/news021.html
言語の水準 ,[object Object],[object Object],[object Object],[object Object]
なんでこんなにたくさん言語が? ,[object Object],[object Object],[object Object],[object Object],[object Object]
抽象化
抽象化とは ,[object Object],[object Object],[object Object],[object Object],[object Object]
抽象化とは ,[object Object],[object Object],[object Object],[object Object]
たとえば ,[object Object],[object Object],[object Object],MOV AL, 61 a = 61
データと手続き ,[object Object],プログラム データを入力 加工 出力
構造化プログラミング ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
順番に実行する(順次) 処理 1 処理 2 処理 3
条件によって分岐する(分岐) 条件 処理 1 処理 2
何度も繰り返す(反復) 条件 処理 1 処理 2
手続き抽象化 ,[object Object],[object Object]
サブルーチン ,[object Object],[object Object],[object Object],サブルーチン 入力 加工 出力
サブルーチンのいいところ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
構造化プログラミング ,[object Object],[object Object],[object Object]
構造化プログラミング メインルーチン サブルーチン サブルーチン サブルーチン サブルーチン サブルーチン 入力 出力
データ抽象 ,[object Object],[object Object],[object Object],[object Object],[object Object]
気をつけること ,[object Object],[object Object],抽象度高 抽象度低 らくちん はやい 0 と 1 の世界 マシン語とか 低水準 高水準 超高水準 超高水準
気をつけること ,[object Object],[object Object],[object Object],[object Object],[object Object]
コンピュータ・アーキテクチャ
コンピュータの構成 CPU ハード ディスク メモリ 入力インタフェース 出力インタフェース マウス、キーボード、カメラ ディスプレイ、プリンタ、スピーカ
CPU ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
レジスタ ,[object Object],[object Object],[object Object]
Via http://en.wikipedia.org/wiki/Central_processing_unit
メモリとアドレス ,[object Object],[object Object],[object Object],アドレス 0001 0002 0003 … メモリ データ データ データ …
ハードディスク ,[object Object],[object Object],[object Object]
プログラムとメモリ ,[object Object],[object Object],[object Object],CPU ハード ディスク メモリ レジスタ 遅い 超遅い 速い
コンパイラ
コンパイラ ,[object Object],[object Object],[object Object],[object Object],[object Object],コンパイラ コンパイル ソース コード 実行可能 オブジェクト
インタプリタ ,[object Object],インタプリタ 命令 実行 命令 実行
スクリプト ,[object Object],[object Object],[object Object]
コンパイラとインタプリタ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
とりあえずコンパイルしてみる ,[object Object],[object Object],[object Object],$ gcc hello.c $ a.out
アセンブリ ,[object Object]
のぞいてみる $ gcc hello.c –S $ gedit hello.s
リンク ,[object Object],[object Object],[object Object]
ソースコード オブジェクト ライブラリ 実行可能 オブジェクト コンパイル リンク
[object Object],$ gcc hello.c
リンクしてみる ,[object Object],$ gcc hello21.c –c hello21.o $ gcc hello22.c –c hello22.o $ gcc hello21.o hello22.o –o hello2 $ hello2 ,[object Object],[object Object],[object Object],[object Object]
バイナリ ,[object Object],[object Object],[object Object],[object Object]
バイナリファイルの中を見てみる ,[object Object],$ gedit hello2
C 言語の基礎知識
C言語(歴史的な話) ,[object Object],[object Object],[object Object]
CとC++とJava ,[object Object],[object Object],[object Object]
抽象度の水準 ,[object Object],[object Object],[object Object],[object Object]
ANSI C ,[object Object],[object Object],[object Object],[object Object]
本題
Cのプログラムの構成 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
変数
変数 ,[object Object],[object Object],[object Object],[object Object],[object Object]
データ型 ,[object Object],[object Object],[object Object]
宣言 ,[object Object],[object Object],[object Object],[object Object]
コード /*  変数の宣言  */ int a; double b; a = 10; b = 1.5;
メモリのイメージ アドレス 0001 0002 0003 … メモリ 10 ?? 1.5 … a b
関数
関数 ,[object Object]
関数を呼び出す ,[object Object],[object Object],[object Object],printf(“hello world!!”); 関数名  (  引数リスト  );
関数からの出力がある場合 ,[object Object],[object Object],result = pow( 5, 2);
関数を自作 int square ( int n ) { int result; result = n*n; return result; } 返り値の型 関数名  (  引数リスト  ){ 中身 }
関数を宣言する ,[object Object],[object Object],[object Object]
プロトタイプ宣言 int square( int n ); int main(void) { ... val = square( 5 ); ... } int square( int n ) { ... }
void ,[object Object],[object Object],int foo(void); void woo( int n ){ ... }
printf の宣言や本体はどこにある? ,[object Object],[object Object],#include <stdio.h> … Int main(void) { … … int printf(...); … … int printf(...) { … } … stdio.h 自作ファイル ライブラリ
Hello World!
Hello World! ,[object Object],#include <stdio.h> int main(void) { printf(“hello world!”); return 0; }
#include ,[object Object],[object Object],[object Object]
標準ライブラリ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
main ,[object Object],[object Object],[object Object]
printf ,[object Object],[object Object],[object Object],[object Object]
と文字 ,[object Object],[object Object],[object Object],[object Object]
今後の予定
予定! ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

Similar to C language Sem 01

Macで開発環境を整える170420
Macで開発環境を整える170420Macで開発環境を整える170420
Macで開発環境を整える170420Toshiyuki Shimono
 
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用Ruo Ando
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表Hirotaka Kawata
 
システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論shigaoki
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1openrtm
 
20130329 rtm2
20130329 rtm220130329 rtm2
20130329 rtm2openrtm
 
C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみようOsamu Masutani
 
130329 02
130329 02130329 02
130329 02openrtm
 
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能youten (ようてん)
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - FuncGosuke Miyashita
 
Android道第1回公開用
Android道第1回公開用Android道第1回公開用
Android道第1回公開用Takaya Funabiki
 
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能youten (ようてん)
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflowionis111
 

Similar to C language Sem 01 (20)

Macで開発環境を整える170420
Macで開発環境を整える170420Macで開発環境を整える170420
Macで開発環境を整える170420
 
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
 
システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論システムと情報の数理・ネットワーク概論
システムと情報の数理・ネットワーク概論
 
IT魔導の書 ~ Grimoire du IT
IT魔導の書 ~ Grimoire du ITIT魔導の書 ~ Grimoire du IT
IT魔導の書 ~ Grimoire du IT
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1
 
20130329 rtm2
20130329 rtm220130329 rtm2
20130329 rtm2
 
C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみよう
 
130329 02
130329 02130329 02
130329 02
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
 
Android道第1回公開用
Android道第1回公開用Android道第1回公開用
Android道第1回公開用
 
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
(デ部発表用抜粋版)プログラマとデザイナが共有すべきUIに関するAndroidの10の機能
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 

More from Kosei Moriyama

Object meta-level control on ECMA Script 5
Object meta-level control on ECMA Script 5Object meta-level control on ECMA Script 5
Object meta-level control on ECMA Script 5Kosei Moriyama
 
Chrome Web Store に登録してみた
Chrome Web Store に登録してみたChrome Web Store に登録してみた
Chrome Web Store に登録してみたKosei Moriyama
 
Programming Contest Hacks
Programming Contest HacksProgramming Contest Hacks
Programming Contest HacksKosei Moriyama
 
Firefox 学生向けアドオンパック
Firefox 学生向けアドオンパックFirefox 学生向けアドオンパック
Firefox 学生向けアドオンパックKosei Moriyama
 
Introduction To Google App Engine
Introduction To Google App EngineIntroduction To Google App Engine
Introduction To Google App EngineKosei Moriyama
 
Survey of the Ontology - オントロジーについての調査
Survey of the Ontology - オントロジーについての調査Survey of the Ontology - オントロジーについての調査
Survey of the Ontology - オントロジーについての調査Kosei Moriyama
 

More from Kosei Moriyama (6)

Object meta-level control on ECMA Script 5
Object meta-level control on ECMA Script 5Object meta-level control on ECMA Script 5
Object meta-level control on ECMA Script 5
 
Chrome Web Store に登録してみた
Chrome Web Store に登録してみたChrome Web Store に登録してみた
Chrome Web Store に登録してみた
 
Programming Contest Hacks
Programming Contest HacksProgramming Contest Hacks
Programming Contest Hacks
 
Firefox 学生向けアドオンパック
Firefox 学生向けアドオンパックFirefox 学生向けアドオンパック
Firefox 学生向けアドオンパック
 
Introduction To Google App Engine
Introduction To Google App EngineIntroduction To Google App Engine
Introduction To Google App Engine
 
Survey of the Ontology - オントロジーについての調査
Survey of the Ontology - オントロジーについての調査Survey of the Ontology - オントロジーについての調査
Survey of the Ontology - オントロジーについての調査
 

Recently uploaded

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (9)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

C language Sem 01