プログラミング実習I

Similar documents
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

PowerPoint プレゼンテーション

Microsoft Word - no02.doc

gengo1-2

PowerPoint プレゼンテーション

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

講習No.1

02: 変数と標準入出力

JavaプログラミングⅠ

スライド 1

講習No.8

PowerPoint Presentation

ポインタ変数

第2回講義:まとめ

講習No.9

Microsoft Word - no103.docx

Microsoft Word - 3new.doc

PowerPoint Presentation

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

ポインタ変数

物質工学科 田中晋

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

プログラミング実習I

Report#2.docx

Prog1_2nd

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

数値計算

プログラミング基礎

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - C1(演算と変数).ppt

Report#2.docx

Microsoft PowerPoint - CproNt05.ppt [互換モード]

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

kiso2-09.key

Microsoft PowerPoint - program.ppt [互換モード]

Microsoft PowerPoint - 2.ppt [互換モード]

PowerPoint プレゼンテーション

講習No.10

Microsoft Word - Cプログラミング演習(1)_2012

ゲームエンジンの構成要素

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

02: 変数と標準入出力

第1回 プログラミング演習3 センサーアプリケーション

Java講座

Microsoft PowerPoint - 第1回目復習_pdf用.ppt [互換モード]

memo

Microsoft PowerPoint - 13th.ppt [互換モード]

情報処理Ⅰ演習

cp-7. 配列

プログラミング基礎

プログラミング基礎

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

JavaプログラミングⅠ

プログラミングI 第2回 数理物理,総合理学等向け

解答編 第 9 章文字データの取り扱い 演習問題 9.1 文法事項 1 ) コンピュータにおける 文字データの取り扱いについて説明しなさい コンピュータでは 文字に整数の番号を割り当てて ( コード化して ) 文字コードとして扱います 実際に用いられる文字コードとして ASCII コード EUC コ

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Taro-ポインタ変数Ⅰ(公開版).j

Microsoft Word - Cプログラミング演習(3)

Microsoft Word - Cプログラミング演習(11)

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

gengo1-11

PowerPoint プレゼンテーション

gengo1-8

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

演算増幅器

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

02: 変数と標準入出力

目次

sinfI2005_VBA.doc

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - 11.ppt [互換モード]

ポインタ変数

Microsoft PowerPoint - prog04.ppt

JavaプログラミングⅠ

PowerPoint Presentation

Cプログラミング1(再) 第2回

Microsoft PowerPoint - prog06.ppt

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft Word - java a.doc

Microsoft PowerPoint - 3.ppt [互換モード]

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

Microsoft Word - no11.docx

Microsoft Word - COMP-MATH-2017-FULLTEXT.doc

Taro-ファイル処理(公開版).jtd

Prog1_10th

Microsoft Word - no202.docx

Microsoft PowerPoint - 12.ppt [互換モード]

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

情報処理演習 B8クラス

スライド 1

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

Microsoft PowerPoint - 4.pptx

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

Microsoft PowerPoint - class04.ppt

Transcription:

プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp

3.1 変数と型

変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる. 代入できる値の範囲や精度は, 変数の型によって決まる. 参照 : プログラム中に変数名が現れると, 格納されている値に置き換わる.

フローチャート p.61 アルゴリズムを視覚化したもの #include <stdio.h> int main(void) { int a, b, c; scanf("%d", &a); scanf("%d", &b); c = a + b; if (c < 0) { printf( c は負です n"); } return 0; } はじめ データ a,b を入力 c a+b c < 0? Y c は負です と表示 おわり N

変数名の制限 p.62-63 教科書 p.62-63を参照してください. Q. 次のうち, 変数の名前として使えないのは? 1. when 2. if 3. 2days 4. a12345 5. hoge!hoge 6. fuga_fuga 7. ABC ( 注 : 全角文字 ) 8. (* ー )v

変数の型 p.63 char int 整数 表現できる数の範囲が異なる 前に unsigned をつけると, 正の数のみ扱う char 型変数は文字 ( アルファベット, 数字, 記号 ) を格納する. float double 実数 ( 浮動小数点数 ) 範囲 精度が異なる 表現できる値の範囲や精度 トレードオフ 占有するメモリ

整数型と格納可能な値の範囲 p.64 型名 ビット数 最小値 最大値 char 8-2 7 =-128 2 7-1 =127 short int 16 int long int 32 long long int 64-2 15 =-32768-2 31 =-2147483648-2 63 =-9223372036854775808 2 15-1 =32767-2 31-1 =2147483647-2 63-1 =9223372036854775807

ビットとバイト p.64 ビット (bit) コンピュータが扱う情報の最小単位. 二つの選択肢から一つを特定する (=0か1のいずれか決める ) のに必要な情報量が1ビット. バイト (byte) ( 一般的には ) 8ビット = 1バイト 1バイトで表すことができる選択肢の数は? 2 2 2 2 2 2 2 2 2 8 =256

