Powered by SmartDoc

ソフトウェア概論A/B (2012/10/26)
Ver. 1.0

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

目次

講義資料

当日の OHP 資料

当日のOHP資料です。

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

sample-001

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * 2012/10/12 sample-001.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_memory.h"	/* memory モデルを理解するための関数定義 */

/*
 *	◯×ゲームのボード (一次元版)
 *
 *               y
 *         0     1     2			    (y,t)
 *		+-----+-----+-----+            +-----+
 *	  0	|(0,0)|(0,1)|(0,2)|            |(0,0)| 0 = 0*3+0 = t*3+y
 *		+-----+-----+-----+            +-----+
 * t  1	|(1,0)|(1,1)|(1,2)|            |(0,1)| 1 = 0*3+1 = t*3+y
 *		+-----+-----+-----+            +-----+
 *	  2	|(2,0)|(2,1)|(2,2)|            |(0,2)| 2 = 0*3+2 = t*3+y
 *		+-----+-----+-----+            +-----+
 *									   |(1,0)| 3 = 1*3+0 = t*3+y
 *									   +-----+
 *									   |(1,1)| 4 = 1*3+1 = t*3+y
 *									   +-----+
 *									   |(1,2)| 5 = 1*3+2 = t*3+y
 *									   +-----+
 *									   |(2,0)| 6 = 2*3+0 = t*3+y
 *									   +-----+
 *									   |(2,1)| 7 = 2*3+1 = t*3+y
 *									   +-----+
 *									   |(2,2)| 8 = 2*3+2 = x*3+y
 *									   +-----+
 *
 */

#define	BOARD_SIZE	3	/* ボードのサイズ */

#define	SENTE_MARK	'o'	/* 先手は 'o' (マル) */
#define	GOTE_MARK	'x'	/* 後手は 'x' (バツ) */

