プログラミング演習I 2003年4月30日(第3回) 木村巌.

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

プログラミング演習I 2004年4月21日(第2回) 木村巌.
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
A B x y z 復習 構造体変数 普通の変数 x y z 構造体変数 x y z 箱のイメージ 引き出しのイメージ
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
初年次セミナー 第4回 整数と実数の取り扱い.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
情報工学基礎(改訂版) 岡崎裕之.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ファイル操作と文字列の利用.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
第二回 VB講座 電卓を作ろう.
プログラミング応用 printfと変数.
第4回簡単な計算・プリプロセッサ.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
同じ構造をした「引き出し」変数を構造体変数と呼ぶ
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
第7回 プログラミングⅡ 第7回
コンピュータープログラミング(C言語)(2) 1.文字列出力と四則演算 (復習) 2.関数と分割コンパイル
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
2013年度 プログラミングⅡ ~ 計算してみよう ~.
2015年度 プログラミングⅡ ~ 計算してみよう ~.
整数データと浮動小数データ.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
情報処理Ⅱ 第2回:2003年10月14日(火).
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
地域情報学 C言語プログラミング 第1回 導入、標準出力、変数 2017年10月13日
地域情報学 C言語プログラミング 第2回 変数・配列、型変換、入力 2017年10月20日
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
情報処理Ⅱ 第2回 2004年10月12日(火).
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
printf・scanf・変数・四則演算
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

プログラミング演習I 2003年4月30日(第3回) 木村巌

知識編:C言語の初等文法 型と定数 変数を使う

実践編:コンパイルとは何か? プリプロセッサ コンパイラ アセンブラ リンカ 実際に各過程を見てみよう

実践編:それぞれの要素を用いた プログラミング 変数を使ったプログラミング

定数 整定数 浮動小数点定数 文字定数 文字列定数

整定数 10進定数……(1, 2, 3, …) 8進定数……(01, 02, 03, ……) 16進定数……(0x1, 0x2,……0x9, 0xa,…0xf) 整数接尾辞 U……符号なし(unsigned) L……ロング(long) LL……ロングロング (long long), C99のみ 表現できる数の範囲については、後述.

整定数(つづき) 8進表記を10進表記へ 10進表記を8進表記へ 例:010 = 1*8 + 0 = 8 011 = 1*8 + 1 = 9 017 = 1*8 + 7 = 15, 020 = 2*8 + 0 = 16. 10進表記を8進表記へ 23 = 2 * 8 + 7 = 027 36 = 4 * 8 + 4 = 044 73 = 1 * 8^2 + 1 * 8 + 1 = 0111

整定数(つづき2) 16進表記から10進表記へ 10進表記から16進表記へ 0x10 = 1 * 16 + 0 = 16, 0x19 = 1 * 16 + 9 = 25, 0x1a = 1 * 16 + 10 = 26, 10から15までに、aからfを当てる 10進表記から16進表記へ 23 = 1 * 16 + 7 = 0x17 321 = 1 * 16^2 + 4 * 16 + 1 = 0x141.

整定数(つづき3) 2進定数はないが、後で使うので、2進表記の話.各桁に0, 1のみを使う 2進表記から10進表記へ (10) = 1*2+0*2^0=2, (11)=1*2+1*2^0=3, (100)=1*2^2+0*2^1+0*2^0=4,… 10進表記から2進表記へ 5=1*2^2+0*2^1+1*2^0 = (101),…, 8 = (1000),

b進表記 bを勝手な自然数とする 任意の自然数nは、 n = d_r*b^r + d_(r-1)*b^(r-1) +・・・+d_1*b + d_0, (0≦d_i < b, i = 0,……r) と表される. bを基数(radix)、各d_iをdigitという.

b進表記の求め方 (1) nをbで割った余りをdとする. (2) dをこの回に求めたdigitとして出力 (3) (n-d)が0でなければ、(n-d)/b を新たにnとして、(1)に戻る.(n-d)が0なら、終了. (3)から(1)へ戻るときに、nが真に減少する((n-d)/bはnをbで割った商)ので、必ず停止する.

