LINUX.ORG.RU
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) - круглые скобки используются для группировки арифметических операций.
 выражения в скобках выполняются раньше, чем остальные.
     Вот, вроде бы и все :)
grustnoe ★★
()
> 11) ; - символ разделения операторов языка Ц

это где это ты такое вычитал(можешь пристрелить того кто это писал)? не путаешь с паскалем случаем

lg ★★
()
Браво, grustnoe, смеялся от души! lg, позор. c не знаешь.
anonymous
()
нет, я не понял, почему здесь генерируется число от 1 до 10
anonymous
()
Извините, lg, ошибся. ";" действительно завершает оператор, а не является разделителем.
anonymous
()
А по поводу "почему от 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.
anonymous
()
> ";" действительно завершает оператор, а не является разделителем

; - не завершает оператор, а говорит о том что некая синтаксическая 
конструкция является на самом деле оператором

в C {} является оператором - но не завершается точкой с запятой, 
например для конструкции for(...) обязателен оператор в теле, поэтому 
совершенно нормально написать:

for(;;)
  ;   /* пустой оператор */

или

for (;;) {} /* нету точки с запятой а оператор есть */

ты конечно можешь написать:

for (;;) {
};          /* точка с запятой в конце */

но эта точка с запятой уже будет самостоятельным оператором, как в 
первом примере

поэтому твой тезис можно перефразировать так - '";" действительно 
завершает большинство но не все операторы, а не является разделителем'
lg ★★
()
Вот блин гении :-))) в Паскале тоже тогда ; не является разделителем операторов...
anonymous
()
все просто, ";" это терминатор:)
anonymous
()
блин, но почему этот код выдает разные числа только раз, пример :

запуск 1 : 8 9 5 3 8 0 6 4 1 запуск 2 : 8 9 5 3 8 0 6 4 1

anonymous
()
> блин, но почему этот код выдает разные числа только раз
перед циклом генерации последовательности вставить srand(time(NULL));


а так не проще:

j = rand() % 10 + 1; /* псевдослучайное целое число от 1 до 10
anonymous
()
ну а какие же он должен выдавать - rand() это же просто функция она не может читать мысли и менять random seed после их прочтения
lg ★★
()
как говориться программа всегда делает то что ты написал, но не всегда то что ты ожидаешь :)
lg ★★
()
rand() - генерирует псевдослучайные числа. Есди хочешь чего-то более нормального читай из /dev/random и /dev/urandom
OxiD ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.