C言語入門

Size: px
Start display at page:

Download "C言語入門"

Transcription

1 1 C 言語入門 第 3 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む )

2 2 リダイレクト 先週の復習

3 3 出力のリダイレクト 書式 : コマンド > ファイル コマンドの出力をファイルに繋ぐ コマンド実行時の出力をファイルに保存出来る 例 : 第 1 週の hello.c について mintty + bash./a > hello_result.txt hello_result.txt hello, world コマンドプロンプト hello > hello_result.txt

4 4 printf 関数 値の表示

5 教科書 pp.61, 64-66, 値の表示 printf 関数を使う printftest.c #include <stdio.h> #include <stdlib.h> int main() { int i = 128; double d = 123e-3; char s[] = "hello, world"; printf("i: %d n", i); printf("d: %f n", d); printf("s: %s n", s); return EXIT_SUCCESS; } いろんな値を表示できる mintty+bash+gcc $ gcc printftest.c &&./a i: 128 d: s: hello, world

6 教科書 pp.61, 64-66, printf 関数 int printf(const char *FORMAT,...); 引数 : FORMAT: 書式...: 任意の数の引数 戻り値 : 書き出された文字数 エラーの場合負の数 参考 : [1] pp

7 教科書 pp.61, 64-66, printf: 書式 %~ 変換文字までをフィールドと呼ぶび テンプレート ( 穴空き定規 ) ように扱われる フィールドは以下の要素から成る %[ フラグ ][ 最小フィールド幅 ][. 精度 ][ 長さ修飾子 ] 変換文字 printf("1 + 2 = %d n", 1 + 2); = n ここに int 型の整数型データとして解釈した 2 つ目の引数の値 ( 上記の例では 1+2 の計算結果 ) を符号付き 10 進数にして印字する 参考 : [1] pp

8 教科書 pp.61, 64-66, printf: フラグ -: 左揃えで印字 +: 数を符号付きで印字 スペース : 最初の文字が符号でない場合スペースを前に付ける 0: フィールド幅いっぱいに左側から 0 を詰める #: 別の出力形式を指定 o: 先頭の桁を 0 にする x: 0 でない結果の先頭を 0x にする e,f,g: 出力に必ず小数点を付ける g: 末尾の 0 を削除しない 参考 : [1] pp

9 教科書 pp.61, 64-66, printf: 最小フィールド幅 変換された引数は少なくともこの幅になる 必要ならもっと広い幅のフィールドに印字 変換された引数がフィールド幅よりも短い場合 padding(= 詰め物 ) が行われる padding は通常はスペース フラグに 0 が指定された場合は 0 が用いられる *: 次の引数の値を用いる 参考 : [1] pp

10 教科書 pp.61, 64-66, printf:. 精度. ( ピリオド ): フィールド幅と精度の分離子 (separator) 文字列に対しては印字する最大文字数 e,f の対しては小数点以下に印字すべき桁数 g に対しては有効数字の桁数 整数に対しては印字すべき最小桁数 ( 頭に 0 が付加される ) *: 次の引数の値を用いる 参考 : [1] pp

11 教科書 pp.61, 64-66, printf: 長さ修飾子 h: short または float として扱う l: long として扱う L: long double として扱う 参考 : [1] pp

12 教科書 pp.61, 64-66, printf: 変換文字 文字変換後の引数の型 d, i int; 符号付き10 進数 o int; 符号なし8 進数 x, X int; 符号なし16 進数 u int; 符号なし10 進数 c int; unsigned char に変換された後の単一文字 s char *; 文字列を文字列終端 (' 0') または指定された桁まで f double; [-]mmm.dddddd 形の10 進数 dの桁数は精度で指定 e, E double; [-]m.dddddde±xx 型の10 進数 dの桁数は精度で指定 g, G double; 指数が-4より小さいか精度以上の場合 %e それ以外は%f 扱い p void *; ポインタとして印字 ( 処理系依存 ) n int *; このprintfでここまでに書き出された文字数を引数に書き込む % % を印字参考 : [1] pp

13 教科書 pp.61, 64-66, printf の詳細 修正 & 追記 ここでは概略しか示せていないのと一部不正確な部分もあるので 詳細は bash から man コマンドを用いて以下の方法で確認すること mintty+bash man sprintf mintty+bash man 3 printf 邦訳は以下のページ 3 はマニュアルのセクション番号を意味する セクション 3 はサブルーチン ( つまりライブラリ関数 ) 関連のマニュアル printf はセクション 1 にもあるので sprintf かセクション 3 の printf を引く必要がある

14 教科書 pp.61, 64-66, printf のマニュアル導入 printf のマニュアルが引けない場合 以下のコマンドを mintty+bash から実行 mintty+bash apt-cyg install cygwin-doc cygwin-doc パッケージのインストール

15 15 演習 : 円の面積を計算せよ (1) 追記 area_of_a_circle1.c をダウンロードして /*WYCH1*/ の部分を書き変えることで以下のプログラムを完成させなさい /*WYCH2*/ /*WYCH3*/ の部分は次の演習で変更するので今はまだ書き変えない事 なお WYCH は Write Your Code Here を略している double 型の変数 r に円の半径を代入する 円の面積 S は公式 S = πr 2 を用いて計算し 結果は小数点以下 2 桁まで出力する 出力には printf と "%f" を用いれば良いが 前述の精度を設定する必要がある 円の面積を表示する前に 確認のため計算に用いる半径も表示する r に代入する半径はソースコードにリテラル値として直接埋め込む 異なる半径面積を計算したい時は ソースコードのリテラル値を書き変えてコンパイルし直すこととする 半径を 1~10 まで 1 刻みで増やして計 10 個の面積を計算せよ

16 教科書 p マクロ preprocessor のキーワード置換機能 書式 : #define マクロ名置換内容 定数等に名前を付ける際に使う macrotest1.c #include <stdio.h> #define MSG "world" void main() { printf("hello, %s n", MSG); } MSG はコンパイル前に "world" で置換される 修正誤 :area_of_a_circle1.c 正 :macrotest1.c

17 17 マクロ コンパイル時のオプション -D で外部から与えることも出来る macrotest2.c 普通はこのままコンパイルしても MSG がないためエラーになる mintty+bash+gcc $ gcc -DMSG=" "kou "" macrotest2.c &&./a hello, kou コマンドプロンプト +Borland C #include <stdio.h> void main() { printf("hello, %s n", MSG); } >bcc32 -DMSG=" "kou "" macrotest2.c && macrotest2 Borland C for Win32 Copyright (c) 1993, 2000 Borland macrotest.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland hello, kou 修正誤 :extmacrotest2.c 正 :macrotest2.c

18 教科書 p マクロ PI に関しては実は math.h で提供されている mintty+bash $ grep M_PI /usr/include/math.h #define M_PI #define M_PI_ #define M_PI_ #define M_TWOPI (M_PI * 2.0)

19 教科書 p マクロ 先程の EXIT_SUCCESS や SCNd32 もマクロ mintty+bash $ grep "#define.exit_" /usr/include/stdlib.h #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 $ grep SCNd32 /usr/include/inttypes.h #define SCNd32 "d" それぞれの環境に適切な数値や文字列等が設定されている

20 教科書 pp ファイルの包含 preprocessor のファイル取り込み機能 別のファイルに記述されたプログラムやマクロ等を取り込む際に使う 書式 : #include < ファイル名 >// システム提供ファイル用 /usr/include 等から探して取り込む #include " ファイル名 "// ユーザー作成ファイル用 作業ディレクトリから探して取り込む

21 備考 : UNIX コマンド 21 grep コマンド grep [OPTIONS] PATTERN [FILE...] 検索文字列を含むファイルを検索する 引数 PATTERN : 正規表現等による検索文字列 FILE : 検索対象のファイルやディレクトリ OPTIONS -R -n : ディレクトリ下のすべてのファイルを検索 : 行番号を表示 -A NUM : マッチ位置の後 NUM 行も表示 -B NUM : マッチ位置の前 NUM 行も表示 -C NUM : マッチ位置の前後 NUM 行も表示 マニュアル邦訳

22 備考 : UNIX コマンド 22 正規表現 表記意味 c 文字 c c 文字 c. 任意の一文字 [...] [] 内の任意の一文字 [^...] [] 内に含まれない任意の一文字 * 直前のパターンが0 回以上反復 + 直前のパターンが1 回以上反復? 直線のパターンが0または1 回出現 前後の正規表現の何れか (...) () 内の正規表現をグループ化 ^ 行頭にマッチ $ 行末にマッチ

