Powered by SmartDoc

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

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

目次

講義資料

当日の OHP 資料

Download

  1. 講議時以外は利用しない事

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

本日の課題

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

課題 20210507-01 : 一つ目の引数の文字列の長さの個数だけ、二つ目の引数の文字列を出力する関数

Download : 20210507-01.c

20210507-01.c
/*
 * 20210507-01-QQQQ.c
 *	一つ目の引数の文字列の長さの個数だけ、
 *  二つ目の引数の文字列を出力する関数の作成
 */

#include <stdio.h>
#include <string.h>	/* strcmp を利用するために必要 */

/*
 * n_times_print_string ( char *times, char *string )
 *	 times : 繰返し回数を表す文字列
 *   string : 出力する文字列
 */

void ntimes_print_string ( char *ntimes, char *string ) {

	if ( !strcmp ( ntimes, "" ) ) {		/* ntimes の長さが 0 */
		/* 何もする必要はない (関数は終了) */
	} else {							/* そうでなければ */
		/* 二つ目の文字列を出力 */
		printf ( string );
		/* 再帰を利用して、残りの回数だけプリント */
		/* 一つ目の引数は、長さを減らす必要がある */
		/* 二つ目の引数は、そのまま渡してよい */

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

	}

}

/*
 * main
 */

int main ( void ) {

	/* "Hello, World\n" を 5 回数 */
	ntimes_print_string ( "12345", "Hello, World\n" );

	/* "こんにちは、皆さん\n" を 8 回数 */

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


	return 0;
}
20210507-01.c の実行結果
$ ./20210507-01-QQQQ.exe
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
こんにちは、皆さん
こんにちは、皆さん
こんにちは、皆さん
こんにちは、皆さん
こんにちは、皆さん
こんにちは、皆さん
こんにちは、皆さん
こんにちは、皆さん
$ 

課題 20210507-02 : 引数の文字列の長さに対するフィボナッチ数だけ個数の文字「*」を出力する関数

Download : 20210507-02.c

20210507-02.c
/*
 * 20210507-02-QQQQ.c
 *	引数の文字列の長さに対するフィボナッチ数だけの文字「*」を出力する関数
 *
 *                    0              ( n = 0 の時 )
 *   fib(n) = {       1              ( n = 1 の時 )
 *                fib(n-1)+fib(n-2)  ( その他 [n > 1 の時] )
 */

#include <stdio.h>
#include <string.h>	/* strcmp を利用するために必要 */

/*
 * void c_fibnacci ( char *n )
 *	n : その長さで、整数値を表す文字列
 */

void c_fibnacci ( char *n ) {

	if ( !strcmp ( n, "" ) ) {				/* n の長さが 0 */
		/* 何もしなくて良い (関数は終了) */
	} else if ( !strcmp ( n + 1, "" ) ) {	/* n の長さが 1 */

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

		putchar ( '*' );
	} else {								/* その他 ( n の長さが 1 より長い ) */
		/* 再帰呼出しを二度行う */
		/* 一度目は、1 だけ長さを減らす */

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

		/* ニ度目は、2 だけ長さを減らす */
		c_fibnacci ( n + 2 );
	}
}

/*
 * main
 */

int main ( void ) {

  /* fib(4) = 3 回だけ「*」を出す */
  c_fibnacci ( "****" );
  putchar ( '\n' );		/* 改行 */

  /* fib(7) = 13 回だけ「*」を出す */

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

  putchar ( '\n' );		/* 改行 */

  return 0;
}
20210507-02.c の実行結果
$ ./20210507-02-QQQQ.exe
***
*************
$ 

課題 20210507-03 : 文字だけで 「Hello, 自分のイニシャル」

Download : 20210507-03.c

20210507-03.c
/*
 * 20210507-03-QQQQ.c
 *	文字だけで「Hello, 自分のイニシャル」を出力するプログラム
 *		サンプルは、イニシャルが「S.K 」の場合
 */

#include <stdio.h>

/*
 * main
 */

int main ( void ) {

	/* 「Hello, 」の出力 */
  putchar ( 'H' );		/* 「H」 一文字の出力 */
  putchar ( 'e' );
  putchar ( 'l' );

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

  putchar ( ',' );
  putchar ( ' ' );

	/* イニシャルの出力 */

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

  putchar ( '\n' );		/* 「改行」の出力 */

  return 0;
}
20210507-03.c の実行結果
$ ./20210507-03-QQQQ.exe
Hello, S.K
$ 

Links

関連 Link