実数 ( 浮動小数点数 ) p.65 コンピュータで実数 ( ただし有効桁数が決まっている ) を扱う際の表現方法. 絶対値が小さな数から大きな数まで, 先頭の桁からの正確さ ( 有効桁数 ) を同程度に保って情報を保持できる. C 言語では実数を保持する変数の型として,float と double が用意されている. 型 メモリ量 仮数部の桁数 (10 進数換算 ) 指数部の範囲 float 4 6 10-37 ~10 38 double 8 15 10-307 ~10 308

float の内部フォーマット p.65 float は一般的に,IEEE754 標準の binary32 形式 (32 ビット単精度浮動小数点数 ) で表現される. 符号部 : 1 ビット 仮数部 : 23 ビット 指数部 : 8 ビット 2.56 10 2 仮数部 指数部 double の場合 : 符号部 1 ビット, 指数部 : 11 ビット, 仮数部 : 52 ビット

参考 : 浮動小数点数各部の詳細 符号部 正ならば 0, 負ならば 1 となる. 指数部 実際の値に, ある固定値 emax (float の場合 127) を加算して表す ( バイアスされた表現 ). 0 と 255 は特殊な値として予約されているため, 表現できる指数は -126 から +127 である. 2 の補数による負の整数の表現とは異なる. 仮数部 最初の 1 ビットは常に 1 であるから省略され, 実質 24 ビットの精度を持つ ( ケチ表現 ; economized form).

文字 p.67 文字は char 型で表される 文字 1 つ 1 つに数字が対応している ( 文字コード ) 例 : A の文字コードは 65 'A' とすると, その文字の文字コードが得られる とアルファベット 1 文字 = 特殊記号 ( エスケープシーケンス ) n 改行 / t タブなど エスケープシーケンスは教科書の付録表を見る 当面, ひらがな カタカナ 漢字は忘れてください. char 型は 1 バイトしか格納できない. 日本語特有の文字は 2 バイト ( 以上 ) の領域が必要.

文字 を表示 / 文字コード を表示 p.70 #include <stdio.h> int main(void) { char c = 'A'; printf("%c %d n", c, c); return 0; } ここに注目同じ変数 c を異なる型で表示

定数の型 p.73 整数 int 型として扱われます. 16 進数表記 : 先頭に0xを付ける. 8 進数表記 : 先頭に0を付ける. 浮動小数点数 double 型として扱われます. 整数だけど浮動小数点数として扱いたい場合は,.0(. だけでもよい ) を末尾に付加する. 例 : 100.0 float 型にしたい場合は, 末尾にfを付ける. 例 : 3.14f

参考 : 2 進数 -10 進数 -16 進数の対応 2 進数 10 進数 16 進数 0 0 0 1 1 1 10 2 2 11 3 3 100 4 4 101 5 5 110 6 6 111 7 7 2 進数 10 進数 16 進数 1000 8 8 1001 9 9 1010 10 A 1011 11 B 1100 12 C 1101 13 D 1110 14 E 1111 15 F 10000 16 10

画面出力 / キーボード入力 p.74-75 printf( フォーマット, 変数, 変数,...); scanf( フォーマット, & 変数, & 変数,...); ただし,scanf であっても, 文字列 (char 配列 ) のときは & を付けない ( そのうち出てくるだろう ). printf と scanf のフォーマットはほとんど同じだが, double 変数のときは異なるので要注意. フォーマット文字列の詳細は参考書を見よ. double d; scanf("%lf", &d); printf("%f n", d);

主な printf のフォーマット文字列 p.75 %d: int 型変数 ; 整数 %c: int 型変数 ; 単一文字 %s: char 型配列 ; 文字列 %f: double 型変数 ; 浮動小数点数 %e: double 型変数 ; 科学的表記法 %g: double 型変数 ; 最適な表記法を自動選択 フォーマット文字列の指定と, 引数として与える変数の型が一致していないと, 予期せぬ内容が出力される. 例 : double d = 1.0; printf("%d n", d);

浮動小数点数の表示 p.75 printf のフォーマット文字列で以下を指定可能 通常の表記 (%f) / 指数表記 (%e) / 自動選択 (%g) 桁数および精度を指定可能 double d; printf("%xx.yyf",d); printf("%xx.yye",d); XX: 全体の文字数を指定 ( フィールド幅 ) YY: 小数点以下の桁数を指定 ( 精度 ) 省略した場合は 6 桁になる.

浮動小数点数の表示 : 例 p.75 #include <stdio.h> int main(void) { double e; e = 99.123456789012345; printf("%f n", e); printf("%.10f n", e); printf("%20.10f n", e); printf("%e n", e); printf("%.10e n", e); printf("%20.10e n", e); 出力結果 10 桁 99.123457 20 文字分 99.1234567890 99.1234567890 9.912346e+01 9.9123456789e+01 9.9123456789e+01 } return 0;