int main ( void ) {

  /*
   *
   */

   char board[BOARD_SIZE*BOARD_SIZE];	/* サイズは 3 × 3 */
										/* char board[3*3]; */
										/* char board[9]; */
   int t;								/* 縱 */
   int y;								/* 横 */

  /*
   * ある局面
   *
   *     oxx
   *     xoo
   *     oox                             
   */

   board[0*BOARD_SIZE+0] = 'o';	/* (0,0) */
   board[0*BOARD_SIZE+1] = 'x';	/* (0,1) */
   board[0*BOARD_SIZE+2] = 'x';	/* (0,2) */

   board[1*BOARD_SIZE+0] = 'x';	/* (1,0) */
   board[1*BOARD_SIZE+1] = 'o';	/* (1,1) */
   board[1*BOARD_SIZE+2] = 'o';	/* (1,2) */

   board[2*BOARD_SIZE+0] = 'o';	/* (2,0) */
   board[2*BOARD_SIZE+1] = 'x';	/* (2,1) */
   board[2*BOARD_SIZE+2] = 'x';	/* (2,2) */

  /*
   *
   */

   t = 0;
   while ( t < BOARD_SIZE ) {
   	 y = 0;
     while ( y < BOARD_SIZE ) {
	   s_print_char ( board[t*BOARD_SIZE+y] );
	   y = y + 1;
	 }
	 s_print_newline();
	 t = t + 1;
  }

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-001.c の実行結果
C:\usr\c>sample-001
oxx
xoo
oxx
C:\usr\c> 

sample-002

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 2012/10/12 sample-002.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *	◯×ゲームのボード (一次元版)
 *
 *               y
 *         0     1     2			    (y,t)
 *		+-----+-----+-----+            +-----+
 *	  0	|(0,0)|(0,1)|(0,2)|            |(0,0)| 0 = 0*3+0 = t*3+y
 *		+-----+-----+-----+            +-----+
 * t  1	|(1,0)|(1,1)|(1,2)|            |(0,1)| 1 = 0*3+1 = t*3+y
 *		+-----+-----+-----+            +-----+
 *	  2	|(2,0)|(2,1)|(2,2)|            |(0,2)| 2 = 0*3+2 = t*3+y
 *		+-----+-----+-----+            +-----+
 *									   |(1,0)| 3 = 1*3+0 = t*3+y
 *									   +-----+
 *									   |(1,1)| 4 = 1*3+1 = t*3+y
 *									   +-----+
 *									   |(1,2)| 5 = 1*3+2 = t*3+y
 *									   +-----+
 *									   |(2,0)| 6 = 2*3+0 = t*3+y
 *									   +-----+
 *									   |(2,1)| 7 = 2*3+1 = t*3+y
 *									   +-----+
 *									   |(2,2)| 8 = 2*3+2 = x*3+y
 *									   +-----+
 *
 */

#define	BOARD_SIZE	3	/* ボードのサイズ */

#define	SENTE_MARK	'o'	/* 先手は 'o' (マル) */
#define	GOTE_MARK	'x'	/* 後手は 'x' (バツ) */

/*
 * 二次元の座標を一次元に変換する関数
 */

int index2d ( int t, int y ) {

	return t * BOARD_SIZE + y;
}

int main ( void ) {

  /*
   *
   */

   char board[BOARD_SIZE*BOARD_SIZE];	/* サイズは 3 × 3 */
   int t;								/* 縱 */
   int y;								/* 横 */

  /*
   * ある局面
   *
   *     oxx
   *     xoo
   *     oox                             
   */

   board[index2d(0,0)] = 'o';	/* (0,0) */
   board[index2d(0,1)] = 'x';	/* (0,1) */
   board[index2d(0,2)] = 'x';	/* (0,2) */

   board[index2d(1,0)] = 'x';	/* (1,0) */
   board[index2d(1,1)] = 'o';	/* (1,1) */
   board[index2d(1,2)] = 'o';	/* (1,2) */

   board[index2d(2,0)] = 'o';	/* (2,0) */
   board[index2d(2,1)] = 'x';	/* (2,1) */
   board[index2d(2,2)] = 'x';	/* (2,2) */

  /*
   *
   */

   t = 0;
   while ( t < BOARD_SIZE ) {
   	 y = 0;
     while ( y < BOARD_SIZE ) {
	   s_print_char ( board[index2d(t,y)] );
	   y = y + 1;
	 }
	 s_print_newline();
	 t = t + 1;
  }

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-002.c の実行結果
C:\usr\c>sample-002
oxx
xoo
oxx
C:\usr\c> 

sample-003

Download : sample-003.c ( SJIS 版 )

sample-003.c
/*
 * 2012/10/12 sample-003.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *	◯×ゲームのボード (二次元版)
 *
 *               y
 *         0     1     2
 *		+-----+-----+-----+
 *	  0	|(0,0)|(0,1)|(0,2)|
 *		+-----+-----+-----+
 * t  1	|(1,0)|(1,1)|(1,2)|
 *		+-----+-----+-----+
 *	  2	|(2,0)|(2,1)|(2,2)|
 *		+-----+-----+-----+
 *
 */

#define	BOARD_SIZE	3	/* ボードのサイズ */

#define	SENTE_MARK	'o'	/* 先手は 'o' (マル) */
#define	GOTE_MARK	'x'	/* 後手は 'x' (バツ) */

int main ( void ) {

  /*
   *
   */

   char board[BOARD_SIZE][BOARD_SIZE];	/* サイズは 3 × 3 */
   int t;								/* 縱 */
   int y;								/* 横 */

  /*
   * ある局面
   *
   *     oxx
   *     xoo
   *     oox                             
   */

   board[0][0] = 'o';	/* (0,0) */
   board[0][1] = 'x';	/* (0,1) */
   board[0][2] = 'x';	/* (0,2) */

   board[1][0] = 'x';	/* (1,0) */
   board[1][1] = 'o';	/* (1,1) */
   board[1][2] = 'o';	/* (1,2) */

   board[2][0] = 'o';	/* (2,0) */
   board[2][1] = 'x';	/* (2,1) */
   board[2][2] = 'x';	/* (2,2) */

  /*
   *
   */

   t = 0;
   while ( t < BOARD_SIZE ) {
   	 y = 0;
     while ( y < BOARD_SIZE ) {
	   s_print_char ( board[t][y] );
	   y = y + 1;
	 }
	 s_print_newline();
	 t = t + 1;
  }

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-003.c の実行結果
C:\usr\c>sample-003
oxx
xoo
oxx
C:\usr\c> 

sample-004

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 2012/10/12 sample-004.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *	◯×ゲームのボード (一次元版)
 *
 *               y
 *         0     1     2			    (y,t)
 *		+-----+-----+-----+            +-----+
 *	  0	|(0,0)|(0,1)|(0,2)|            |(0,0)| 0 = 0*3+0 = t*3+y
 *		+-----+-----+-----+            +-----+
 * t  1	|(1,0)|(1,1)|(1,2)|            |(0,1)| 1 = 0*3+1 = t*3+y
 *		+-----+-----+-----+            +-----+
 *	  2	|(2,0)|(2,1)|(2,2)|            |(0,2)| 2 = 0*3+2 = t*3+y
 *		+-----+-----+-----+            +-----+
 *									   |(1,0)| 3 = 1*3+0 = t*3+y
 *									   +-----+
 *									   |(1,1)| 4 = 1*3+1 = t*3+y
 *									   +-----+
 *									   |(1,2)| 5 = 1*3+2 = t*3+y
 *									   +-----+
 *									   |(2,0)| 6 = 2*3+0 = t*3+y
 *									   +-----+
 *									   |(2,1)| 7 = 2*3+1 = t*3+y
 *									   +-----+
 *									   |(2,2)| 8 = 2*3+2 = x*3+y
 *									   +-----+
 *
 */

#define	BOARD_SIZE	3	/* ボードのサイズ */

#define	SENTE_MARK	'o'	/* 先手は 'o' (マル) */
#define	GOTE_MARK	'x'	/* 後手は 'x' (バツ) */

int main ( void ) {

  /*
   *
   */

   char board[BOARD_SIZE][BOARD_SIZE];	/* サイズは 3 × 3 */
   int t;								/* 縱 */
   int y;								/* 横 */

  /*
   *
   */

   s_print_string ( "sizeof ( board[0][0] ) = " );
   s_print_int ( sizeof ( board[0][0] ) );
   s_print_newline();

   s_print_string ( "sizeof ( board[0] ) = " );
   s_print_int ( sizeof ( board[0] ) );
   s_print_newline();

   t = 0;
   while ( t < BOARD_SIZE ) {

   s_print_string ( "board[" );
   s_print_int ( t );
   s_print_string ( "]=" );
   s_print_hex ( &board[t] );
   s_print_newline();

   	 y = 0;
     while ( y < BOARD_SIZE ) {

		/* アドレスの表示 */

	   s_print_string ( "(" );	 
	   s_print_int ( t );
	   s_print_string ( "," );	 
	   s_print_int ( y );
	   s_print_string ( ") " );
	   s_print_hex ( &board[t][y] );
	   s_print_newline();

	   y = y + 1;
	 }
	 s_print_newline();
	 t = t + 1;
  }

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-004.c の実行結果
C:\usr\c>sample-004
sizeof ( board[0][0] ) = 1
sizeof ( board[0] ) = 3
board[0]=bfc6ff4f
(0,0) bfc6ff4f
(0,1) bfc6ff50
(0,2) bfc6ff51

board[1]=bfc6ff52
(1,0) bfc6ff52
(1,1) bfc6ff53
(1,2) bfc6ff54

board[2]=bfc6ff55
(2,0) bfc6ff55
(2,1) bfc6ff56
(2,2) bfc6ff57

C:\usr\c> 

sample-006

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 2012/10/12 sample-006.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 * 再帰を利用した階乗の計算(既出)
 *
 *				1 ( n < 1 )
 *		n! = {
 *				n * { (n-1)! }
 */

int fact ( int n ) {

	if ( n < 1 ) {		// n が 0 の時
		return 1;
	} else {
		return fact ( n - 1 ) * n;	// 再帰を利用して計算
	}
}

int main ( void ) {

  /*
   *
   */

	int n = 5;

  /*
   *
   */

   s_print_string ( "fact(" );
   s_print_int ( n );
   s_print_string ( ")=" );
   s_print_int ( fact(n) );
   s_print_newline();

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-006.c の実行結果
C:\usr\c>sample-006
fact(5)=120
C:\usr\c> 

sample-007

Download : sample-007.c ( SJIS 版 )

sample-007.c
/*
 * 2012/10/12 sample-007.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 * 仮引数変数 n のアドレスと値はどうなっているか ?
 */

int fact ( int n ) {
	int f;

	s_print_string ( "(fact:前) n = " );
	s_print_int ( n );
	s_print_string ( ", &n = " );
	s_print_hex ( &n );
	s_print_newline();

	if ( n < 1 ) {
		f = 1;
	} else {
		f = fact ( n - 1 ) * n;
	}

	s_print_string ( "(fact:後) n = " );
	s_print_int ( n );
	s_print_string ( ", &n = " );
	s_print_hex ( &n );
	s_print_newline();

	return f;
}

int main ( void ) {

  /*
   *
   */

	int n = 5;
	int f;

  /*
   *
   */

	s_print_string ( "(main) n = " );
	s_print_int ( n );
	s_print_string ( ", &n = " );
	s_print_hex ( &n );
	s_print_newline();

  /*
   *
   */

   f = fact(n);

   s_print_string ( "fact(" );
   s_print_int ( n );
   s_print_string ( ")=" );
   s_print_int ( f );
   s_print_newline();

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-007.c の実行結果
C:\usr\c>sample-007
(main) n = 5, &n = bfe0c748
(fact:前) n = 5, &n = bfe0c730
(fact:前) n = 4, &n = bfe0c700
(fact:前) n = 3, &n = bfe0c6d0
(fact:前) n = 2, &n = bfe0c6a0
(fact:前) n = 1, &n = bfe0c670
(fact:前) n = 0, &n = bfe0c640
(fact:後) n = 0, &n = bfe0c640
(fact:後) n = 1, &n = bfe0c670
(fact:後) n = 2, &n = bfe0c6a0
(fact:後) n = 3, &n = bfe0c6d0
(fact:後) n = 4, &n = bfe0c700
(fact:後) n = 5, &n = bfe0c730
fact(5)=120
C:\usr\c> 

sample-008

Download : sample-008.c ( SJIS 版 )

sample-008.c
/*
 * 2012/10/12 sample-008.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 * 引数のアドレスは ? ( 引数の順に並んいる )
 */

int subfunc ( int a, int b ) {

	s_print_string ( "a = " );
	s_print_int ( a );
	s_print_string ( ", &a = " );
	s_print_hex ( &a );
	s_print_newline();

	s_print_string ( "b = " );
	s_print_int ( b );
	s_print_string ( ", &b = " );
	s_print_hex ( &b );
	s_print_newline();

}

int main ( void ) {

  /*
   *
   */

	subfunc ( 2, 4 );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-008.c の実行結果
C:\usr\c>sample-008
a = 2, &a = bf92f230
b = 4, &b = bf92f234
C:\usr\c> 

sample-009

Download : sample-009.c ( SJIS 版 )

sample-009.c
/*
 * 2012/10/12 sample-009.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 * 一つの引数変数から(ポインター経由で..)他の引数変数を参照する事ができる
 */

int subfunc ( int a, int b ) {

	s_print_string ( "a = " );
	s_print_int ( a );
	s_print_string ( ", &a = " );
	s_print_hex ( &a );
	s_print_newline();

	s_print_string ( "b = " );
	s_print_int ( b );
	s_print_string ( ", &b = " );
	s_print_hex ( &b );
	s_print_newline();

	/*
     * 変数 b を利用して変数 a の値が参照できる
	 */

	s_print_string ( "*(&b-1) = " );
	s_print_int ( *(&b-1) );
	s_print_string ( ", &b-1 = " );
	s_print_hex ( &b-1 );
	s_print_newline();

	/*
     * 変数 b を利用して変数 a の値を変更(代入)できる
	 */

	*(&b-1) = 10;

	s_print_string ( "a = " );
	s_print_int ( a );
	s_print_newline();

}

int main ( void ) {

  /*
   *
   */

	subfunc ( 2, 4 );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-009.c の実行結果
C:\usr\c>sample-009
a = 2, &a = bfa21120
b = 4, &b = bfa21124
*(&b-1) = 2, &b-1 = bfa21120
a = 10
C:\usr\c> 

sample-010

Download : sample-010.c ( SJIS 版 )

sample-010.c
/*
 * 2012/10/12 sample-010.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 * 先頭の引数のポインタを利用して、残りの引数を参照する
 */

int subfunc ( int a, ... ) {

	s_print_string ( "a = " );
	s_print_int ( a );
	s_print_string ( ", &a = " );
	s_print_hex ( &a );
	s_print_newline();

	s_print_string ( "*(&a+1) = " );
	s_print_int ( *(&a+1) );
	s_print_string ( ", &a + 1 = " );
	s_print_hex ( &a + 1 );
	s_print_newline();

	s_print_string ( "*(&a+2) = " );
	s_print_int ( *(&a+2) );
	s_print_string ( ", &a + 2 = " );
	s_print_hex ( &a + 2 );
	s_print_newline();

}

int main ( void ) {

  /*
   *
   */

	subfunc ( 1,2,3,4,5 );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-010.c の実行結果
C:\usr\c>sample-010
a = 1, &a = bf963910
*(&a+1) = 2, &a + 1 = bf963914
*(&a+2) = 3, &a + 2 = bf963918
C:\usr\c> 

sample-011

Download : sample-011.c ( SJIS 版 )

sample-011.c
/*
 * 2012/10/12 sample-011.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 * 引数をアドレス経由で参照する
 *	最初の引数 n は、他の引数の個数としての情報を担う
 *		関数(のプログラム作成時)側では、
 *		(実行時の呼出の時に)幾つの引数が指定されるかを知る術がない
 *		最初の引数 n の「値」を信じて振る舞うしかない
 */

int subfunc ( int n, ... ) {
	int i;

	i = 0;
	while ( i < n ) {
			s_print_string ( "a[" );
			s_print_int ( i );
			s_print_string ( "]= " );
			s_print_int ( *(&n+1+i) );
			s_print_newline();
			i = i + 1;
	}
}

int main ( void ) {

  /*
   *
   */

   s_print_string ( "subfunc ( 5,1,2,3,4,5 );\n" );
   subfunc ( 5,1,2,3,4,5 );	// 1 から 5 の追加の引数の個数を適切に指定

   s_print_string ( "subfunc ( 3,9,8,7,6 );\n" );
   subfunc ( 3,9,8,7,6 );	// 4 つの追加の引数があるのに 3 としているので、最後の値は利用されない

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-011.c の実行結果
C:\usr\c>sample-011
subfunc ( 5,1,2,3,4,5 );
a[0]= 1
a[1]= 2
a[2]= 3
a[3]= 4
a[4]= 5
subfunc ( 3,9,8,7,6 );
a[0]= 9
a[1]= 8
a[2]= 7
C:\usr\c> 

sample-012

Download : sample-012.c ( SJIS 版 )

sample-012.c
/*
 * 2012/10/12 sample-012.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 * 最初の引数に指定した文字列の中に 「%」があったら、後の引数の値に置き換える
 */

int print_int_with_format ( char *fmt, int a, ... ) {
	int i;
	int j;

	j = 0;
	i = 0;

	while ( fmt[i] != '\0' ) {			/* 文字列の終わりがくるまで */
		if ( fmt[i] == '%' ) {			/* '%' がきたら特別処理
		  	 s_print_int ( *(&a+j) );	/* 追加引数の値を取り出し出力 */
			 j = j + 1;			   		/* 次の引数の準備 */
		 } else {						/* '%' 以外は.. */
		  	 s_print_char ( fmt[i] );	/* その文字をそのまま出力 */
		 }
		 i = i + 1;						/* 次の文字 */
	}

}

int main ( void ) {

  /*
   *
   */

	print_int_with_format ( "%\n", 99 );
	print_int_with_format ( "i = %, j = %\n", 10, 20 );
	print_int_with_format ( "1 st = %, 2nd = %, 3rd = % \n", 10, 20, 90 );

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-012.c の実行結果
C:\usr\c>sample-012

i = , j = 
1 st = , 2nd = , 3rd =  
C:\usr\c> 

sample-013

Download : sample-013.c ( SJIS 版 )

sample-013.c
/*
 * 2012/10/12 sample-013.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *
 */

int main ( void ) {

  /*
   *
   */

//   printf ( "..." );		/* これまで printf は「文字列出力」専門だった */
							/* 実は、もっと、凄い機能がある */

	printf ( "%d\n", 99 );
		// 文字列の中に「%d」をいれると、これは、その後の引数の
		// 整数値引数の値に書き変わる

	/*
     * 引数の個数は可変長
     */

	printf ( "i=%d, j=%d, k=%d\n", 10, 20, 90 );

  /*
   *	上と同じ事をする命令列 ( いままでは面倒な事をしていた )
   */

   s_print_string ( "i=" );
   s_print_int ( 10 );
   s_print_string ( ", j=" );
   s_print_int ( 20 );
   s_print_string ( ", k=" );
   s_print_int ( 90 );
   s_print_newline();

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-013.c の実行結果
C:\usr\c>sample-013
99
i=10, j=20, k=90
i=10, j=20, k=90
C:\usr\c> 

sample-014

Download : sample-014.c ( SJIS 版 )

sample-014.c
/*
 * 2012/10/12 sample-014.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *	printf を利用してみる
 */

int main ( void ) {

  /*
   *
   */

   printf ( "abc\n" );		/* いままでと同じ */
							/* 文字列がそのままでる */   

	printf ( "i=%d\n", 10 );
				   	/* 文字列の中の 「%d」の部分が、二つ目の引数
					   10 に変る */

	printf ( "i=%d, j=%d\n", 10, 20 );
				   	/* 「%d」が二度でれば二度めは三つ目の引数の値を利用 */

	printf ( "a=%f\n", 12.34 );
					/* 実数(浮動小数点数) の場合は 「%f」を使う */

	printf ( "i=%d, a=%f, c=%c, s=%s\n", 123, 12.34, 'a', "abc" );
					/* 混在も可能
							%c が文字
							%s が文字列(文字型へのポインタ値)
					 */

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-014.c の実行結果
C:\usr\c>sample-014
abc
i=10
i=10, j=20
a=12.340000
i=123, a=12.340000, c=a, s=abc
C:\usr\c> 

sample-015

Download : sample-015.c ( SJIS 版 )

sample-015.c
/*
 * 2012/10/12 sample-015.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *	printf の更なる機能 : 書式付きの出力
 */

int main ( void ) {

  /*
   *	同じ数値を異る形式(書式 / format)で出力できる
   */

	printf ( "a=%10.6f\n", -12.34 );
		/* 出力する形式を指定できる 10.6 は、全体 10 桁、小数点以下 6 桁の意味 */

	printf ( "a=%20.10f\n", -12.34 );
		/* 出力する形式を指定できる 20.10 は、全体 20 桁、小数点以下 10 桁の意味 */

  /*
   *
   */

    return 0;

}

/*
 *
 */
sample-015.c の実行結果
C:\usr\c>sample-015
a=-12.340000
a=      -12.3400000000
C:\usr\c> 

sample-016

Download : sample-016.c ( SJIS 版 )

sample-016.c
/*
 * 2012/10/12 sample-016.c
 */

#include <stdio.h>
#include "s_print.h"

/*
 *	scanf, printf (出力関数) の入力版
 */

int main ( void ) {

  /*
   *
   */

	int i;	

  /*
   *
   */

   printf ( "i の値を入力してください " );

   scanf ( "%d", &i );			/* '%d' --> printf と同じ */
		/* i = s_input_int(); */

		/*
				i = 99;
		の時
				scanf ( "%d", i );
		は、
				scanf ( "%d", 99 );
		の意味。
		これでは、scanf はどうやっても i の値を得る事ができない。
		そこで、「&i」を指定 ( i のポインタ値がわかれば、 i の値が変更できる )
		*/

  /*
   *
   */

   printf ( "入力された i の値は %d でした\n", i );o

  /*
   *
   */

    return 0;

}

/*
 *
 */
入力例
123
sample-016.c の実行結果
C:\usr\c>sample-016<  sample-016.in
a=-12.340000
a=      -12.3400000000
C:\usr\c> 

講義中に作成したサンプルプログラム

本日の課題

今回は課題なしとなりました。