- •1. Основы алгоритмизации и программирования
- •1.1. Этапы подготовки и решения задач на эвм
- •1.2. Алгоритмы и способы их описания Понятие алгоритма
- •Способы описания алгоритмов
- •Структурные схемы алгоритмов
- •1.3. Компиляция и интерпретация программ
- •1.4. Стили программирования
- •Процедурное программирование
- •Функциональное программирование
- •Логическое программирование
- •Объектно-ориентированное программирование
- •2.1. Пример готовой программы.
- •2.2. Структура основной программы
- •2.3. Алфавит языка
- •2.4. Константы и переменные Константы
- •Переменные
- •Примеры записи имен переменных
- •2.5. Арифметические выражения
- •Примеры вычисления арифметических выражений
- •Стандартные функции
- •Примеры программирования арифметических выражений
- •Контрольные задания
- •1. Составить описания для заданных переменных
- •2.6. Линейные вычислительные процессы
- •Оператор присваивания
- •Странные операторы присваивания
- •Операторы ввода-вывода
- •Операторы ввода исходных данных с клавиатуры
- •Потоковый ввод данных числового типа
- •Форматный ввод
- •Операторы вывода данных на экран Потоковый вывод
- •Форматный вывод
- •Контрольные задания
- •2.7. Разветвляющиеся вычислительные процессы
- •Логические выражения
- •Порядок выполнения операций в логических выражениях
- •Условные операторы
- •Короткий условный оператор
- •Полный условный оператор
- •If (логическое выражение) p1; else p2;
- •Вложенные структуры условных операторов
- •Оператор выбора
- •Контрольные задания
- •2.8. Циклические вычислительные процессы
- •Операторы цикла с условием
- •Оператор цикла do...While
- •Оператор цикла с параметром
- •2.9. Базовые алгоритмы
- •Задача 1. Алгоритм организации счетчика
- •Задача 2. Алгоритм накопления суммы
- •Задача 3. Алгоритм накопления произведения
- •Задача 4. Алгоритм поиска минимального члена последовательности
- •Задача 5. Табулирование функции (или кратные циклы)
- •Задача 6. Вычисление сумм последовательностей
- •2.10. Указатели и массивы Указатели
- •Понятие массива
- •Общий вид описания массива
- •Одномерные массивы
- •Описание одномерного массива
- •Индексированные переменные
- •Ввод-вывод одномерных массивов
- •Обработка одномерных массивов
- •Задача 1. Организация счетчика
- •Задача 2. Накопление суммы и произведения
- •Задача 3. Поиск минимального и максимального элементов массива
- •Двухмерные массивы
- •Описание двухмерного массива
- •Ввод-вывод двухмерного массива
- •Обработка матриц
- •2.11. Подпрограммы Структура сложной программы
- •Функции
- •Общий вид описания функции
- •Обращение к функции
- •Пример программы с функцией
- •Механизм замены параметров
- •Параметры-массивы в функциях
- •Рекурсия
- •Примеры программирования задач с использованием подпрограмм
- •Задача 1
- •2.12. Текстовые данные
- •Символьный тип данных
- •Ввод-вывод символьных данных
- •Обработка символьных данных
- •Ввод-вывод строковых данных
- •Обработка строковых данных
- •Стандартные функции обработки строк
- •Сравнение строк:
- •Сцепление строк
- •Определение длины строки
- •Копирование строк
- •Поиск символа в стоке
- •Пример программы для задачи с текстовыми данными
- •Контрольные задания
- •2.13. Динамическое выделение памяти
- •Структуры данных Понятие структуры
- •Обработка структур
- •Пример задачи с использованием структурированных данных
- •2.15. Файлы данных Понятие файла
- •Работа с файлами
- •Открытие файла
- •Обработка открытого файла
- •Закрытие файла
- •Функции ввода/вывода
- •Работа с текстовыми файлами
- •Обработка бинарных файлов
- •Контрольные задания
- •Заключение
- •Оглавление
Обработка структур
Над структурами возможны следующие операции:
присваивание значений структурной переменной;
получение адреса переменной с помощью операции &;
ввод и вывод значений переменных структурного типа;
сравнение полей переменных структурного типа.
Операция присваивания применима, как к отдельным полям переменной структурного типа, так и к переменным в целом.
При присваивании полям структуры значений, необходимо учитывать типы полей. Например:
#include "stdafx.h"
#include <string.h>
typedef struct student // описание структуры
{
char fam[20];
int mathematics, informatics, history;
} STUD;
main()
{ STUD X; //описание переменной структурного типа
strcpy(X.fam, "Андреева С.В. "); /*копирование фамилии в поле fam переменной Х */
X. mathematics=4;
X. informatics=5;
X. history=5;
printf("\n %s %d %d %d", X.fam, X.mathematics, X.informatics,X.history);/*вывод информации из полей переменной Х
. . .
}
Для структурного типа возможно присваивание значений одной структурной переменной другой структурной переменной, при этом обе переменные должны иметь один и тот же тип.
Присваивание значения одной переменной другой выполняется путем копирования значений соответствующих полей, например:
. . .
main()
{ STUD X, Y;
strcpy(X.fam,”Андреева С.В.”);
X. mathematics=4;
X. informatics=5;
X. history=5;
Y=X; // копирование информации из Х в Y
printf("\n %s %d %d %d",
Y.fam, Y.mathematics, Y.informatics, Y.history);
. . .
}
В результате выполнения этого копирования в Y.fam будет записано значение ”Андреева С.В.”, а в Y. mathematics – оценка 4, в. Y.informatics – 5 и в Y.history – тоже 5.
Работа со структурной переменной обычно сводится к работе с отдельными полями структуры. Такие операции, как ввод с клавиатуры, сравнение полей и вывод на экран применимы только к отдельным полям. Например, в выше приведенном примере вывод информации о студенте осуществляется выводом значений отдельных полей с помощью функции printf().
С помощью структурного типа можно формировать массивы записей. Так, например информацию о 20 студентах можно хранить в массиве из 20 элементов структурного типа:
typedef struct student
{
char fam[20];
int mathematics, informatics, history;
} STUD;
main()
{ STUD Spis[20];
. . .
}
Пример задачи с использованием структурированных данных
Рассмотрим пример программы, в которой вводится информация об абонентах сети: ФИО, телефон и возраст. В программе выбираются абоненты моложе 25 лет и их список выводится в алфавитном порядке.
#include "stdafx.h"
#include<conio.h>
#include<stdlib.h>
typedef struct abon //описание структуры
{ char f[10],i[10],o[10];
long tel;
int voz;
}ABON;
const int n=5;
int i,k,j;
int main()
{ ABON z[n],y[n]; //описание массивов структур
ABON х;
for (i=0; i<n; i++)//ввод в цикле исходной информации о пяти абонентах
{printf("Введите ФИО абонента:");
scanf("%s%s%s",z[i].f, z[i].i, z[i].o);
printf("введите его телефон и возраст:");
scanf("%ld%d",&z[i].tel,&z[i].voz);
}
printf("---------------------------------------------------\n");
printf("| Фамилия | Имя | Отчество| Телефон | Возраст |\n");
printf("---------------------------------------------------\n");
for (i=0;i<n;i++) //вывод в цикле информации о пяти абонентах
printf("|%9s|%8s|%9s|%7ld | %5d |\n", z[i].f,z[i].i,z[i].o, z[i].tel,z[i].voz);
}
printf("---------------------------------------------------\n");
for (i=0;i<n;i++)
{if(z[i].voz<25) // поиск абонента моложе 25 лет
y[k++]=z[i];
}
for(i=1;i<k;i++) //сортировка списка абонентов моложе 25 лет
for(j=k-1;j>=i;j--)
if(y[j].f[0]<y[j-1].f[0])
{x=y[j];
y[j]=y[j-1];
y[j-1]=x;}
printf("mologe 25\n");
printf("---------------------------------------------------\n");
printf("| Фамилия | Имя | Отчество| Телефон | Возраст |\n");
printf("---------------------------------------------------\n");
for (i=0;i<k;i++) // вывод отсортированного списка
{printf("|%9s|%8s|%9s|%7ld | %5d |\n", y[i].f,y[i].i, y[i].o, y[i].tel,y[i].voz);
}
printf("---------------------------------------------------\n");
return 0;
}
Полем структурной переменной может быть переменная любого типа, в том числе другая структурная переменная. Поле, представляющее собой структуру, называется вложенной структурой.