Powered by SmartDoc

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

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

目次

講義資料

当日の OHP 資料

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

サンプルファイル

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * 2014/11/21 sample-001.c
 */

/*
 * 条件式
 *		(C 言語での)「条件」は、「(整数の)値」を持つ
 *				1 : 真(条件が成り立つ場合)の時
 *				0 : 偽(条件が成り立たない場合)の時
 *			逆に、整数値は、常に「条件(値)」と見做す事ができる
 *				「条件」が要求された場合に、「(条件の)値」は、次のように「解釈」される
 *				「偽」: 0 の時
 *				「真」: それ (0) 以外の時 ( 1 でなくても良い )
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-001.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 *	main
 *
 */

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

	/* 「条件(式)」は「(整数)値」を持つ */
	printf ( "1 < 2 は成立するので %d になる。\n",  1 < 2 );
	printf ( "3 < 2 は成立しないので %d になる。\n",  3 < 2 );

	if ( 1 < 2 ) {	/* この条件は常に成立するので.. */
		printf ( "1 < 2 は成立しました。\n" );	/* こちらを実行 */
	} else {
		printf ( "1 < 2 は成立しませんでした。\n" );
	}

	if ( 3 < 2 ) {	/* この条件は常に成立しないので.. */
		printf ( "3 < 2 は成立しました。\n" );
	} else {
		printf ( "3 < 2 は成立しませんでした。\n" );	/* こちらを実行 */
	}

	if ( 1 ) {	/* 1 は 0 でないので、「真」と見做される */
		printf ( " 1 は「真」と見做されました。\n" );	/* こちらを実行 */
	} else {
		printf ( " 1 は「偽」と見做されました。\n" );
	}

	if ( 0 ) {	/* 0 は、「偽」と見做される */
		printf ( " 0 は「真」と見做されました。\n" );
	} else {
		printf ( " 0 は「偽」と見做されました。\n" );	/* こちらを実行 */
	}

	if ( 3 ) {	/* 3 は 0 でないので、「真」と見做される */
		printf ( " 3 は「真」と見做されました。\n" );	/* こちらを実行 */
	} else {
		printf ( " 3 は「偽」と見做されました。\n" );
	}

	if ( -10 ) {	/* -10 は 0 でないので、「真」と見做される */
		printf ( " -10 は「真」と見做されました。\n" );	/* こちらを実行 */
	} else {
		printf ( " -10 は「偽」と見做されました。\n" );
	}

	return 0;
}
sample-001.c の実行結果
C:\usr\c>sample-001
1 < 2 は成立するので 1 になる。
3 < 2 は成立しないので 0 になる。
1 < 2 は成立しました。
3 < 2 は成立しませんでした。
 1 は「真」と見做されました。
 0 は「偽」と見做されました。
 3 は「真」と見做されました。
 -10 は「真」と見做されました。
C:\usr\c> 

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 2014/11/21 sample-002.c
 */

/*
 * 条件式
 *		(C 言語での)「条件」は、「(整数の)値」を持つ
 *			「条件」を「引数」に渡す事ができる。
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-002.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * void condition_check ( int condition )
 *		int condition	条件(値)
 *		条件が真なら「真と見做される」、偽なら「偽と見做される」と表示
 */

void condition_check ( int condition ) {

	if ( condition ) {
		printf ( " %d は「真」と見做されました。\n", condition );
	} else {
		printf ( " %d は「偽」と見做されました。\n", condition );
	}

}

