Powered by SmartDoc

ソフトウェア概論A/B (2019/05/24)
Ver. 1.0

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

目次

講義資料

当日の OHP 資料

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

Download : sample-001.c

sample-001.c
/*
 * 2019/05/24 sample-001.c
 */

/*
 * 再帰呼出しを利用した繰返し
 */

#include <stdio.h>
#include <string.h>

/*
 * print_hello : 「Hello, World」の出力 (繰り返したい内容)
 */

void print_hello ( void ) {

	 printf ( "Hello, World\n" );
}

/*
 * 最初の引数で指定された文字列の長さだけ、「何か」をくりかえす
 *	"Hello, World\n" を繰り返す場合
 */

void loop_print_hello ( char *times ) {

	if ( !strcmp ( times, "" ) ) {		/* times が "" の時 */
	 	/* やる事は何もない */			/* 「再帰/繰返し」の終了条件 */
	} else {							/* まだ繰り返す必要がある */
		print_hello();					/* 繰り返したい内容 */
		loop_print_hello ( times + 1 );	/* 再帰を利用して残りを行う */
						 		 	 	/* times + 1 によって times が短くなる */
	}
}



/*
 * main 関数
 */

int main ( void ) {

	printf ( "*** : 三回\n" );
	loop_print_hello ( "***" );	/* 三回繰り返す */

	printf ( "***** : 五回\n" );
	loop_print_hello ( "*****" );	/* 五回繰り返す */

	return 0;
}
sample-001.c の実行結果
$ ./sample-001.exe
*** : 三回
Hello, World
Hello, World
Hello, World
***** : 五回
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
$ 

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

本日の課題

課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。

課題 20190524-01 : 与えられた文字列の文字を二度ずつ出力する関数を作成する

Download : 20190524-01.c

20190524-01.c
/*
 * 20190524-01-QQQQ.c
 *	与えられた文字列の文字を二度ずつ出力する関数を作成する
 */

#include <stdio.h>
#include <strings.h>

/*
 * double_print
 *	与えられた文字列(message)の文字を二度ずつ出力する
 */

void double_print ( char *message ) {

  if ( !strcmp ( message, "" ) ) {	/* 空文字列だった */
	/* なにもする必要はない */
  } else {
  	putchar ( *message );			/* 取り敢えず、一つ分は出す */

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

	double_print ( message + 1 );	/* 再帰呼出しをする */
  }

}

/*
 * main
 */

int main ( void ) {

	double_print ( "abc" );

	printf ( "\n" );

	double_print ( "1234567" );

	printf ( "\n" );

	return 0;
}
20190524-01.c の実行結果
$ ./20190524-01-QQQQ.exe
aabbcc
11223344556677
$ 

課題 20190524-02 : 与えられた文字列を逆順に出力する関数を作成する

Download : 20190524-02.c

20190524-02.c
/*
 * 20190524-02-QQQQ.c
 *	与えられた文字列の文字を逆順に出力する関数を作る
 */

#include <stdio.h>
#include <strings.h>

/*
 * reverse_print
 *	与えられた文字列(message)の文字を逆順に出力する
 */

void reverse_print ( char *message ) {

  if ( !strcmp ( message, "" ) ) {	/* 空文字列だった */
	/* なにもする必要はない */
  } else {
	/* ここで再帰呼出しを行うのだが... */

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

  }

}

/*
 * main
 */

int main ( void ) {

	reverse_print ( "abc" );

	printf ( "\n" );

	reverse_print ( "1234567" );

	printf ( "\n" );

	return 0;
}
20190524-02.c の実行結果
$ ./20190524-02-QQQQ.exe
cba
7654321
$