ТОП 10:

Struct ELEM st; // структура



struct ELEM sm[10]; // массив структур

struct ELEM *sp; // указатель на структуру

struct ELEM *spm[10]; // массив указателей на структуры

Для обращения к элементу структуры исполняется операция «.», например:

st.num = 2;

sm[3].sum = 3.3;

scanf («%s», &sp.name);

Для обращения к элементу структуры, адресуемой указателем, используется операция « -> », например:

sp->num = 2;

spm[3]->sum = 3.3;

spm->name = ’R’;

3. Методические указания.

При написании программы следует использовать статические массивы структур или указателей на структуры. Размерности массивов – 3-4. Для динамического выделения памяти используйте функцию malloc(). Для определения размера структуры в байтах удобно использовать операцию sizeof(), возвращающую целую константу:

struct ELEM *sp;

sp = malloc(sizeof(structELEM));

При выполнении п. 4.2. потребуется выполнять операцию перестановки элементов массива. Для этого необходимо описать дополнительный указатель на структуру. Можно также использовать вспомогательный массив указателей.

Ввод данных выполнить с помощью функций scanf().

4. Порядок выполнения работы

4.1. Написать программу, работающую с базой данных в виде массива структур и выполняющую последовательный ввод данных в массив и последующую распечатку его содержимого. Состав структуры приведен в табл. 5.1. Типы данных выбрать самостоятельно.

4.2. Переписать программу п.4.1, используя массив указателей на структуры и динамическое выделение памяти. Выполнить сортировку массива. Способ сортировки массива приведен в табл. 5.1.

 

Таблица 5.1

Вари ант Структура данных Задание п. 4.2.
  Фамилия Год рождения Номер отдела Оклад Расположить записи в массиве в порядке возрастания (по году рождения)
  Название детали Год выпуска Стоимость Количество Расположить записи в массиве в порядке возрастания стоимости
  Название книги Год издания Количество страниц Стоимость Расположить записи в массиве в алфавитном порядке (по названию)
  Фамилия Дата рождения Телефон Сумма долга Все записи с суммой долга, не равной 0, разместить в начале массива
  Название покупки Дата приобретения Стоимость Количество Сгруппировать все записи по месяцам приобретения
Вари ант Структура данных Задание п. 4.2.
  Название команды Игры Очки Сумма призового фонда Расположить записи в порядке возрастания по сумме призового фонда
Фамилия Группа Номер в списке Стипендия Расположить записи в порядке возрастания номера в списке
Название маршрута Протяженность Количество остановок Стоимость путевки Расположить записи в порядке убывания стоимости
Фамилия спортсмена Вид спорта Количество медалей Призовой фонд Расположить в алфавитном порядке записи с ненулевым количеством медалей
Название детали Количество Вес Адрес поставщика Расположить записи в порядке убывания количества деталей, с весом больше заданного.
Фамилия Группа Место прохождения практики Оценка Расположить записи в массиве в порядке убывания оценки
Гос. номер Марка/модель автомобиля Фамилия владельца Дата угона автомобиля Расположить записи в массиве в порядке возрастания даты угона
Наименование товара Наименование заказчика Количество заказанного товара Фамилия менеджера Расположить записи в массиве в алфавитном порядке по наименованию заказчика
Номер рейса Дата вылета Фамилия пассажира Номер кассы   Расположить записи в массиве в порядке возрастания номера кассы
Вари ант Структура данных Задание п. 4.2.
Район города Количество комнат в квартире Площадь квартиры Цена квартиры Расположить записи в массиве в порядке возрастания количества комнат
Фамилия студента Группа Наименование дисциплины Оценка Расположить записи в массиве в порядке убывания оценки
Фамилия преподавателя Наименование дисциплины Номер курса Аудитория Расположить записи в массиве в алфавитном порядке по фамилии преподавателя
Учетная запись пользователя Буква диска Дисковая квота пользователя Объем занятого дискового пространства Расположить записи в массиве в алфавитном порядке по учетной записи пользователя
Название книги Издательство Цена книги Количество книг Расположить записи в массиве в алфавитном порядке по названию издательства
Наименование микросхемы Тип корпуса Наименование изготовителя Цена Расположить записи в массиве в порядке возрастания цены

 

5. Содержание отчета

5.1. Задание.

5.2. Листинги программ по пп. 4.1 и 4.2.

5.3. Тестовый пример.

 

6. Контрольные вопросы

6.1. Правила описания структур.

6.2. Операции, используемые для выделения элементов структур.

6.3. Выделение элементов структур, адресуемых указателем.

6.4. Назначение функции malloc().

6.5. Отличие calloc() от malloc().

6.6. Правила инициализации структур при описании.