/*
 *	main
 *
 */

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

	/* 「整数値」は、「条件値」として利用できる */

	/* 整数値 */
	printf ( "整数値\n" );

	condition_check ( 1 );
	condition_check ( 0 );
	condition_check ( 3 );
	condition_check ( -10 );

	/* 不等号 */
	printf ( "---\n" );
	printf ( "不等号\n" );

	/* 「条件式」は、評価されて「条件値」になるが、これは「整数値」になる */
	printf ( "条件式「 1 < 2 」を引数に指定\n" );
	condition_check ( 1 < 2 );	/* 引数には 1 < 2 とあるが、これは評価されて 1 になってから渡される */

	printf ( "条件式「 3 < 2 」を引数に指定\n" );
	condition_check ( 3 < 2 );	/* 引数には 3 < 2 とあるが、これは評価された 0 になってから渡される */

	/* 等号 */
	printf ( "---\n" );
	printf ( "等号\n" );

	printf ( "条件式「 1 == 1 」を引数に指定\n" );
	condition_check ( 1 == 1 );

	printf ( "条件式「 1 != 1 」を引数に指定\n" );
	condition_check ( 1 != 1 );

	printf ( "条件式「 1 == 0 」を引数に指定\n" );
	condition_check ( 1 == 0 );

	printf ( "条件式「 1 != 0 」を引数に指定\n" );
	condition_check ( 1 != 0 );

	return 0;
}
sample-002.c の実行結果
C:\usr\c>sample-002
整数値
 1 は「真」と見做されました。
 0 は「偽」と見做されました。
 3 は「真」と見做されました。
 -10 は「真」と見做されました。
---
不等号
条件式「 1 < 2 」を引数に指定
 1 は「真」と見做されました。
条件式「 3 < 2 」を引数に指定
 0 は「偽」と見做されました。
---
等号
条件式「 1 == 1 」を引数に指定
 1 は「真」と見做されました。
条件式「 1 != 1 」を引数に指定
 0 は「偽」と見做されました。
条件式「 1 == 0 」を引数に指定
 0 は「偽」と見做されました。
条件式「 1 != 0 」を引数に指定
 1 は「真」と見做されました。
C:\usr\c> 

Download : sample-003.c ( SJIS 版 )

sample-003.c
/*
 * 2014/11/21 sample-003.c
 */

/*
 * 「条件値」の計算
 *		「条件値」は、「整数値」なので計算できる
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-003.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * void condition_check ( int condition )
 *		int condition	条件(値)
 *		条件が真なら「真と見做される」、偽なら「偽と見做される」と表示
 */

void condition_check ( int condition ) {

	if ( condition ) {
		printf ( " %d は「真」と見做されました。\n", condition );
	} else {
		printf ( " %d は「偽」と見做されました。\n", condition );
	}

}

/*
 *	main
 *
 */

int main( int argc, char *argv[] )
{
		/* 条件値の計算 */

	printf ( "条件値の計算\n" );
	printf ( "(1<2) + (2<3) = %d + %d = %d\n", (1<2), (2<3), (1<2) + (2<3) );
	printf ( "(1<2) * (2<3) = %d * %d = %d\n", (1<2), (2<3), (1<2) * (2<3) );
	printf ( "(1<2) - (2<3) = %d - %d = %d\n", (1<2), (2<3), (1<2) - (2<3) );
	printf ( "(1<2) / (2<3) = %d / %d = %d\n", (1<2), (2<3), (1<2) / (2<3) );

	printf ( "---\n" );

		/* (1<2)「真」と (2<3)「真」の場合 */
	printf ( "(1<2) + (2<3) = %d\n", (1<2) + (2<3) );
	printf ( "(1<2) * (2<3) = %d\n", (1<2) * (2<3) );

		/*  (1<2)「真」と (3<2)「偽」の場合  */
	printf ( "(1<2) + (3<2) = %d\n", (1<2) + (3<2) );
	printf ( "(1<2) * (3<2) = %d\n", (1<2) * (3<2) );

		/*  (2<1)「偽」と (2<3)「真」の場合  */
	printf ( "(2<1) + (2<3) = %d\n", (2<1) + (2<3) );
	printf ( "(2<1) * (2<3) = %d\n", (2<1) * (2<3) );

		/*  (2<1)「偽」と (3<2)「偽」の場合  */
	printf ( "(2<1) + (3<2) = %d\n", (2<1) + (3<2) );
	printf ( "(2<1) * (3<2) = %d\n", (2<1) * (3<2) );

	return 0;
}
sample-003.c の実行結果
C:\usr\c>sample-003
条件値の計算
(1<2) + (2<3) = 1 + 1 = 2
(1<2) * (2<3) = 1 * 1 = 1
(1<2) - (2<3) = 1 - 1 = 0
(1<2) / (2<3) = 1 / 1 = 1
---
(1<2) + (2<3) = 2
(1<2) * (2<3) = 1
(1<2) + (3<2) = 1
(1<2) * (3<2) = 0
(2<1) + (2<3) = 1
(2<1) * (2<3) = 0
(2<1) + (3<2) = 0
(2<1) * (3<2) = 0
C:\usr\c> 

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 2014/11/21 sample-004.c
 */

