printf steht für print formated
referenz zum detaillierten nachlesen http://www.cplusplus.com/reference/cstdio/printf/
zusammengefasst, der string in printf wird interpretiert, "%" steht dabei als sog. escape-char ... wann immer du % schreibst, signalisierst du dem printf, danach folgt eine definierte zeichenkette die du interpretieren musst um die darstellung zu ermitteln

deswegen steht da %3d:
- % beginn der interpretation
- 3d in dem kontext bedeutet das "d" dezimal, also interpretiere eine später genannte variable als dezimalzahl und die 3 davor sagt, dass er dafür 3 ziffern verwenden soll

nach dem formatierungsstring in printf kommen dann die variablen die interpretiert werden sollen. Also sollten idealerweise für jede variablen interpretation im format string auhc eine variable danach folgen sonst knallts

da du das zeichen "%" als escape-char verwendest, es jetzt aber als zeichen ausgeben möchtest, machst du schlicht "%%" das erste zeichen sagt escape sequenz udn das zeichen danach wird dann einfach ausgegeben