Powered by SmartDoc

ソフトウェア概論B (2011/10/21)
Ver. 1.0

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

目次

おしらせ

講義資料

当日の OHP 資料

当日のOHP資料です。

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

sample-001

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * 2011/10/21 sample-001.c
 */

/*
 *
 */

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

/*
 *	代入文による 1 〜 5 までの総和の計算
 */

int main ( void ) {
  int sum0 = 0;			/* sumN は 1 〜 N の和 : sum0 は 0 になる */
  int sum1 = sum0 + 1;	/* sum1 は 1 〜 1 の和 : sum0 + 1 で計算可能 */
  int sum2 = sum1 + 2;	/* sum2 は 1 〜 2 の和 : sum1 + n で計算可能 */
  int sum3 = sum2 + 3;
  int sum4 = sum3 + 4;
  int sum5 = sum4 + 5;

  s_print_string ( "sum 1 〜 5 = " );
  s_print_int ( sum5 );
  s_print_newline();

  return 0;
}

/*
 *
 */
sample-001.c の実行結果
C:\usr\c\> sample-001
sum 1 〜 5 = 15
C:\usr\c\> 

sample-002

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 2011/10/21 sample-002.c
 */

/*
 *
 */

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

/*
 *	代入文による 1 〜 5 までの総和の計算 ( 変数の使い回し )
 */