23 23 演習 : 円の面積を計算せよ (2) 先程完成させた area_of_a_circle1.c をコピーして area_of_a_circle2.c を作成し /*WYCH1*/ /*WYCH2*/ の部分を書き変えることで以下のプログラムを完成させなさい r に代入する半径としてマクロ R を代入することで 異なる半径面積を計算したい時は コンパイル時に -D オプションを用いて -DR=1 のよう外部から値を与えることで ソースコードを変更なしに コンパイルし直すだけで済むように変更せよ π の値はリテラル値を直接書き込むのではなく math.h で定義されたマクロ M_PI を用いるように変更せよ 半径を 1~10 まで 1 刻みで増やして計 10 個の面積を計算せよ

24 教科書 pp.61, 64-66, 98, fprintf 関数 int fprintf(file *fp, const char *FORMAT,...); printf の結果を fp へ書き出す 引数 : fp: FORMAT:...: 戻り値 : 書き出された文字数 エラーの場合負の数 FILE 構造体へのポインタ書式任意の数の引数 参考 : [1] pp

25 [1] pp.196, 199, 標準入出力と標準エラー出力 以下の入出力が利用できる stdin : standard input stdout: standard output : 標準入力 : 標準出力 stderr: standard error output: 標準エラー出力 scanf や getchar 等は stdin から入力している printf や putchar 等は stdout へ出力している stdin, stdout はパイプやリダイレクトの対象だが stderr は標準では対象外 ( 指定すれば対象にすることも可能 )

26 [1] pp.196, 199, 標準入出力と標準エラー出力 パイプやリダイレクトで処理されたくない内容は stderr へ出力すると良い fprintf を使うと 出力先を変更出来る mintty + bash stdiotest.c 以下の例では (*1) がファイルへ出力されず画面に出力されている事が確認出来る printf("output to stdout with printf n"); fprintf(stdout, "output to stdout with fprintf n"); fprintf(stderr, "output to stderr with fprintf n"); $ gcc stdiotest.c $./a > redirect.txt output to stderr with fprintf $ cat redirect.txt output to stdout with printf output to stdout with fprintf 標準出力 (stdout) を redirect.txt へリダイレクト fprintf で明示的に stderr へ出力した結果 (*1) redirect.txt に出力された内容を表示 printf で暗黙的に stdout へ出力した結果 fprintf で明示的に stdout へ出力した結果

27 [1] pp.196, 199, 標準入出力と標準エラー出力 stdin,stdout,stderr は stdio.h で定義されている stdio.h は standard input / output header

28 28 scanf 関数 値の読み込み

29 教科書 pp.80-83, 値の読み込み scanf 関数を使う scanftest.c int i; double d; char s[16]; fprintf(stderr, "i =? b"); scanf("%d", &i); fprintf(stderr, "d =? b"); scanf("%lf", &d); fprintf(stderr, "s =? b"); scanf("%s", s); printf("i: %d n", i); printf("d: %f n", d); printf("s: %s n", s); キーボードから入力した値を変数に保存して利用出来る mintty+bash+gcc $ gcc scanftest.c &&./a i = 1234 d = 1234e-5 s = hello, world i: 1234 d: s: hello,

30 教科書 pp.80-83, scanf 関数 int scanf(const char *FORMAT,...); 引数 : FORMAT:...: 戻り値 : 書式 任意の数の引数値を格納する変数へのポインタ 変換され代入された入力項目の数 ファイル終端またはエラーの場合 EOF 参考 : [1] pp

31 教科書 pp.80-83, scanf: 書式 スペース タブ : 無視される (% でない ) 普通の文字 : 入力の次の空白でない文字とマッチ 変換仕様 : %[*][ 最大フィールド幅 ][ ターゲット幅 ] 変換文字 int a; scanf("%d", &a); &: アドレス演算子変数へのポインタを得る スカラ変数の前には & を付ける配列変数 ポインタ変数には不要 入力文字列を 10 進数として扱い int 型の整数型変数へ代入 参考 : [1] pp.250,

32 教科書 pp.80-83, scanf: 変換仕様 *: 入力フィールドはスキップされる代入抑止 最大フィールド幅 : 読み込む最大文字数 ターゲット幅 : h: int を short に l: int を long に float を double に L: float を long double に 参考 : [1] pp

33 教科書 pp.80-83, scanf: 変換文字 文字 入力データ ; 引数の型 d 10 進数 ; int * i 整数 ; int * ( 頭に0,0xが付くと8,16 進数とみなす ) o 8 進数 ; int * u 符号なし10 進数 ; unsigned int * x 16 進数 ; int * c 文字 ; char * ( 末尾に ' 0' を付加しない ) s 非空白文字の文字列 ; char * ( 末尾に ' 0' を付加 ) e,f,g 浮動小数点数 ; float * p printf("%p") で印字されるポインタ値 ; void * n これまでに読み込まれた文字数 ; int * [...] [...]+; char * ( 末尾に ' 0' を付加 ) [^...] [^...]+; char * ( 末尾に ' 0' を付加 ) % %; 参考 : [1] pp

34 教科書 pp.80-83, scanf の詳細 ここでは概略しか示せていないのと一部不正確な部分もあるので 詳細は bash から man コマンドを用いて以下の方法で確認すること mintty+bash man scanf 邦訳は以下のページ

35 教科書 pp.80-83, scanf の引数とポインタ &a 値の代入するには変数のアドレスが必要 : : 0x~00 0x~01 0x~02 0x~03 : : 0x?? 0x?? 0x?? 0x?? 0x~04 0x?? &: アドレス演算子変数が配置されているメモリ上のアドレスが得られる 0x~05 0x?? このアドレスのことを 0x~06 C 言語ではポインタと呼ぶ 0x?? 0x~07 0x~08 : : 0x?? 0x?? : : 32bit int a; scanf("%d", &a); scanf に値の格納先のアドレスを渡す 0x???????? a

36 補足 36 scanf: C99 の stdint.h の場合 #include<inttypes.h> して SCN~ を使う "%hd" "%"SCNd16 "%d" "%"SCNd32 "%u" "%"SCNu32 使う bit 数を確実に保証出来る 実装依存なので欲しい桁数が扱えないかも? 参考 : [1] pp

37 備考 37 buffer overflow の脆弱性 確保した配列よりも長い文字列を入力 mintty+bash+gcc $ gcc scanftest.c &&./a i = 1234 d = 1234e-5 s = abcdefg@@@@@@@@@@@@@@@@ i: d: s: abcdefg@@@@@@@@@@@@@@@@ 他の変数の領域を侵食してしまう

38 備考 38 buffer overflow の脆弱性の仕組み メモリ上の変数の割り当て 0x~00 0x?? : : char s[16]; 0x~0f 0x?? 0x~10 : 0x~17 : 0x?? : 0x?? : double d; 確保したサイズ以上のデータを書き込むと他の変数のデータを上書きしてしまう 0x~1c 0x?? : : int i; 0x~1f 0x?? : : : :

39 備考 39 buffer overflow の脆弱性の対策 最大フィールド幅を明記する! "%s" "%15s" 終端文字列 ' 0' も格納する必要があるため 最大フィールド幅は確保したバイト数 -1 以下にする必要がある char s[16]; なら最大 15 文字まで

40 40 演習 : 円の面積を計算せよ (3) 先程完成させた area_of_a_circle2.c をコピーして area_of_a_circle3.c を作成し /*WYCH1*/ /*WYCH2*/ /*WYCH3*/ の部分を書き変えることで以下のプログラムを完成させなさい r に代入する半径を実行時にキーボードから入力することで コンパイルし直さなくても半径を変更出来るように変更せよ scanf と "%lf" を利用すれば良い r の入力を求める際は "r =? b" を標準エラー出力に予め表示せよ なお b はバックスペースを表すエスケープシーケンスである 半径を 1~10 まで 1 刻みで増やして計 10 個の面積を計算せよ

41 演算子 41

42 教科書 p.78, 84, sizeof 演算子 コンパイル時に変数やデータ型の割り当てバイト数を求める演算子 sizeof オブジェクト sizeof( 型名 )

43 教科書 p.78, 84, sizeof 演算子の例 例 ) 各データ型の割り当てバイト数 sizeof_ex1.c printf("sizeof(char) : %2d n", sizeof(char)); printf("sizeof(wchar_t) : %2d n", sizeof(wchar_t)); printf("sizeof(short) : %2d n", sizeof(short)); printf("sizeof(int) : %2d n", sizeof(int)); printf("sizeof(long) : %2d n", sizeof(long)); #ifndef BORLANDC printf("sizeof(long long) : %2d n", sizeof(long long)); #endif printf("sizeof(float) : %2d n", sizeof(float)); printf("sizeof(double) : %2d n", sizeof(double)); printf("sizeof(long double): %2d n", sizeof(long double));