/*
 * 「条件値」の計算
 *		「条件値」は、「整数値」なので計算できる
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-004.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * void condition_print ( int condition )
 *		int condition	条件(値)
 *		条件が真なら「真」、偽なら「偽」と表示
 */

void condition_print ( int condition ) {

	if ( condition ) {
		printf ( "「真(%d)」", condition );
	} else {
		printf ( "「偽(%d)」", condition );
	}

}

/*
 * void condition_add ( int c1, int c2 )
 *	int c1; 条件値 1
 *	int c2; 条件値 2
 * 	二つの条件値の「和」の振る舞いを表示
 */

void condition_add ( int c1, int c2 ) {

	 condition_print ( c1 );
	 printf ( "と" );
	 condition_print ( c2 );
	 printf ( "の和は" );
	 condition_print ( c1 + c2 );
	 printf ( "になります。\n" );
}

/*
 * void condition_mul ( int c1, int c2 )
 *	int c1; 条件値 1
 *	int c2; 条件値 2
 * 	二つの条件値の「積」の振る舞いを表示
 */

void condition_mul ( int c1, int c2 ) {

	 condition_print ( c1 );
	 printf ( "と" );
	 condition_print ( c2 );
	 printf ( "の積は" );
	 condition_print ( c1 * c2 );
	 printf ( "になります。\n" );
}

/*
 *	main
 *
 */

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

		/* (1<2)「真」と (2<3)「真」の場合 */
    printf ( "(1<2)「真」と (2<3)「真」の場合\n" );
	condition_add ( (1<2), (2<3) );
	condition_mul ( (1<2), (2<3) );

    printf ( "(1<2)「真」と (3<2)「偽」の場合\n" );
	condition_add ( (1<2), (3<2) );
	condition_mul ( (1<2), (3<2) );

    printf ( "(2<1)「偽」と (2<3)「真」の場合\n" );
	condition_add ( (2<1), (2<3) );
	condition_mul ( (2<1), (2<3) );

    printf ( "(2<1)「偽」と (3<2)「偽」の場合\n" );
	condition_add ( (2<1), (3<2) );
	condition_mul ( (2<1), (3<2) );

    printf ( "1「真」と 1「真」の場合\n" );
	condition_add ( 1, 1 );
	condition_mul ( 1, 1 );

    printf ( "1「真」と -1「真」の場合\n" );
	condition_add ( 1, -1 );
	condition_mul ( 1, -1 );

	return 0;
}
sample-004.c の実行結果
C:\usr\c>sample-004
(1<2)「真」と (2<3)「真」の場合
「真(1)」と「真(1)」の和は「真(2)」になります。
「真(1)」と「真(1)」の積は「真(1)」になります。
(1<2)「真」と (3<2)「偽」の場合
「真(1)」と「偽(0)」の和は「真(1)」になります。
「真(1)」と「偽(0)」の積は「偽(0)」になります。
(2<1)「偽」と (2<3)「真」の場合
「偽(0)」と「真(1)」の和は「真(1)」になります。
「偽(0)」と「真(1)」の積は「偽(0)」になります。
(2<1)「偽」と (3<2)「偽」の場合
「偽(0)」と「偽(0)」の和は「偽(0)」になります。
「偽(0)」と「偽(0)」の積は「偽(0)」になります。
1「真」と 1「真」の場合
「真(1)」と「真(1)」の和は「真(2)」になります。
「真(1)」と「真(1)」の積は「真(1)」になります。
1「真」と -1「真」の場合
「真(1)」と「真(-1)」の和は「偽(0)」になります。
「真(1)」と「真(-1)」の積は「真(-1)」になります。
C:\usr\c> 

