Powered by SmartDoc

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

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

目次

講義資料

当日の OHP 資料

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

本日の課題

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

課題 20200626-01 : 英小文字を英大文字に、英大文字を英小文字に入れ替える関数

Download : 20200626-01.c

20200626-01.c
/*
 * 20200626-01-QQQQ.c
 *	英小文字を英大文字に、英大文字を英小文字に入れ替える関数
 */

#include <stdio.h>

/*
 * char change_up_lower ( char ch )
 *    引数で指定された文字が大英文字なら英小文字に、英小文字なら英大文字にする
 */

char change_up_lower ( char ch ) {

	/* 英大文字の処理 */

	 if ( 'A' <= ch ) {				/* もし、 ch が 'A' 以上で .. */
		if ( ch <= 'Z' ) {			/* しかも、 'Z' 以下 なら .. */
			/* 引数は英大文字だったので、英小文字に変換し、値を返す */
			return ch - 'A' + 'a';
		}
	}

	/* 英小文字の処理 */

	if ( 'a' <= ch ) {				/* もし、 ch が 'a' 以上で .. */
		if ( ch <= 'z' ) {			/* しかも、 'z' 以下 なら .. */
			/* 引数は英小文字だったので、英大文字に変換し、値を返す */

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

		}
	}

	/* 何れでもない場合 */

	return ch;		/* 引数の値をそのまま、関数の値として返す */

}

/*
 * main
 */

int main ( void ) {

	/* 英大文字 ( 'Q' ) の場合 */
	printf ( "英大文字 ( 'Q' ) の場合 「" );
	putchar ( change_up_lower ( 'Q' ) );
	printf ( "」となります。\n" );

	/* 英小文字 ( 'h' ) の場合 */
	printf ( "英小文字 ( 'h' ) の場合 「" );

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

	printf ( "」となります。\n" );

	/* 何方でもない ( '4' ) の場合 */
	printf ( "何方でもない ( '4' ) 場合 「" );
	putchar ( change_up_lower ( '4' ) );
	printf ( "」となります。\n" );

	return 0;
}
20200626-01.c の実行結果
$ ./20200626-01-QQQQ.exe
英大文字 ( 'Q' ) の場合 「q」となります。
英小文字 ( 'h' ) の場合 「H」となります。
何方でもない ( '4' ) 場合 「4」となります。
$ 

課題 20200626-02 : 指定した文字列の中の英小文字を英大文字に、英大文字を英小文字に入れ替えて出力する関数

Download : 20200626-02.c

20200626-02.c
/*
 * 20200626-02-QQQQ.c
 *	指定した文字列の中の英小文字を英大文字に、英大文字を英小文字に入れ替えて出力する関数
 */

#include <stdio.h>

#define	EOS	'\0'		/* マクロ(EOS) を、NULL 文字 '\0' で定義 */

/* 以下の結果は、20200626-01-QQQQ.c の内容を、そのまま利用する */

/*
 * char change_up_lower ( char ch )
 *    引数で指定された文字が大英文字なら英小文字に、英小文字なら英大文字にする
 */

char change_up_lower ( char ch ) {

	/* 英大文字の処理 */

	 if ( 'A' <= ch ) {				/* もし、 ch が 'A' 以上で .. */
		if ( ch <= 'Z' ) {			/* しかも、 'Z' 以下 なら .. */
			/* 引数は英大文字だったので、英小文字に変換し、値を返す */
			return ch - 'A' + 'a';
		}
	}

	/* 英小文字の処理 */

	if ( 'a' <= ch ) {				/* もし、 ch が 'a' 以上で .. */
		if ( ch <= 'z' ) {			/* しかも、 'z' 以下 なら .. */
			/* 引数は英小文字だったので、英大文字に変換し、値を返す */

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

		}
	}

	/* 何れでもない場合 */

	return ch;		/* 引数の値をそのまま、関数の値として返す */

}

/*
 * void print_change_up_lower_string ( char *string )
 *	引数で指定した文字列の中の英小文字を英大文字に、
 *	英大文字を英小文字に入れ替えて出力する関数
 */

void print_change_up_lower_string ( char *string ) {

	if ( *string == EOS ) {	/* 空文字列 ("") だった.. */
		/* 何もしない */
	} else {
		/* 取り敢えず、先頭の文字だけ変換を行って、出力 */
		putchar ( change_up_lower ( *string ) );
		/* 残りの文字列は、再帰で処理 */
		print_change_up_lower_string ( string + 1 );
	}

}

/*
 * main
 */

int main ( void ) {

	printf ( "Aa0BB11cc@+\nXy" );
	print_change_up_lower_string ( "Aa0BB11cc@+Xy\n" );

	return 0;
}
20200626-02.c の実行結果
$ ./20200626-02-QQQQ.exe
Aa0BB11cc@+
XyaA0bb11CC@+xY
$ 

課題 20200626-03 : 10 未満の長さの文字列の長さを表す一文字の数字を返す関数

Download : 20200626-03.c

20200626-03.c
/*
 * 20200626-03-QQQQ.c
 *	10 未満の長さの文字列の長さを表す一文字の数字を返す関数
 */

#include <stdio.h>

#define	EOS	'\0'		/* マクロ(EOS) を、NULL 文字 '\0' で定義 */

/*
 *  char length_of_string ( char *string )
 *		引数の文字列の長さを表す、一桁の数字を返す関数
 *		文字列の長さは一桁の場合しか、「適切に動作」しない
 */

char length_of_string ( char *string ) {

	if ( *string == EOS ) {	/* 空文字列なら、長さは 0 */
		return '0';			/* 長さ「0」を表す『文字(数字)』「'0'」を返す */
	} else {
		/* 一文字分短い『文字列』の長さを再帰で求め、それに 1 を加える */

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

	}
}

/*
 * main
 */

int main ( void ) {

	printf ( "文字列「\"abc\"」の長さは " );
	putchar ( length_of_string ( "abc" ) );
	printf ( " です。\n" );

	printf ( "文字列「\"123456\"」の長さは " );
	putchar ( length_of_string ( "123456" ) );
	printf ( " です。\n" );

	/* 長さが 10 を越える場合は、不適切な結果になる */
	printf ( "文字列「\"1234567890123\"」の長さは " );
	putchar ( length_of_string ( "1234567890123" ) );
	printf ( " です。\n" );
	
	return 0;
}
20200626-03.c の実行結果
$ ./20200626-03-QQQQ.exe
文字列「"abc"」の長さは 3 です。
文字列「"123456"」の長さは 6 です。
文字列「"1234567890123"」の長さは = です。
$