Pożyczając kod @gabr (właściwie zamiast \t i spacji wstawiona 'szerokość pola'):
#include <stdio.h>
int main()
{
int i, j;
int range = 10;
printf("%5c",' ');
for (i = 1; i <= range; i++)
printf("%5d", i);
for (i = 1; i <= range; i++)
{
printf("\n%5d", i);
for (j = 1; j <= range; j++)
{
printf("%5d", j*i);
}
}
}
Co do %4d
, %4s
to są to modyfikatory szerokości obszaru na którym ma zostać wypisana wartość danej zmiennej. Jeśli szerokość wartości zmiennej jest krótsza niż szerokość podana przez ciebie (w tym wypadku 4, lub 5 w kodzie) to zostaną wstawione tam spacje. Przyjmijmy dla przykładu że _
oznacza spacje, dla %4d
i wartości zmiennej 10
wypisanie zostanie __10
.
Masz to szerzej opisane tutaj (ang) http://www.cplusplus.com/reference/cstdio/printf/?kw=printf .
Co do (y>0?y:1)
to tzw. ternary operator
(wybacz, nie mam pojęcia jak się nazywa po polsku). Jego działanie polega na sprawdzeniu warunku znajdującym się przed ?
(w tym wypadku y>0) i zwróceniu pierwszego wyrażenia jeśli warunek zwróci prawdę, lub drugiego jeśli warunek zwróci fałsz. Biorąc ten przykład i tłumacząc na polski to: Jeśli y
będzie większy od 0
to zwróć y
, w przeciwnym wypadku zwróć 1
.