【C言語サンプル】
大文字小文字変換 (isupperとtolowerの使い方)

■標準ヘッダを使った例(推奨)

#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>

void    大文字小文字変換(char *line){
    for(char *cp = line;*cp != '\0';cp++){
        if(!isalpha(*cp)) {
            continue ;
        }
        if(isupper(*cp)) {   
            *cp = tolower(*cp);
            continue ;
        }
        if(islower(*cp)) {
            *cp = toupper(*cp);
            continue ;
        }    
    }
}

int main(void){
    char    buf[BUFSIZ];
    const char *filename = "/usr/include/stdio.h";
    FILE    *fp = fopen(filename,"r");
    if(fp == NULL){
        fprintf(stderr,"開かん %s\n",filename);
        exit(1);
    }
    while(fgets(buf,BUFSIZ,fp) != NULL){
        printf("↑:%s",buf);
        大文字小文字変換(buf);
        printf("↓:%s",buf);    
    }
}

ctype.hで定義されている標準関数を使うと
コードが読みやすくなります。

変換対象が/usr/include/stdio.hのように
アスキーコードだけで記述されている場合
このコードで動きます。

変換対象が全角を含むUTF-8で書かれている場合、
このコードは不完全で 
if(!isalpha(*cp)) {ではなくて、
if(!isalpha((unsigned char)*cp)) {とする必要があります。

変換対象が全角を含むShift_JISで書かれている場合、
Shift_JISの2バイト目がアスキーコードと重なるので、
単純にctype.hの is 系関数を使うのは無理があるようです。 
(すみません、筆者は文字コードに詳しくないです)

参考:

STR37-C. 文字処理関数への引数は unsigned char として表現できなければならない


■文字定数を使った例

void    大文字小文字変換(char *line){
    for(char *cp = line;*cp != '\0';cp++){
        if(('a' <= *cp && *cp <= 'z') ||
           ('A' <= *cp && *cp <= 'Z')) {
            if(('A' <= *cp) && (*cp <= 'Z')) {   
                *cp = *cp - 'A'+'a';
                continue ;
            }
            if(('a' <= *cp) && (*cp <= 'z')) {
                *cp = *cp - 'a' + 'A';
                continue ;
            }
        }   
    }
}

■16進数字を使った例(非推奨)

void    大文字小文字変換(char *line){
    for(char *cp = line;*cp != '\0';cp++){
        if((0x61 <= *cp && *cp <= 0x7a) ||
           (0x41 <= *cp && *cp <= 0x5A)) {
            if((0x41 <= *cp) && (*cp <= 0x5A)) {   
                *cp = *cp - 0x41+0x61;
            } else {
                if((0x61 <= *cp) && (*cp <= 0x7a)) {
                    *cp = *cp - 0x61 + 0x41;
                }
            }
        }   
    }
}

16進定数の意味をアスキーコード表で調べる必要があります。