6.7. Особенности выделения памяти под структуры.

6.8. Назначение функций realloc() и free().

6.9. Как передать структуру в функцию?

 

Лабораторная работа № 6.

 

ИНТЕРФЕЙС С ОПЕРАЦИОННОЙ СИСТЕМОЙ.

ФАЙЛОВЫЕ ОПЕРАЦИИ

 

1. Цель работы.

Ознакомиться со стандартными функциями языка СИ, используемыми для организации доступа к файлам.

2. Краткие теоретические сведения.

Для каждого из одновременно открытых файлов в программе на языке СИ должны быть описаны указатели на структуру FILE, содержащую информацию о соответствующем файле. Эта структура заполняется операционной системой при открытии файла и используется затем при вызо­ве функций, выполняющих операции чтения - записи.

Типовая последовательность действий при файловых опера­циях может быть следующей:

FILE *fp;

. . .

fp=fopen(……); // открыли файл

. . .

fprintf(fp,……); // запись в файл

fputs(fp,……); // аналогично

. . .

Fclose(fp); // закрыли файл

После закрытия файла указатель fp может быть использован для открытия другого файла.

Примеры использования стандартных функций, оперирующих с файлами, приведены ниже.

FILE *fp; int x; char buf[30], b;

fp=fopen(«ABC.TXT», «rt»); //открыли файл для чтения

// fp=NULL – ошибка

fscanf(fp, «%d», &x); //считали значение переменной х

n=fgets(buf, 30, fp); // считали строку из файла

// n=0 – конец файла

b=getc(fp); // считали символ

//b=EOF – конец файла

fprintf(fp, «x=%d», x); // записали значение переменной

Fputs(buf, fp); // записали строку

Putc(b, fp); // записали символ

Fclose(fp); // закрыли файл

При написании программ на языке СИ часто используют передачу параметров в программу непосредственно при ее запуске, например:

Name input.txt output.txt

где name - имя исполняемого файла задачи (name.exe). При этом функция main() должна быть оформлена в виде:

main(int argc,char* argv[])

{

При запуске программы с командной строкой параметр argc получает значение, равное количеству параметров в строке (включая имя задачи), а элементы масси­ва argv – адреса строк - параметров. Например, для вышеприведенного примера

argс = 3;

argv[0] = "name";

argv[1] = "input.txt";

argv[2] = "output.txt";

3. Методические указания

В лабораторной работе требуется написать две программы для обработки текстовых файлов. Одна из них выполняет построчную, другая посимвольную обработку. Ввод параметров должен быть организован в командной строке запуска программы.

Исходный файл должен быть создан с помощью любого текстового редактора. При обработке текста рекомендуется использовать функции из стандартной библиотеки СИ для работы со строками, преобразования и анализа символов.

4. Порядок выполнения работы

4.1. Написать программу, обрабатывающую текстовый файл и записывающую обработанные данные в файл с таким же именем, но с другим типом (табл. 6.1)

4.2. Написать программу, выполняющую посимвольную обработку текстового файла (табл. 6.2.).

Ввод параметров организовать в командной строке запуска программы.

 

 

Таблица 6.1

Вари ант Задание Параметры командной строки
Исключить строки с длиной, больше заданной 1. Имя входного файла 2. Заданная длина строки
Оставить только строки, начинаю­щиеся с латинских букв 1. Имя входного файла 2. Количество обрабатываемых строк
Исключить строки, начинающиеся с заданного слова 1. Имя входного файла 2. Заданное слово
Оставить строки, начинающиеся с заданной буквы 1. Имя входного файла 2. Заданная буква
Исключить строки с количеством пробелов, больше заданного числа 1. Имя входного файла 2. Заданное количество пробелов
Оставить строки, не содержащие цифры 1. Имя входного файла 2. Количество обрабатываемых строк
Исключить строки, начинающиеся заданной парой символов 1. Имя входного файла 2. Заданная пара символов
Оставить строки, заканчивающиеся цифрами 1. Имя входного файла 2. Максимальная длина строки
Исключить строки, содержащие хотя бы один заданный символ 1. Имя входного файла 2. Заданный символ
Оставить строки, содержащие заданное количество цифр 1. Имя входного файла 2. Заданное количество цифр
Исключить строки, содержащее заданное слово 1. Имя входного файла 2. Заданное слово
Оставить строки, где все слова имеют длину больше указанной 1. Имя входного файла 2. Длина слова
Исключить строки, начинающиеся и заканчивающиеся заданным символом 1. Имя входного файла 2. Заданный символ
Оставить строки, заканчивающиеся заданным словом 1. Имя входного файла 2. Заданное слово
Исключить строки, не содержащие ни одного заданного символа 1. Имя входного файла 2. Заданный символ
Оставить строки, где все слова имеют длину меньше указанной 1. Имя входного файла 2. Длина слова
Исключить строки, в которых есть слова короче указанной длины 1. Имя входного файла 2. Длина слова
Оставить строки, в которых указанное слово встречается более одного раза 1. Имя входного файла 2. Заданное слово
Исключить строки, в которых есть хотя бы один не алфавитно-цифровой символ 1. Имя входного файла 2. Количество обрабатываемых строк
Оставить строки с количеством слов, меньшим указанного 1. Имя входного файла 2. Количество слов

 

Таблица 6.2

Вариант Задание Параметры командной строки
Удалить из текста заданный символ 1. Имя входного файла 2. Заданный символ
В конце каждой строки вставить заданный символ 1. Имя входного файла 2. Заданный символ
Заменить цифры на пробелы 1. Имя входного файла 2. Количество замен
Заменить знаки на заданный символ 1. Имя входного файла 2. Заданный символ
Заменить каждый пробел на два 1. Имя входного файла 2. Количество замен
После каждой точки вставить символ ‘\n’ 1. Имя входного файла 2. Количество замен
Удалить из текста все пробелы 1. Имя входного файла 2. Количество замен
Заменить заданные символы на пробелы 1.Имя входного файла 2. Заданный символ
После каждого пробела вставить точку 1.Имя входного файла 2. Количество вставок
Заменить все пробелы первым символом текста 1. Имя входного файла 2. Максимальное количество замен
Во всех парах одинаковых символов второй символ заменить на пробел 1. Имя входного файла 2. Количество замен
Заменить на пробелы все символы, совпадающие с первым символом в строке 1. Имя входного файла 2. Количество замен
Заменить заданную пару букв на символы #@ 1. Имя входного файла 2. Заданная пара букв
Заменить все цифры заданным символом 1. Имя входного файла 2. Заданный символ
Заменить на пробел все символы, совпадающие с последним символом в строке 1. Имя входного файла 2. Количество замен
Заменить все символы с кодами меньше 48 на пробелы 1. Имя входного файла 2. Количество замен
Заменить все символы с кодами больше 48 на пробелы 1. Имя входного файла 2. Количество замен
Заменить каждый третий символ на пробел 1. Имя входного файла 2. Количество замен
Заменить все пробелы на заданный символ 1. Имя входного файла 2. Заданный символ
Заменить все пары одинаковых символов на пробелы 1. Имя входного файла 2. Количество замен

 

5. Содержание отчета

5.1. Задание.

5.2. Листинги программ по пп.4.1 и 4.2.

5.3. Тестовый пример.

 

6. Контрольные вопросы

 

6.1. Назначение указателя FILE*.

6.2. Стандартные функции открытия/закрытия файлов.

6.3. Стандартные функции для построчной обработки файлов.

6.4. Стандартные функции для посимвольной обработки файлов.

6.5. Стандартные функции работы со строками.

6.6. Буферизованный и небуферизованный ввод/вывод.

6.7. Передача параметров в программу при ее запуске.

6.8. Проверка корректности выполнения операций файлового ввода-вывода.

6.9. Режимы открытия файлов.

6.10. Перенаправление стандартного ввода/вывода.


ЛИТЕРАТУРА

1. В. Керниган, Я. Ритчи. Язык программирования Си. М.: Мир, 1988.

2. И. Уэйт, С. Прата, Д. Мартин. Язык Си. Руководство для начинающих. М.: Мир, 1988.

3. Н. Джехани. Программирование на языке Си. М.: Радио и связь, 1968.

4. Р. Берри, Б. Ликинз. Язык Си. Введение для программистов. М.: Финансы и статистика, 1988.

5. М. Дансмур, Г. Дейвис. ОС UNIX и программирование на языке Си. М.: Радио и связь, 1989.

6. М. Болски. Язык программирования Си: Справочник. М.: Радио и связь, 1988.

7. Л.М. Романовская и др. Программирование в среде СИ для ПЭВМ ЕС. М.: Финансы и статистика, 1992.

8. В. В. Подбельский, С. С. Фомин. Программирование на языке Си. М: Финансы и статистика, 2000.

 

ПРОГРАММИРОВАНИЕ, часть 1

Методическое руководство

 

 

Редактор

Технический редактор

Лицензия № _________ от __.__.__. Подписано в печать ___.___.___.
Формат 60 х 84 1/16. Бумага оберточная. Тираж 200 экз.
Уч.-изд.л. 1. Печ.л. 1,5. Изд. № ______. Заказ № ______ Цена договорная

Отпечатано в типографии

Новосибирского государственного технического университета







Последнее изменение этой страницы: 2016-04-08; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.233.221.149 (0.014 с.)