Powered by SmartDoc

ソフトウェア概論A/B (2016/11/11)
Ver. 1.0

2016年11月11日
栗野 俊一
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2016/soft/soft.html
ソフトウェア概論 A/B2016年11月11日 の資料

目次

講義資料

当日の OHP 資料

講義で利用するサンプルプログラム

Download : sample-001.c ( utf8 版 )

sample-001.c
/*
 * 2016/11/11 sample-001.c
 */

/*
 * sizeof 演算子
 *		型名を指定する事により、そのサイズ(byte 単位)を得る事ができる
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-001.exe sample-001.c
 *		実行
 *			./sample-001.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {

	printf ( "sizeof ( char   ) = %d\n", sizeof ( char ) );
	printf ( "sizeof ( int    ) = %d\n", sizeof ( int ) );
	printf ( "sizeof ( double ) = %d\n", sizeof ( double ) );

	return 0;
}
sample-001.c の実行結果
$ ./sample-001.exe
sizeof ( char   ) = 1
sizeof ( int    ) = 4
sizeof ( double ) = 8
$ 

Download : sample-002.c ( utf8 版 )

sample-002.c
/*
 * 2016/11/11 sample-002.c
 */

/*
 * sizeof 演算子
 *		変数名を指定する事により、そのサイズ(byte 単位)を得る事ができる
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-002.exe sample-002.c
 *		実行
 *			./sample-002.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {
	char cvar;
	int ivar;
	double dvar;

	printf ( "sizeof ( cvar ) = %d\n", sizeof ( cvar ) );
	printf ( "sizeof ( ivar ) = %d\n", sizeof ( ivar ) );
	printf ( "sizeof ( dvar ) = %d\n", sizeof ( dvar ) );

	return 0;
}
sample-002.c の実行結果
$ ./sample-002.exe
sizeof ( cvar ) = 1
sizeof ( ivar ) = 4
sizeof ( dvar ) = 8
$ 

Download : sample-003.c ( utf8 版 )

sample-003.c
/*
 * 2016/11/11 sample-003.c
 */

/*
 * sizeof 演算子
 *		配列名を指定する事により、そのサイズ(byte 単位)を得る事ができる
 *		type array[SIZE] の時 sizeof( array ) = sizeof(type) * SIZE
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-003.exe sample-003.c
 *		実行
 *			./sample-003.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {
	char cary[100];
	int iary[100];
	double dary[100];

	printf ( "sizeof ( cary ) = %d\n", sizeof ( cary ) );
	printf ( "sizeof ( iary ) = %d\n", sizeof ( iary ) );
	printf ( "sizeof ( dary ) = %d\n", sizeof ( dary ) );

	return 0;
}
sample-003.c の実行結果
$ ./sample-003.exe
sizeof ( cary ) = 100
sizeof ( iary ) = 400
sizeof ( dary ) = 800
$ 

Download : sample-004.c ( utf8 版 )

sample-004.c
/*
 * 2016/11/11 sample-004.c
 */

/*
 * sizeof 演算子
 *		値を指定する事もできる
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-004.exe sample-004.c
 *		実行
 *			./sample-004.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {

	printf ( "sizeof ( 'a'  ) = %d\n", sizeof ( 'a' ) );
			/* sizeof ( int ) [整数] になっている */
	printf ( "sizeof ( 123  ) = %d\n", sizeof ( 123 ) );
	printf ( "sizeof ( 12.3 ) = %d\n", sizeof ( 12.3 ) );

	return 0;
}
sample-004.c の実行結果
$ ./sample-004.exe
sizeof ( 'a'  ) = 4
sizeof ( 123  ) = 4
sizeof ( 12.3 ) = 8
$ 

Download : sample-005.c ( utf8 版 )

sample-005.c
/*
 * 2016/11/11 sample-005.c
 */

/*
 * sizeof 演算子
 *		式のサイズも得られる
 *		char 型のデータは、計算の時に、int 型に昇格する
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-005.exe sample-005.c
 *		実行
 *			./sample-005.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {
	char ch;
	char dh;

	printf ( "sizeof ( ch ) = %d\n", sizeof ( ch ) );
			/* sizeof ( char ) [文字] になっている */

	printf ( "sizeof ( ch + dh ) = %d\n", sizeof ( ch + dh ) );
			/* sizeof ( int ) [整数] になっている */
			/* 無条件の型の昇格がおきている */

	return 0;
}
sample-005.c の実行結果
$ ./sample-005.exe
sizeof ( ch ) = 1
sizeof ( ch + dh ) = 4
$ 

