S01 Answer


/* Puzzle S01 -- detect upper case characters */

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

int isUppercase( int ch )
{
  return ch>='A' && ch<='Z' ;
}

int main(int argc, char *argv[])
{
  int trials[] = {'a', 'B', 'Z', ' ', '+', 'z', 'Z', 0x33 };
  int j, ch;
  
  for ( j=0; j<sizeof(trials)/sizeof(int); j++ )
  {
    ch = trials[j];
    if ( isUppercase( ch ) )
      printf("%c is upper case\n", ch);
    else
      printf("%c is NOT upper case\n", ch);
  }
   
  system("PAUSE");	
  return 0;
}

Comments:

(1) The array trials[] is an array of int, so sizeof(trials)/sizeof(int) gives the number of cells.

(2) C envirnoments have several "is" functions described in <ctype.h>

Function
Description
  int isalnum(int ch)   is ch alphanumeric?
  int isalpha(int ch)   is ch alphabetic?
  int isascii(int ch)   is ch in the range 0x00 to 0x7F ?
  int iscntrl(int ch)   is ch a control character?
  int isdigit(int ch)   is ch a digit?
  int islower(int ch)   is ch lower case?
  int isodigit(int ch)   Can ch be part of an octal constant?
  int isprint(int ch)   is ch a printable character?
  int isspace(int ch)   is ch a whitespace character?
  int ispunct(int ch)   is ch punctuation?
  int isupper(int ch)   is ch an uppercase character?
  int iswhite(int ch)   is ch a whitespace character? (same as isspace)
  int isxdigit(int ch)   Can ch be part of a hexadecimal constant?

As might be expected, there are minor variations in these functions between different C environments, so you should check your documentation for exact specifications.

To increase portability of your programs, use the functions provided by the C environment rather than write your own.