|
Вопрос # 6 297/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Вот такой вот вопрос. Есть код из Кернигана и Ричи.
Я так понимаю base число, которое мы возводим в степень, а n степень в которое возводится, но я не понимаю как происходит операция умножения.
Допустим первая степень 0.
i=1; i<0 ++i, так как условие вхождение в цикл не выполняется, то и умножение не происходит, но почему тогда он безошибочно возвращает 1?
А если i=1, то 1=1, то цикл работает, то 2*1=2. Тут вопросов нет.
А если i=2, то 2=2, то 2*1=2, а должно ведь быть 4. Объясните, пожалуйста, что я недопонимаю в этом коде.
Приложение: Переключить в обычный режим- #include <stdio.h>
-
- int power(int m, int n);
-
- main()
- {
- int i;
-
- for(i=0; i<10; ++i)
- printf("%d %d %d\n", i, power(2,i), power(-3,i));
- return 0;
- }
- int power(int base, int n)
- {
- int i,p;
-
- p=1;
- for(i=1; i<=n; ++i)
- p=p*base;
- return p;
- }
 |
Вопрос задал: angel12013 (статус: Посетитель)
Вопрос отправлен: 28 октября 2012, 15:44
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 16 ноября 2012, 06:46; участников в обсуждении: 3.
|
Толяныч (статус: 4-ый класс), 28 октября 2012, 16:27 [#1]:
А что тут может быть непонятного ? Число в нулевой степени = 1 по определению, цикл при этом не выполняется, а начальное присваивание производится до цикла. А в остальном -- результат, изначально равный 1, умножается на base n раз, что тоже соответствует определению целой степени.
|
|
angel12013 (статус: Посетитель), 28 октября 2012, 16:35 [#2]:
То есть если нужно произвести операцию умножения в p=p*base два раза, то результат умножения складывается и присваивается p?
|
|
angel12013 (статус: Посетитель), 28 октября 2012, 16:41 [#3]:
Да, все верно. Простите за глупый вопрос. Все встало на свои места.
Если цикл работает два раза.
1.p=1*2=2
2.p=2*2=4
Я просто новичок и голова пока в этом направлении слаба развита, но я наверстаю упущенное. Еще раз спасибо.
|
|
Толяныч (статус: 4-ый класс), 29 октября 2012, 17:07 [#4]:
Когда нам в далеком 75-м препод начал читать Алгол-60, то написал на доске а := а + 1 и сказал : "Имейте в виду, это не уравнение, потому что была бы бессмыслица 0 = 1, а ОПЕРАТОР ПРИСВАИВАНИЯ. Выполняется полностью вычисление правой части и только после этого результат присваивается переменной в левой части" . До сих пор помню Судя по вопросу, ТС еще не совсем тверд в понимании этого. Поскольку это С, то старинное ( в т.ч. паскалевское ) := заменено обычным = , но суть от этого не поменялась.
|
|
Ученый (статус: 8-ой класс), 16 ноября 2012, 06:46 [#5]:
интересно только одно, а почему не использовать готовую функцию pow из , или еще не отпало ребяческое желание написать все самому?))
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|