Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Язык си pow

Функция pow. Преобразование типов

Есть два вопроса:

1) в докуметации нашёл описание, что pow(x,y) возводит x в степень y и притом входные параметры должны быть или double или float. Как поступить если x && y = int? а также интересует может ли в этой ф-ции y принимать дробные значения и x отрицательные?

возвращает при любых значениях sumK, и одном и том же значении коэфф. Стьюдента, тобишь KStd, одно и тоже значение.

буду благодарен людям, скинувшим хорошую документацию про функции math (желательно на русском), т.к. в самоучители про это меньше страницы написано.

26.10.2008, 09:57

Функция с переменным числом параметров. Преобразование типов
Добрый день. Проходил недавно тест на собеседовании, довольно странный, на мой взгляд, был вопрос.

Преобразование pow(a,b)
Как заменить функцию pow на примере двойки? Вводиться число с клавиатуры, это число — будет.

Функция pow()
Здравствуйте!Хотелось спросить у опытных программистов — скажите пожалуйста, как функция pow().

Функция pow
#include #include using namespace::std; double pow(double x, double y).

26.10.2008, 10:292

p.s документация ищется на яндексе и гугле.

Добавлено через 8 минут 20 секунд
Прогнал pow для отрицательных,дробных и дробных отрицательных значений.Работает.

26.10.2008, 10:343

>> Возьми и проверь,это две минуты.
если бы не проверял то и вопроса бы не было

could be ‘long double pow(long double,int)’ при использовании :

ошибки нету но и резултат получается не верным.

п.с: одно дело искать в google, другое пользоваться мануалами, которые посоветовал специалист по данному вопросу

>> Прогнал pow для отрицательных,дробных и дробных отрицательных значений.Работает.
юзаю MW C++ 2008 Express, не работает )

>>>>>>>>>>>>>>>Всё Работает, я Ошибся =) , спс за помошь

26.10.2008, 10:384

Увидишь ноль. Почему?Потому что делишь целое на целое. Результат получается целого типа,и только после этого преобразуется в тип float.
При делении целочисленных типов дробная часть отбрасывается. Это поправимо. Пиши 1.0/2.0,или 1/2.0 или 1.0/2. Советую почитать что-нибудь про преобразование типов.

P.S документацию,которую посоветуют профессионалы,они скорее всего сами когда-то нашли в яндексе или гугле)

Функции в языке Си

Функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи.
Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.

Сигнатура функции определяет правила использования функции. Обычно сигнатура представляет собой описание функции, включающее имя функции, перечень формальных параметров с их типами и тип возвращаемого значения.

Семантика функции определяет способ реализации функции. Обычно представляет собой тело функции.

Определение функции

Каждая функция в языке Си должна быть определена, то есть должны быть указаны:

  • тип возвращаемого значения;
  • имя функции;
  • информация о формальных аргументах;
  • тело функции.

Определение функции имеет следующий синтаксис:

Пример : Функция сложения двух вещественных чисел

В указанном примере возвращаемое значение имеет тип float . В качестве возвращаемого значения в вызывающую функцию передается значение переменной y . Формальными аргументами являются значения переменных x и z .

Если функция не возвращает значения, то тип возвращаемого значения для нее указывается как void . При этом операция return может быть опущена. Если функция не принимает аргументов, в круглых скобках также указывается void .

Читать еще:  Язык си математические операции

Различают системные (в составе систем программирования) и собственные функции.

Системные функции хранятся в стандартных библиотеках, и пользователю не нужно вдаваться в подробности их реализации. Достаточно знать лишь их сигнатуру. Примером системных функций, используемых ранее, являются функции printf() и scanf() .

Собственные функции — это функции, написанные пользователем для решения конкретной подзадачи.

Разбиение программ на функции дает следующие преимущества:

  • Функцию можно вызвать из различных мест программы, что позволяет избежать повторения программного кода.
  • Одну и ту же функцию можно использовать в разных программах.
  • Функции повышают уровень модульности программы и облегчают ее проектирование.
  • Использование функций облегчает чтение и понимание программы и ускоряет поиск и исправление ошибок.

С точки зрения вызывающей программы функцию можно представить как некий «черный ящик», у которого есть несколько входов и один выход. С точки зрения вызывающей программы неважно, каким образом производится обработка информации внутри функции. Для корректного использования функции достаточно знать лишь ее сигнатуру.

