> 後半がどういうことか
C言語が'a'をどうやって変数に保持し、どうやって文字として表示してるか考えろって事だと思う、

答えから言うと、
printf("%d", c); を足すと、97 って追加で表示されるようになる、
その 97 は 'a' のASCIIコード。

もう少し突っ込んで言うと、C言語には文字ってのは存在してなくて、変数に入れる時も使う時も全部数値として扱われる
putchar(c); は変数c内の値を文字として出力していて、
printf("%d", c); は変数c内の値を数値として出力している。
だから c='a'の部分を c=97 に変えても、出力される結果は同じになる。

試しに↓のコードを実行してみて、Hello って表示されると思う。
#include <stdio.h>
int main(void) {
  putchar(72);
  putchar(101);
  putchar(108);
  putchar(108);
  putchar(111);
  return 0;
}