
- •Государственный технический университет - Обнинский институт атомной энергетики е.А.Виноградова а.Г.Царина Программирование на языках высокого уровня.
- •Содержание
- •Введение. Подготовка и решение задач на компьютере.
- •Алгоритмы.
- •Основные свойства.
- •2.2 Способы представления алгоритмов.
- •2.3 Базовые структуры алгоритмов.
- •2.3.1 Линейная структура.
- •2.3.3.1. Цикл с предусловием:
- •2.3.3.2. Цикл с постусловием:
- •Типы данных.
- •3.1 Базовые типы данных.
- •Целый тип (int)
- •Символьный тип (char)
- •Расширенный символьный тип (wchar_t)
- •Логический тип (bool)
- •Типы с плавающей точкой (float, double и long double)
- •3.2 Переменные.
- •3.3 Ссылки.
- •3.4 Указатели.
- •3.3 Выражения.
- •3.3 .1 Операции.
- •4. Реализация базовых структур алгоритмов в языке с.
- •4.1 Оператор присвавания
- •4.2 Оператор «выражение»
- •4.3 Операторы ветвления
- •4.3.1 Условный оператор .
- •4.3.2. Оператор switch.
- •4.4 Операторы цикла
- •4.4.1 Циклы с предусловием
- •4.4.1.1 Цикл for.
- •4.4.1.2 Цикл с условием (while)
- •4.4.1 .3 Цикл с постусловием (do while)
- •5. Функции. Основные понятия
- •Определение функции
- •Рекурсивные функции.
- •Одномерные массивы.
- •6.1 Статические массивы.
- •6.2 Динамические массивы.
- •6.2.2 Функции преобразования динамических массивов.
- •7. Алгоритмы поиска и сортировки.
- •7.2 Последовательный поиск c барьером.
- •7.3 Дихотомический поиск в упорядоченом массиве.
- •7.4 Cортировка массивов.
- •7.4.1 Обменная сортировка (метод пузырька)
- •7.4.2 Метод "простой выбор".
- •7.4.3 Сортировка "прямое включение"
- •8 . Матрицы
- •8.1 Статические матрицы.
- •8.2 Динамические матрицы.
- •9. Строки в с.
- •1. Длина строки – strlen.
- •3. Копирование строк.
- •4. Объединение строк.
- •5. Поиск в строках
- •10. Cтруктуры.
10. Cтруктуры.
Cтруктура-это совокупность логически связанных переменных, возможно, различных типов, сгруппированных под одним именем для удобства дальнейшей обработки.
Традиционным примером структуры служит учетная карточка работающего: служащий предприятия описывается набором атрибутов, таких, как табельный номер, имя, дата рождения, пол, адресс, зарплата. В свою очередь, некоторые из этих атрибутов сами могут оказаться структурами. Таковы, например: имя, дата рождения, адрес, имеющие несколько компонент.
Элементы структуры обозначаются идентификаторами, с которыми можно связывать описатели типов. В результате структуру можно рассматривать как единое целое и осуществлять при необходимости выбор составляющих ее элементов.
Для образования структуры присваиваются имена каждому из включаемых элементов и структуре в целом. Затем посредством специального описания задают иерархию, порядок следования и типы элементов, включаемых в структуру.
Общий вид описания структуры
struct [Имя_типа]{
тип_1 1_элемент;
тип_2 2_элемент;
……………………..
тип_n n_элемент;
}[список экземпляров этого типа];
Эта запись называется описанием структуры. Она начинается с ключевого слова struct и состоит из заключенного в фигурные скобки списка описаний. За словом struct может следовать необязательное имя, которое называется именем типа структуры (иногда его называют тэгом или ярлыком структуры). Этот ярлык именует структуру и в дальнейшем может использоваться для сокращения подробного описания. Переменные, упоминающиеся в записи, называются элементами. Следом за правой фигурной скобкой, заканчивающей список элементов, может следовать список переменных, так же, как и в случае базисных типов. Вот почему в приведенном выше описании структуры после закрывающей фигурной скобки стоит точка с запятой; она завершает пустой список. Описание struct {....} p1, p2, p3; синтаксически аналогично int p1, p2, p3; в том смысле, что каждый из операторов описывает p1, p2, p3 как переменные соответствующего типа и приводит к выделению для них памяти. Описание же структуры без последующего списка переменных не выделяет никакой памяти. Оно только определяет форму структуры и действует как шаблон. Если такое описание снабжено ярлыком (именем типа), то его можно позже использовать при определении фактических экземпляров структуры.
Пример.
struct Tovar{
char name[30]; // название товара
char shop [20]; // название магазина
float price; // цена
};
Tovar A,B;
Обращение к элементам записи A: A. name, A. Shop, A.price.
Обращение к элементам записи B: B. name, B. Shop, B.price.
Ввод записи: cin>>A.name>>A.shop>>A.price;
Для однотипных структур возможен массовый оператор присваивания.
Например B=A;
Элементом структуры может быть другая структура.
Примеры.
Пример 1. Дан массив записей о студентах. Структура записи: фамилия студента, курс, набор оценок за последнюю сессию. Вывести на экран информацию о студентах 1 курса,
сдавших сессию на 4 и 5 .
#include <iostream.h>
#include <iomanip.h>
#include<conio.h>
int const m=5,n=100;
struct student{
char Fam[20];
int Kurs;
int ball[m];
};
void input(student &T)
{
cin>>T.Fam>>T.Kurs;
for (int j=0;j<m;j++)
cin>>T.ball[j];
}
void output(student T)
{cout.setf(ios::left);
cout<<setw(10)<<T.Fam<<' '<<T.Kurs<<' ';
for (int j=0;j<m;j++)
cout<<T.ball[j]<<' ';
cout<<endl;
}
int best(student T)
{
for(int j=0;j<m&&T.ball[j]>=4;j++);
if (j==m)return 1; else return 0;
}
void main(){
student S[n],z;
int i,F=1;
clrscr();
for(i=0;i<n;i++)
input(S[i]);
cout<<”\nCписок студентов первого курса, сдавших сессию на 4 и 5 \n”;
for(i=0;i<n;i++)
if(S[i].Kurs==1&&best(S[i])){ output(S[i]);F=0; }
if(F)cout<<"\n таких нет\n”;
getch();
}
Пример 2 . Дан массив записей о студентах. Структура записи: фамилия студента, курс, набор оценок за последнюю сессию. Вывести на экран информацию о студентах в алфавитном порядке фамилий .
#include <iostream.h>
#include <iomanip.h>
#include<conio.h>
int const m=5,n=100;
struct student{
char Fam[20];
int Kurs;
int ball[m];
};
void input(student &T)
{
cin>>T.Fam>>T.Kurs;
for (int j=0;j<m;j++)
cin>>T.ball[j];
}
void output(student T)
{cout.setf(ios::left);
cout<<setw(10)<<T.Fam<<' '<<T.Kurs<<' ';
for (int j=0;j<m;j++)
cout<<T.ball[j]<<' ';
cout<<endl;
}
void main(){
student S[n],z;
int i,F=1;
clrscr();
for(i=0;i<n;i++)
input(S[i]);
for(i=0;i<n-1;i++)
{ Nmin=i;
for(j=i+1; j<n; j++)
if(strcmp(S[j].Fam,S[Nmin].Fam)<0) Nmin=j;
z=S[i]; S[i]= S[Nmin]; S[Nmin]=z;}
cout<<”\nУпорядоченный список cтудентов\n”;
for(i=0;i<n;i++)
output(S[i]);
getch();
}
1 Пробелы между символами внутри операции не допускаются