K&R 演習2-10 解答 (プログラミング言語C 第2版)

スポンサーリンク

鍛錬 320

K&R 演習2-10 解答 (プログラミング言語C 第2版)

if-else の代わりに条件式を使って,大文字を小文字に変換する関数 lower を書き直せ。

B.W.カーニハン D.M.リッチー 石田晴久 訳 『プログラミング言語C 第2版 ANSI 規格準拠』, (共立出版, 2017), pp.64.

スポンサーリンク

旧バージョンの関数 lower

以下は、参考書に記述されている関数 lower です。

/* lower: c を小文字に変換する; ASCII のみ */
int lower(int c)
{
	if (c >= 'A' && c <= 'Z')
		return c + 'a' - 'A';
	else
		return c;
}

B.W.カーニハン D.M.リッチー 石田晴久 訳 『プログラミング言語C 第2版 ANSI 規格準拠』, (共立出版, 2017), pp.53.

スポンサーリンク

新バージョンの関数 lower

問題文では、「if-else の代わりに条件式を使って lower 関数を書き直せ」と指示されています。

以下は、参考書に記述されている関数 lower を書き直しています。

/* lower: c を小文字に変換する; ASCII のみ */
int lower(int c)
{
	return (c >= 'A' && c <= 'Z') ? (c + 'a' - 'A') : c;
}
スポンサーリンク

プログラム

以下は、書き直した関数 lower を記述したプログラム kr_2_10.c です。

今回は、変換する大文字を ‘A’ に設定しています。

// include
#include <stdio.h>

// prototype
int lower(int c);

// main
int main(void)
{
	int c = 'A';
	int ret;
	
	printf("変換前 = %c\n", c);
	
	ret = lower(c);
	
	printf("変換後 = %c\n", ret);
	
	return 0;
}

// =================================================
// @brief     大文字を小文字に変換する(ASCIIのみ)
// @param[in] c  文字
// @return    (c+'a'-'A') -> 小文字に変換された文字
// @return    c -> 変換されていない入力時の文字
// @note      無し
// =================================================
int lower(int c)
{
	return (c >= 'A' && c <= 'Z') ? (c + 'a' - 'A') : c;
}
スポンサーリンク

実行結果

以下は、プログラム kr_2_10.c を実行しています。

今回はプログラム中で、小文字に変換する大文字を ‘A’ に設定しているため、小文字の ‘a’ が出力されるはずです。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra kr_2_10.c -o kr_2_10
***@ubuntu:~/***/test/c$ ./kr_2_10
変換前 = A
変換後 = a

 
上記に示した通り、大文字 ‘A’ を小文字 ‘a’ に変換することができました。

タイトルとURLをコピーしました