Pożyczając kod @gabr (właściwie zamiast \t i spacji wstawiona 'szerokość pola'):
Kopiuj
#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.