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, т.к. эти переменные не будут содержать пробелов.
Тип указатель. Динамические переменные.
Под динамические переменные выделяется область памяти, которая называется “куча”.
Два способа для работы с динамическими переменными:
1. Резервирование памяти под дин. переменные производится с помощью операции new <тип>; где <тип>, - тип динам. переменной; new, - знак операции. Результат операции – адрес области памяти (указатель); операнд – любой тип в TC.
Пример:
float *p;
p=new float;
*p, - динамическая переменная.
Резервирование памяти под динамические переменные – “захват”.
<освобождение памяти>≡delete <выр.>.
Выражение должно иметь тип указатель.
Динамические массивы – массивы, под которые выделяется область памяти “куча”. Работать с такими массивами так же, как и с динамическими переменными.
Пример:
a=new float [10], - захват памяти под 10 элементов действительного типа; значение a – указатель; работа с такими массивами так же, как и со статичными.
<освобождение памяти>≡delete [] <выражение>; при этом выражение должно иметь значение указателя на динамический массив.
NULL, - отсутствие ссылки; принадлежит любому значению типа указатель.
Списки.
Teg – описание структуры.
<определение типа структура с помощью тега>≡
struct <идент.>
{
<резервирование памяти>;
{< резервирование памяти >;}
};
Пример: Определим тип элемента односвязного списка.
struct tinfo
{
float x, y;
}
struct tel
{
tinfo info;
tel *link;
}
typedef tel* ptel;
Организация односвязного списка по принципу ссылки вперед.
Пример:
b, t, p – указатели на первый, текущий и на предшествующий элементы соответственно.
Блок – схема:
Текст программы:
void VVKL (ptel &b, int &n)
{
ptel t, p;
n=0;
do
{
t=new tel;
n++;
cout<<”Znachenie pervogo chlena ? ”;
cin>>t->info.x;
cout<<” Znachenie vtorogo chlena ? ”;
cin>>t->info.y;
if (n==1) b=t; else p->link=t;
p=t;
}
while (printf(“Prodolgit’ vvod? y/n ? ”)&&getchar()==’y’);
t->link=NULL;
}
Файлы.
Работа с файлами в С реализуется через буфер. В С существует два вида файлов: текстовые и бинарные.
<резерв. памяти под указатель на буфер файла>≡FILE* <идент.>
<открытие файла >≡fopen(“<имя файла>; <атрибут файла>”)
атрибуты: w, r, q;
значение функции – указатель на буфер.
<идент. (поток)>≡fopen (“имя файла”, “<атрибут>”); - связывает имя файла с потоком.
Основные действия с файлами: запись в файл, - атрибут: w; чтение, - атрибут: r.
q, - если файл существует и в него надо что-то записать.
if ((<идент.>=fopen(“<имя файла>”,”r”))!=NuLL)
{
…
//работа с файлами//
…
}
else
cout<<”fayl ne nayden”<<endl;
<форматированный вывод в файл>≡fprintf(<идент.>,<шаблон вывода>,<список вывода>);
<форматированный ввод из файла>≡fscanf(<идент.>,<шаблон вывода>,<список вывода>)
getc(), - функция, считывающая символ, на который указывает указатель чтения.
Пример:
getc()!=EOF.