Download : sample-005.c ( SJIS 版 )

sample-005.c
/*
 * 2014/11/21 sample-005.c
 */

/*
 * 「論理値」の計算
 *		演算子 「&&」 : 論理積を計算する
 *			a && b : a と b のどちらか一方でも 0(偽) なら 0(偽)、それ以外は 1(真)
 *		演算子 「||」 : 論理和を計算する
 *			a || b : a と b の両方が 0(偽) なら 0(偽)、それ以外は 1(真)
 *		演算子 「!」 : 否定を計算する
 *			!a : a が 0(偽) なら 1(偽)、それ以外は 0(偽)
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-005.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * void condition_print ( int condition )
 *		int condition	条件(値)
 *		条件が真なら「真」、偽なら「偽」と表示
 */

void condition_print ( int condition ) {

	if ( condition ) {
		printf ( "「真(%d)」", condition );
	} else {
		printf ( "「偽(%d)」", condition );
	}

}

/*
 * void condition_or ( int c1, int c2 )
 *	int c1; 条件値 1
 *	int c2; 条件値 2
 * 	二つの条件値の「論理和」の振る舞いを表示
 */

void condition_or ( int c1, int c2 ) {

	 condition_print ( c1 );
	 printf ( "と" );
	 condition_print ( c2 );
	 printf ( "の論理和は" );
	 condition_print ( c1 || c2 );	/* 演算子「||」は「論理和」を表す */
	 printf ( "になります。\n" );
}

/*
 * void condition_and ( int c1, int c2 )
 *	int c1; 条件値 1
 *	int c2; 条件値 2
 * 	二つの条件値の「論理積」の振る舞いを表示
 */

void condition_and ( int c1, int c2 ) {

	 condition_print ( c1 );
	 printf ( "と" );
	 condition_print ( c2 );
	 printf ( "の論理積は" );
	 condition_print ( c1 && c2 );	/* 演算子「&&」は「論理積」を表す */
	 printf ( "になります。\n" );
}

/*
 * void condition_not ( int c )
 *	int c; 条件値
 * 	一つの条件値の「否定」の振る舞いを表示
 */

void condition_not ( int c ) {

	 condition_print ( c );
	 printf ( "の否定は" );
	 condition_print ( !c );	/* 演算子「!」は「否定」を表す */
	 printf ( "になります。\n" );
}

