1) 1 - это число 1, целое
2) + - это операция сложения (в данном случае - целых чисел)
3) (int)(...) - операция округления выражения ... до целого цисла
4) 10.0 - число 10, тип - double
5) * - операция умножения (в данном случае - действительных чисел)
6) rand() - функция выдающая число от 0 до RAND_MAX
7) / - операция деления
8) RAND_MAX - некая константа, смотри пункт 6)
9) + - смотри пункт 2) (только складываются действительные числа)
10) 1.0 - действительное число 1
11) ; - символ разделения операторов языка Ц
12) - круглые скобки используются для группировки арифметических операций.
выражения в скобках выполняются раньше, чем остальные.
Вот, вроде бы и все :)
А по поводу "почему от 1 до 10":
Как уже было отмечено rand() выдает псевдослучайное число от 0 до RAND_MAX.
Это значит, что rand()/(RAND_MAX+1.0) выдает число от 0 до 1 (не включая 1)
10.0*rand()/(RAND_MAX+1.0)) выдает, соответственно, от 0 до 10 (не включая 10)
(int) (10.0*rand()/(RAND_MAX+1.0)) генерирует целые числа в интервале 0-9 (10 быть не может, потому что исходный интервал 10 не включал)
1+(int) (10.0*rand()/(RAND_MAX+1.0)) - интервал становится от 1 до 10.
> ";" действительно завершает оператор, а не является разделителем
; - не завершает оператор, а говорит о том что некая синтаксическая
конструкция является на самом деле оператором
в C {} является оператором - но не завершается точкой с запятой,
например для конструкции for(...) обязателен оператор в теле, поэтому
совершенно нормально написать:
for(;;)
; /* пустой оператор */
или
for (;;) {} /* нету точки с запятой а оператор есть */
ты конечно можешь написать:
for (;;) {
}; /* точка с запятой в конце */
но эта точка с запятой уже будет самостоятельным оператором, как в
первом примере
поэтому твой тезис можно перефразировать так - '";" действительно
завершает большинство но не все операторы, а не является разделителем'