44 44 各データ型のサイズ (1/5) sizeof_ex1.c による比較 32 bit 版 Cygwin + GNU C 64 bit 版 Cygwin + GNU C $ gcc sizeof_ex1.c &&./a sizeof(char) : 1 sizeof(wchar_t) : 2 sizeof(short) : 2 sizeof(int) : 4 sizeof(long) : 4 sizeof(long long) : 8 sizeof(float) : 4 sizeof(double) : 8 sizeof(long double) : 12 $ gcc sizeof_ex1.c &&./a sizeof(char) : 1 sizeof(wchar_t) : 2 sizeof(short) : 2 sizeof(int) : 4 sizeof(long) : 8 sizeof(long long) : 8 sizeof(float) : 4 sizeof(double) : 8 sizeof(long double): 16 コンパイルする環境により割り当てビット数や最大値と最小値が異なる可能性がある

45 45 各データ型のサイズ (2/5) sizeof_ex1.c による比較 Borland C >bcc32 sizeof_ex1.c && sizeof_ex1 Borland C for Win32 Copyright (c) 1993, 2000 Borland sizeof_ex1.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland sizeof(char) : 1 sizeof(wchar_t) : 2 sizeof(short) : 2 sizeof(int) : 4 sizeof(long) : 4 sizeof(float) : 4 sizeof(double) : 8 sizeof(long double): 10 コンパイルする環境により割り当てビット数や最大値と最小値が異なる可能性がある

46 46 各データ型のサイズ (3/5) sizeof_ex1.c による比較 Visual Studio 2013 Express Desktop Windows 32 bit 版 >cl sizeof_ex1.c && sizeof_ex1 Microsoft(R) C/C++ Optimizing Compiler Version for x86 Copyright (C) Microsoft Corporation. All rights reserved. sizeof_ex1.c Microsoft (R) Incremental Linker Version Copyright (C) Microsoft Corporation. All rights reserved. /out:sizeof_ex1.exe sizeof_ex1.obj sizeof(char) : 1 sizeof(wchar_t) : 2 sizeof(short) : 2 sizeof(int) : 4 sizeof(long) : 4 sizeof(long long) : 8 sizeof(float) : 4 sizeof(double) : 8 sizeof(long double): 8 コンパイルする環境により割り当てビット数や最大値と最小値が異なる可能性がある

47 47 各データ型のサイズ (4/5) sizeof_ex1.c による比較 Visual Studio 2013 Express Desktop Windows 64 bit 版 >cl sizeof_ex1.c && sizeof_ex1 Microsoft(R) C/C++ Optimizing Compiler Version for x64 Copyright (C) Microsoft Corporation. All rights reserved. sizeof_ex1.c Microsoft (R) Incremental Linker Version Copyright (C) Microsoft Corporation. All rights reserved. /out:sizeof_ex1.exe sizeof_ex1.obj sizeof(char) : 1 sizeof(wchar_t) : 2 sizeof(short) : 2 sizeof(int) : 4 sizeof(long) : 4 sizeof(long long) : 8 sizeof(float) : 4 sizeof(double) : 8 sizeof(long double): 8 コンパイルする環境により割り当てビット数や最大値と最小値が異なる可能性がある

48 48 各データ型のサイズ (5/5) gcc 32bit gcc 64bit bcc32 cl 32bit cl 64bit char wchar_t shor int long long long float double long double

49 補足 データ型のサイズ C99 における解決方法 stdint.h ヘッダファイルを使う #include <stdint.h> //... int8_t i8; // 符号付き 8bit 整数 uint8_t ui8; // 符号なし 8bit 整数 int16_t i16; // 符号付き16bit 整数 uint16_t ui16; // 符号なし16bit 整数 int32_t i32; // 符号付き32bit 整数 uint32_t ui32; // 符号なし32bit 整数 int64_t i64; // 符号付き64bit 整数 uint64_t ui64; // 符号なし64bit 整数 第 1 週のサンプルプログラム wavtest.c bmptest.c でも使っています 注 : Boarland C は C99 非対応なので stdint.h が使えない 49

50 教科書 p.78, 84, sizeof 演算子の例 2 例 ) 変数やリテラルの割り当てバイト数 mintty+bash+gcc $ gcc sizeof_ex2.c &&./a sizeof(i) : 4 sizeof(d) : 8 sizeof(s) : 13 sizeof( 1 ): 4 sizeof( 1.): 8 sizeof("1"): sizeof_ex2.c int i = 128; double d = 123e-3; char s[] = "hello, world"; printf("sizeof(i) : %2d n", sizeof(i)); printf("sizeof(d) : %2d n", sizeof(d)); printf("sizeof(s) : %2d n", sizeof(s)); printf("sizeof( 1 ): %2d n", sizeof( 1 )); printf("sizeof( 1.): %2d n", sizeof( 1.)); printf("sizeof( "1 "): %2d n", sizeof("1"));

51 教科書 p.78, 84, sizeof 演算子の例 例 ) 配列変数の割り当てバイト数 sizeof_ex3.c int a[10]; printf("sizeof(int) : %2d n", sizeof(int)); printf("sizeof(a) : %2d n", sizeof(a)); printf("sizeof(a[0]) : %2d n", sizeof(a[0])); printf("sizeof(a)/sizeof(a[0]) : %2d n", sizeof(a)/sizeof(a[0])); mintty+bash+gcc $ gcc sizeof_ex3.c &&./a sizeof(int) : 4 sizeof(a) : 40 sizeof(a[0]) : 4 sizeof(a)/sizeof(a[0]) : 10 int 型の割り当てバイト数 配列変数 a の割り当てバイト数 変数 a[0] の割り当てバイト数 配列変数 a の要素数

52 教科書 p.70, 型変換 (cast) 演算子 ( 変換したい型 ) 値 casttest.c int a = 1; int b = 2; double x = a / b; double y = a / (double) b; printf("%f n", x); printf("%f n", y); cast 演算子 (type) 値 type: 任意のデータ型 mintty+bash+gcc $ gcc casttest.c &&./a 整数同士の割り算だと 1/2 が 0 になっている int 型の b の値を double 型に変換

53 [1] pp.52-57, 暗黙の算術変換 ( 概略 ) 二項演算子の両辺が異なる型の場合以下の手順で型を変換 ( 符号ありの場合 ) 基本的には大きい方へと型をそろえて行く処理 1. 片方が long double: 他方を long double に変換 2. 片方が double: 他方を double に変換 3. 片方が float: 他方を float に変換 4. char, short を int に変換 5. 片方が long: 他方を long に変換

54 教科書 p.69, 算術演算子 算術演算子 演算子の機能 書式 単項演算子 + 被演算数の値 + expr - 被演算数の符号反転 - expr 二項演算子 + 加算 expr1 + expr2 - 減算 expr1 expr2 * 乗算 expr1 * expr2 / 除算 expr1 / expr2 % 剰余算 expr1 % expr2

55 教科書 pp.75-79, 代入演算子 複合代入演算子 代入演算子 演算子の機能 書式 代入演算子 = 代入 var = expr += 加算 var += expr -= 減算 var = expr *= 乗算 var *= expr /= 除算 var /= expr 複合代入演算子 %= 剰余算 var %= expr &= ビット毎のAND var &= expr ^= ビット毎のXOR var ^= expr = ビット毎のOR var = expr <<= 左シフト var <<= expr >>= 右シフト var >>= expr 複合代入演算子は var=var+expr のような演算と代入を同時に行う

56 教科書 pp.78-79, bit 演算子 算術演算子 演算子の機能 単項演算子 ~ 1の補数 ~ expr 二項演算子 << 左シフト expr1 << expr2 >> 右シフト expr1 >> expr2 & ビット毎のAND expr1 & expr2 ^ ビット毎のXOR expr1 ^ expr2 ビット毎のOR expr1 expr2

57 教科書 pp.78-79, 84. bit シフト ( 論理シフト ) ( 符号なし整数の場合 ) 57 利用可能 bit の外側には 0 が充填される 論理シフトであれば左シフト 右シフト共に符号付き 符号なしで結果は共通 0xe << 2 0x90 0xe >> 2 0x3a

58 教科書 pp.78-79, 84. bit シフト ( 算術シフト ) ( 符号付き整数の場合?) 58 最上位ビットより上位は符号拡張される 符号ビットが 0 なら 0 1 なら 1 が充填される 左シフトは符号付き 符号なしで結果は共通 右シフトは最上位ビットの値により符号付き 符号なしで結果が異なる 0x1b >> 2 0x xe8 0xfa >> 2 環境依存なので 環境によっては論理シフトになる可能性も考慮しておくこと

59 教科書 pp.78-79, 右シフト 実際の環境はどうなっているのか? bitshifttest.c unsigned int uc = 0xe ; // == 0b signed int sc = 0xe ; // == 0b uc >>= * 3; sc >>= * 3; 修正誤 :0b 正 :0b 修正誤 :0b 正 :0b printf("%02x n", uc & 0xff); // 0b == 0x3a printf("%02x n", sc & 0xff); // 0b == 0xfa? 修正誤 :0b 正 :0b