/*
 *	main
 *
 */

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

		/* (1<2)「真」と (2<3)「真」の場合 */
    printf ( "(1<2)「真」と (2<3)「真」の場合\n" );
	condition_or ( (1<2), (2<3) );
	condition_and ( (1<2), (2<3) );

    printf ( "(1<2)「真」と (3<2)「偽」の場合\n" );
	condition_or ( (1<2), (3<2) );
	condition_and ( (1<2), (3<2) );

    printf ( "(2<1)「偽」と (2<3)「真」の場合\n" );
	condition_or ( (2<1), (2<3) );
	condition_and ( (2<1), (2<3) );

    printf ( "(2<1)「偽」と (3<2)「偽」の場合\n" );
	condition_or ( (2<1), (3<2) );
	condition_and ( (2<1), (3<2) );

    printf ( "1「真」と 1「偽」の場合\n" );
	condition_or ( 1, 1 );
	condition_and ( 1, 1 );

    printf ( "1「真」と -1「真」の場合\n" );
	condition_or ( 1, -1 );
	condition_and ( 1, -1 );

    printf ( "1 の否定\n" );
	condition_not ( 1 );

    printf ( "0 の否定\n" );
	condition_not ( 0 );

    printf ( "-1 の否定\n" );
	condition_not ( -1 );

	return 0;
}
sample-005.c の実行結果
C:\usr\c>sample-005
(1<2)「真」と (2<3)「真」の場合
「真(1)」と「真(1)」の論理和は「真(1)」になります。
「真(1)」と「真(1)」の論理積は「真(1)」になります。
(1<2)「真」と (3<2)「偽」の場合
「真(1)」と「偽(0)」の論理和は「真(1)」になります。
「真(1)」と「偽(0)」の論理積は「偽(0)」になります。
(2<1)「偽」と (2<3)「真」の場合
「偽(0)」と「真(1)」の論理和は「真(1)」になります。
「偽(0)」と「真(1)」の論理積は「偽(0)」になります。
(2<1)「偽」と (3<2)「偽」の場合
「偽(0)」と「偽(0)」の論理和は「偽(0)」になります。
「偽(0)」と「偽(0)」の論理積は「偽(0)」になります。
1「真」と 1「偽」の場合
「真(1)」と「真(1)」の論理和は「真(1)」になります。
「真(1)」と「真(1)」の論理積は「真(1)」になります。
1「真」と -1「真」の場合
「真(1)」と「真(-1)」の論理和は「真(1)」になります。
「真(1)」と「真(-1)」の論理積は「真(1)」になります。
1 の否定
「真(1)」の否定は「偽(0)」になります。
0 の否定
「偽(0)」の否定は「真(1)」になります。
-1 の否定
「真(-1)」の否定は「偽(0)」になります。
C:\usr\c> 

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 2014/11/21 sample-006.c
 */

/*
 * 「論理計算」と if 文
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-006.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 *	main
 *
 */

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

	/* 二つの条件が成立する場合 */

	if ( 2 > 1 ) {
		if ( 3 > 2 ) {
			printf ( "(2>1) かつ (3>2)\n" );
		} else {
	} else {
	}

	return 0;
}
sample-006.c の実行結果
C:\usr\c>sample-006
(1<2)「真」と (2<3)「真」の場合
「真(1)」と「真(1)」の和は「真(2)」になります。
「真(1)」と「真(1)」の積は「真(1)」になります。
(1<2)「真」と (3<2)「偽」の場合
「真(1)」と「偽(0)」の和は「真(1)」になります。
「真(1)」と「偽(0)」の積は「偽(0)」になります。
(2<1)「偽」と (2<3)「真」の場合
「偽(0)」と「真(1)」の和は「真(1)」になります。
「偽(0)」と「真(1)」の積は「偽(0)」になります。
(2<1)「偽」と (3<2)「偽」の場合
「偽(0)」と「偽(0)」の和は「偽(0)」になります。
「偽(0)」と「偽(0)」の積は「偽(0)」になります。
1「真」と 1「真」の場合
「真(1)」と「真(1)」の和は「真(2)」になります。
「真(1)」と「真(1)」の積は「真(1)」になります。
1「真」と -1「真」の場合
「真(1)」と「真(-1)」の和は「偽(0)」になります。
「真(1)」と「真(-1)」の積は「真(-1)」になります。
C:\usr\c> 

Download : sample-010.c ( SJIS 版 )

sample-010.c
/*
 * 2014/11/21 sample-010.c
 */

/*
 *  複数条件の分岐
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-010.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * trump
 *   トランプの番号から、その名前を表示する
 */

