- •СОДЕРЖАНИЕ
- •ПРЕДИСЛОВИЕ
- •ГЛАВА 1. Введение в алгоритмы
- •1.1. Этапы решения задач на ЭВМ
- •1.2. Понятие алгоритма
- •1.3. Свойства алгоритмов
- •1.4. Сложность алгоритма
- •1.7. Пример простейшего линейного процесса
- •1.7. Пример циклического процесса
- •ГЛАВА 2. Базовые средства языка Си
- •2.1. Алфавит языка Си
- •2.2. Лексемы
- •2.3. Идентификаторы и ключевые слова
- •2.4. Комментарии
- •2.5. Простейшая программа
- •2.7. Декларация объектов
- •2.8. Данные целого типа (integer)
- •2.9. Данные символьного типа (char)
- •2.10. Данные вещественного типа (float, double)
- •ГЛАВА 3. Константы в программах
- •3.2. Константы вещественного типа
- •3.4. Строковые константы
- •ГЛАВА 4. Обзор операций
- •4.1. Операции, выражения
- •4.3. Операция присваивания
- •4.4. Сокращенная запись операции присваивания
- •4.7. Операции сравнения
- •4.8. Логические операции
- •4.10. Операция «,» (запятая)
- •ГЛАВА 5. Обзор базовых инструкций языка Си
- •5.2. Стандартные математические функции
- •5.3. Функции вывода данных на дисплей
- •5.4. Функции ввода информации
- •ГЛАВА 6. Составление разветвляющихся алгоритмов
- •6.1. Краткая характеристика операторов языка Си
- •ГЛАВА 7. Составление циклических алгоритмов
- •7.1. Понятие циклического кода
- •7.2. Оператор с предусловием while
- •7.4. Оператор цикла с предусловием и коррекцией for
- •ГЛАВА 8. Операторы и функции передачи управления
- •8.1. Оператор безусловного перехода goto
- •8.2. Операторы continue, break и return
- •8.3. Функции exit и abort
- •Советы по программированию
- •ГЛАВА 9. Указатели
- •9.1. Определение указателей
- •9.2. Операция sizeof
- •9.3. Инициализация указателей
- •9.4. Операции над указателями
- •ГЛАВА 10. Массивы
- •10.1. Понятие массива
- •10.2. Одномерные массивы
- •10.4. Строки как одномерные массивы данных типа char
- •10.5. Указатели на указатели
- •10.8. Работа с динамической памятью
- •10.9. Библиотечные функции
- •10.10. Пример создания одномерного динамического массива
- •ГЛАВА 11. Функции пользователя
- •11.1. Декларация функции
- •11.2. Вызов функции
- •11.3. Передача аргументов в функцию
- •11.4. Операция typedef
- •11.5. Указатели на функции
- •ГЛАВА 12. Классы памяти и область действия объектов
- •ЗАДАНИЕ 4. Обработка массивов
- •Первый уровень сложности
- •Второй уровень сложности
- •ЗАДАНИЕ 5. Функции пользователя
- •Первый уровень сложности
- •Второй уровень сложности
- •12.3. Статические и внешние переменные
- •12.4. Область действия переменных
- •Советы по программированию
- •13.1. Структуры
- •13.5. Вложенные структуры
- •13.6. Массивы структур
- •13.7. Размещение структурных переменных в памяти
- •13.8. Объединения
- •13.9. Перечисления
- •13.10. Битовые поля
- •ГЛАВА 14. Файлы в языке Си
- •14.1. Открытие файла
- •14.2. Закрытие файла
- •14.3. Запись-чтение информации
- •14.5. Дополнительные файловые функции
- •Советы по программированию
- •ЗАДАНИЕ 7. Создание и обработка файлов
- •Первый уровень сложности
- •Второй уровень сложности
- •ГЛАВА 15. Динамические структуры данных
- •15.1. Линейные списки
- •15.2.1. Алгоритм формирования стека
- •15.2.2. Алгоритм извлечения элемента из стека
- •15.2.3. Просмотр стека
- •15.2.4. Алгоритм освобождения памяти, занятой стеком
- •15.2.5. Алгоритм проверки правильности расстановки скобок
- •15.3.1. Формирование очереди
- •15.3.2. Алгоритм удаления первого элемента из очереди
- •15.4. Двунаправленный линейный список
- •15.4.1. Формирование первого элемента
- •15.4.3. Алгоритм просмотра списка
- •15.4.5. Алгоритм удаления элемента в списке по ключу
- •15.5. Нелинейные структуры данных
- •15.5.1. Бинарные деревья
- •15.5.2. Основные алгоритмы работы с бинарным деревом
- •15.5.4. Вставка нового элемента
- •15.6. Построение обратной польской записи
- •15.6.1. Алгоритм, использующий дерево
- •15.6.2. Алгоритм, использующий стек
- •15.6.3. Пример реализации
- •15.7. Понятие хеширования
- •15.7.2. Примеры хеш-функций
- •15.7.3. Схемы хеширования
- •15.7.4. Примеры реализации схем хеширования
- •Вариант 2. Двунаправленные списки
- •ГЛАВА 16. Переход к ООП
- •16.1. Потоковый ввод-вывод
- •16.3. Проблема ввода-вывода кириллицы в среде Visual C++
- •16.4. Операции new и delete
- •16.6. Шаблоны функций
- •Первый уровень сложности
- •Второй уровень сложности
- •6.1. Основные понятия
- •6.3. Примитивы GDI
- •6.5. Получение описателя контекста устройства
- •6.6. Основные инструменты графической подсистемы
- •6.7. Закрашивание пустот
- •6.8. Рисование линий и кривых
- •6.9. Пример изображения графика функции sin
- •6.10. Рисование замкнутых фигур
- •6.11. Функция Polygon и режим закрашивания многоугольника
- •6.13. Управление областями вывода и отсечением
- •ЗАДАНИЕ 11. Создание графических изображений
- •ЛИТЕРАТУРА
Таким образом, смещение может быть как положительным, так и отрицательным, но нельзя выходить за пределы файла.
В случае успеха функция возвращает нулевое значение, а в случае ошибки (например, попытка выхода за пределы файла) – единицу.
Доступ к файлу с использованием функции позиционирования (fseek)
называют произвольным доступом.
Иногда нужно определить текущее положение в файле. Для этого используют функцию со следующей декларацией:
long ftell(FILE *f); |
|
|
|
|
Р |
|||
|
|
|
|
|
|
|
|
|
которая возвращает значение указателя на текущую позицию в файле или –1 |
||||||||
в случае ошибки. |
|
|
|
|
|
|
И |
|
|
|
|
|
|
|
|
|
|
14.5. Дополнительные файловые функции |
|
|
||||||
В заключение |
рассмотрим наиболее |
распространенные |
функции, с |
|||||
|
|
|
|
|
|
Г |
|
|
помощью которых можно организовать работу с файлами: |
|
|
||||||
|
|
|
|
|
Б |
|
|
|
int fileno (FILE *f) – определяет и возвращает значениеУдескриптора |
||||||||
(fd) файла f, т.е. число, определяющее номер файла; |
|
|
|
|||||
long filelength (int fd) |
– |
возвращает |
длину файла, |
имеющего |
||||
дескриптор fd , в байтах; |
|
|
|
|
|
|
|
|
int chsize (int fd, long pos) – выполняет изменение размера файла, |
||||||||
имеющего номер fd, |
признак конца ф |
|
уст навливается после байта с |
|||||
номером pos; |
|
|
е |
йла |
|
|
|
|
int feof (FILE *f) – |
возвраща кт н нулевое значение при правильной |
|||||||
|
|
т |
|
|
|
|
|
|
записи признака конца файла; |
|
|
|
|
|
|
||
int fgetpos (FILE *f, long *pos) – определяет значение текущей позиции |
||||||||
pos файла f. |
рабо |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример программы |
|
ты с файлом структур |
|
|
||||
л |
|
|
|
|
|
|
|
|
Создать программу, в которой реализованы создание, добавление и |
||||||||
б |
|
|
|
|
|
|
|
|
просмотр фай а, |
исодержащего информацию о фамилии и среднем балле |
студентов. Процесс добавления информации заканчивается при нажатии точкии. Б
#include <stdio.h> #include <stdlib.h> struct Sved {
char Fam[30]; double S_Bal; } zap,zapt;
char Spis[]="c:\\work\\Sp.dat"; FILE *F_zap;
FILE* Open_file(char*, char*);
void main (void)
{
123
int i, j, kodR, size = sizeof(Sved), kod_read; while(1) {
puts("Создать – 1\n Добавить– 3\nПросмотреть– 2\nВыход – 0"); scanf("%d",&kodR);
switch(kodR) {
|
|
|
|
case 1: case 3: |
|
|
|
|
|
|
|
|||
|
|
|
|
if(kodR==1) F_zap = Open_file (Spis,"w+"); |
|
|
||||||||
|
|
|
|
|
else F_zap = Open_file (Spis,"a+"); |
|
|
|||||||
|
|
|
|
while(2) { |
|
|
|
|
|
|
|
Р |
||
|
|
|
|
|
puts("\n Fam (. – end) "); |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
scanf("%s",zap.Fam); |
|
|
|
И |
|||||
|
|
|
|
|
if((zap.Fam[0])=='.') break; |
|
|
|||||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
puts("\n Ball: "); |
|
|
|
У |
|
||||
|
|
|
|
|
scanf("%lf",&zap.S_Bal); |
|
|
|||||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
} |
fwrite(&zap,size,1,F_zap); |
Г |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
Б |
|
|
|
||
|
|
|
|
fclose(F_zap); |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 2: F_zap = Open_file (Spis,"r+"); int nom=1; |
||||||||||
|
|
|
|
while(2) { |
|
к |
|
|
|
|
|
|||
|
|
|
|
|
if(!fread(&zap,size, 1, F zap)) break; |
|
|
|||||||
|
|
|
|
|
printf(" %2d: %20s %5.2lf\n", |
|
|
|
||||||
|
|
|
|
} |
|
|
nom++, zap.Fam,аzap.S_Bal); |
|
|
|||||
|
|
|
|
|
т |
|
|
|
|
|
|
|
||
|
|
|
|
fclose(F_zap); |
|
|
|
|
|
|
|
|||
} |
|
|
|
break; |
|
е |
|
|
|
|
|
|
||
|
|
|
|
о |
|
|
// exit(0); |
|
|
|
|
|||
|
|
|
|
case 0: |
return; |
|
|
|
|
|
||||
|
|
|
} |
ки |
|
|
|
// Закрывает switch() |
|
|||||
|
} |
|
|
|
|
|
// Закрывает while() |
|
||||||
|
|
л |
|
|
|
|
|
|||||||
{ |
|
|
|
|
|
|
|
|
|
|
|
|
||
// Функция о работ ошибочной ситуации при открытии файла |
|
|||||||||||||
|
|
б |
|
|
|
|
|
|
|
|
|
|
|
|
FILE* Open |
file(char *file, char *kod) |
|
|
|
|
|
|
|||||||
|
и |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FILE *f; |
|
|
|
|
|
|
|
|
|
|
|
||
Б |
|
|
|
|
|
|
|
|
|
|
|
|
|
if(!(f = fopen(file, kod))) { puts("Open File Error!"); exit(1);
}
return f;
}
Советы по программированию
При выполнении вариантов заданий придерживайтесь следующих ключевых моментов.
124
1.Объекты типов структуры и объединения применяются для логически связанных между собой данных различных типов.
2.После описания шаблона структурного типа данных ставится точка
сзапятой.
3.Элементы данных, входящие в структуры и объединения, называются полями. Поля могут быть любого базового (стандартного) типа данных, массивом, указателем, объединением или структурой.
4.Для обращения к полю используется операция принадлежности
(привязки, выбора) «.» (точка) при обращении через ID структуры, или «–>» (стрелка) при обращении через указатель. Р
5.Структуры одного типа можно присваивать друг другу с использованием стандартной функции memcpy. И
6.Ввод-вывод структур выполняется поэлементно.
7.Структуры, память под которые выделяет компиляторУ , можно инициализировать значениями их полей.
8.Файл – это именованный объект, хранящийГданные на каком-либо носителе, хотя может располагаться и на электронномБдиске в ОП.
9.Файл не имеет фиксированной длины, т.е. может увеличиваться или уменьшаться в процессе обработки.
10.Перед работой файл необходимоаоткрыть (функция fopen), а после работы закрыть (функция fclose). кие
|
|
|
о |
|
Первый уровень сл жнос и |
||||
Написать программу по обработке массива структур, содержащего |
||||
|
|
ци |
студентах: |
|
следующую информац ю |
||||
|
л |
|
|
|
– фамилия |
н алы; |
|||
– год рожден я; |
|
|
||
б |
|
|
|
|
– номер группы; |
|
|
||
ни |
|
|
|
|
– оценки за семестр: физика, математика, информатика, химия; |
||||
– средн й |
алл. |
|
|
|
Б |
|
|
|
исходных данных, средний балл рассчитать по |
Орга зовать ввод |
введенным оценкам.
1. Распечатать анкетные данные студентов, сдавших сессию на 8, 9 и 10.
2. Распечатать анкетные данные студентов-отличников, фамилии которых начинаются с интересующей вас буквы.
3. Распечатать анкетные данные студентов-отличников из интересующей вас группы.
4. Распечатать анкетные данные студентов, фамилии которых начинаются с буквы А и сдавших математику на 9 и 10.
125
5. Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 9 по физике и оценку 10 по высшей математике.
6. Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв В, Г и Д.
7. Распечатать анкетные данные студентов, не имеющих оценок 4 и 5 по информатике и математике.
8. Вычислить общий средний балл всех студентов и распечатать список
студентов со средним баллом выше общего среднего балла. |
Р |
|
|
9. Вычислить общий средний балл всех студентов и распечатать список |
студентов интересующей вас группы, имеющих средний балл выше общего |
|
среднего балла. |
И |
|
10. |
Распечатать анкетные данные студентов интересующей вас группы, |
||
имеющих оценки 3 и 4. |
|
|
|
11. |
Распечатать анкетные данные студентов интересующей вас группы, |
||
имеющих оценку 9 по информатике. |
Б |
У |
|
12. |
Распечатать анкетные данные студентовГ, имеющих оценку 8 по |
||
физике и оценку 9 по высшей математике. |
|
|
|
13. |
к |
студентов интересующей вас |
|
Вычислить общий средний б лл |
группы и распечатать список студентов этой группы, имеющих средний балл |
|||
вас группы. |
нные |
|
|
выше общего среднего. |
т |
а |
|
|
|
студентов-отличников интересующей |
|
14. Распечатать анке ные да |
|
15. Распечатать анке ные данные студентов интересующей вас группы,
имеющих средний балл выше введенного с клавиатуры. |
|
Второй уровеньожностисл |
|
Написать программуи |
предыдущего варианта, создав из предложенных |
анкетныхбданныхлдинамический массив введенной с клавиатуры размерно-
сти. Полученные данные упорядочить: для символьных данных – по
алфав ту (выбрав нужное поле), для числовых данных – по возрастанию |
|
и |
|
(убыванию). |
|
Б |
ЗАДАНИЕ 7. Создание и обработка файлов |
|
Первый уровень сложности
Написать программу по обработке файла, состоящего из структур, содержащих информацию задания 6. Средний балл рассчитать программно по введенным оценкам. Массив структур не использовать.
126