60 教科書 pp.78-79, 右シフト 算術シフトになっている環境が多い? 64bit 版 cygwin + GNU C $ gcc bitshifttest.c &&./a 3a fa Borland C >bcc32 bitshifttest.c && bitshifttest... 3a fa Visual Studio 2013 Express Desktop Windows 64bit 版 >cl bitshifttest.c && bitshifttest... 3a fa

61 教科書 pp.78-79, 論理演算 X Y X AND Y X OR Y X XOR Y NOT X 論理演算子 ビット毎の論理演算子 意味 英語表記 && & 論理積 AND 論理和 OR ^ 排他的論理和 XOR (exclusive or)! ~ 論理反転 NOT 論理演算子による演算結果は真 (=1) または偽 (=0) となる

62 教科書 pp.78-79, C 言語の論理値 ( 真偽値 ) 数値を論理値として用いている 論理値 数値 真偽値判定時 偽 0 0のみが偽として扱われる 真 1 0 以外はすべて真として扱われる 論理演算とビット毎の論理演算に注意 logictest.c int x = 1; // = 0b01 int y = 2; // = 0b10 printf("x && y = %d n", x && y); printf("x y = %d n", x y); printf("x & y = %d n", x & y); printf("x y = %d n", x y); mintty+bash+gcc $ gcc logictest.c &&./a x && y = 1 x y = 1 x & y = 0 x y = 3

63 教科書 pp.78-79, 論理演算とビット毎の論理演算 論理演算を行う単位が違う 論理演算子 ビット毎の論理演算子 論理演算では全体を 1 つの論理値として扱う ビット毎の論理演算では各ビットを個別に扱う

64 教科書 pp , p bit 毎の AND による bit mask bit 毎に AND を取った結果が得られる & X & Y で右辺の値をマスクとして用いた場合 0: 0 でクリア 1: 元の値をそのまま通過

65 教科書 pp , p bit 毎の OR による bit mask bit 毎に OR を取った結果が得られる X Y で右辺の値をマスクとして用いた場合 0: 元の値をそのまま通過 1: 1 でクリア

66 教科書 pp , p bit 毎の XOR による bit 反転 bit 毎に XOR を取った結果が得られる ^ X ^ Y で右辺の値をマスクとして用いた場合 0: 元の値をそのまま通過 1: bit を 0 1 反転 同じ値で再度 XOR を取ると元に戻るので簡易暗号的な使い方も出来る

67 教科書 pp , p の補数演算子 要は単なるビット毎の論理反転 ~ ビット毎の論理反転

68 68 補数とは 基数 b(b 進数 ) n 桁で表現可能な整数 a に対し b n a : 基数 (b) の補数 b n a 1 : 減基数 (b 1) の補数 例 : 2 進数 8 桁で表す 1 について 2 の補数 0b b = 0b の補数 ( 単なるビット毎の論理反転 ) 0b b = 0b

69 教科書 pp , p.84. インクレメント デクレメントの演算子 69 算術演算子 演算子の機能 前置演算子 ++ インクレメント ++expr -- デクレメント --expr 後置演算子 ++ インクレメント expr++ -- デクレメント expr-- 前置演算子は演算後に値を取り出す 後置演算子は演算前に値を取り出す incrtest.c int i = 5; printf("%d n", ++i); printf("%d n", --i); printf("%d n", i++); printf("%d n", i--); mintty+bash+gcc $ gcc incrtest.c &&./a

70 教科書 pp , 147. 比較演算子 ( 関係演算子 等値演算子 ) 70 演算子 比較の意味 関係演算子 < 左辺が小 expr1 < expr2 <= 左辺が小または等しい expr1 <= expr2 > 左辺が大 expr1 > expr2 >= 左辺が大または等しい expr1 >= expr2 等値演算子 == 等しい expr1 == expr2!= 等しくない expr1!= expr2 演算結果は真 (=1) または偽 (=0) となる

71 教科書 pp ポインタ演算子 アドレス演算子 書式 : & オブジェクト オブジェクトの配置されたアドレスを得る 間接演算子 書式 : * ポインタ ポインタが指すアドレスに配置されたオブジェクトを得る

72 [1] pp.63-66, 条件演算子 72 三項演算子 (?:) 真 条件式 偽 書式 : 条件式? 式 1 : 式 2 式 1 式 condexprtest.c mintty+bash+gcc #include <stdio.h> $ gcc condexprtest.c &&./a i = 1 void main() not zero { $./a int i; i = 0 fprintf(stderr, "i =? b"); zero scanf("%d", &i); printf("%s n", i? "not zero" : "zero"); } 追加修正

73 73 優先度 高低 演算子の優先度 演算子 結合規則 備考 ( ) [ ] ->. 左から右! ~ * & (type) sizeof 右から左 単項演算子 * / % 左から右 二項演算子 + - 左から右 二項演算子 << >> 左から右 bitシフト < <= > >= 左から右 関係演算子 ==!= 左から右 等値演算子 & 左から右 bit 毎のAND ^ 左から右 bit 毎のXOR 左から右 bit 毎のOR && 左から右 論理演算子 (AND) 左から右 論理演算子 (OR)?: 右から左 三項演算子 = += -= *= /= %= &= ^= = <<= >>= 右から左 代入演算子, 左から右 [1] p.65. より

74 配列変数 74

75 教科書 pp 配列変数 同じ変数名で複数の要素を管理する char a[10]; // 要素数 10 の char 型変数の宣言 初期値式が与えられなかった場合 値は不定????? a[0] a[1] a[2] a[3]... a[9] 要素数 10 の添え字付き変数 [1] pp , p.273.

76 教科書 pp 配列変数 配列変数の要素への代入 char a[10]; // 要素数 10 の char 型変数の宣言 a[0] = 'a'; // 0 番目の要素へ代入 宣言後の代入 初期値式が与えられなかったので 値は不定 'a'???? a[0] a[1] a[2] a[3]... a[9] 要素数 10 の添え字付き変数 [1] pp , p.273.

77 教科書 pp 配列変数 添え字は値が取れれば変数や数式でも良い int i = 1; char a[10]; // 要素数 10 の char 型変数の宣言 a[i + 1] = 'a'; // 2 番目の要素へ代入?? 'a'?? a[0] a[1] a[2] a[3]... a[9] 要素数 10 の添え字付き変数 [1] pp , p.273.

78 教科書 pp 配列変数 確保した領域外はアクセスは禁止 char a[10]; // 要素数 10 の char 型変数の宣言 short b = 0x1234; a[10] = 'a';// 宣言された領域外へのアクセス ここに書き込むと何が起こるか分からない 0x1234????? 'a' b a[0] a[1] a[2] a[3]... a[9] a[10] 他の変数が使っていたらその値を壊してしまう 要素数 10 の添え字付き変数 [1] pp , p.273.

79 教科書 pp 配列変数 初期値式による配列変数の初期化 char a[10] = {'a', 'b'}; // 初期値式付きの // 要素数 10 の char 型変数の宣言 初期値式による初期化 初期値式が要素数より少ない場合 残りは 0 で初期化 'a' 'b' a[0] a[1] a[2] a[3]... a[9] 要素数 10 の添え字付き変数 [1] pp , p.273.

80 教科書 pp 配列変数 初期値式による配列変数の初期化 char a[] = {'a', 'b'}; // 初期値式付きで // 要素数を省略した char 型変数の宣言 初期値式による初期化 'a' a[0] 'b' a[1] 初期値式の要素数分確保される [1] pp , p.273.

81 教科書 pp 配列変数 文字列による初期化 ( 要素数指定 ) char a[10] = "ab"; // 文字列による初期値付きの // 要素数 10 の char 型変数の宣言 文字列と文字列終端の ' 0' 初期値式が要素数より少ない場合 残りは 0 で初期化 'a' 'b' a[0] a[1] a[2] a[3]... a[9] 要素数 10 の添え字付き変数 [1] pp , p.273.

82 教科書 pp 配列変数 文字列による初期化 ( 要素数自動決定 ) char a[] = "ab";// 文字列による初期値付きで // 要素数を省略した char 型変数の宣言 文字列と文字列終端の ' 0' 'a' a[0] 'b' a[1] 0 a[2] 文字列の文字数 + 文字列終端 ' 0' の 1 文字分の要素 [1] pp , p.273.

83 83 変数の初期化 明示的な初期化がない場合 外的変数 静的変数 0 自動変数 レジスタ変数 不定 初期化する場合 外的変数 静的変数 定数式でのみ初期化可 コンパイル時に 1 度だけ初期化される 自動変数 レジスタ変数 任意の式で初期化可 実行時にブロック毎に初期化される [1] pp , p.273.