浮動小数点定数 常に10進表記 float, double, long doubleの3種あり 例 0., .0 1.0, 1.0f 3e1, 1.0E-3, .00034 1.0e67L

文字定数・文字列定数 文字定数 文字列定数 例: ‘a’, ‘b’, ‘c’, …… ‘A’, ‘B’, ‘C’,…… ‘ ‘,…… 例 “ABC”, “abc”, “hello world”,……

型 型:値の集合と、それらの値に対して行われる演算の集合を組にしたもの 例:整数型、浮動小数点数型、文字型 Cには文字列型は存在しない! 文字型の配列として実現されている

変数を使う 値を保存できるモノ 保存するものの型に応じて、変数も型を持つ

変数を使う(続き) 使う前に「宣言」する必要がある 先頭で宣言する. 宣言の仕方: 型 変数名; int i; double a; コンパイラに対して、その型の値を保持できる場所を確保し、変数名で識別せよ、という指令を出している.

変数を使う(続き2) #include <stdio.h> #include <stdlib.h> #include <math.h> int main (int ac, char *av[]) { double arg; if (ac < 2) exit (EXIT_FAILURE); arg = atof (av[1]); printf (“square root of %f = %f.\n", arg, sqrt (arg)); return 0; }

変数を使う(例3) double arg; argというdouble型の変数を導入し、atof(av[1])の値を保存.

コンパイルとは何か? 人間が読めるCのソースを、コンピュータが実行できる形式に翻訳する プリプロセス、コンパイル、アセンブル、リンク、の過程に分かれる.

コンパイルの各過程(1) プリプロセス コメント(/* */で挟まれた部分)を空白に置き換える #include <ファイル名.h>を、そのファイルの内容と置き換える その他(定数の定義、条件コンパイルなどプリプロセッサの他の機能は後の回で紹介します)

コンパイルの各過程(2) コンパイル アセンブラ? プリプロセスがすんだCのソースを、アセンブラへ翻訳 機械語ともいう. CPUに直接命令する形式の、機械に密着したレベルの言語 まだ人間が読める(端末に表示できる)

コンパイルの各過程(3) アセンブル アセンブラを、コンピュータが直接実行できるファイルに変換 できたファイルを、オブジェクトファイルともいう この時点で、直接端末に表示することはできない

コンパイルの各過程(4) リンク オブジェクトファイルを、最終的な実行可能ファイルに変換する 複数のファイルからなるプログラムなら、それらを一つに結合 標準ライブラリ関数、もし必要であれば数学関数など、他のライブラリを結合 スタティックリンクとダイナミックリンク リンカーオプションについての説明.数学関数を使うなら –lm がいるとか.

実際に各過程を見てみよう 前回のhello.cを例に、各過程を見る gcc –E hello.c | less gcc –S hello.c これがプリプロセス後のファイル gcc –S hello.c less hello.s これが、コンパイル後のアセンブラファイル

実際に各過程を見てみよう(続) gcc –c hello.c ls hello.o objdump –d hello.o | less これがオブジェクトファイルとアセンブラの対応 gcc –o hello hello.c objdump –d hello | less これが、実行可能ファイルとアセンブラの対応 リンカが付加した情報が増えている

まとめ 定数、型、変数について学んだ 2進、8進、16進表記について学んだ 「コンパイル」の時に、実際は何が行われているのかを学んだ

レポート課題 問1 次の計算を行え. 問2 10進の365の2進、8進、16進表記を求めよ 締め切り:2003年5月6日一杯(日本時間で) 問1 次の計算を行え. (1) 02+06, (2) 03*06, (3) 044 / 03 (4) 0x7+0x9, (5) 0x5*0x5, (6) 0x3c/0x8 (6)については、商と余りを求める. 問2 10進の365の2進、8進、16進表記を求めよ 締め切り:2003年5月6日一杯(日本時間で) 提出先:メールで木村(iwao@sci.toyama-u.ac.jp)まで.