void trump ( int number ) {

	printf ( "数値 %d の表すカードは、", number );

	if ( number == 1 ) {	/* 番号が 1 なら エース (A) */
	 	printf ( "エース" );
	} else if ( number == 11 ) {	/* 番号が 11 なら ジャック (J) */
	 	printf ( "ジャック" );
	} else if ( number == 12 ) {	/* 番号が 12 なら クイーン (Q) */
	 	printf ( "クイーン" );
	} else if ( number == 13 ) {	/* 番号が 13 なら キング (K) */
	 	printf ( "キング" );
	} else if ( number == 0 ) {	/* 番号が 0 の場合は例外的に ジョーカー ($) */
	 	printf ( "ジョーカー" );
	} else {	/* それ以外 */
		if ( number < 0 ) {		/* 番号が負の場合は.. */
		 	printf ( "範囲外" );
		} else if ( 13 < number )	{	/* 番号が 13 より大きい場合は.. */	
		 	printf ( "範囲外" );
		} else {   						/* それ以外は.. */
			printf ( "%d の数カード", number );
		}
	}

	printf ( "です。\n" );

}

/*
 *	main
 *
 */

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

	trump ( -1 );
	trump ( 0 );
	trump ( 1 );
	trump ( 7 );
	trump ( 10 );
	trump ( 13 );
	trump ( 20 );

	return 0;
}
sample-010.c の実行結果
C:\usr\c>sample-010
数値 -1 の表すカードは、範囲外です。
数値 0 の表すカードは、ジョーカーです。
数値 1 の表すカードは、エースです。
数値 7 の表すカードは、7 の数カードです。
数値 10 の表すカードは、10 の数カードです。
数値 13 の表すカードは、キングです。
数値 20 の表すカードは、範囲外です。
C:\usr\c> 

Download : sample-011.c ( SJIS 版 )

sample-011.c
/*
 * 2014/11/21 sample-011.c
 */

/*
 *  複数条件の分岐(論理演算子を利用した場合)
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-011.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * trump
 *   トランプの番号から、その名前を表示する
 */

void trump ( int number ) {

	printf ( "数値 %d の表すカードは、", number );

	if ( number == 1 ) {	/* 番号が 1 なら エース (A) */
	 	printf ( "エース" );
	} else if ( number == 11 ) {	/* 番号が 11 なら ジャック (J) */
	 	printf ( "ジャック" );
	} else if ( number == 12 ) {	/* 番号が 12 なら クイーン (Q) */
	 	printf ( "クイーン" );
	} else if ( number == 13 ) {	/* 番号が 13 なら キング (K) */
	 	printf ( "キング" );
	} else if ( number == 0 ) {	/* 番号が 0 の場合は例外的に ジョーカー ($) */
	 	printf ( "ジョーカー" );
	} else if ( 1 < number && number < 11 ) {	/* 番号が 2 〜 10 の時 */
		printf ( "%d の数カード", number );
	} else {   									/* それ以外は.. */
	 	printf ( "範囲外" );
	}

	printf ( "です。\n" );

}

/*
 *	main
 *
 */

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

	trump ( -1 );
	trump ( 0 );
	trump ( 1 );
	trump ( 7 );
	trump ( 10 );
	trump ( 13 );
	trump ( 20 );

	return 0;
}
sample-011.c の実行結果
C:\usr\c>sample-011
数値 -1 の表すカードは、範囲外です。
数値 0 の表すカードは、ジョーカーです。
数値 1 の表すカードは、エースです。
数値 7 の表すカードは、7 の数カードです。
数値 10 の表すカードは、10 の数カードです。
数値 13 の表すカードは、キングです。
数値 20 の表すカードは、範囲外です。
C:\usr\c> 

Download : sample-012.c ( SJIS 版 )

sample-012.c
/*
 * 2014/11/21 sample-012.c
 */

/*
 *  複数条件の分岐(case 文を利用した場合)
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-012.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * trump
 *   トランプの番号から、その名前を表示する
 */