ついでに : 主な scanf のフォーマット文字列 %d: int 型変数 ; 整数 %c: char 型変数 ; 単一文字 %s: char 型配列 ; 文字列 ( 変数名に & は付けない ) %f: float 型変数 ; 浮動小数点数 %lf: double 型変数 ; 浮動小数点数 注意!! float 型と double 型でフォーマット文字列が異なる

変数の宣言場所 p.78 変数の宣言は { の直後 ( ブロックの先頭 ) でしかで きない. C 言語の仕様. { } でかこまれた部分を ブロック と呼ぶ. ブロックの中で宣言された変数は, そのブロック内のみ 有効. 全てのブロックの外で 宣言すると グローバル 変数 となる. int x; : if (x == 0) { int a = 1; : printf("%d n", a); /* OK */ } printf("%d n", a); /* NG */

変数の初期値 p.79 関数の中で ( つまりブロックの先頭で ) 宣言された変数の初期値は不定です. main() 関数であっても同じです. 変数は必ず初期化することを習慣付ける. ただし, グローバル変数 ( 関数の外で宣言された変数 ) の初期値は0であることが保証されている.

符号付き / 符号無し整数 p.83 char 型名 short int int long int -2 7 =-128-2 15 =-32768 signed unsigned 最小最大最小最大 -2 31 =-2147483648 2 7-1 =127 2 15-1 =32767-2 31-1 =2147483647 0 0 0 2 8-1 =255 2 16-1 =65535-2 32-1 =4294967295

式と演算子

だいたいが式 p.85 C 言語では思っている以上のものを式として扱う. 代入文も式 例 : a = 3 比較の条件も式 例 : a == 3 単なる変数 ( や関数呼び出し ) も式 例 : a 実は定数だけでも式 例 : 3 もちろん, 数学的に式らしい式も式 例 : y = a * x * x + b * x + c

四則演算 p.89 演算子 (operator): 数値や変数に対して何らかの処 理 ( 演算 ) を行うことを表す記号 1 + 2 の + は演算子 演算 数学 C 言語 加算 + + 減算 - - 乗算 * 除算 / 剰余 ( 余り ) % アスタリスク線が 5 本だったり 6 本だったりしますが同じもの

四則演算 p.90 演算子の優先順位に注意. 迷ったら () を付ければよろしい. 整数 / 整数の答えは整数になるので注意. 整数 / 整数の答えを小数点以下まで求めたいときにはどうすればよいか? int a, b; double c; a = 1; b = 3; c = a / (double) b; キャスト : 型の変換 double c; c = 1 / 3; double c; c = 1 / 3.0; double c; c = 1.0 / 3;

演算子の優先順位と結合規則一覧 p.94 高 低 () [] ->. 左から右! ~ ++ -- + - * & (type) sizeof 右から左 * / % 左から右 + - 左から右 << >> 左から右 < <= > >= 左から右 ==!= 左から右 & 左から右 ^ 左から右 左から右 && 左から右 左から右?: 右から左 = += -= *= /= %= &= ^= = <<= >>= 右から左, 左から右 注 : 上から 2 段目 + - は単項演算子 * は間接演算子 & はアドレス演算子

演算子の優先順位 p.94 以下の条件式はどう解釈されるか y+1<x&&y==z+10*x x!=y 演算子の間には優先順位がある 例えば,5 2+3 (5 2)+3 次の順に優先 ( 先に演算 ) される 乗算 除算 加算 減算 比較 論理積 論理和従って, (((y+1)<x)&&(y==(z+(10*x)))) (x!=y)

結合規則とは p.94 以下の計算結果は何になるか 12/5*3 これは当然ながら, (12/5)*3 結合規則は, 同じ優先順位の演算子が連続している場合に, 左側から適用していくか, 右側から適用していくか, を規定する. ほとんどの演算子は左から右

混合演算 p.95 演算は同じ型間で行われる. C 言語の方針 : なるべく効率よいように実行する 型の変換が必要なければ行わない. 1/3 が 0 になる理由はこれ. 異なる型間での演算は, 一方をより広い範囲の値が扱える型に変換して演算がなされる. 整数と浮動小数点数を演算するときは, 整数が浮動小数点数に変換されてから計算が行われ, 結果は浮動小数点数となる. 代入の場合は左辺値に変換される.

キャスト p.98 強制的に型を変換したい キャスト演算子を使う キャスト演算子 : () の中に型名が入っている. 例 (double) うまくいかない例 int i, j; double d; i = 1; j = 3; d = i / j; d は 0 になる. キャストを使う例 int i, j; double d; i = 1; j = 3; d = (double)i / j; d = i / (double)j; d = (double)i / (double)j;