int main ( void ) {

		/* 初期化 (Input/Initialize) */
  int sum = 0;			/* 変数 sum を 0 に初期化 */

		/* 処理 (Process) */
  sum = sum + 1;		/* 変数 sum の値は 0 から ( 0 + 1 ) = 1 に変化する */
  sum = sum + 2;
  sum = sum + 3;
  sum = sum + 4;
  sum = sum + 5;

		/* 出力 (Output) */
  s_print_string ( "sum 1 〜 5 = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
sample-002.c の実行結果
C:\usr\c\> sample-002
sum 1 〜 5 = 15
C:\usr\c\> 

sample-003

Download : sample-003.c ( SJIS 版 )

sample-003.c
/*
 * 2011/10/21 sample-003.c
 */

/*
 *
 */

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

/*
 *	代入文による 1 〜 5 までの総和の計算 ( パラメータの導入 )
 */

int main ( void ) {

		/* 初期化 (Input/Initialize) */
  int sum = 0;			/* 変数 sum を 0 に初期化 */
  int i = 1;			/* パラメータ i を導入すると「形が同じ」になる */

		/* 処理 (Process) */
  sum = sum + i;		/* sum <- sum + i = 0 + 1 = 1 */
  i = i + 1;			/* i <- 1 + 1 = 2 */

  sum = sum + i;		/* sum <- sum + i = 1 + 2 = 3 */
  i = i + 1;			/* i <- i + 1 = 2 + 1 = 3 */

  sum = sum + i;		/* sum <- sum + i = 3 + 3 = 6 */
  i = i + 1;			/* i <- i + 1 = 3 + 1 = 4 */

  sum = sum + i;
  i = i + 1;

  sum = sum + i;
  i = i + 1;

		/* 出力 (Output) */
  s_print_string ( "sum 1 〜 5 = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
sample-003.c の実行結果
C:\usr\c\> sample-003
sum 1 〜 5 = 15
C:\usr\c\> 

sample-004

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 2011/10/21 sample-004.c
 */

/*
 *
 */

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

/*
 *	代入文による 1 〜 n ( n < 10 ) までの総和の計算
 */

int main ( void ) {

		/* 初期化 (Input/Initialize) */
  int sum = 0;			/* 変数 sum を 0 に初期化 */
  int i = 1;			/* パラメータ i を導入すると「形が同じ」になる */
  int n;

  s_print_string ( "n ( 1 〜 10 ) = " );
  n = s_input_int();

		/* 処理 (Process) */

  if ( i <= n ) {	/* 0 < n の時 */
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {	/* 1 <= n の時 */
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {
	  sum = sum + i;
	  i = i + 1;
  }

  if ( i <= n ) {	/* 9 <= n の時 */
	  sum = sum + i;
	  i = i + 1;
  }

  /*
   *	n >= 10 の時はみな同じ結果に..
   */

		/* 出力 (Output) */
  s_print_string ( "sum 1 〜 " );
  s_print_int ( n );
  s_print_string ( " = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
入力例
7
sample-004.c の実行結果
C:\usr\c\> sample-004<  sample-004.in
n ( 1 〜 10 ) = 7
sum 1 〜 7 = 28
C:\usr\c\> 

sample-005

Download : sample-005.c ( SJIS 版 )

sample-005.c
/*
 * 2011/10/21 sample-005.c
 */

/*
 *	
 */

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

/*
 * sum ( n ) : 1 〜 n までの整数の和を計算する
 *
 *		再帰/蓄積型 : 頭からやる
 */

int sum_i_to_n ( int sum, int i, int n ) {

  s_print_string ( "sum_i_to_n( sum = " );
  s_print_int ( sum );
  s_print_string ( ", i = " );
  s_print_int ( i );
  s_print_string ( ", n = " );
  s_print_int ( n );
  s_print_string ( " )\n" );

  if ( i <= n ) {		/* まだ加える物がある */
	sum = sum + i;
	i = i + 1;
	return sum_i_to_n ( sum, i, n );	/* 残りを加える */
  } else {				/* もう、全てて片付けた */
	return sum;			/* これまでの和が答 */
  }
}

int sum ( int n ) {

  s_print_string ( "sum( n = " );
  s_print_int ( n );
  s_print_string ( " )\n" );

  return sum_i_to_n ( 0, 1, n );	/* 最初は 0 で、これに 1 〜 n を加える ) */
}

/*
 *
 */

int main ( void ) {
  int n;	/* 入力した結果を保存する */

  s_print_string ( "n = " );
  n = s_input_int();

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

  return 0;
}

/*
 *
 */
入力例
5
sample-005.c の実行結果
C:\usr\c\> sample-005<  sample-005.in
n = 5
sum ( 5 ) = sum( n = 5 )
sum_i_to_n( sum = 0, i = 1, n = 5 )
sum_i_to_n( sum = 1, i = 2, n = 5 )
sum_i_to_n( sum = 3, i = 3, n = 5 )
sum_i_to_n( sum = 6, i = 4, n = 5 )
sum_i_to_n( sum = 10, i = 5, n = 5 )
sum_i_to_n( sum = 15, i = 6, n = 5 )
15
C:\usr\c\> 

sample-006

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 2011/10/21 sample-006.c
 */

/*
 *
 */

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

/*
 *	while 文による 1 〜 n までの総和の計算
 */

int main ( void ) {

		/* 初期化 (Input/Initialize) */
  int sum = 0;			/* 変数 sum を 0 に初期化 */
  int i = 1;
  int n;

  s_print_string ( "n = " );
  n = s_input_int();

		/* 処理 (Process) */

  while ( i <= n ) {	/* 0 < n の時 */
	  sum = sum + i;
	  i = i + 1;
  }

		/* 出力 (Output) */
  s_print_string ( "sum 1 〜 " );
  s_print_int ( n );
  s_print_string ( " = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
入力例
5
sample-006.c の実行結果
C:\usr\c\> sample-006<  sample-006.in
n = 5
sum 1 〜 5 = 15
C:\usr\c\> 

sample-007

Download : sample-007.c ( SJIS 版 )

sample-007.c
/*
 * 2011/10/21 sample-007.c
 */

/*
 *	
 */

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

/*
 * 10 個の数を入力し、その総和を計算する
 *
 *		蓄積型 : 頭からやる
 */

int isum_i_to_n ( int sum, int i, int n ) {
  int v;

	  /* 条件判定 */
  if ( i <= n ) {		/* まだ加える物がある */

		/* 繰返し部分 */
	v = s_input_int();
	sum = sum + v;
	i = i + 1;

		/* 再帰 */
	return isum_i_to_n ( sum, i, n );	/* 残りを加える */

  } else {								/* もう、全てて片付けた */
	return sum;							/* これまでの和が答 */
  }
}

int isum ( int n ) {

  return isum_i_to_n ( 0, 1, n );
}

/*
 *
 */

int main ( void ) {
  int sum;

  sum = isum ( 10 );

  s_print_string ( "isum ( 10 ) = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
入力例
3
5
3
4
9
1
3
5
2
9
sample-007.c の実行結果
C:\usr\c\> sample-007<  sample-007.in
3
5
3
4
9
1
3
5
2
9
isum ( 10 ) = 44
C:\usr\c\> 

sample-008

Download : sample-008.c ( SJIS 版 )

sample-008.c
/*
 * 2011/10/21 sample-008.c
 */

/*
 *	
 */

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

/*
 * 10 個の数を入力し、その総和を計算する ( while 版 )
 */

int isum ( int n ) {
  int sum = 0;
  int i = 1;
  int v;

	  /* 条件判定 */
  while ( i <= n ) {		/* まだ加える物がある */

		/* 繰返し部分 */
	v = s_input_int();
	sum = sum + v;
	i = i + 1;

  }

  return sum;
}

/*
 *
 */

int main ( void ) {
  int sum;

  sum = isum ( 10 );

  s_print_string ( "isum ( 10 ) = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
入力例
3
5
3
4
9
1
3
5
2
9
sample-008.c の実行結果
C:\usr\c\> sample-008<  sample-008.in
3
5
3
4
9
1
3
5
2
9
isum ( 10 ) = 44
C:\usr\c\> 

sample-009

Download : sample-009.c ( SJIS 版 )

sample-009.c
/*
 * 2011/10/21 sample-009.c
 */

/*
 *
 */

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

/*
 *	for 文による 1 〜 n までの総和の計算 ( for 版 )
 */

int main ( void ) {

		/* 初期化 (Input/Initialize) */
  int sum = 0;			/* 変数 sum を 0 に初期化 */
  int i;
  int n;

  s_print_string ( "n = " );
  n = s_input_int();

		/* 処理 (Process) */

  for ( i = 1; i <= n; i = i + 1 ) {	/* 0 < n の時 */
	  sum = sum + i;
  }

		/* 出力 (Output) */
  s_print_string ( "sum 1 〜 " );
  s_print_int ( n );
  s_print_string ( " = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
入力例
5
sample-009.c の実行結果
C:\usr\c\> sample-009<  sample-009.in
n = 5
sum 1 〜 5 = 15
C:\usr\c\> 

sample-010

Download : sample-010.c ( SJIS 版 )

sample-010.c
/*
 * 2011/10/21 sample-010.c
 */

/*
 *
 */

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

/*
 *	「あり」を 10 回だす ( for 版 )
 */

void arigatou () {
  int i;

  for ( i = 0; i < 10; i = i + 1 ) {
	s_print_string ( "あり" );
  }
  s_print_newline();

}

int main ( void ) {

  arigatou();

  return 0;
}

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

sample-011

Download : sample-011.c ( SJIS 版 )

sample-011.c
/*
 * 2011/10/21 sample-011.c
 */

/*
 *
 */

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

/*
 *	「あり」を 10 回だす ( while 版 )
 */

void arigatou () {
  int i = 0;

  while ( i < 10 ) {
	s_print_string ( "あり" );
	i = i + 1;
  }
  s_print_newline();

}

int main ( void ) {

  arigatou();

  return 0;
}

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

sample-012

Download : sample-012.c ( SJIS 版 )

sample-012.c
/*
 * 2011/10/21 sample-012.c
 */

/*
 *
 */

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

/*
 *	「あり」を 10 回だす ( do while 版 )
 */

void arigatou () {
  int i = 0;

  do {
	s_print_string ( "あり" );
	i = i + 1;
  } while ( i < 10 );

  s_print_newline();

}

int main ( void ) {

  arigatou();

  return 0;
}

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

sample-013

Download : sample-013.c ( SJIS 版 )

sample-013.c
/*
 * 2011/10/21 sample-013.c
 */

/*
 *
 */

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

/*
 *	「あり」を 10 回だす ( 再帰版 )
 */


void rec_arigatou ( int i ) {

  if ( i < 10 ) {
	s_print_string ( "あり" );
	i = i + 1;
	rec_arigatou ( i );
  }

}

void arigatou () {

  rec_arigatou ( 0 );
  s_print_newline();

}

int main ( void ) {

  arigatou();

  return 0;
}

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

本日の課題

課題 20111021-01

Download : 20111021-01.c ( SJIS 版 )

20111021-01.c
/*
 * 20111021-1-QQQQ.c
 *	10 個の整数をキーボードから入力し、その総和を求め出力する
 *	for 文を利用する事 ( cf. sample-007.c/sample-008.c )
 */

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

/*
 * 10 個の数を入力し、その総和を計算する ( for 版 )
 */

int isum ( int n ) {
  int sum = 0;
  int i;
  int v;

	  /* 条件判定 */
  for ( /* q:ここ */ ) {

		/* 繰返し部分 */

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


  }

  return sum;
}

/*
 *
 */

int main ( void ) {
  int sum;

  sum = isum ( 10 );

  s_print_string ( "isum ( 10 ) = " );
  s_print_int ( sum );
  s_print_newline();

  return 0;
}

/*
 *
 */
入力例
3
5
3
4
9
1
3
5
2
9
20111021-01.c の実行結果
C:\usr\c\> 01<  01.in
3
5
3
4
9
1
3
5
2
9
isum ( 10 ) = 44
C:\usr\c\>