84 84 配列変数の初期化 要素数を与えない場合 初期値式の数で配列のサイズが決まる 要素数を与えた場合 初期値式を与えない場合 値は不定 初期値式を与える場合 要素数を超えるとエラー 要素数に足りない部分は0で初期化される [1] pp , p.273.

85 85 条件分岐と繰り返し 制御構造

86 86 if 文と switch 文 条件分岐

87 教科書 pp 条件分岐 (if 文 ) 87 真偽値による場合分け if ( 条件式 ) { // 条件式が真の場合の処理 1 } 真 条件式 偽 処理 1

88 教科書 pp 条件分岐 (if, else 文 ) 88 真偽値による場合分け if ( 条件式 ) { // 条件式が真の場合の処理 1 } else { // 条件式が偽の場合の処理 2 } 真 条件式 偽 処理 1 処理 2

89 教科書 pp 入れ子の条件分岐 (if, else 文 ) 真偽値による場合分け if ( 条件式 1) { // 条件式 1が真の場合の処理 1 } else { if ( 条件式 2) { // 条件式 1が偽かつ // 条件式 2が真の場合の処理 2 } else { // 条件式 1が偽かつ // 条件式 2が偽の場合の処理 3 } } if は任意の数入れ子に出来ます 真 処理 1 条件式 1 真 偽 条件式 2 偽 処理 2 処理 3 89

90 教科書 pp 条件分岐 (if, else if, else 文 ) 90 真偽値による場合分け if ( 条件式 1) { // 条件式 1 が真の場合の処理 1 } else if ( 条件式 2) { // 条件式 1 が偽かつ // 条件式 2 が真の場合の処理 2 } else { // 条件式 1 が偽かつ // 条件式 2 が偽の場合の処理 3 } 真 処理 1 条件式 1 偽 真 条件式 2 偽 処理 2 処理 3 else if は任意の数追加出来ます

91 教科書 pp 多分岐判断機構 (switch 文 ) 値による場合分け switch ( 式 ) { case 値 1: // 式が値 1 の場合の処理 1 case 値 2: // 式が値 2 の場合の処理 2 default: // 他の条件に // 当てはまらない場合の処理 N }; 式値 1 値 2 default 処理 1 処理 2 処理 N break break break break 文を入れておかないと次の条件の処理を連続して実行するので注意

92 92 for 文, while 文, do-while 文によるループと continue 文 break 文によるループの再開と脱出 繰り返し ( ループ )

93 93 ループの再開と脱出 continue 文 while, do while, for 文内で使用可能 以降の処理を中断してループ末尾から再開する for 文では後処理 ( 第 3パラメータ ) も実行する break 文 while, do while, for, switch 文内で使用可能 以降の処理を中断してループを脱出する switch 文の場合はswitch 文から脱出する

94 教科書 p 後判定ループ (do while 文 ) 真偽値による繰り返し do { // 条件式が真の場合の処理 } while ( 条件式 ); continue 処理 break 真 条件式 偽 do while 文は ループ内の処理を最低 1 回は実行する

95 教科書 pp 前判定ループ (while 文 ) 真偽値による繰り返し while ( 条件式 ) { // 条件式が真の場合の処理 } 式 2 偽 continue 真 処理 break

96 教科書 pp 初期化 更新処理付きループ (for 文 ) 96 真偽値による繰り返し 式 1 for ( 式 1; 式 2; 式 3) { // 式 2 が真の場合の処理 }; 式 2 偽 前判定ループだが式 1 による初期化と式 3 による更新処理をひとまとめにして書ける continue 真 処理 式 3 break

97 教科書 pp for 文と while 文 ( 前判定ループ ) 以下のループは等価 continue 時の式 3 の扱いに注意 式 1 for ( 式 1; 式 2; 式 3) { // 式 2 が真の場合の処理 }; 式 1; while ( 式 2) { // 式 2 が真の場合の処理式 3; }; for 文の continue while 文の continue 式 2 真処理式 3 偽 break

98 教科書 pp for 文と while 文 ( 前判定ループ ) 以下のループは等価 continue 時の式 3 の扱いに注意 i = 0 for (i = 0; i < 10; i++) { // ループ内の処理 }; i = 0; while (i < 10) { // ループ内の処理 i++; }; for 文の continue while 文の continue i < 10 真処理 i++ 偽 break

99 教科書 pp 後判定ループ (do while 文 ) continue, break 後の処理 (i の値 ) に注目 looptest_dowhile.c int i = 0, j = 0, n; fprintf(stderr, "n = "); scanf("%d", &n); do { j++; printf("%d, %d: 1st", i, j); if (j == 2) {printf(" continue n"); continue;} printf(" 2nd"); if (j == 4) {printf(" break n"); break;} printf(" 3rd n"); i++; } while (i < n); mintty + bash $./looptest_dowhile n = 10 0, 1: 1st 2nd 3rd 1, 2: 1st continue 1, 3: 1st 2nd 3rd 2, 4: 1st 2nd break mintty + bash $./looptest_dowhile n = 0 0, 1: 1st 2nd 3rd do while 文は ループ内の処理を最低 1 回は実行する

100 教科書 p 前判定ループ (while 文 ) continue, break 後の処理 (i の値 ) に注目 looptest_while.c int i = 0, j = 0, n; fprintf(stderr, "n = "); scanf("%d", &n); while (i < n) { j++; printf("%d, %d: 1st", i, j); if (j == 2) {printf(" continue n"); continue;} printf(" 2nd"); if (j == 4) {printf(" break n"); break;} printf(" 3rd n"); i++; } mintty + bash $./looptest_while n = 10 0, 1: 1st 2nd 3rd 1, 2: 1st continue 1, 3: 1st 2nd 3rd 2, 4: 1st 2nd break mintty + bash $./looptest_while n = 0

101 教科書 pp 初期化 更新処理付きループ (for 文 ) continue, break 後の処理 (i の値 ) に注目 looptest_for.c int i = 0, j = 0, n; fprintf(stderr, "n = "); scanf("%d", &n); for (i = 0; i < n; i++) { j++; printf("%d, %d: 1st", i, j); if (j == 2) {printf(" continue n"); continue;} printf(" 2nd"); if (j == 4) {printf(" break n"); break;} printf(" 3rd n"); } mintty + bash $./looptest_for n = 10 0, 1: 1st 2nd 3rd 1, 2: 1st continue 2, 3: 1st 2nd 3rd 3, 4: 1st 2nd break mintty + bash $./looptest_for n = 0

102 [1] p continue 文 以下のループ内に更に小さなループが含まれない場合の continue は goto contin と同義 for (...) { //... contin: ; } do { //... contin: ; } while (...); while (...) { //... contin: ; }

103 [1] p goto 文 指定した名札付き文へ移動 ( ジャンプ ) する 名札 (label) は以下のように設定出来る ラベル名 : 文 goto 文は余程理由がない限り使わないこと do while 文相当 while 文相当 for 文相当 loop: ; { // something to do contin: ; } if (expr) goto loop; brk: ; loop: ; if (expr) { // something to do contin: ; goto loop; } brk: ; expr1; loop: ; if (expr2) { // something to do contin: ; expr3; goto loop; } brk: ;

104 104 参考文献 [1] B.W. カーニハン /D.M. リッチー著石田晴久訳 プログラミング言語 C 第 2 版 ANSI 規格準拠 共立出版 (1989)

105 105 宿題 次回までに以下の事をやっておくこと 教科書の第 3 章の終わりまで読み 指示された操作を試して動作を確認する 不明な点 疑問点についてメモし 次回の授業に持参する または 本講義の Moodle コース上にある第 3 週宿題用フォーラムに書き込んでおく

C言語入門

C言語入門 1 C 言語入門 第 7 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む ) 2 吐き出し法 ( ガウスの消去法 ) のピボッティング 前回の復習 3 連立一次方程式を行列で計算する 吐き出し法 ( ガウスの消去法 ) ステップ 1: 前進消去 ( 上三角行列の作成 ) gaussian_elimination1.c // step1

More information

C言語入門

C言語入門 1 C 言語入門 第 4 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む ) News Visual Studio Code https://code.visualstudio.com/ 2 Microsoft 製プログラミング用テキストエディタ 2015-04-29 にリリースされたばかりのテキストエディタ Windows 以外にも

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.

More information

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

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd

More information

gengo1-2

gengo1-2 変数 プログラム中で 値を格納するには変数 variable を用いる変数は 格納する値の型によって 整数型 文字型 などの型 type をもつ変数を使うには 利用に先立って変数の宣言 declaration をしなければならない 値 変数の値はコンピュータのメモリ上に格納される 具体的にメモリのどの場所に格納されるかは言語処理系が自動的に扱うので プログラマ ( 特に初級者 ) が意識する必要はない

More information

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

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

数値計算

数値計算 プログラム作成から実行まで 数値計算 垣谷公徳 17 号館 3 階電子メール : kimi@ee.ous.ac.jp Source program hello.c printf("hello\n"); コンパイラ Library libc.a 0011_printf000101001 1101_getc00011100011 1011_scanf1110010100 コンパイル Object module

More information

Microsoft PowerPoint pptx

Microsoft PowerPoint pptx 情報処理 Ⅱ 第 12 13回 2011 年 1 月 31 17 日 ( 月 ) 本日学ぶこと ファイル入出力, 標準入力 標準出力 記憶域管理関数 (malloc など ) 問題 ファイルを入力にとり, 先頭に行番号をつけて出力できる? 行列の積を, ファイルを介して読み書き 計算できる? Wakayama University./line 1:Wakayama 2:University 3 2

More information

Microsoft Word - no02.doc

Microsoft Word - no02.doc 使い方 1ソースプログラムの入力今回の講義では C++ 言語用の統合環境ソフトといわれるプログラムを利用します デスクトップにある CPad for C++ のアイコン ( 右参照 ) をダブルクリ ックしましょう ( 同じアイコンで Java_pad とかい エディタ部 てあるものもありますので気をつけてください ) これで 起 動します 統合環境を立ち上げると エディタ部とメッセージ部をもった画面が出てきます

More information

Microsoft Word - 3new.doc

Microsoft Word - 3new.doc プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 (

More information

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

Microsoft PowerPoint - CproNt05.ppt [互換モード] 第 5 章 + 第 14 章演算子 CPro:05-01 第 5 章演算子 I 概要 Cには約 40 種類の演算子がある 算術演算子: ( 基本的なもの ) -( 単項 ) * / + - % ++ -- 優先順位( 評価順序 ) の規則 カッコにより優先順位を変えることができる 算術演算子は代入演算子とあわせて複合演算子となる 算術計算では, 型が異なる場合, 暗黙のキャストが行われる ( 最大化

More information

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

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

PowerPoint Presentation

PowerPoint Presentation プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include

More information

C言語入門

C言語入門 1 C 言語入門 第 10 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む ) 基本型 2 3 標準ヘッダ : 整数型の最小値 最大値は以下のマクロで定義されている unsigned signed 最小値最大値最小値最大値 char 0 UCHAR_MAX SCHAR_MIN SCHAR_MAX short

More information

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63> C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う

More information

PowerPoint Presentation

PowerPoint Presentation 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

スライド 1

スライド 1 プログラミング 第 3 週 静岡大学工学部機械工学科知能 材料コースロボット 計測情報分野臼杵深光電 精密コース光ナノバイオ分野居波渉 講義の前に 講義資料や演習課題 LiveCampusよりダウンロード可能 成績評価期末試験および課題により行う. 評価の配分は, おおむね試験 90%, 課題 10% である. 再試験期末試験で40 点以上 60 点未満の場合, 再試験となる. 2 月 26 日 (

More information

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

Taro-ファイル処理(公開版).jtd ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言

More information

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

ゲームエンジンの構成要素 cp-3. 計算 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 自由落下距離四則演算例題 2. 三角形の面積浮動小数の変数, 入力文, 出力文, 代入文例題 3. sin 関数による三角形の面積ライブラリ関数 2 今日の到達目標 プログラムを使って, 自分の思い通りの計算ができるようになる

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

情報処理演習 B8クラス

情報処理演習 B8クラス 予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ

More information

gengo1-8

gengo1-8 問題提起その 1 一文字ずつ文字 ( 数字 ) を読み込み それぞれの文字が何回入力されたかを数えて出力するプログラム int code, count_0=0, count_1=0, count_2=0, count_3=0,..., count_9=0; while( (code=getchar())!= EOF ){ } switch(code){ case 0 : count_0++; break;

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

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

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 5 回目演算子の優先順位と変数の型変換 今日の講義で学ぶ内容 演算子の優先順位 優先順位の変更の方法 キャスト演算子と型変換 演算子の優先順位 演算子の優先順位 式を計算するときの演算の順序です例えば a=b*c+d; では乗算を先に計算するというルールです ( 主な演算子の優先順位 ) 演算子 名前 結合規則 ++ 後置インクリメント 左 -- 後置デクリメント 左!

More information

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf(hello, n); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a hello printf(hello) 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの

More information

講習No.9

講習No.9 日本語は通常 2 バイトの文字コード.JIS コード, シフト JIS コード, Unicode (UTF-8) 等の様々な文字コードがある. アスキーコード表 (ASCII code) アスキーコード ( 値 ) 漢字変換無しでキーボードから直接入力できる半角文字 32 48 0 64 @ 80 P 96 ` 112 p 33! 49 1 65 A 81 Q 97 a 113 q 34 " 50

More information

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の 4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の組み合わせで作れる. ここでは (2) と (3) について扱う. 4.1 分岐処理 4.1.1 if

More information

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

Cプログラミング1(再) 第2回 C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において

More information

C言語入門

C言語入門 1 C 言語入門 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む ) 2 本日の内容 授業予定日の確認 授業教材の指示 C 言語用プログラミング環境の整備 C 言語プログラミングの導入部分 3 授業予定日の確認 授業予定日の変更があります 本来の授業予定日 : 毎週金曜日 7,8,9,10 時限 4/10 4/17 4/24 5/1

More information

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Training10_プリプロセッサ.docx Training 10 プリプロセッサ 株式会社イーシーエス出版事業推進委員会 1 Lesson1 マクロ置換 Point マクロ置換を理解しよう!! マクロ置換の機能により 文字列の置き換えをすることが出来ます プログラムの可読性と保守性 ( メンテナンス性 ) を高めることができるため よく用いられます マクロ置換で値を定義しておけば マクロの値を変更するだけで 同じマクロを使用したすべての箇所が変更ができるので便利です

More information

kiso2-09.key

kiso2-09.key 座席指定はありません 計算機基礎実習II 2018 のウェブページか 第9回 ら 以下の課題に自力で取り組んで下さい 計算機基礎実習II 第7回の復習課題(rev07) 第9回の基本課題(base09) 第8回試験の結果 中間試験に関するコメント コンパイルできない不完全なプログラムなど プログラミングに慣れていない あるいは複雑な問題は 要件 をバラして段階的にプログラムを作成する exam08-2.c

More information

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - prog04.ppt プログラミング言語 2 第 04 回 (2007 年 05 月 14 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 14 日分と書いてある部分が 本日の教材です 本日の内容

More information

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

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; Point; 問題 18. 問題 17 の Point を用いて 2 点の座標を入力するとその 2 点間の距 離を表示するプログラムを作成せよ 平方根は

More information

Microsoft PowerPoint - kougi7.ppt

Microsoft PowerPoint - kougi7.ppt C プログラミング演習 第 7 回メモリ内でのデータの配置 例題 1. 棒グラフを描く 整数の配列から, その棒グラフを表示する ループの入れ子で, 棒グラフの表示を行う ( 参考 : 第 6 回授業の例題 3) 棒グラフの1 本の棒を画面に表示する機能を持った関数を補助関数として作る #include "stdafx.h" #include void draw_bar( int

More information

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

Microsoft Word - Cプログラミング演習(10) 第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,

More information

C言語入門

C言語入門 1 C 言語入門 第 11 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む ) 2 コンパイル時のエラーのパターン 復習 3 gcc のエラーメッセージ 環境変数 LANG を設定すると言語が変わる mintty + bash + GNU C $ LANG=C gcc error1.c error1.c: In function

More information

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

Microsoft Word - Cプログラミング演習(11) 第 11 回 (7/2) 4. いくつかのトピック (1) ビットごとの演算子 C 言語には, 次のようなビット単位で演算を行う特別な演算子が用意されている & ビットごとの AND ビットごとの OR ^ ビットごとの XOR( 排他的論理和 ) ~ 1 の補数これらの演算子は文字型と整数型で機能し, 浮動小数点数型では使用できない AND, OR, XOR は, それぞれのオペランドの対応するビットを比較して結果を返す

More information

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

Microsoft PowerPoint - 3.ppt [互換モード] 第 3 回簡単な計算 プリプロセッサ 1 今回の目標 定数とその型を理解する 演算子とその効果を理解する 簡単なライブラリ関数の使用法を理解する ヘロンの公式を用いて 3 角形の面積を求めるプログラムを作成する 2 ヘロンの公式 ヘロンの公式 : 3 辺の長さがわかっているときに 3 角形の面積を求める方法 d = a + b + c 2 S = d ( d a )( d b )( d c ) 3

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-29 1 まとめ : ポインタを使った処理 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える

More information

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - kougi2.ppt C プログラミング演習 第 2 回 Microsoft Visual Studio.NET を使ってみよう 説明 例題 1. プログラム実行の体験 コンピュータを役に立つ道具として実感する 次ページのプログラムを使って, Microsoft Visual Studio.NETでの C++ ソースファイル編集, ビルド, テスト実行の一連の過程を体験する 例題 1 のプログラムの機能 計算の繰り返し

More information

第2回講義:まとめ

第2回講義:まとめ C 言語のキーポイント 5=x は NG, x=y=6 は OK. (x=y)=6 は? *ptr=7 は? int x; printf( %d, x) は scanf ( %d, x) は 非 0 が真 0 が偽 for 文は while 文で書き直せる 逆も真 配列は 0- オリジン 関数呼び出しでは 仮引数が実引数で初期化される 式を評価するとき副作用を起こす演算子は ( 複合 ) 代入演算子

More information

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

Microsoft PowerPoint - 4.ppt [互換モード] 第 4 回簡単な計算 プリプロセッサ 1 今回の目標 定数を理解する 演算子とその効果を理解する 簡単なライブラリ関数の使用法を理解する ヘロンの公式を用いた3 角形の面積を求めるプログラムを作成する 2 ヘロンの公式 ヘロンの公式 : 3 辺の長さがわかっているときに 3 角形の面積を求める方法 d = a + b + c 2 S = d ( d a )( d b )( d c ) 3 定数の分類と型

More information

講習No.12

講習No.12 前回までの関数のまとめ 関数は main() 関数または他の関数から呼び出されて実行される. 関数を呼び出す側の実引数の値が関数内の仮引数 ( 変数 ) にコピーされる. 関数内で定義した変数は, 関数の外からは用いることができない ( ローカル変数 ). 一般に関数内で仮引数を変化しても, 呼び出し側の変数は変化しない ( 値渡し ). 関数内で求めた値は return 文によって関数値として呼び出し側に戻される.

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング初級 第 7 回 2017 年 5 月 29 日 配列 ( 復習 )~ 文字列 1 配列とは 2 配列 : 複数の変数をグループとしてまとめて扱うもの 配列 変数 int data[10]; 整数型の配列 同種のデータ型を連続して確保したものを配列とよぶ = 整数がそれぞれにひとつずつ入る箱を 10 個用意したようなもの int data; 整数型の変数 = 整数がひとつ入る dataという名前の箱を用意したようなもの

More information

ポインタ変数

ポインタ変数 プログラミング及び実習 5 馬青 1 文字処理 数値処理 : 整数 浮動小数点数 単一の文字は と ( シングルクォーテーション ) で囲んで表現される 文字のデータ型は char または int である int を用いたほうが ライブラリの関数の引数の型と一致する 以下は全部 int の使用に統一する 従って int ch; で文字変数を宣言しておくと ch= A ; のように ch に文字 A

More information

kiso2-06.key

kiso2-06.key 座席指定があります Linux を起動して下さい 第6回 計算機基礎実習II 計算機基礎実習II 2018 のウェブページか ら 以下の課題に自力で取り組んで下さい 第5回の復習課題(rev05) 第6回の基本課題(base06) 第5回課題の回答例 ex05-2.c 1. キーボードから整数値 a を入力すると a*a*a の値を出力することを繰り返すプログラムを作成しなさい 2. ただし 入力された

More information

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

第1回 プログラミング演習3 センサーアプリケーション C プログラミング - ポインタなんて恐くない! - 藤田悟 fujita_s@hosei.ac.jp 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir

More information

Microsoft Word - no103.docx

Microsoft Word - no103.docx 次は 数える例です ex19.c /* Zeller の公式によって 1 日の曜日の分布を求めるプログラム */ int year, month, c, y, m, wnumber, count[7] = {0, i; for(year = 2001; year

More information

演算増幅器

演算増幅器 構造体 ここまでに char int doulbe などの基本的なデータ型に加えて 同じデータ型が連続している 配列についてのデータ構造について習った これ以外にも もっと複雑なデータ型をユーザが定義 することが可能である それが構造体と呼ばれるもので 異なる型のデータをひとかたまりのデー タとして扱うことができる 異なるデータをまとめて扱いたい時とはどんな場合だろうか 例えば 住民データを管理したい

More information

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

書式に示すように表示したい文字列をダブルクォーテーション () の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf( 情報処理基礎 ); printf(c 言語の練習 ); printf 情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている

More information

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

Microsoft PowerPoint - program.ppt [互換モード] プログラミング演習 バージョン 1 担当教員 : 綴木馴 プログラムの決まりについて学ぶ おすすめする参考書 ザ C 戸川隼人サイエンス社 本日の予定 1. 授業の説明. 2. コンパイラーのインストール. プログラムの決まりについて学ぶ,P31 /* The most in C */ /* hello.c */ printf("hello,world n"); プログラムの決まり ( コメント )

More information

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

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

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

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

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a = 問 1 配列の宣言整数型配列 data1 にデータが初期設定されている この配列 data1 のデータを下図のように 整数型配列 data2 に代入しなさい また data2 の内容を printf( "data2[0] = %d\n", data2[0] ); printf( "data2[5] = %d\n", data2[5] ); を用いて出力しなさい 実行結果 data2[0] = 76

More information

物質工学科 田中晋

物質工学科 田中晋 電気 機械実習 物質工学科 4 年 C 言語によるプログラミング基礎 物質工学科 Version 2.2 評価について 評価 : 演習 1~9 9 点 9 テーマ =81 点 演習 10 19 点 提出 : 1 週目に貸し出した USB メモリに自分の学籍番号のフォルダを作る 各演習の.c ファイルを指定されたファイル名で保存する ( 演習 10 については.exe ファイルも併せて保存 ) 最終週の翌週火曜日

More information

ポインタ変数

ポインタ変数 プログラミング及び実習 7 馬青 1 文字列処理 文字列 文字列は " ( ダブルクォーテーション ) で囲んで表現される 文字列というデータ型が存在しないので 文字列は文字の配列 あるいはポインタ変数として扱われる また 文字の配列あるいはポインタ変数を宣言するときのデータ型は char を用いる 従って char s[]="ryukoku Uni."; あるいは char *s="ryukoku

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

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

Microsoft PowerPoint - 2.ppt [互換モード] 第 2 回 C 言語の基本的な規則 1 今回の目標 C 言語の基本的な規則を理解する C 言語のソースコードから実行可能なコードへの変換法を習得する ( コンパイル法の習得 ) 標準入出力を理解する C 言語での標準入出力制御方法を理解する 標準入出力を用いたプログラムを作成する 2 世界一短い C のプログラム shortest.c main(){} このプログラムからわかること [ 注意 1]C

More information

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

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード] if 文 (a と b の大きい方を表示 ) C 言語 Ⅰ の復習 条件判定 (if, 条件式 ) ループ (for[ 二重まで ], while, do) 配列 ( 次元 次元 ) トレース int a, b; printf( 整数 a: ); scanf( %d, &a); printf( 整数 b: ); scanf( %d, &b); //つのif 文で表現する場合間違えやすい どっちに =

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 4 回目演算子 今日の講義で学ぶ内容 演算子とオペランド 式 様々な演算子 代表的な演算子の使用例 演算子とオペランド 演算子 演算の種類です例えば + - * / 掛け算の記号は ではなく *( アスタリスク ) を使います割り算の記号は ではなく /( スラッシュ ) を使います オペランド 演算の対象です例えば 5( 値 ) num( 変数 ) 式 演算子とオペランドの組み合わせにより構成される数式です式は演算結果をもちます

More information

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

Microsoft Word - Cプログラミング演習(3) 第 3 回 (5/7) 5. ループ ( 繰り返し ) 1 for 文 例題 1-15 正の数 n をキーボードから入力すると,1 から n までの整数の和を出力するプログラムをつくりなさい 出力結果 1-15 2 以上の整数を入力してください! 357 1 + + 357 = 63903 考え方合計を保持する変数を long 型で宣言し, 入力した数値 n までループ処理で累積する 正しい数値が入力されたとき

More information

Microsoft PowerPoint - kougi4.ppt

Microsoft PowerPoint - kougi4.ppt C の実行モデル 自由落下距離 前回の授業の 例題 1 の復習と重要事項 の確認 地上で物を落とし始めた後の自由落下距離を 求める 重力加速度 g は 9.8 とする 自由落下距離を求めるために, プログラム中に, 計算式 y = ( 9.8 / 2.0 ) * x * x を書く C++ ソースファイルの編集 編集画面 編集中のファイル名 関係するファイルなどが表示される ビルド結果などが表示される画面

More information

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ 4 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プログラミング技術 工業 333 実教出版 ) 共通 : 科目 プログラミング技術 のオリエンテーション プログラミング技術は

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

Microsoft PowerPoint - C_Programming(3).pptx

Microsoft PowerPoint - C_Programming(3).pptx H23 年度秋学期情報スキル活用 入門 担当 : 田中基彦 ( 工学部共通教育科 ) Email: ak_tanaka@isc.chubu.ac.jp 授業のホームページ学術情報センター > 教育支援 > 情報リテラシー 授業の日程 講義内容提出課題 連絡事項を掲載 > 定期的にアクセスして確認する C 言語によるプログラミング (3) 制御文 繰り返し文 if, while, switch, for,

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 条件分岐 if~else if~else 文,switch 文 条件分岐 if~else if~else 文 if~else if~else 文 複数の条件で処理を分ける if~else if~else 文の書式 if( 条件式 1){ 文 1-1; 文 1-2; else if( 条件式 2){ 文 2-1; 文 2-2; else { 文 3-1; 文 3-2; 真条件式

More information

gengo1-11

gengo1-11 関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i

More information

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

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx 情報ネットワーク導入ユニット Ⅰ C 言語 演算と型 演算 代入 演算と型 +,-,*,/,% = C 言語では 代入 の意味 vx = a + b; //a+b の結果を vx に代入 型 : int 型 ( 整数 ) double 型 ( 実数 ) 演算での型変換 ( 整数, 実数の混在 ) キャスト演算子 型を一時的に変更 書式指定 :printf("%6d n", a); 加減, 剰余演算

More information

cp-7. 配列

cp-7. 配列 cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 3 回構造体, ファイル入出力 先週の出席確認へのコメント 暗号を破りたいが 平文の候補が多すぎる 人間の目で確認する代わりに どんなプログラムがあればよいか? 辞書を挙げた人が多かった 正しい着眼です 何億個もの平文候補が想定されるので 形態素解析や品詞判別を挙げた人もいます 辞書に近い回答で悪くはないのですが 平文候補ごとにあまり高機能なものを呼び出すと時間がかかる

More information

ファイル入出力

ファイル入出力 C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる

More information

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx 情報ネットワーク導入ユニット Ⅰ C 言語 if 文 switch 文 3 章 : プログラムの流れの分岐 if 文 if( 条件 ) 条件が成立すれば実行 if( 条件 ) ~ else 場合分け ( 成立, 不成立 ) if( 条件 A) ~ else if( 条件 B) ~ else if( 条件 C) ~ else 場合分け ( 複数の条件での場合分け ) 等価演算子 : == ( 等しい

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char

More information

Microsoft PowerPoint - class04.ppt

Microsoft PowerPoint - class04.ppt フローチャート フローチャートとは プログラムの処理の流れを整理し 図的に順序立てて描いたもの 流れ図流れ図ともいう 例 : 始め 半径 R 端子 : 開始 終了 停止などを示す 手操作入力 : キーボードなどから手で操作して入力することを示す 面積 S πr 2 処理 : あらゆる種類の処理を示す S 終わり 表示 : ディスプレイ表示を示す このようにフローチャートでは 記号形状自体が処理の意味を示している

More information

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

Microsoft Word - Cプログラミング演習(9) 第 9 回 (6/18) 3. ファイルとその応用 外部記憶装置に記録されたプログラムやデータを, ファイルと呼ぶ シーケンシャルファイルやランダムファイルへのデータの記録や読み出し, 更新の手順について学習する (1) ファイルとレコードファイル複数の関連したデータを一つに集めたり プログラムを外部記憶装置に保存したものレコードファイルを構成する一塊のデータ ex. 個人カードフィールドレコードを構成する個別の要素

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 1 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/teachers/w48369 2/CPR1/ 2017-07-05 まとめ : ポインタを使った処理 2 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

計算機プログラミング

計算機プログラミング プログラミング言語 C 第 8 講 システム標準関数 ( 入出力関数 ) システム標準関数 システムに備え付けの関数 例 ) printf( ); scanf( ); 標準出力関数 標準入力関数 A. 入出力用の関数 高水準入出力関数 高水準言語 (OS に依存しない ) 低水準入出力関数 機械語レベル (OS に依存 ) B. それ以外の関数 引数と関数の型 ( 戻り値 ) に注目しましょう 例

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 09: ポインタ 文字列 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-09 1 関数できなかったこと 配列を引数として渡す, 戻り値として返す 文字列を扱う 呼び出し元の変数を直接書き換える 例 : 2 つの変数の値を入れ替える関数

More information

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

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F C 言語第 3 回 三つの基本構造 ( シラバス 5 6 回目 ) 1 1 順次処理上から順番に実行していく #include int main(void) { long x, y; 最初 長い整数がつかえる 負の数もか だいたい ±21 億まで OK なんだ 掛け算するぞ x = 1000*2000; scanf("%ld", &y); printf("%ld", x*y);

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 14: 発展事項 2014-07-13 1 今日の内容 これまでの講義で説明していない事項についていくつか簡単に紹介する 文法 標準入出力ファイル 異常終了 短絡評価 文字定数の型 キャスト 変数の宣言位置 グローバル変数 静的変数 (static) const 変数 プリプロセッサ ディレクティブ マクロ ファイルの読み込み 数学関数のエラーチェック

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 03: 変数と標準入出力 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-04-20 1 今日の内容 変数と型 リテラル 標準入出力 整数型 浮動小数点型 文字型 整数浮動小数点数文字文字列 printf() scanf()

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

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

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1 前回の復習 関数を作る : 何を引数として どういう計算をし 何を返すか 関数についての注意 : * main 関数で使われている変数と同じ名前の変数があっても それらには何ら関係はない * 関数名と同じ変数は その関数内では使わないようにする ( 紛らわしさを少なくするため

More information

Microsoft PowerPoint - prog06.ppt

Microsoft PowerPoint - prog06.ppt プログラミング言語 2 第 06 回 (2007 年 06 月 11 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 06 月 11 日分と書いてある部分が 本日の教材です 本日の内容

More information

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec10.ppt 今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ

More information

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

Microsoft PowerPoint - 13th.ppt [互換モード] 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 13 回 2011 年 1 月 13 日 1 本日の講義の内容 1. 配列データを main 以外の関数とやりとりする方法 2. データの型構造体, 共用体という新しいデータ型を学習します. 2 2 次元ベクトルのノルム ( 長さ ) を計算するプログラム 2 次元ベクトル a(x, y) のノルム (

More information

プログラミング演習3 - Cプログラミング -

プログラミング演習3 - Cプログラミング - プログラミング演習 3 - 集中講義版 - 1 日目資料 & 課題花泉弘 この回の目標 1. テキストファイルからのデータの読み出し ファイルの open と close 1 文字ずつの入力と 1 行ずつの入力とを行う readnext( ) を作成する C 言語に限らず ファイルからデータを読み込む場合 必要になるのは ファイル名と場所 ( どのディレクトリにあるか ) プログラム上でデータを受け取るバッファ

More information

プログラミング演習3 - Cプログラミング -

プログラミング演習3 - Cプログラミング - プログラミング演習 3 - C プログラミング - 第 1 回資料 & 課題花泉弘 この回の目標 1. テキストファイルからのデータの読み出し ファイルの open と close 1 文字ずつの入力 1 行ずつの入力 C 言語に限らず ファイルからデータを読み込む場合 必要になるのは ファイル名と場所 ( どのディレクトリにあるか ) プログラム上でデータを受け取るバッファ ( 変数の型に注意 )

More information

Microsoft PowerPoint - kougi6.ppt

Microsoft PowerPoint - kougi6.ppt C プログラミング演習 第 6 回ファイル処理と配列 1 ファイル処理 2 ファイル読み込み ファイル プログラム ファイルの中身は変わらない 3 ファイル書き出し ファイル プログラム ファイルの中身が変わる ファイルは伸び縮みすることがある 4 例題 1. テキストファイル形式の ファイルからのデータ読み込み 次のような名簿ファイル ( テキストファイル形式 ) を読み込んで,1 列目の氏名と,3

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 条件分岐 : if 文, if~else 文 条件分岐 条件分岐とは ある条件が成立したときとしないときで処理の内容を変更する場合に応じた, 複雑な処理を行うことができる 条件分岐 yes 成績が良かったか? no ご褒美に何か買ってもらう お小遣いが減らされる C 言語では,if 文,if~else 文,if~else if~else 文,switch 文で条件分岐の処理を実現できる

More information

Microsoft PowerPoint - 4.pptx

Microsoft PowerPoint - 4.pptx while 文 (1) 繰り返しの必要性 while の形式と動作 繰り返しにより平 根を求める ( 演習 ) 繰り返しにより 程式の解を求める ( 課題 ) Hello. をたくさん表示しよう Hello. を画面に 3 回表示するには, 以下で OK. #include int main() { printf("hello. n"); printf("hello. n");

More information