void trump ( int number ) {

	printf ( "数値 %d の表すカードは、", number );

	switch ( number ) {		/* 一つの式の値で分岐 */
	case 1:					/* 番号が 1 なら エース (A) { (開きブロック) */
	 	printf ( "エース" );
		break;				/* ここで 1 の場合がおわる  } (閉じブロック) */
	case 11:				/* 番号が 11 なら ジャック (J) */
	 	printf ( "ジャック" );
		break;
	case 12:				/* 番号が 12 なら クイーン (Q) */
	 	printf ( "クイーン" );
		break;
	case 13:				/* 番号が 13 なら キング (K) */
	 	printf ( "キング" );
		break;
	case 0: 				/* 番号が 0 の場合は例外的に ジョーカー ($) */
	 	printf ( "ジョーカー" );
		break;
	case 2:					/* 範囲は指定できないので、全て列挙 */
							/* 2 の場合は 3 の場合と同じなので break しない */
	case 3:
	case 4:
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	case 10:
		printf ( "%d の数カード", number );
		break;				/* 2 〜 10 の場合はここで、終了 */
	default:				/* それ以外は.. */
	 	printf ( "範囲外" );
		break;				/* これは不要だが、つける習慣を (マナー) */
	}

	printf ( "です。\n" );

}

/*
 *	main
 *
 */

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

	trump ( -1 );
	trump ( 0 );
	trump ( 1 );
	trump ( 7 );
	trump ( 10 );
	trump ( 13 );
	trump ( 20 );

	return 0;
}
sample-012.c の実行結果
C:\usr\c>sample-012
数値 -1 の表すカードは、範囲外です。
数値 0 の表すカードは、ジョーカーです。
数値 1 の表すカードは、エースです。
数値 7 の表すカードは、7 の数カードです。
数値 10 の表すカードは、10 の数カードです。
数値 13 の表すカードは、キングです。
数値 20 の表すカードは、範囲外です。
C:\usr\c> 

Download : sample-013.c ( SJIS 版 )

sample-013.c
/*
 * 2014/11/21 sample-013.c
 */

/*
 *  複数条件の分岐(case 文と if 文の混合)
 *
 * 利用方法
 *		コンパイル
 *			cc -Ic:\usr\c\include -o BASENAME.exe sample-013.c
 *		実行
 *			BASENAME
 */

#include <stdio.h>

/*
 * trump
 *   トランプの番号から、その名前を表示する
 */

void trump ( int number ) {

	printf ( "数値 %d の表すカードは、", number );

	switch ( number ) {		/* 一つの式の値で分岐 */
	case 1:					/* 番号が 1 なら エース (A) { (開きブロック) */
	 	printf ( "エース" );
		break;				/* ここで 1 の場合がおわる  } (閉じブロック) */
	case 11:				/* 番号が 11 なら ジャック (J) */
	 	printf ( "ジャック" );
		break;
	case 12:				/* 番号が 12 なら クイーン (Q) */
	 	printf ( "クイーン" );
		break;
	case 13:				/* 番号が 13 なら キング (K) */
	 	printf ( "キング" );
		break;
	case 0: 				/* 番号が 0 の場合は例外的に ジョーカー ($) */
	 	printf ( "ジョーカー" );
		break;
	default:				/* それ以外は.. */
		if ( 2 <= number && number <= 10 ) {
			/* if 文ならば、「範囲」も指定できる */
			printf ( "%d の数カード", number );
		} else {
		 	printf ( "範囲外" );
		}
		break;				/* これは不要だが、つける習慣を (マナー) */
	}

	printf ( "です。\n" );

}

/*
 *	main
 *
 */

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

	trump ( -1 );
	trump ( 0 );
	trump ( 1 );
	trump ( 7 );
	trump ( 10 );
	trump ( 13 );
	trump ( 20 );

	return 0;
}
sample-013.c の実行結果
C:\usr\c>sample-013
数値 -1 の表すカードは、範囲外です。
数値 0 の表すカードは、ジョーカーです。
数値 1 の表すカードは、エースです。
数値 7 の表すカードは、7 の数カードです。
数値 10 の表すカードは、10 の数カードです。
数値 13 の表すカードは、キングです。
数値 20 の表すカードは、範囲外です。
C:\usr\c> 

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

本日の課題

Links

関連 Link

logical