Вызов функции

Общий вид вызова функции

Фактический аргумент — это величина, которая присваивается формальному аргументу при вызове функции. Таким образом, формальный аргумент — это переменная в вызываемой функции, а фактический аргумент — это конкретное значение, присвоенное этой переменной вызывающей функцией. Фактический аргумент может быть константой, переменной или выражением. Если фактический аргумент представлен в виде выражения, то его значение сначала вычисляется, а затем передается в вызываемую функцию. Если в функцию требуется передать несколько значений, то они записываются через запятую. При этом формальные параметры заменяются значениями фактических параметров в порядке их следования в сигнатуре функции.

Возврат в вызывающую функцию

По окончании выполнения вызываемой функции осуществляется возврат значения в точку ее вызова. Это значение присваивается переменной, тип которой должен соответствовать типу возвращаемого значения функции. Функция может передать в вызывающую программу только одно значение. Для передачи возвращаемого значения в вызывающую функцию используется оператор return в одной из форм:

Действие оператора следующее: значение выражения, заключенного в скобки, вычисляется и передается в вызывающую функцию. Возвращаемое значение может использоваться в вызывающей программе как часть некоторого выражения.

Оператор return также завершает выполнение функции и передает управление следующему оператору в вызывающей функции. Оператор return не обязательно должен находиться в конце тела функции.

Функции могут и не возвращать значения, а просто выполнять некоторые вычисления. В этом случае указывается пустой тип возвращаемого значения void , а оператор return может либо отсутствовать, либо не возвращать никакого значения:

Пример : Посчитать сумму двух чисел.

В языке Си нельзя определять одну функцию внутри другой.

В языке Си нет требования, чтобы семантика функции обязательно предшествовало её вызову. Функции могут определяться как до вызывающей функции, так и после нее. Однако если семантика вызываемой функции описывается ниже ее вызова, необходимо до вызова функции определить прототип этой функции, содержащий:

  • тип возвращаемого значения;
  • имя функции;
  • типы формальных аргументов в порядке их следования.

Прототип необходим для того, чтобы компилятор мог осуществить проверку соответствия типов передаваемых фактических аргументов типам формальных аргументов. Имена формальных аргументов в прототипе функции могут отсутствовать.

Читать еще:  Паскаль переход на новую строку

Если в примере выше тело функции сложения чисел разместить после тела функции main, то код будет выглядеть следующим образом:

Рекурсивные функции

Функция, которая вызывает сама себя, называется рекурсивной функцией .

Рекурсия — вызов функции из самой функции.

Пример рекурсивной функции — функция вычисления факториала.

Результат выполнения

Более подробно рекурсивные функции рассмотрены в этой статье.

Математические функции

Математические функции хранятся в стандартной библиотеке math.h . Аргументы большинства математических функций имеют тип double . Возвращаемое значение также имеет тип double .
Углы в тригонометрических функциях задаются в радианах.

Основные математические функции стандартной библиотеки.

ФункцияОписание
int abs( int x)Модуль целого числа x
double acos( double x)Арккосинус x
double asin( double x)Арксинус x
double atan( double x)Арктангенс x
double cos( double x)Косинус x
double cosh( double x)Косинус гиперболический x
double exp( double x)Экспонента x
double fabs( double x)Модуль вещественного числа
double fmod( double x, double y)Остаток от деления x/y
double log( double x)Натуральный логарифм x
double log10( double x)Десятичный логарифм x
double pow( double x, double y)x в степени y
double sin( double x)Синус x
double sinh( double x)Синус гиперболический x
double sqrt( double x)Квадратный корень x
double tan( double x)Тангенс x
double tanh( double x)Тангенс гиперболический x

Особенности использования функций в языке C++ рассмотрены в этой статье.

Язык C++

Основы программирования

Основы программирования на C++

Переменные и арифметические операции

Каждое имя и каждое выражение обязаны иметь тип. Именно тип определяет операции, которые могут выполняться над ними. Например, в описании

говорится, что inch имеет тип int, т.е. inch является целой переменной.

Описание — это оператор, который вводит имя в программу. В описании указывается тип имени. Тип, в свою очередь, определяет как правильно использовать имя или выражение.

Основные типы, наиболее приближенные к «аппаратной реальности» машины, таковы:

Они представляют целые числа. Следующие типы:

представляют числа с плавающей точкой. Переменная типа char имеет размер, нужный для хранения одного символа на данной машине (обычно это один байт). Переменная int имеет размер, необходимый для целой арифметики на данной машине (обычно это одно слово).

Следующие арифметические операции можно использовать над любым сочетанием перечисленных типов:

То же верно для операций отношения:

Для операций присваивания и арифметических операций в С++ выполняются все осмысленные преобразования основных типов, чтобы их можно было неограниченно использовать любые их сочетания:

Символ = обозначает обычное присваивание.

Указатели и массивы

Массив можно описать так:

Описание указателя имеет такой вид:

Здесь [] означает «массив из», а символ * означает «указатель на». Значение нижней границы индекса для всех массивов равно нулю, поэтому v имеет 10 элементов: v [ 0 ] . v [ 9 ]. Переменная типа указатель может содержать адрес объекта соответствующего типа:

Унарная операция & означает взятие адреса.

Условные операторы и циклы

В С++ есть традиционный набор выбирающих операторов и циклов. Ниже приводятся примеры операторов if, switch и while.

В следующем примере показано преобразование дюйма в сантиметр и обратно. Предполагается, что во входном потоке значение в сантиметрах завершается символом c, а значение в дюймах — символом i:

Операция >> («ввести из») используется как оператор ввода; используется как оператор ввода; cin является стандартным входным потоком. Тип операнда, расположенного справа от операции >>, определяет, какое значение вводится; оно записывается в этот операнд.

Оператор switch (переключатель) сравнивает значение с набором констант. Проверку в предыдущем примере можно записать так:

Операторы break используются для выхода из переключателя. Все константы вариантов должны быть различны. Если сравниваемое значение не совпадает ни с одной из них, выполняется оператор с меткой default. Вариант default может и отсутствовать.

Приведем запись, задающую копирование 10 элементов одного массива в другой:

Словами это можно выразить так: «Начать с i равного нулю, и пока i меньше 10, копировать i-тый элемент и увеличивать i.» Инкремент (++) переменной целого типа просто сводится к увеличению на 1.

Функции

Функция — это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Приведем программу, выдающую степени числа два:

Первая строка является описанием функции. Она задает pow как функцию с параметрами типа float и int, возвращающую значение типа float. Описание функции необходимо для ее вызова, ее определение находится в другом месте.

При вызове функции тип каждого фактического параметра сверяется с типом, указанным в описании функции, точно так же, как если бы инициализировалась переменная описанного типа. Это гарантирует надлежащую проверку и преобразования типов. Например, вызов функции pow(12.3,»abcd») транслятор сочтет ошибочным, поскольку «abcd» является строкой, а не параметром типа int. В вызове pow(2,i) транслятор преобразует целую константу (целое 2) в число с плавающей точкой (float), как того требует функция. Функция pow может быть определена следующим образом:

Первая часть определения функции задает ее имя, тип возвращаемого значения (если оно есть), а также типы и имена формальных параметров (если они существуют). Значение возвращается из функции с помощью оператора return.

Разные функции обычно имеют разные имена, но функциям, выполняющим сходные операции над объектами разных типов, лучше дать одно имя. Если типы параметров таких функций различны, то транслятор всегда может разобраться, какую функцию нужно вызывать. Например, можно иметь две функции возведения в степень: одну — для целых чисел, а другую — для чисел с плавающей точкой:

Такое многократное использование имени называется перегрузкой имени функции или просто перегрузкой.

Параметры функции могут передаваться либо «по значению», либо «по ссылке». Рассмотрим определение функции, которая осуществляет взаимообмен значений двух целых переменных. Если используется стандартный способ передачи параметров по значению, то придется передавать указатели:

Унарная операция * называется косвенностью (или операцией разыменования), она выбирает значение объекта, на который настроен указатель. Функцию можно вызывать следующим образом:

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

Для любого типа T запись T& означает «ссылка на T». Ссылка служит синонимом той переменной, которой она инициализировалась. Отметим, что перегрузка допускает сосуществование двух функций swap в одной программе.

Ссылка на основную публикацию
Adblock
detector