- •Лабораторная работа № 1
- •Далее создадим файл:
- •Задания1
- •Лабораторная работа № 2
- •Консольный ввод-вывод
- •Чтение и запись символов
- •Чтение и запись строк
- •Форматированный консольный ввод-вывод
- •Форматированный вывод
- •Форматированный ввод
- •7. Варианты задания
- •Лабораторная работа № 3
- •5.2 Оператор if
- •Лабораторная работа № 4
- •Содержание отчета
- •Постановка задачи.
- •Общие сведения
- •Лабораторная работа № 5
- •Оператор for
- •Вариации цикла for
- •Бесконечный цикл
- •Циклы for без тела
- •Задание 2. Циклический вычислительный процесс конечные суммы и произведения
- •Лабораторная работа № 6
- •Оператор цикла while
- •Оператор do … while
- •Оператор break
- •Оператор continue
- •Лабораторная работа № 7
- •5.1 Одномерный массив
- •Создание указателя на массив
- •5.3 Индексация с помощью указателей
- •Сортировка
- •Методические указания.
- •Лабораторная работа № 8
- •Двухмерные массивы
- •Лабораторная работа № 9
- •Лабораторная работа № 11
- •Задача 2. Параметры функции
- •Лабораторная работа № 12
- •Варианты заданий
- •Лабораторная работа № 13
- •Некоторые операции над матрицами
- •Методические указания
- •Варианты заданий
- •Лабораторная работа № 14
- •Решение уравнения методом деления отрезка пополам (бисекций)
- •Методические указания
- •Лабораторная работа № 15
- •Вычисление определенного интеграла
- •6.2.1 Метод средних прямоугольников
- •6.2.1 Метод трапеций
- •Методические указания
- •Варианты заданий
- •Лабораторная работа № 10
- •Структуры (struct)
- •Лабораторная работа № 16
- •Директива #include
- •7. Методические указания
- •8. Варианты заданий.
- •Лабораторная работа № 17
- •Указатель на файл
- •Открытие файла
- •Перенаправление потока
- •Чтение из потока и запись в поток
- •Закрытие потока
- •Использование функций feof() и ferror()
- •Варианты заданий
- •Лабораторная работа № 18
- •Функции обработки символов
- •Функции обработки строк
- •Варианты заданий
- •Лабораторная работа № 19
- •Структуры
- •6.1.1 Доступ к элементам структуры
- •6.1.2 Присваивание структур
- •Массивы структур
- •Передача структур в функции
- •Передача членов структур в функции
- •Передача всей структуры в функцию
- •Указатели на структуры
- •Объявление указателя на структуру
- •Использование указателей на структуру
- •Массивы и структуры в структурах
- •Функции fread () и fwrite ()
- •Варианты заданий
- •Лабораторная работа № 20
- •Например, формула
- •Задание на программирование
6.1.2 Присваивание структур
Информация, содержащаяся в одной структуре, может быть присвоена другой структуре того же типа с помощью оператора присваивания, то есть не надо присваивать значение каждого элемента по отдельности. Например:
#include <stdio.h>
int main(void)
{
struct {
int a;
int b;
} x, y;
x . a = 10;
x . b = 20;
y = x;
printf(“Содержание y: %d %d.”, y.a, y.b);
return 0;
}
После присваивания y.a и y.b будут содержать значения 10 и 20 соответственно.
Массивы структур
Наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr, которая была объявлена ранее, следует написать:
struct addr ainfo[100];
В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры addr.
Для доступа к отдельным структурам массива ainfo следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:
printf(“%d”, ainfo[2].zip);
Как и массивы переменных массивы структур индексируются с нуля.
Передача структур в функции
Передача членов структур в функции
При передаче членов структур в функции фактически передается значение элемента структуры. Следовательно, передается обычная переменная. Рассмотрим для примера следующую структуру:
struct fred {
char x;
int y;
float z;
char s[10];
} mike;
Ниже приведены примеры передачи каждого элемента в функцию:
func (mike.x ); /* Передача символьного значения х */
func (mike.y); /* Передача целочисленного значения у */
func (mike.z ); /* Передача вещественного значения z */
func (mike.s); /* Передача адреса строки s */
func (mike.s[2]); /* Передача символьного значения s[2] */
Тем не менее, если необходимо передать адрес отдельного элемента структуры, следует поместить оператор & перед именем структуры. Например, для передачи адреса элементов структуры mike следует написать:
func (&mike.x ); /* Передача адреса символа х */
func (&mike.y); /* Передача адреса целого у */
func (&mike.z ); /* Передача адреса вещественного z */
func (mike.s); /* Передача адреса строки s */
func (&mike.s[2]); /* Передача адреса символа s[2] */
Обратим внимание, что оператор & стоит перед именем структуры, а не перед именем элемента.
Передача всей структуры в функцию
Когда структура используется как аргумент функции, передается вся структура с помощью стандартной передачи по значению. Это значит, что любые изменения, внесенные в содержимое структуры внутри функции, не повлияют на структуру, используемую в качестве аргумента.
Когда структура используется как параметр, самое важное – это запомнить, что тип аргумента должен соответствовать типу параметра. Лучший способ сделать это – определить структуру глобально, а затем использовать ее ярлык для объявления необходимых структурных переменных и параметров. Например:
#include <stdio.h>
struct struct_type {
int a, b;
char ch;
};
void f1(struct struct_type parm);
int main(void)
{
struct struct_type arg;
arg .a = 1000;
f1(arg);
return 0;
}
void f1(struct struct_type parm)
{
printf(“%d”, parm .a);
}