Функция в Си

Модератор: Модераторы разделов

Аватара пользователя
SANTA
Сообщения: 181
ОС: GNU/Linux

Функция в Си

Сообщение SANTA »

Знающие люди, обьясните пожалуйста как работает данная функция:

Код: Выделить всё

int summ(int s, int n)
{
        int a, b;
        b=1;
        for (a=1; a<=n; ++a)
        b=b * s;
        return b;
}


сорри, опечатался
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: Функция в Си

Сообщение oav »

SANTA писал(а):
15.02.2006 19:31
Знающие люди, обьясните пожалуйста как работает данная функция:

Код: Выделить всё

int summ(int s, int n)
{
        int a, b;
        p=1;
        for (a=1; a<=n; ++a)
        b=b * s;
        return b;
}

b ничего не присвоено в начале, нафига p?
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: Функция в Си

Сообщение powerfox »

(oav @ Feb 15 2006, в 19:33) писал(а):b ничего не присвоено в начале, нафига p?

Компилятор должен сам понять, что переменная p не есть p, а b, то есть во время генерации кода надо сделать симметрию, проследив, чтобы p превратилась в b, а не в d.

Дання ф-я ничего толком не делает:
1.получение целых s и n
2.объявление целых a,b
3. инициализация некой p. p - глобальная, либо будет ошибка, хотя, наверное, здесь должна стоять b.
4.цикл , пока а не станет больше n
5.b=b * s;
6.возврат функции-пользователю b.
Спасибо сказали:
Аватара пользователя
SANTA
Сообщения: 181
ОС: GNU/Linux

Re: Функция в Си

Сообщение SANTA »

powerfox
Ну что происходит в данной функции я понимаю.
Но вот например в данном примере:

Код: Выделить всё

#include <stdio.h>
int summ(int, int);
main ()
{
        int i;
        for (i=0; i<10; ++i)
        printf ("%d %d %d\n", i, summ(2,i), summ(-3,i));
        return 0;
}
int summ(int s, int n)
{
        int i, p;
        p=1;
        for (i=1; i<=n; ++i)
        p=p*s;
        return p;
}

Данная функция я так понимаю возводит некое число в некую степень (все показано в коде).
Меня интересует как она это делает.

з.ы. пример взят из книги Б. Керниган и Д. Ритчи "Язык программирования Си" (с некоторым изменением)
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: Функция в Си

Сообщение powerfox »

(SANTA @ Feb 15 2006, в 19:50) писал(а):Данная функция я так понимаю возводит некое число в некую степень (все показано в коде).
Меня интересует как она это делает.

Очень криво: в нулевую степень она возведёт неправильно(число в нулевой степени - 1, она выдаст само число, то есть в первой степени.
Неясна суть вопроса: что непонятно? Цикл, в цикле перемножаются числа. Для возведения любого числа в степень n, нужно это число умножить на себя n раз.

(SANTA @ Feb 15 2006, в 19:50) писал(а):з.ы. пример взят из книги Б. Керниган и Д. Ритчи "Язык программирования Си" (с некоторым изменением)

Чувствую, что изменения глобальны, да и не в лучшую сторону.
Спасибо сказали:
Аватара пользователя
SANTA
Сообщения: 181
ОС: GNU/Linux

Re: Функция в Си

Сообщение SANTA »

Все, понял. Вот что значит прогуливать математику весь школьный курс :)
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Функция в Си

Сообщение t.t »

(powerfox @ Feb 15 2006, в 20:04) писал(а):в нулевую степень она возведёт неправильно(число в нулевой степени - 1, она выдаст само число, то есть в первой степени.
С чего вдруг?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
powerfox
Сообщения: 458

Re: Функция в Си

Сообщение powerfox »

t.t писал(а):
15.02.2006 21:08
(powerfox @ Feb 15 2006, в 20:04) писал(а):в нулевую степень она возведёт неправильно(число в нулевой степени - 1, она выдаст само число, то есть в первой степени.
С чего вдруг?

С пьяну ;) Ошибся, не посмотрел, что p - локальная переменная? по умолчанию 1,,,
Спасибо сказали: