Определение функции
Что такое Массив
Массив (или массив данных) – это набор однородных(одного типа) элементов, к которым можно обратиться по их порядковому номеру (индексу).
Массив характеризуется следующими основными понятиями:
Элемент массива (значение элемента массива) – значение, хранящееся в определенной ячейке памяти, расположенной в пределах массива, а также адрес этой ячейки памяти.
Каждый элемент массива характеризуется тремя величинами:
· адресом элемента - адресом начальной ячейки памяти, в которой расположен этот элемент;
· индексом элемента (порядковым номером элемента в массиве);
· значением элемента.
Адрес массива – адрес начального(нулевого) элемента массива.
Имя массива – идентификатор, используемый для обращения к элементам массива.
Размер массива – количество элементов массива
Размер элемента – количество байт, занимаемых одним элементом массива.
Графически расположение массива в памяти компьютера можно представить в виде непрерывной ленты адресов.
Представленный на рисунке массив содержит q элементов с индексами от 0 до q-1. Каждый элемент занимает в памяти компьютера k байт, причем расположение элементов в памяти последовательное.
Адреса i-го элемента массива имеет значение
n+k·i
Для обращения к элементам массива используется порядковый номер (индекс) элемента, начальное значение которого равно 0.
Длина массива – количество байт, отводимое в памяти для хранения всех элементов массива.
ДлинаМассива = РазмерЭлемента * КоличествоЭлементов
Для определения размера элемента массива может использоваться функция
int sizeof(тип);
Например,
sizeof(char) = 1; sizeof(int) = 4; sizeof(float) = 4; sizeof(double) = 8;
Объявление и инициализация массивов
Для объявления массива в языке Си используется следующий синтаксис:
тип имя[размерность] = {инициализация};
Инициализация представляет собой набор начальных значений элементов массива, разделенных запятыми.
int a[10] = {0,1, 2, 3, 4, 5, 6, 7, 8, 9}; // массив a из 10 целых чисел
или int a [0]=0, a[1]=1, …, a[10]=9;
int a[10] = {0}; // массив a из 10 элементов, инициализированных 0
Если массив проинициализирован при объявлении, то константные начальные значения его элементов указываются через запятую в фигурных скобках. В этом случае количество элементов в квадратных скобках может быть опущено.
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
При обращении к элементам массива индекс требуемого элемента указывается в квадратных скобках [].
Пример
int main()
{
int a[5] = {0,1, 2, 3, 4};
int i;
for( i=0;i<5;i++)
printf("a[%d]=%d\t ", i,a[i]);
return 0;
}
Однако часто требуется задавать значения элементов массива в процессе выполнения программы. При этом используется объявление массива без инициализации. В таком случае указание количества элементов в квадратных скобках !обязательно.!
int a[10];
Для задания начальных значений элементов массива очень часто используется параметрический цикл:
#include <stdio.h>
int main()
{
int i,a[5]; // объявлен массив a из 5 элементов
// Ввод элементов массива
for (i = 0; i<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]); // &a[i] - адрес i-го элемента массива
}
// Вывод элементов массива
for (i = 0; i<5; i++)
printf("%d ", a[i]); // пробел в формате печати обязателен
return 0;
}
Результат выполнения программы
2.
А теперь напишем программу, подсчитывающую по отдельности каждую цифру, символы- разделители (пробелы, табуляции и новые-строки) и все другие символы во входном потоке.
#include <stdio.h>
/* подсчет цифр, символов-разделителей и прочих символов */
int main()
{
int c,i,nwhite, other;
int ndigit[10];
nwhite = other = 0;
for (i = 0; i < 10; ++i)
ndigit[i]= 0;
while ((c = getchar()) != 'EOF')
if ( c>= '0' && c<='9')//проверка является ли находящийся в c символ цифрой.
++ndigit[c - '0'];// есть числовое значение цифры, в кодировке они по порядку
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++other;
printf("digits =");
for (i = 0; i < 10; ++i)
printf("%d", ndigit[i]);
printf(", white space =%d, other =%d\n", nwhite, other);
return 0;
}
Дз1.Ввести координаты трёх вершин треугольника. Вывести его площадь. Считаем, что ввод корректный.
Функция pow() возвращает значение base, возведенное в степень ехр, т. е. baseexp. Переполнение вызывает ошибку области значений. Также может возникнуть ошибка области определения. Версия этой функции для данных типа long double называется powl().
Параметры:
· basis Значение с плавающей точкой — основание.
· exponent Значение с плавающей точкой — степень.
Функции в языке Си
Функции в Си играют ту же роль, что и подпрограммы и функции в Фортране или процедуры и функции в Паскале. Функция обеспечивает удобный способ отдельно оформить некоторое вычисление и пользоваться им далее, не заботясь о том, как оно реализовано. После того, как функции написаны, можно забыть, как они сделаны, достаточно знать лишь, что они умеют делать. Механизм использования функции в Си удобен, легок и эффективен. Нередко вы будете встречать короткие функции, вызываемые лишь единожды; они оформлены в виде функции с одной-единственной целью — получить более ясную программу.
Функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи.
Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.
Сигнатура/Прототип функции определяет правила использования функции. Обычно сигнатура представляет собой описание функции, включающее имя функции, перечень формальных параметров с их типами и тип возвращаемого значения.
Семантика функции определяет способ реализации функции. Обычно представляет собой тело функции.
Определение функции
Каждая функция в языке Си должна быть определена, то есть должны быть указаны:
Ø тип возвращаемого значения;
Ø имя функции;
Ø информация о формальных аргументах;
Ø тело функции.
Определение функции имеет следующий синтаксис:
ТипВозвращаемогоЗначенияИмяФункции(СписокФормальныхАргументов) //параметры
{
ТелоФункции;//объявления и инструкции
...
return ВозвращаемоеЗначение;// return(ВозвращаемоеЗначение);
}
Пример: Функция сложения двух вещественных чисел
float sum(float x, float z)
{
float y;
y = x+z;
return y;//return (y);
}
В указанном примере возвращаемое значение имеет тип float. В качестве возвращаемого значения в вызывающую функцию передается значение переменной y. Формальными аргументами являются значения переменных x и z.
Если функция не возвращает значения, то тип возвращаемого значения для нее указывается как void. При этом операция return может быть опущена. Если функция не принимает аргументов, в круглых скобках также указывается void.
Различают системные (в составе систем программирования) и собственные функции.
Системные функции хранятся в стандартных библиотеках, и пользователю не нужно вдаваться в подробности их реализации. Достаточно знать лишь их сигнатуру. Примером системных функций, используемых ранее, являются функции printf() и scanf().
Собственные функции - это функции, написанные пользователем для решения конкретной подзадачи.
Разбиение программ на функции дает следующие преимущества:
Ø Функцию можно вызвать из различных мест программы, что позволяет избежать повторения программного кода.
Ø Одну и ту же функцию можно использовать в разных программах.
Ø Функции повышают уровень модульности программы и облегчают ее проектирование.
Ø Использование функций облегчает чтение и понимание программы и ускоряет поиск и исправление ошибок.
С точки зрения вызывающей программы функцию можно представить как некий "черный ящик", у которого есть несколько входов и один выход. С точки зрения вызывающей программы неважно, каким образом производится обработка информации внутри функции. Для корректного использования функции достаточно знать лишь ее сигнатуру.
Вызов функции
Общий вид вызова функции
Переменная = ИмяФункции(СписокФактическихАргументов);
Фактический аргумент/Аргумент — это величина, которая присваивается формальному аргументу при вызове функции. Таким образом, формальный аргумент/параметр — это переменная в вызываемой функции, а фактический аргумент — это конкретное значение, присвоенное этой переменной вызывающей функцией. Фактический аргумент может быть константой, переменной или выражением. Если фактический аргумент представлен в виде выражения, то его значение сначала вычисляется, а затем передается в вызываемую функцию. Если в функцию требуется передать несколько значений, то они записываются через запятую. При этом формальные параметры заменяются значениями фактических параметров в порядке их следования в сигнатуре функции.
Дата добавления: 2017-04-20; просмотров: 412;