Powered by SmartDoc

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

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

目次

講義資料

当日の OHP 資料

当日のOHP資料です。

Download

次のファイルを、c:\usr\cに保存する。

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

サンプルファイル

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * 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;
}
sample-001.c の実行結果
C:\usr\c>sample-001
Hello, World
C:\usr\c> 

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 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
sample-002.c の実行結果
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 版 )

sample-003.c
/*
 * 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;
}
sample-003.c の実行結果
C:\usr\c>sample-003
整数   : 9
文字   : 9
文字列 : 9
整数の計算 : 9 + 1 = 10
文字の計算 : '9' + 1 = :
文字の計算 : "9" + 1 = 
C:\usr\c> 

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 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;
}
sample-004.c の実行結果
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 版 )

sample-005.c
/*
 * 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;
}
sample-005.c の実行結果
C:\usr\c>sample-005
"abc" + 1 = bc
*"abc" = a
C:\usr\c> 

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 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;
}
sample-006.c の実行結果
C:\usr\c>sample-006
12 + 5 = 17
12 - 5 = 7
12 * 5 = 60
12 / 5 = 2
C:\usr\c> 

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

本日の課題

課題 20130621-01 : 二つの整数値を入力し、その四則と余りを出力する

Download : 20130621-01.c ( SJIS 版 )

20130621-01.c
/*
 * 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
20130621-01.c の実行結果
C:\usr\c\> 20130621-01-QQQQ
和 : 12+5=17
差 : 12-5=7
積 : 12*5=60
商 : 12/5=2
余り : 12%5=2
C:\usr\c\> 

課題 20130621-02 : 二つの浮動小数点数値を入力し、その四則を出力する

Download : 20130621-02.c ( SJIS 版 )

20130621-02.c
/*
 * 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
20130621-02.c の実行結果
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\> 

Links