- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «Microsoft Visual Studio.Net».
- •Структура программы.
- •Пример простейшей программы:
- •Представление данных.
- •Операции.
- •Ввод и вывод алфавитно-цифровой информации.
- •Математические функции.
- •Практическое задание №1.
- •Условия в вычислениях. Ветвящиеся и итерационные алгоритмы Условная операция присваивания. Операторы if ... Else и switch.
- •Ветвящиеся алгоритмы.
- •Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.
- •Практическое задание №2.
- •Функции.
- •Определение функции.
- •Прототипы функций.
- •Вызов по значению и вызов по ссылке.
- •Вычисление функций путем разложения в ряд.
- •Поиск корней функции методом деления отрезка пополам.
- •Поиск корней функции методом касательных.
- •Практическое задание №3.
- •Массивы и указатели. Работа с файлами. Объявления массивов и указателей.
- •Доступ к элементам массива.
- •Передача массивов функциям.
- •Указатели.
- •Динамическое выделение и освобождение памяти.
- •Практическое задание.
- •Потоковые функции.
- •Низкоуровневый ввод и вывод.
- •Ввод и вывод символов, строк, слов.
- •Форматированный ввод и вывод.
- •Потоки cin, cout, cerr.
- •Практическое задание №4.
- •Структуры и объединения. Синтаксис структур.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Структуры и битовые поля.
- •Объединения.
- •Дополнительные средства (typedef и enum).
- •Введение в объектно-ориентированное программирование. Принципы объектно-ориентированного программирования.
- •Терминология объектно-ориентированного программирования.
- •Структура как простейший класс.
- •Inline методы.
- •Указатель this.
- •Конструкторы и деструкторы.
- •Перегрузка методов класса.
- •Перегрузка операций.
- •Практическое задание.
- •Производные классы. Полиморфизм
- •Виртуальные функции
- •Использование дружественных функций.
- •Практическое задание.
- •Работа в объектно-ориентированной среде.
- •Объектно-ориентированные стековые операции.
- •Объектно-ориентированные связанные списки.
- •Практическое задание.
- •Классы iostream.
- •Потоковый ввод-вывод.
- •Буферизованные потоки.
- •Строковые потоки.
- •Двоичные файлы.
- •Вычисления в интерактивном режиме.
- •Графика в системе matlab.
- •3. Программирование m-функций.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •Глава 7. Дополнительные возможности системы matlab Объекты и классы. Переопределение операций.
- •Написание расширений matlab на языке c
- •Программные интерфейсы
- •Настройка среды для сборки проекта
- •Пример программы
- •Вызов команд среды matlab из mex-файла
-
Массивы и указатели. Работа с файлами. Объявления массивов и указателей.
Массив представляет собой набор данных одного типа. Формат определения массива следующий:
тип_данных имя_массива[размер_массива];
Например, для представления данных о температуре можно воспользоваться следующим описанием:
int Temperatura[7];
Массив можно инициализировать во время определения:
int Temperatura[7]={ 20, 21, 17,16,27,22,19};
Если массив инициализируется, то его размер можно не указывать, например:
char Error[]=”Ошибка, файл не найден!”;
Многомерные массивы задаются указанием нескольких размеров, каждый из которых заключен в квадратные скобки:
double koordinate[8][2];
Такое описание определяет таблицу, содержащую два столбца и 8 строк.
При инициализации таких массивов можно не указывать только размер самого левого индекса:
int iarray[][3]={ {1,2,3},{9,11,4},{100,200,300}};
Многомерные массивы хранятся в памяти компьютера последовательно. Они группируются в порядке индексов, от правого к левому. В предыдущем примере элементы расположены следующим образом:
iarray[0][0],iarray[0][1],iarray[0][2],iarray[1][0],…,iarray[2][1],iarray[2][2].
Доступ к элементам массива.
Для доступа к элементу массива используется его имя, за которым следует номер элемента (индекс), заключенный в квадратные скобки, например:
for (int idx=0;idx<7;idx++)
s+=Temperatura[idx];
Нумерация элементов массива начинается с нуля. Т.е. индекс массива определяет смещение используемого элемента относительно начала массива.
Передача массивов функциям.
Массивы можно передавать функциям. Для этого необходимо в объявлении параметров функции после имени массива поставить пару квадратных скобок:
int function(double a[],int size);
Обратите внимание, что размерность массива в функцию автоматически не передается. Это можно сделать, используя второй параметр, как показано в предыдущем примере.
При вызове функции необходимо просто указать имя фактического параметра:
x=function(myarray,50);
Функция получает доступ ко всем элементам массива и может их изменять. Для запрета изменения можно добавить модификатор const:
int function(const double a[],int size);
Указатели.
Указатель является переменной, которая содержит адрес другой переменной или функции. Описание указателя определяет тип данных, на которые ссылается указатель, оно имеет вид:
тип_указываемых данных *имя_указателя;
Для доступа к объекту, на который ссылается указатель, используется имя указателя со звездочкой перед ним. Эта операция называется разыменовыванием указателя, она корректно выполняется только, если указатель был предварительно инициализирован:
int i=100;// определяется целая переменная
int *point_i;// определяется указатель на целую переменную
pointi=&i;// указатель инициализируется адресом переменной i
printf(“%i”,*pointi); // выводится значение переменной,
// определяемое указателем. Оно равно значению переменной i (100).
Обратите внимание на операцию определения адреса (&). Она является противоположной разыменованию.
Массивы и указатели тесно связаны друг с другом. Имя массива соответствует указателю на начало массива. Поэтом можно присваивать указателю адрес первого элемента массива, используя имя массива.
int array[10];
int *iptr=array;
С указателями можно выполнять целочисленные арифметические операции. При этом происходит вычисление адреса соответствующего элемента массива, а не адреса в памяти компьютера. Размер элемента определяется типом указателя. Для типа void соответственно никакие операции выполнять нельзя.
Указатель можно индексировать как массив. Следующие два оператора эквивалентны:
array[3]=10;
*(array+3)=10;
Указатели вместо массивов целесообразно использовать тогда, когда требуется последовательный доступ к элементам массива. Такая операция выполняется значительно быстрее, например:
int *ptemp=array;
for(int i=1;i<10;i++)
*(ptemp++)=0;
можно использовать для обнуления массива array.