Download : sample-006.c ( utf8 版 )

sample-006.c
/*
 * 2016/11/11 sample-006.c
 */

/*
 * 型の昇格
 *		int 型から double 型への変換
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-006.exe sample-006.c
 *		実行
 *			./sample-006.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {
	int num;
	int mum;

	printf ( "sizeof ( num )       = %d\n", sizeof ( num ) );
	printf ( "sizeof ( num + 'A' ) = %d\n", sizeof ( num + 'A' ) );
	printf ( "sizeof ( num + mum ) = %d\n", sizeof ( num + mum ) );
	printf ( "sizeof ( num + 1.0 ) = %d\n", sizeof ( num + 1.0 ) );

	return 0;
}
sample-006.c の実行結果
$ ./sample-006.exe
sizeof ( num )       = 4
sizeof ( num + 'A' ) = 4
sizeof ( num + mum ) = 4
sizeof ( num + 1.0 ) = 8
$ 

Download : sample-007.c ( utf8 版 )

sample-007.c
/*
 * 2016/11/11 sample-007.c
 */

/*
 * 型の変換
 *		代入では、必要に応じて型変換が行わる
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-007.exe sample-007.c
 *		実行
 *			./sample-007.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {
	char ch = 'A';		/* そもそも 'A' は int 型 */
	int num = 'A';
	double fp = 'A';	/* int 型から double 型へ */

	ch = ch - 'A' + 'a';	/* int 型から char 型へ */
	ch = num;				/* int 型から char 型へ */
	num = fp;				/* double 型から int 型へ */

	printf ( "ch  = %c\n", ch );
	printf ( "num = %d\n", num );
	printf ( "fp  = %f\n", fp );

	return 0;
}
sample-007.c の実行結果
$ ./sample-007.exe
ch  = A
num = 65
fp  = 65.000000
$ 

Download : sample-008.c ( utf8 版 )

sample-008.c
/*
 * 2016/11/11 sample-008.c
 */

/*
 * 型の変換
 *		サイズの大きい方から、小さい方への変換は危険
 *
 * 利用方法
 *		コンパイル
 *			cc -I../include -o sample-008.exe sample-008.c
 *		実行
 *			./sample-008.exe
 */

#include <stdio.h>

/*
 * main 関数
 */

int main ( int argc, char *argv[] ) {
	char ch = 'A';
	int num = 'A';
	double fp = 'A';

	/* 個々に適切な値をいれれば問題はない */

	printf ( "[適切な値]\n" );
	printf ( "\tch  = '%c' [%d]\n", ch, ch );
	printf ( "\tnum = %d\n", num );
	printf ( "\tfp  = %f\n", fp );

	/* char 型にはいらないサイズの値をいれると ?? */

	num = 1000;		/* 1000 => 256 なので、1000 は char 型に入らない */
	ch = num;		/* 代入を行うとどうなるか */

	printf ( "[char に大きな値]\n" );
	printf ( "\tch  = '%c' [%d]\n", ch, ch );
	printf ( "\tnum = %d\n", num );

	/* int 型にはいらないサイズの値をいれると ?? */

	fp = 1000000000000;
	num = fp;
	ch = fp;

	printf ( "[int に大きな値]\n" );
	printf ( "\tch  = '%c' [%d]\n", ch, ch );
	printf ( "\tnum = %d\n", num );
	printf ( "\tfp  = %f\n", fp );

	return 0;
}
sample-008.c の実行結果
$ ./sample-008.exe
[適切な値]
	ch  = 'A' [65]
	num = 65
	fp  = 65.000000
[char に大きな値]
	ch  = '?' [-24]
	num = 1000
[int に大きな値]
	ch  = '' [0]
	num = -2147483648
	fp  = 1000000000000.000000
$ 

講議中に作成したプログラム

本日の課題

Links

関連 Link