First, some basics:
In C, a string is a sequence of character values followed by a 0-valued terminator.  Strings are stored in arrays of char, not single char objects. 
A string literal is delimited by double quotes ("), while character constants are delimited by single quotes (').  
In your code
char casa = 'Esquina';
you declare casa as a char, meaning it can only store a single character value, not a string.  You initialize it with 'Esquina', which is not a string literal, but a multibyte character constant.  Multibyte character constants are mapped on to char objects in an implementation-defined manner.  In this particular case, it's not what you want.  
casa should be declared as either
const char *casa = "Esquina";
or
char casa[] = "Esquina";
depending on whether or not you will need to modify the contents of the string later on.  The first version declares casa as a pointer to the first character in the string literal "Esquina"1.  The second version declares casa as a 8-element array of char2 and copies the contents of the string literal to it, giving us
casa[0] == 'E'
casa[1] == 's'
casa[2] == 'q'
casa[3] == 'u'
casa[4] == 'i'
casa[5] == 'n'
casa[6] == 'a'
casa[7] == 0
To print it out, you'd use the %s conversion specifier in printf:
printf("Letra %c, numero %d, em uma %s\n", letra, numero, casa);
- String literals are stored as arrays of charsuch that the array is allocated when the program starts up and released when the program terminates.  Attempting to modify the contents of a string literal invokes undefined behavior - it may work, it may cause a segfault, it may do something unexpected.  To prevent us from accidentally modifying the string literal throughcasa, we declare it asconst char *; this way, any attempt to change the string will cause the compiler to yak.
 
- The size is taken from the length of the string, plus an additional element to store the string terminator.