当日のOHP資料です。
次のファイルを、c:\usr\cに保存する。
Download : sample-001.c ( SJIS 版 )
/* * CDATE sample-001.c */ /* * 最初のプログラムは "Hello, World" * * 利用方法 * コンパイル * cc -o sample-001.exe sample-001.c * 実行 * sample-001 */ /* * #include は、ファイルをこの場所に取り込む命令 * #include <stido.h> は c:\min\mingw\include\stdio.h を取り込む */ #include <stdio.h> /* * main 関数 */ /* * main の前の int は、main が整数値を返す事を意味する * main の返す整数値は、コマンドプロンプトの ERRORLEVEL で確認できる * 通常は 0 は正常 / それ以外は、エラー状態(その数値はエラーコード) */ int main ( int argc, char *argv[] ) { /* * 引数の argc, argv はコマンドラインの引数の情報を担う * argc は、引数の個数 + 1 を表す ( なので、引数がなければ 1 になる ) * argv は、コマンドラインの情報が空白で区切られたもの * argv[0] は、コマンド名を表す文字列 * argv[i] は、i 番目のコマンドライン引数を表す文字列となる */ /* * このプログラムのメイン部分 * 別のプログラムを作成するなら、この部分を差し替える */ /* * "Hello, World" という文字列と改行 ( "\n" ) を表示する */ printf ( "Hello, World\n" ); /* * return 0; で、0 が関数の値として返る ( 0 なので、「正常終了」って事 ) */ return 0; }
C:\usr\c>sample-001 Hello, World C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/* * 2013/06/21 sample-002.c */ /* * 様々な入出力 * * 利用方法 * コンパイル * cc -Ic:\usr\c\include -o sample-002.exe sample-002.c * 実行 * sample-002 */ #include <stdio.h> /* * s_input.h, s_print.h を読み込む * これによって、s_input_int や s_print_int 関数が利用できるようになる * s_input.h, s_print.h は c:\usr\c\include にあるものを利用する * このために、コンパイルする時に -Ic:\usr\include を追加する */ #include "s_input.h" #include "s_print.h" /* * main 関数 */ int main ( int argc, char *argv[] ) { /* * printf 同様、 * 引数で与えれた文字列を出力する */ s_print_string ( "abc" ); /* 改行を出力する * : putchar ( '\n' ) や * printf ("\n");と同じ */ s_print_newline(); /* * ここまでで「abc\n」が表示される事になる。 */ /* * putchar と同様、 * 引数で与えれた文字を出力する */ s_print_char ( 'a' ); s_print_newline(); /* * ここまでで「a\n」が表示される事になる。 */ /* * 引数で与えれた整数値を出力する */ s_print_int ( 123 ); s_print_newline(); /* * ここまでで「123\n」が表示される事になる。 */ /* * この後は入力 */ s_print_string ( "Input String : " ); /* * s_input_string() は、キーボードから一行文字列を読み込む * 読み込まれた結果をそのまま s_print_string() で出力している */ s_print_string ( s_input_string() ); s_print_newline(); /* * ここまでで、「入力された文字列」がそのまま表示される */ s_print_string ( "Input Int : " ); /* * s_input_int() は、キーボードから数値を一つ読み込む * 読み込まれた結果をそのまま s_print_int() で出力している */ s_print_int ( s_input_int() ); s_print_newline(); /* * ここまでで、「入力された整数」がそのまま表示される */ s_print_string ( "Input Char : " ); /* * s_input_char() は、キーボードから文字を一つ読み込む * 読み込まれた結果をそのまま s_print_char() で出力している */ s_print_char ( s_input_char() ); s_print_newline(); /* * ここまでで、「入力された文字」がそのまま表示される */ return 0; }
abc 123 x
C:\usr\c>sample-002< sample-002.in abc a 123 Input String : abc Input Int : 123 123 Input Char : x x C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/* * 2013/06/21 sample-003.c */ /* * 型の違い * * 利用方法 * コンパイル * cc -Ic:\usr\c\include -o sample-003.exe sample-003.c * 実行 * sample-003 */ #include <stdio.h> #include "s_input.h" #include "s_print.h" /* * main 関数 */ int main ( int argc, char *argv[] ) { /* * 型が違っても表示は同じ */ s_print_string ( "整数 : " ); s_print_int ( 9 ); s_print_newline(); s_print_string ( "文字 : " ); s_print_char ( '9' ); s_print_newline(); s_print_string ( "文字列 : " ); s_print_string ( "9" ); s_print_newline(); /* * 整数の場合の +1 */ s_print_string ( "整数の計算 : 9 + 1 = " ); s_print_int ( 9 + 1 ); s_print_newline(); /* * 文字の場合の +1 */ s_print_string ( "文字の計算 : '9' + 1 = " ); s_print_char ( '9' + 1 ); s_print_newline(); /* * 文字列の場合の +1 */ s_print_string ( "文字の計算 : \"9\" + 1 = " ); s_print_string ( "9" + 1 ); s_print_newline(); /* * 型によって、計算結果が異る */ return 0; }
C:\usr\c>sample-003 整数 : 9 文字 : 9 文字列 : 9 整数の計算 : 9 + 1 = 10 文字の計算 : '9' + 1 = : 文字の計算 : "9" + 1 = C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/* * 2013/06/21 sample-004.c */ /* * 整数の四則計算式 * * 利用方法 * コンパイル * cc -Ic:\usr\c\include -o sample-004.exe sample-004.c * 実行 * sample-004 */ #include <stdio.h> #include "s_input.h" #include "s_print.h" /* * main 関数 */ int main ( int argc, char *argv[] ) { /* * 加法(足し算) */ s_print_string ( "12 + 5 = " ); s_print_int ( 12 + 5 ); /* 整数の 12 と 5 を加える */ s_print_newline(); /* * 減法(引き算) */ s_print_string ( "12 - 5 = " ); s_print_int ( 12 - 5 ); /* 整数の 12 から 5 を引く */ s_print_newline(); /* * 乗法(かけ算) */ s_print_string ( "12 * 5 = " ); s_print_int ( 12 * 5 ); /* 整数の 12 に 5 をかける */ s_print_newline(); /* * 商法(割り算) */ s_print_string ( "12 / 5 = " ); s_print_int ( 12 / 5 ); /* 整数の 12 を 5 で割る */ s_print_newline(); /* * 式の優先順位やかっこも利用可能 */ s_print_string ( "1 + 2 * 3 = " ); s_print_int ( 1 + 2 * 3 ); /* かけ算が優先される */ s_print_newline(); s_print_string ( "(1 + 2) * 3 = " ); s_print_int ( (1 + 2) * 3 ); /* かっこの中の計算が優先される */ s_print_newline(); return 0; }
C:\usr\c>sample-004 12 + 5 = 17 12 - 5 = 7 12 * 5 = 60 12 / 5 = 2 1 + 2 * 3 = 7 (1 + 2) * 3 = 9 C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/* * 2013/06/21 sample-005.c */ /* * 文字列の演算式 * * 利用方法 * コンパイル * cc -Ic:\usr\c\include -o sample-005.exe sample-005.c * 実行 * sample-005 */ #include <stdio.h> #include "s_input.h" #include "s_print.h" /* * main 関数 */ int main ( int argc, char *argv[] ) { /* * 文字列への加法 */ s_print_string ( "\"abc\" + 1 = " ); s_print_string ( "abc" + 1 ); /* 文字列が短くなる */ s_print_newline(); /* * 先頭の文字の取出し */ s_print_string ( "*\"abc\" = " ); s_print_char ( *"abc" ); /* 先頭の文字が出て来る */ s_print_newline(); return 0; }
C:\usr\c>sample-005 "abc" + 1 = bc *"abc" = a C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/* * 2013/06/21 sample-006.c */ /* * 関数呼出しを含む形の「式」 * * 利用方法 * コンパイル * cc -Ic:\usr\c\include -o sample-006.exe sample-006.c * 実行 * sample-006 */ #include <stdio.h> #include "s_input.h" #include "s_print.h" /* * main 関数 */ int main ( int argc, char *argv[] ) { /* * 加法(足し算) */ s_print_string ( "12 + 5 = " ); s_print_int ( 12 + 5 ); /* 整数の 12 と 5 を加える */ s_print_newline(); /* * 減法(引き算) */ s_print_string ( "12 - 5 = " ); s_print_int ( 12 - 5 ); /* 整数の 12 から 5 を引く */ s_print_newline(); /* * 乗法(かけ算) */ s_print_string ( "12 * 5 = " ); s_print_int ( 12 * 5 ); /* 整数の 12 に 5 をかける */ s_print_newline(); /* * 商法(割り算) */ s_print_string ( "12 / 5 = " ); s_print_int ( 12 / 5 ); /* 整数の 12 を 5 で割る */ s_print_newline(); return 0; }
C:\usr\c>sample-006 12 + 5 = 17 12 - 5 = 7 12 * 5 = 60 12 / 5 = 2 C:\usr\c>
#include <stdio.h> int main ( int argc, char *argv[] ) { printf ( "こんにちは、みなさん。\n" ); printf ( "こんにちは、みなさん。\n" ); printf ( "こんにちは、みなさん。\n" ); return 0; }
#include <stdio.h> int main ( int argc, char *argv[] ) { printf ( argv[0] ); printf ( "\n" ); /* 改行 */ return 0; }
#include <stdio.h> int main ( int argc, char *argv[] ) { printf ( argv[1] ); /* argv[1] は、コマンドライン引数の一つ目になる */ printf ( "\n" ); /* 改行 */ return 0; }
#include <stdio.h> int main ( int argc, char *argv[] ) { /* * 出力 (画面に何か出す) */ printf ( "abc\n" ); /* 文字列を出す */ putchar ( 'a' ); /* 文字を出す */ /* * 入力 (キーボードから情報を、プログラム内に取り入れる */ getchar(); /* キーボードから、一文字読込み その結果を関数の値とする */ /* kbhit, inkey .. などは、ゲーム関係でやったが例外 */ putchar ( getchar() ); /* 読み込んだ文字をそのまま出す */ }
#include <stdio.h> #include "s_print.h" #include "s_input.h" int main ( int argc, char *argv[] ) { s_print_string ( "abc\n" ); /* printf ( "abc\n" ) と同じ */ s_print_char ( 'a' ); /* putchar ( 'a' ); */ /* 文字列には string, 文字の時には char と規則的憶えられる */ s_print_char ( s_input_char() ); /* putchar ( getchar() ) */ /* 出力が print なら、入力は、input となる */ s_print_string ( s_input_string() ); /* s_input_string() は文字列を入力して返す */ /* 入力(input) 出力(print) 文字(char) getchar putchar s_input_char s_print_char 文字列(string) --- printf s_input_string s_print_string 整数(int) --- --- s_input_int s_print_int */ }
#include <stdio.h> #include "s_input.h" #include "s_print.h" int main ( int argc, char *argv[] ) { s_print_string ( "12 + 5 = " ); s_print_int ( 12 + 5 ); /* 「12 + 5」 は、 「12」,「+」,「5」 に分解 「12」,「5」, は、それぞれ、整数の 12 と 5 それから、「+」は、整数の和の演算子と解釈される 「12」という表現から、12 という整数値が得られ 「5」という表現から、5 という整数値が得られ 12 と 5 の整数和が計算されて、 整数値の 17 がえられる それが、s_print_int で表示されます。 cf. 2 * 3 の * はかけ算 * "abc" の * は、先頭の文字の取出し */ s_print_newline(); }
#include <stdio.h> #include "s_input.h" #include "s_print.h" int main ( int argc, char *argv[] ) { s_print_string ( "12 + 5 = " ); s_print_int ( 12 + 5 ); s_print_newline(); s_print_string ( "12 - 5 = " ); s_print_int ( 12 - 5 ); s_print_newline(); s_print_string ( "12 * 5 = " ); s_print_int ( 12 * 5 ); s_print_newline(); s_print_string ( "12 / 5 = " ); s_print_int ( 12 / 5 ); s_print_newline(); s_print_string ( "12 % 5 = " ); s_print_int ( 12 % 5 ); s_print_newline(); }
#include <stdio.h> #include "s_print.h" #include "s_input.h" /* * 引数で渡された、整数値を表示した後に * その引数の値を返す */ int echo_int ( int i ) { s_print_char ( '[' ); s_print_int ( i ); s_print_char ( ']' ); s_print_newline (); return i; } void seq ( int a, int b ) { s_print_string ( "一つ目 = " ); s_print_int ( a ); s_print_newline(); s_print_string ( "二つ目 = " ); s_print_int ( b ); s_print_newline(); } int main ( int argc, char *argv[] ) { seq ( 12, 100 ); s_print_int ( echo_int ( 12 ) ); s_print_newline(); /* echo_int が 12 をだして そのあと s_print_int が 12 だすので、二回 12 がでる */ seq ( echo_int (12), echo_int (100) ); /* 途中は兎も角、最終的には、 seq ( 12, 100 ); と同じなる。 常識的には.. [12] [100] 一つ目 = 12 二つ目 = 100 だろう...だが.. 関数の引数は、後ろから評価(計算/呼出し)される */ }
#include <stdio.h> #include "s_input.h" #include "s_print.h" int add_int ( int a, int b ) { /* 「a + b = a と b の和」と表示する */ s_print_int ( a ); s_print_char ( '+' ); s_print_int ( b ); s_print_char ( '=' ); s_print_int ( a + b ); s_print_newline(); } int main ( int argc, char *argv[] ) { add_int ( 12, 7 ); /* 12+7=19 と表示される */ add_int ( s_input_int(), s_input_int() ); /* ^^^^^^^^^^^^ 最初はこっち ここに 34 (最初にいれた数)がくる ^^^^^^^^^^^^^ 次にここがよばれる ここに 8 がはいる */ }
#include <stdio.h> #include "s_input.h" #include "s_print.h" int add_int ( int a, int b ) { /* 「a + b = a と b の和」と表示する */ s_print_int ( a ); s_print_char ( '+' ); s_print_int ( b ); s_print_char ( '=' ); s_print_int ( a + b ); s_print_newline(); } void add_int_1 ( int i ) { add_int ( i, s_input_int() ); /* ^ ^^^^^^^^^^^^^ 後からここ 34 8 */ } int main ( int argc, char *argv[] ) { add_int_1 ( s_input_int() ); /* ^^^^^^^^^^^^^ 最初にここ 34 が入る */ }
/* * CDATE FILENAME * * 二つの整数値をキーボードから入力し、その四則並びに余りを出力する */ #include <stdio.h> #include "s_input.h" #include "s_print.h" /* * print_int_result */ void print_int_result ( char *name, int a, int b, char op, int value ) { s_print_string ( name ); s_print_string ( " : " ); s_print_int ( a ); /* ** この部分を完成させなさい → op と b を出す必要.. ** s_print_char ( op ); ... */ s_print_char ( '=' ); s_print_int ( value ); s_print_newline(); } /* * print_int_calc */ void print_int_calc ( int a, int b ) { print_int_result ( "和", a, b, '+', a + b ); print_int_result ( "差", a, b, '-', a - b ); /* ** この部分を完成させなさい → あと積、商を出す ** print_int_result ( "積", a, b, '*', a * b ); .. */ print_int_result ( "余り", a, b, '%', a % b ); } /* * print_int_calc_1 */ void print_int_calc_1 ( int a ) { print_int_calc ( a, s_input_int() ); } /* * main */ int main( int argc, char *argv[] ) { print_int_calc_1 ( s_input_int() ); return 0; }
#include <stdio.h> #include "s_input.h" #include "s_print.h" /* * p-007.c : 整数の四則をコピー * 12 と 5 * これを * 12.34 と 5.67 * にする事を考えます */ #include "s_input.h" #include "s_print.h" int main ( int argc, char *argv[] ) { s_print_string ( "12.34 + 5.67 = " ); s_print_double ( 12.34 + 5.67 ); s_print_newline(); s_print_string ( "12.34 - 5.67 = " ); s_print_double ( 12.34 - 5.67 ); s_print_newline(); s_print_string ( "12.34 * 5.67 = " ); s_print_double ( 12.34 * 5.67 ); s_print_newline(); s_print_string ( "12.34 / 5.67 = " ); s_print_double ( 12.34 / 5.67 ); s_print_newline(); }
Download : 20130621-01.c ( SJIS 版 )
/* * CDATE FILENAME * * 二つの整数値をキーボードから入力し、その四則並びに余りを出力する */ #include <stdio.h> #include "s_input.h" #include "s_print.h" /* * print_int_result */ void print_int_result ( char *name, int a, int b, char op, int value ) { s_print_string ( name ); s_print_string ( " : " ); s_print_int ( a ); /* ** この部分を完成させなさい → op と b を出す必要.. ** s_print_char ( op ); ... */ s_print_char ( '=' ); s_print_int ( value ); s_print_newline(); } /* * print_int_calc */ void print_int_calc ( int a, int b ) { print_int_result ( "和", a, b, '+', a + b ); print_int_result ( "差", a, b, '-', a - b ); /* ** この部分を完成させなさい → あと積、商を出す ** print_int_result ( "積", a, b, '*', a * b ); .. */ print_int_result ( "余り", a, b, '%', a % b ); } /* * print_int_calc_1 */ void print_int_calc_1 ( int a ) { print_int_calc ( a, s_input_int() ); } /* * main */ int main( int argc, char *argv[] ) { print_int_calc_1 ( s_input_int() ); return 0; }
12 5
C:\usr\c\> 20130621-01-QQQQ 和 : 12+5=17 差 : 12-5=7 積 : 12*5=60 商 : 12/5=2 余り : 12%5=2 C:\usr\c\>
Download : 20130621-02.c ( SJIS 版 )
/* * CDATE FILENAME * * 二つの浮動小数点数値をキーボードから入力し、その四則を出力する */ #include <stdio.h> #include "s_input.h" #include "s_print.h" /* * print_double_result */ void print_double_result ( char *name, double a, double b, char op, double \ value ) { s_print_string ( name ); s_print_string ( " : " ); s_print_double ( a ); /* ** この部分を完成させなさい */ s_print_char ( '=' ); s_print_double ( value ); s_print_newline(); } /* * print_double_calc */ void print_double_calc ( double a, double b ) { print_double_result ( "和", a, b, '+', a + b ); print_double_result ( "差", a, b, '-', a - b ); /* ** この部分を完成させなさい */ } /* * print_double_calc_1 */ void print_double_calc_1 ( double a ) { print_double_calc ( a, s_input_double() ); } /* * main */ int main( double argc, char *argv[] ) { print_double_calc_1 ( s_input_double() ); return 0; }
12.34 5.67
C:\usr\c\> 20130621-02-QQQQ 和 : 12.340000+5.670000=18.010000 差 : 12.340000-5.670000=6.670000 積 : 12.340000*5.670000=69.967800 商 : 12.340000/5.670000=2.176367 C:\usr\c\>