当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/* * 2011/11/25 sample-001.c */ /* * */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ #define DATA_SIZE 10 /* * */ int main ( void ) { double data[DATA_SIZE]; /* データを保存する配列 */ double min_data; /* 最小値 */ double max_data; /* 最大値 */ int i; /* 配列の添字 (index) */ /* * データの入力 */ s_print_int ( DATA_SIZE ); s_print_string ( "個のデータを入力してください\n" ); for ( i = 0; i < DATA_SIZE; i++ ) { s_print_int ( i ); s_print_string ( "個目のデータ : " ); data[i] = s_input_double(); } /* * 入力されたデータを逆順に出力する */ s_print_string ( "データを入力と逆順に出力します\n" ); for ( i = 0; i < DATA_SIZE; i++ ) { s_print_int ( DATA_SIZE - 1 - i ); s_print_string ( "番目のデータ : " ); s_print_double ( data [ DATA_SIZE - 1 - i ] ); s_print_newline(); } /* * 最大最小を求める */ min_data = max_data = data[0]; /* 代入式 「min_data = ( max_data = data[0] );」と解釈され、 max_data = data[0]; min_data = data[0]; と同じ結果になる */ for ( i = 1; i < DATA_SIZE; i++ ) { if ( data[i] > max_data ) { max_data = data[i]; } if ( data[i] < min_data ) { min_data = data[i]; } } s_print_string ( "最大値は " ); s_print_double ( max_data ); s_print_string ( "です。\n" ); s_print_string ( "最小値は " ); s_print_double ( min_data ); s_print_string ( "です。\n" ); /* * */ return 0; } /* * */
5.9 1.4 2.3 8.9 8.3 4.4 3.9 5.1 2.7 4.8
C:\usr\c\> sample-001< sample-001.in 10個のデータを入力してください 0個目のデータ : 5.900000 1個目のデータ : 1.400000 2個目のデータ : 2.300000 3個目のデータ : 8.900000 4個目のデータ : 8.300000 5個目のデータ : 4.400000 6個目のデータ : 3.900000 7個目のデータ : 5.100000 8個目のデータ : 2.700000 9個目のデータ : 4.800000 データを入力と逆順に出力します 9番目のデータ : 4.800000 8番目のデータ : 2.700000 7番目のデータ : 5.100000 6番目のデータ : 3.900000 5番目のデータ : 4.400000 4番目のデータ : 8.300000 3番目のデータ : 8.900000 2番目のデータ : 2.300000 1番目のデータ : 1.400000 0番目のデータ : 5.900000 最大値は 8.900000です。 最小値は 1.400000です。 C:\usr\c\>
Download : sample-002.c ( SJIS 版 )
/* * 2011/11/25 sample-002.c */ /* * */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ void print_array ( char *name, double array[], int size ) { int i; /* 配列の添字 (index) */ for ( i = 0; i < size; i++ ) { s_print_string ( name ); s_print_string ( "[" ); s_print_int ( i ); s_print_string ( "]=" ); s_print_double ( array[i] ); s_print_newline(); } } /* * */ #define DATA_SIZE 10 /* * */ int main ( void ) { double dummy_1 = -1.23456; /* 間違ってアクセスした時の保険 (1) */ double data[DATA_SIZE]; /* データを保存する配列 */ double dummy_2 = 1.23456; /* 間違ってアクセスした時の保険 (2) */ int i; /* 配列の添字 (index) */ /* * データの入力 */ s_print_int ( DATA_SIZE ); s_print_string ( "個のデータを入力してください\n" ); for ( i = 0; i < DATA_SIZE; i++ ) { s_print_int ( i ); s_print_string ( "個目のデータ : " ); data[i] = s_input_double(); } /* * 入力されたデータを全て出力 */ s_print_string ( "入力されたデータを全て出力します\n" ); print_array ( "data", data, DATA_SIZE ); /* * 入力されたデータの先頭から 5 つだけを出力 */ s_print_string ( "入力されたデータの先頭から 5 つだけを出力します\n" ); print_array ( "data", data, 5 ); /* 配列サイズとして 5 が指定されている */ /* * 入力されたデータの最後の 3 つだけを出力 */ s_print_string ( "入力されたデータの最後の 3 つだけを出力\n" ); print_array ( "data", data + 7, 3 ); /* 配列名はポインター値なので計算可能 */ /* * 間違って、余分に指定してしまった.. */ s_print_string ( "サイズが 10 なのに 11 を指定してしまったら..\n" ); print_array ( "data", data, 11 ); /* * */ return 0; } /* * */
5.9 1.4 2.3 8.9 8.3 4.4 3.9 5.1 2.7 4.8
C:\usr\c\> sample-002< sample-002.in 10個のデータを入力してください 0個目のデータ : 5.900000 1個目のデータ : 1.400000 2個目のデータ : 2.300000 3個目のデータ : 8.900000 4個目のデータ : 8.300000 5個目のデータ : 4.400000 6個目のデータ : 3.900000 7個目のデータ : 5.100000 8個目のデータ : 2.700000 9個目のデータ : 4.800000 入力されたデータを全て出力します data[0]=5.900000 data[1]=1.400000 data[2]=2.300000 data[3]=8.900000 data[4]=8.300000 data[5]=4.400000 data[6]=3.900000 data[7]=5.100000 data[8]=2.700000 data[9]=4.800000 入力されたデータの先頭から 5 つだけを出力します data[0]=5.900000 data[1]=1.400000 data[2]=2.300000 data[3]=8.900000 data[4]=8.300000 入力されたデータの最後の 3 つだけを出力 data[0]=5.100000 data[1]=2.700000 data[2]=4.800000 サイズが 10 なのに 11 を指定してしまったら.. data[0]=5.900000 data[1]=1.400000 data[2]=2.300000 data[3]=8.900000 data[4]=8.300000 data[5]=4.400000 data[6]=3.900000 data[7]=5.100000 data[8]=2.700000 data[9]=4.800000 data[10]=1.234560 C:\usr\c\>
Download : sample-003.c ( SJIS 版 )
/* * 2011/11/25 sample-003.c */ /* * */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ void print_array ( char *name, double array[], int size ) { int i; /* 配列の添字 (index) */ for ( i = 0; i < size; i++ ) { s_print_string ( name ); s_print_string ( "[" ); s_print_int ( i ); s_print_string ( "]=" ); s_print_double ( array[i] ); s_print_newline(); } } /* * */ void input_array ( double array[], int size ) { int i; s_print_int ( size ); s_print_string ( "個のデータを入力してください\n" ); for ( i = 0; i < size; i++ ) { s_print_int ( i ); s_print_string ( "個目のデータ : " ); array[i] = s_input_double(); /* ポインターを利用しているので、 main 関数の data[pos] の内容が書き変わる */ } } /* * double_at_n : n 番目の要素を 2 倍にする */ void double_at_n ( double array[], int pos ) { array[pos] *= 2; /* array[pos] = array[pos] * 2 */ /* ポインターを利用しているので、 main 関数の data[pos] の内容が書き変わる */ } /* * */ #define DATA_SIZE 10 /* * */ int main ( void ) { double dummy_1 = -1.23456; /* 間違ってアクセスした時の保険 (1) */ double data[DATA_SIZE]; /* データを保存する配列 */ double dummy_2 = 1.23456; /* 間違ってアクセスした時の保険 (2) */ /* * データの入力 */ input_array ( data, DATA_SIZE ); /* * 入力されたデータを全て出力 */ s_print_string ( "入力されたデータを全て出力します\n" ); print_array ( "data", data, DATA_SIZE ); s_print_string ( "念のため dummy 1 = " ); s_print_double ( dummy_1 ); s_print_newline(); s_print_string ( "念のため dummy 2 = " ); s_print_double ( dummy_2 ); s_print_newline(); /* * 5 番目の要素を 2 倍にする */ double_at_n ( data, 5 ); s_print_string ( "5 番の要素が 2 倍になりました。\n" ); print_array ( "data", data, DATA_SIZE ); s_print_string ( "念のため dummy 1 = " ); s_print_double ( dummy_1 ); s_print_newline(); s_print_string ( "念のため dummy 2 = " ); s_print_double ( dummy_2 ); s_print_newline(); /* * 10 番目の要素(というのは存在しないはずなのに..) を 2 倍にする */ double_at_n ( data, 10 ); s_print_string ( "10 番の要素を 2 倍にしました。\n" ); print_array ( "data", data, DATA_SIZE ); s_print_string ( "念のため dummy 1 = " ); s_print_double ( dummy_1 ); s_print_newline(); s_print_string ( "念のため dummy 2 = " ); s_print_double ( dummy_2 ); s_print_newline(); /* * */ return 0; } /* * */
5.9 1.4 2.3 8.9 8.3 4.4 3.9 5.1 2.7 4.8
C:\usr\c\> sample-003< sample-003.in 10個のデータを入力してください 0個目のデータ : 5.900000 1個目のデータ : 1.400000 2個目のデータ : 2.300000 3個目のデータ : 8.900000 4個目のデータ : 8.300000 5個目のデータ : 4.400000 6個目のデータ : 3.900000 7個目のデータ : 5.100000 8個目のデータ : 2.700000 9個目のデータ : 4.800000 入力されたデータを全て出力します data[0]=5.900000 data[1]=1.400000 data[2]=2.300000 data[3]=8.900000 data[4]=8.300000 data[5]=4.400000 data[6]=3.900000 data[7]=5.100000 data[8]=2.700000 data[9]=4.800000 念のため dummy 1 = -1.234560 念のため dummy 2 = 1.234560 5 番の要素が 2 倍になりました。 data[0]=5.900000 data[1]=1.400000 data[2]=2.300000 data[3]=8.900000 data[4]=8.300000 data[5]=8.800000 data[6]=3.900000 data[7]=5.100000 data[8]=2.700000 data[9]=4.800000 念のため dummy 1 = -1.234560 念のため dummy 2 = 1.234560 10 番の要素を 2 倍にしました。 data[0]=5.900000 data[1]=1.400000 data[2]=2.300000 data[3]=8.900000 data[4]=8.300000 data[5]=8.800000 data[6]=3.900000 data[7]=5.100000 data[8]=2.700000 data[9]=4.800000 念のため dummy 1 = -1.234560 念のため dummy 2 = 2.469120 C:\usr\c\>
Download : sample-004.c ( SJIS 版 )
/* * 2011/11/25 sample-004.c */ /* * */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ void input_array ( double array[], int size ) { int i; s_print_int ( size ); s_print_string ( "個のデータを入力してください\n" ); for ( i = 0; i < size; i++ ) { s_print_int ( i ); s_print_string ( "個目のデータ : " ); array[i] = s_input_double(); /* ポインターを利用しているので、 main 関数の data[pos] の内容が書き変わる */ } } /* * size mn の配列を m 行 n 列の配列として表示する */ void print_array_mn ( double array[], int m, int n ) { int i; int j; for ( i = 0; i < m; i++ ) { for ( j = 0; j < n; j++ ) { s_print_double ( array[i * n + j] ); s_print_string ( " " ); /* 隙間 */ } s_print_newline(); } } /* * */ #define DATA_SIZE 10 /* * */ int main ( void ) { double data[DATA_SIZE]; /* データを保存する配列 */ /* * データの入力 */ input_array ( data, DATA_SIZE ); /* * 入力されたデータを 2 × 5 の配列として印刷 */ s_print_string ( "[2 × 5]\n" ); print_array_mn ( data, 2, 5 ); s_print_newline(); /* * 入力されたデータを 5×2 の配列として印刷 */ s_print_string ( "[5 × 2]\n" ); print_array_mn ( data, 5, 2 ); s_print_newline(); /* * */ return 0; } /* * */
5.9 1.4 2.3 8.9 8.3 4.4 3.9 5.1 2.7 4.8
C:\usr\c\> sample-004< sample-004.in 10個のデータを入力してください 0個目のデータ : 5.900000 1個目のデータ : 1.400000 2個目のデータ : 2.300000 3個目のデータ : 8.900000 4個目のデータ : 8.300000 5個目のデータ : 4.400000 6個目のデータ : 3.900000 7個目のデータ : 5.100000 8個目のデータ : 2.700000 9個目のデータ : 4.800000 [2 × 5] 5.900000 1.400000 2.300000 8.900000 8.300000 4.400000 3.900000 5.100000 2.700000 4.800000 [5 × 2] 5.900000 1.400000 2.300000 8.900000 8.300000 4.400000 3.900000 5.100000 2.700000 4.800000 C:\usr\c\>
Download : sample-005.c ( SJIS 版 )
/* * 2011/11/25 sample-005.c */ /* * */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ void input_array_25 ( double array[2][5] ) { int i; int j; s_print_string ( "2 × 5 個のデータを入力してください\n" ); for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 5; j++ ) { s_print_string ( "[" ); s_print_int ( i ); s_print_string ( "][" ); s_print_int ( j ); s_print_string ( "]=" ); array[i][j] = s_input_double(); } } } /* * 2 行 5 列の配列の印刷 */ void print_array_25 ( double array[2][5] ) { /* サイズが指定されている */ int i; int j; for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 5; j++ ) { s_print_double ( array[i][j] ); s_print_string ( " " ); /* 隙間 */ } s_print_newline(); } } /* * 5 行 2 列の配列の印刷 */ void print_array_52 ( double array[5][2] ) { /* サイズが指定されている */ int i; int j; for ( i = 0; i < 5; i++ ) { for ( j = 0; j < 2; j++ ) { s_print_double ( array[i][j] ); s_print_string ( " " ); /* 隙間 */ } s_print_newline(); } } /* * */ int main ( void ) { double data25[2][5]; /* * データの入力 */ input_array_25 ( data25 ); /* * 入力されたデータを 2 × 5 の配列として印刷 */ s_print_string ( "[2 × 5]\n" ); print_array_25 ( data25 ); s_print_newline(); /* * 入力されたデータを 5×2 の配列として印刷 */ s_print_string ( "[5 × 2]\n" ); print_array_52 ( data25 ); /* Error になる可能性がある */ s_print_newline(); /* 少くても warning になる */ /* * */ return 0; } /* * */
5.9 1.4 2.3 8.9 8.3 4.4 3.9 5.1 2.7 4.8
C:\usr\c\> sample-005< sample-005.in 2 × 5 個のデータを入力してください [0][0]=5.900000 [0][1]=1.400000 [0][2]=2.300000 [0][3]=8.900000 [0][4]=8.300000 [1][0]=4.400000 [1][1]=3.900000 [1][2]=5.100000 [1][3]=2.700000 [1][4]=4.800000 [2 × 5] 5.900000 1.400000 2.300000 8.900000 8.300000 4.400000 3.900000 5.100000 2.700000 4.800000 [5 × 2] 5.900000 1.400000 2.300000 8.900000 8.300000 4.400000 3.900000 5.100000 2.700000 4.800000 C:\usr\c\>
Download : sample-006.c ( SJIS 版 )
/* * 2011/11/25 sample-006.c */ /* * */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * 2 行 5 列の配列のアドレス値の表示 */ void print_array_pointer_25 ( double array[2][5] ) { /* サイズが指定されている */ int i; int j; for ( i = 0; i < 2; i++ ) { for ( j = 0; j < 5; j++ ) { s_print_string ( "Addrsss of array[" ); s_print_int ( i ); s_print_string ( "][" ); s_print_int ( j ); s_print_string ( "]=" ); s_print_hex ( &array[i][j] ); s_print_newline(); } } } /* * */ int main ( void ) { double data25[2][5]; /* * 要素のアドレスの表示 */ print_array_pointer_25 ( data25 ); /* * */ return 0; } /* * */
C:\usr\c\> sample-006 Addrsss of array[0][0]=bfd209d0 Addrsss of array[0][1]=bfd209d8 Addrsss of array[0][2]=bfd209e0 Addrsss of array[0][3]=bfd209e8 Addrsss of array[0][4]=bfd209f0 Addrsss of array[1][0]=bfd209f8 Addrsss of array[1][1]=bfd20a00 Addrsss of array[1][2]=bfd20a08 Addrsss of array[1][3]=bfd20a10 Addrsss of array[1][4]=bfd20a18 C:\usr\c\>
Download : sample-007.c ( SJIS 版 )
/* * 2011/11/25 sample-007.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ #define ARRAY_SIZE 2 /* * */ typedef int Matrix2D[ARRAY_SIZE][ARRAY_SIZE]; /* * */ void output_Matrix2D ( Matrix2D array ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { s_print_char ( "< "[i] ); s_print_char ( ' ' ); for ( j = 0; j < ARRAY_SIZE; j++ ) { s_print_int ( array[i][j] ); s_print_char ( ' ' ); } s_print_char ( "> "[i] ); s_print_char ( '\n' ); } } /* * */ void input_Matrix2D ( Matrix2D array ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { s_print_int ( i ); s_print_string ( ", " ); s_print_int ( j ); s_print_string ( " 要素 = " ); array[i][j] = s_input_int(); } } } /* * */ void copyto_Matrix2D( Matrix2D dst, Matrix2D src ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { dst[i][j] = src[i][j]; } } } /* * */ void addto_Matrix2D( Matrix2D dst, Matrix2D src ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { dst[i][j] += src[i][j]; } } } /* * */ void multo_Matrix2D( Matrix2D dst, Matrix2D src ) { Matrix2D result; int i; int j; int k; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { result[i][j] = 0; for ( k = 0; k < ARRAY_SIZE; k++ ) { result[i][j] += src[i][k] * dst[k][j]; } } } copyto_Matrix2D ( dst, result ); } /* * */ int main ( void ) { Matrix2D m1; Matrix2D m2; Matrix2D add; Matrix2D mul; input_Matrix2D ( m1 ); input_Matrix2D ( m2 ); copyto_Matrix2D ( add, m1 ); addto_Matrix2D ( add, m2 ); output_Matrix2D ( add ); copyto_Matrix2D ( mul, m1 ); multo_Matrix2D ( mul, m2 ); output_Matrix2D ( mul ); return 0; } /* * */
1 2 3 4 1 0 0 1
C:\usr\c\> sample-007< sample-007.in 0, 0 要素 = 1 0, 1 要素 = 2 1, 0 要素 = 3 1, 1 要素 = 4 0, 0 要素 = 1 0, 1 要素 = 0 1, 0 要素 = 0 1, 1 要素 = 1 < 2 2 > 3 5 < 1 2 > 3 4 C:\usr\c\>
Download : sample-008.c ( SJIS 版 )
/* * 2011/11/25 sample-008.c */ /* * */ #include <stdio.h> #include <stdlib.h> /* cmalloc のために必要 */ #include "s_print.h" #include "s_input.h" /* * */ void print_array ( char *name, double array[], int size ) { int i; /* 配列の添字 (index) */ for ( i = 0; i < size; i++ ) { s_print_string ( name ); s_print_string ( "[" ); s_print_int ( i ); s_print_string ( "]=" ); s_print_double ( array[i] ); s_print_newline(); } } /* * */ int main ( void ) { double *data; /* データを保存する領域へのポインター */ int n; /* データの個数 */ int i; /* * データの入力 */ s_print_string ( "何個のデータを入力しますか ?" ); n = s_input_int(); if ( (data = (double *)calloc( sizeof(double), n )) == NULL ) { s_print_string ( "メモリが確保できませんでした...\n" ); exit ( -1 ); } s_print_int ( n ); s_print_string ( "個のデータを入力してください\n" ); for ( i = 0; i < n; i++ ) { s_print_int ( i ); s_print_string ( "個目のデータ : " ); data[i] = s_input_double(); } /* * 入力されたデータを全て出力 */ s_print_string ( "入力されたデータを全て出力します\n" ); print_array ( "data", data, n ); /* * */ free ( data ); /* alloc したら free する */ /* * */ return 0; } /* * */
5 8.3 2.4 5.8 9.2 1.2
C:\usr\c\> sample-008< sample-008.in 何個のデータを入力しますか ?5 5個のデータを入力してください 0個目のデータ : 8.300000 1個目のデータ : 2.400000 2個目のデータ : 5.800000 3個目のデータ : 9.200000 4個目のデータ : 1.200000 入力されたデータを全て出力します data[0]=8.300000 data[1]=2.400000 data[2]=5.800000 data[3]=9.200000 data[4]=1.200000 C:\usr\c\>
Download : 20111125-01.c ( SJIS 版 )
/* * 20111125-1-QQQQ.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ #define ARRAY_SIZE 3 /* * */ typedef int Matrix3D[ARRAY_SIZE][ARRAY_SIZE]; /* * */ void output_Matrix3D ( Matrix3D array ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { s_print_char ( "|<|"[i] ); s_print_char ( ' ' ); for ( j = 0; j < ARRAY_SIZE; j++ ) { s_print_int ( array[i][j] ); s_print_char ( ' ' ); } s_print_char ( "|>|"[i] ); s_print_char ( '\n' ); } } /* * */ void input_Matrix3D ( Matrix3D array ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { s_print_int ( i ); s_print_string ( ", " ); s_print_int ( j ); s_print_string ( " 要素 = " ); array[i][j] = s_input_int(); } } } /* * */ void copyto_Matrix3D( Matrix3D dst, Matrix3D src ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { dst[i][j] = src[i][j]; } } } /* * */ void addto_Matrix3D( Matrix3D dst, Matrix3D src ) { int i; int j; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { dst[i][j] += src[i][j]; } } } /* * */ void multo_Matrix3D( Matrix3D dst, Matrix3D src ) { Matrix3D result; int i; int j; int k; for ( i = 0; i < ARRAY_SIZE; i++ ) { for ( j = 0; j < ARRAY_SIZE; j++ ) { result[i][j] = 0; /* ** この部分を完成させなさい */ } } copyto_Matrix3D ( dst, result ); } /* * */ int main ( void ) { Matrix3D m1; Matrix3D m2; Matrix3D add; Matrix3D mul; input_Matrix3D ( m1 ); input_Matrix3D ( m2 ); copyto_Matrix3D ( add, m1 ); addto_Matrix3D ( add, m2 ); output_Matrix3D ( add ); copyto_Matrix3D ( mul, m1 ); multo_Matrix3D ( mul, m2 ); output_Matrix3D ( mul ); return 0; } /* * */
1 2 3 4 5 6 7 8 9 0 0 1 0 1 0 1 0 0
C:\usr\c\> 01< 01.in 0, 0 要素 = 1 0, 1 要素 = 2 0, 2 要素 = 3 1, 0 要素 = 4 1, 1 要素 = 5 1, 2 要素 = 6 2, 0 要素 = 7 2, 1 要素 = 8 2, 2 要素 = 9 0, 0 要素 = 0 0, 1 要素 = 0 0, 2 要素 = 1 1, 0 要素 = 0 1, 1 要素 = 1 1, 2 要素 = 0 2, 0 要素 = 1 2, 1 要素 = 0 2, 2 要素 = 0 | 1 2 4 | < 4 6 6 > | 8 8 9 | | 7 8 9 | < 4 5 6 > | 1 2 3 | C:\usr\c\>