En el primer caso de scanf no necesitas el ampersand (&) debido a que los arrays siempre se pasan por referencia pero en el caso de los numeros tenes que pasar la direccion de los mismos y no su valor:
Esto no tiene sentido:
Código:
printf("%i", "\nIngrese su primera nota: ");
Le estas diciendo a printf que vas a escribir un numero (%i) y le pasas una cadena, entonces te imprime la direccion en memoria de la misma. Tenes que hacer esto:
Código:
printf("\nIngrese su primera nota: ");
Y para el final la misma historia:
Código:
printf("\nSu promedio es: %i", promedio);
printf("\nSu color favorito es el : %s", color);
PD. Leer la cadena asi no es seguro, busca la referencia de scanf si queres, lo mejor es usar fgets para leer una linea completa y despues usar sscanf.