K&R演習[2-10]

課題

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

回答

#include <stdio.h>

int lower(int c);

/*
 * @fn      Main
 * @brief   
 * @param
 * @return
 * @note
 */
int main(void)
{
    int c, a;

    c = 'a';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'b';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'c';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'x';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'y';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'z';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'A';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'B';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'C';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'X';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'Y';    a = lower(c);   printf("%c, %c\n", c, a);
    c = 'Z';    a = lower(c);   printf("%c, %c\n", c, a);

}

/*
 * @fn      lower
 * @brief   
 * @param   
 * @return
 * @note
 */
int lower(int c)
{
    return (c >= 'A' && c <= 'Z') ? (c + 'a' - 'A') : c;
}

実行結果

a, a
b, b
c, c
x, x
y, y
z, z
A, a
B, b
C, c
X, x
Y, y
Z, z