Ich versuche dir mal den 2. Punkt genauer zu erläutern:
Also gucken wir uns mal diese Zeile an: "printf("Die Zahl war: %d\n",i);"
Das printf sagt dem Compiler erstmal, dass jetzt eine formatierte Ausgabe folgt.
Danach kommt dieser Abschnitt: "Die Zahl war: %d\n"
Da dies in Anführungszeichen steht, zeigt es dem Compiler, dass das ein Text ist, der ausgegeben wird. Allerdings überprüft er noch, was dort so steht: Wenn er zb. "%d" findet, sagt es ihm, dass an dieser stelle eine ganze (integer) Zahl steht. Das "\n" steht für eine neue Zeile, das hast du richtig erkannt.
Bei der Ausgabe ersetzt er dann das "%d" durch das i. Warum? Weil es hinter dem Komma steht.
Bsp.:
printf("A%d, B%d, C%d", x, y, z);
Wenn x = 1, y = 2, z = 3 würde er "A1, B2, B3" ausgeben.
Also in das erste %d wird die erste Variable nach dem Komma eingesetzt, beim 2. %d die 2. Variable und beim 3. %d die 3. Variable.
Es muss auch nicht unbedingt %d sein: Bei zb. "printf("A%d, B%e, C%f", x, y, z);" wird das %d wieder durch das x, %e durch y und %f durch z ersetzt.
%e und %f stehen dann für Gleitkomma-Zahlen.
Ich hoffe, dass das jetzt verständlich genug war - hab mir Mühe gegeben