Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Топ:
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
2017-06-02 | 194 |
5.00
из
|
Заказать работу |
|
|
Элементы массива простого типа:
1). <идент. типа><идент.>[]; - передача значением; <идент.> имеет смысл «указатель».
Пример: сортировка массива.
void sort(int n, float a[])
{
…
}
n, - количество элементов массива; a, - сам массив.
2). <идент. типа><идент.>[const].
Элементы массива – массивы:
Необходимо указать количество индексов для элемента массива:
1). … float b[][5];
2). … float b[10][5]
Использование функций.
Имя функции имеет смысл переменной.
В качестве параметра функции необходимо описать его как указатель на некоторую функцию.
В С это описание называют прототипом.
Прототип носит справочный характер.
Пример:
float kv (float t)
void swap1 (float &x, float &y, float (*k)(float t))
{
float z;
z=k(x);
x=k(y);
y=z;
}
void main ()
{
…
swap1(a, b, kv)
…
}
# include “mod.h”
void main ()
{
…
swap1(a, b, kv);
…
}
Перегрузка функции.
Может быть описано несколько функций с одним идентификатором, но с разным списком параметров.
Пример: Найти площадь треугольника тремя способами.
float strl(float &x, float &y)
{
return x*y/2;
}
float strl(float &x, float &y, int &z)
{
return x*y*atan(1)*z/90;
}
float strl(float &x, float &y, float &z)
{
float p;
p=(x+y+z)/2;
return sqrt(p*(p-x)(p-y)(p-z));
}
void main ()
{
float a, b, c;
int n;
cout<<”Ploshad’ treugol’nika:”<<endl;
cout<<”1. Po osn. I vis.: ”<<endl;
cout<<”2. Po storonam I uglu v gradusah: ”<<endl;
cout<<”3. Po trem storonam: ”<<endl;
cout<<”Nomer puncta? ”<<endl;
cin>>n;
switch n
{
case 1:
cout<<”Osnovanie I visota? ”;
cin>>a>>b;
cout<<”Ploshad’ = ”<<strl(a, b)<<endl;
break;
case 2:
cout<<”Smegnie storoni I ugol? ”;
cin>>a>>b>>n;
cout<<”Ploshad’ = ”<<strl(a, b, n)<<endl;
break;
case 3:
cout<<”Tri storoni? ”;
cin>>a>>b>>c;
cout<<”Ploshad’ = ”<<strl(a, b, c)<<endl;
break;
default
cout<<”Nepravil’niy nomer punkta. ”;
}
}
Функции с параметрами по умолчанию.
При описании функции можно инициализировать некоторые параметры функции. Формальные параметры инициализируются значениями или глобальными константами, которые определены с помощью директивы define.
|
При вызове такой функции в качестве фактических параметров достаточно указать только те, которые соответствуют не инициализированным формальным. При этом для создания динамического варианта функции в качестве значений формальных инициализированных параметров будут использоваться те значения, которые были указаны при описании. Если для инициализированного параметра при вызове функции указан фактический параметр, то алгоритм использует значение этого фактического параметра.
Правила:
1. Формальные инициализированные параметры должны располагаться подряд после неинициализированных, т.е. секция инициализированных параметров должна быть последней в списке формальных параметров.
2. При вызове функции фактические параметры, соответствующие инициализированным формальным, должны располагаться подряд с начала секции инициализации.
Пример:
Нахождение длины отрезка
<тип значения><идент.>(<тип пар.> [ =<знач.> ]{, <тип пар.> [ =<знач.> ]})
float par (float, float = 1, float = 1);
float par (float &x, float &y, float &z)
{
return x*y*z;
}
void main ()
{
float a, b, c;
int n;
cout<<”1. Dlina otrezka ”<<endl;
cout<<”2. Ploshad’ pryamougol’nika ”<<endl;
cout<<”3. Obyom pryamougol’nogo parallelipipeda ”<<endl;
cout<<”Nomer punkta? ”;
cin>>n;
switch (n)
{
case 1:
cout<<”Dlina? ”;
cin>>a;
cout<<”Dlina otrezka = “<<par(a);
break;
case 2:
cout<<”Dlina I shirina? ”;
cin>>a>>b;
cout<<”Ploshad’ = ”<<par(a, b);
break;
case 3:
cout<<”Dlina, shirina i visota? ”;
cin>>a>>b>>c;
cout<<”Obyom = ”<<par(a,b,c);
break
default
cout<<”Nepravil’niy nomer punkta”;
}
}
Тип структура в Си.
Этот тип является аналогом типа “запись” в Turbo Pascal. Позволяет объединить данные различных типов.
<тип структура> ≡ struct
{
<резерв. пам.>;
{ <резерв. пам.>; }
}
Компоненты этого типа называются членами структуры.
Описание переменной с типом <структура>:
|
Сначала определяется идентификатор типа <структура>, затем описываются переменные с использованием этого идентификатора.
<определение типа> ≡ typedef <тип><идент. типа>
Пример:
typedef struct
{
char F[15], I[15], O[15];
int B[4];
float SB;
}
rez;
rez GR [25];
GR[5].F //Фамилия 6-го студента группы//
GR[5].B[1] //Оценка этого студента на втором экзамене//
Ввод фамилии, имени и отчества можно организовать с помощью оператора cin, т.к. эти переменные не будут содержать пробелов.
Тип указатель.
Программные объекты, которые порождаются с помощью соответствующих описаний называются статическими. Память за ними закрепляется на все время работы программы.
Данные, созданием и уничтожением которых управляет сам программист, внутренне строение которых формируется по особому закону, но количество, взаимное расположение и взаимосвязи которых могут изменяться в процессе выполнения программы, называются динамическими.
При объявлении данных динамической структуры в разделе описания указывается не сама переменная, а только ссылка на нее. Такая организация данных позволяет динамически занимать и освобождать память в процессе работы блока программы.
Это осуществляется с помощью типа указателя.
Синтаксис:
typedef <тип >* <тип указатель>;
<тип указатель> <идентификатор>;
Или
<тип> *<идентификатор>;
Над указателями выполняются следующие простейшие действия:
Объявление переменной
int *p;
char *s;
Выделение области памяти
Это осуществляется с помощью процедуры new, она выделяет область памяти из области «куча» соответствующий тому типу, который описан для указателя и записывает ее адрес в указатель.
p=new float;
Операция взятия указателя
Для этого служит унарная операция ”&”.
int *p;
int n;
…
p=&n;
Операция &n даст адрес величины n и в программе его значение будет присвоено указателю p.
Занесение информации
*p:=1;
*n:=2;
Операция сравнения
if (p!=NULL)
…
Копирование информации
*p=*n;
В область памяти одной переменной заносится значение, хранившееся в другой.
Копирование адреса
p=n;
Обе ссылочные переменные ссылаются на одну и ту же область памяти.
Освобождение памяти
<освобождение памяти>≡delete <выр.>.
Процедура освобождает область памяти на которую указывает ссылочная переменная, после чего эта область становится доступной для распределения под другие динамические переменные.
|
|
|
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!