Powered by SmartDoc

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

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

目次

講義資料

当日の OHP 資料

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

本日の課題

課題 20140627-01 : 二つの整数値をキーボードから入力し、その四則並びに余りを出力する

Download : 20140627-01.c ( SJIS 版 )

20140627-01.c
/*
 * TITLE
 *
 * CDATE FILENAME
 *
 *	一つ浮動小数点数値をキーボードから入力し、その立方根を出力する
 *	手段としては、「二分法」を使う
 */

#include <stdio.h>

#include "s_input.h"
#include "s_print.h"

/*
 *
 */

#define	EPSILON	0.00000001		/* 誤差幅 */

/*
* double regula_falsi_cubic_root ( double a, double min, double mid, double \
    max )
 *		double a	立方根の元になる数(正を仮定している)
 *		double min, max 根の入る区間の範囲
 *		double mid	min と mid の中点
 *		return		a 立方根
 *			二分法により、a の立方根を求める
 *			0 < min < a の立方根 < max
 */

double regula_falsi_cubic_root ( double a, double min, double mid, double \
    max ) {

	if ( max - min < EPSILON ) {	/* 十分に精度が上った */
		return mid;					/* 中点の値を答として返す */
	} else {						/* まだ、狭める必要がある */
		/* min が解のどちら側にあるかを調べ.. それに併せて区間を調整 */
		/* f(x)=x^3-a */
		if ( mid * mid * mid - a < 0.0 ) {	/* f(mid) の符号を確認 */
					/* 解の左にあった */

	/*
	**	 この部分を完成させなさい
	*/

		} else {	/* 解の右にあった */
			return regula_falsi_cubic_root ( a, min, (min+mid)/2.0, mid );
		}
	}
}


/*
 * double cubic_root ( double a )
 *		double a	立方根の元になる数
 *		return		a 立方根
 *			a の立方根を求めて結果として返すが、
 *			計算の基本は、regula_falsi_cubic_root にまかせる
 *			ここでは、計算の正規化を行う
 */

double cubic_root ( double a ) {

	if ( a < 0.0 ) {					/* a が負の数ならば.. */
		/* -a の立方根を計算し、負数を返す */

	/*
	**	 この部分を完成させなさい
	*/

	} else if ( a < 1.0 ) {				/* a が 1.0 以下なら */

	/*
	**	 この部分を完成させなさい
	*/

										/* 立方根は a と 1.0 の間にある */
	} else {							/* そうでなければ.. */
		return regula_falsi_cubic_root ( a, 1.0, (1.0+a)/2.0, a );
										/* 立方根は 1.0 と a の間にある */
	}

}

/*
 * void print_cubic_root ( double a )
 *		double a	立方根を計算する数
 *			元の数と、立方根を出力する
 */

void print_cubic_root ( double a ) {

	 s_print_double ( a );
	 s_print_string ( " の立方根は " );

	/*
	**	 この部分を完成させなさい
	*/

	 s_print_string ( " です。\n" );

}

/*
 *	main
 */

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

	s_print_string ( "実数値を一つ入力してください : " );	
	print_cubic_root ( s_input_double() );

	return 0;
}
入力例
12.34
20140627-01.c の実行結果
C:\usr\c\> 20140627-01-QQQQ
実数値を一つ入力してください : 12.340000
12.340000 の立方根は 2.310850 です。
C:\usr\c\> 

課題 20140627-02 : 入力された三つの整数を小さい順に出す

Download : 20140627-02.c ( SJIS 版 )

20140627-02.c
/*
 * TITLE
 *
 * CDATE FILENAME
 *
 *	キーボードから三つの整数を入力し、小さい順に出力する
 */

#include <stdio.h>

#include "s_input.h"
#include "s_print.h"


/*
 *	main
 */

int main( int argc, char *argv[] )
{
	int i1;	/* 三つの入力された整数を保存する変数 */

	/*
	**	 この部分を完成させなさい
	*/

	int i3;

	int o1;	/* 小さい順に値を入れる */
	int o2;	/* 小さい順に値を入れる */

	/*
	**	 この部分を完成させなさい
	*/


	s_print_string ( "一つ目の整数を入力してください : " );
	i1 = s_input_int();

	s_print_string ( "二つ目の整数を入力してください : " );
	i2 = s_input_int();

	s_print_string ( "三つ目の整数を入力してください : " );

	/*
	**	 この部分を完成させなさい
	*/


	/*
	 * 数を比較して、一番小さい物をみつける
	 */

	 if ( i1 < i2 ) {
	 	if ( i2 < i3 ) {

	/*
	**	 この部分を完成させなさい
	*/

		} else if ( i1 < i3 ) {
			o1 = i1;
			o2 = i3;
			o3 = i2;
		} else {
			o1 = i3;
			o2 = i1;
			o3 = i2;
		}
	} else {
	 	if ( i1 < i3 ) {
			o1 = i2;
			o2 = i1;
			o3 = i3;
		} else if ( i2 < i3 ) {

	/*
	**	 この部分を完成させなさい
	*/

		} else {
			o1 = i3;
			o2 = i2;
			o3 = i1;
		}
	}

	/*
	 * 出力
	 */


	/*
	**	 この部分を完成させなさい
	*/

	s_print_char ( ',' );
	s_print_int ( o2 );
	s_print_char ( ',' );
	s_print_int ( o3 );
	s_print_newline();

	return 0;
}
入力例
4
1
3
20140627-02.c の実行結果
C:\usr\c\> 20140627-02-QQQQ
一つ目の整数を入力してください : 4
二つ目の整数を入力してください : 1
三つ目の整数を入力してください : 3
1,3,4
C:\usr\c\> 

-->