Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Краткие теоретические сведенияСодержание книги
Поиск на нашем сайте Структура объединяет логически связанные данные разных типов. Структурный тип данных определяется описанием шаблона: struct ID_структуры { описание полей; }; между символами «}» и «;» иногда помещают список декларируемых структурных переменных, при этом «ID_структуры» можно опустить. Описание полей производится обычным способом. Типом элемента поля не может быть только тип FILE, других ограничений нет. Пример определения структурного типа: struct person { char Fio[72]; int Nom_Gr; }; Интерпретация объекта типа struct person:
длина в байтах Структурный тип "struct ID_структуры" можно использовать для декларации структурных переменных, массивов, функций и т.д. struct person Teacher; // структурная переменная struct person Student[100]; // массив структур struct person *Sved; // указатель на структуру Предыдущий пример можно записать кратко: struct person { char Fio[72]; int Nom_Gr; } Teacher, Student[100], *Sved; Структурный тип данных удобно применять для группового управления манипулированием логически связанных объектов. Параметрами таких операций являются адрес и размер структуры. Примеры групповых операций: - захват и освобождение памяти для объекта, представленного совокупностью необязательно однотипных данных; - запись и чтение данных, хранящихся на внешних носителях как физические и/или логические записи с известной структурой. Обращение к элементам структур производится посредством: а) операции принадлежности (.) в виде: ID_структуры. ID_элемента или (*указатель_структуры). ID_элемента б) операции косвенной адресации (->) в виде: указатель_структуры -> ID_элемента Примеры обращения к полям описанной выше структуры: к полю Fio: к полю Nom_Gr: Teacher.Fio Teacher.Nom_GR Student[15].Fio Student[15]. Nom_GR Sved->Fio Sved-> Nom_GR
Файл – это набор данных, размещенный на внешнем носителе и рассматриваемый в процессе обработки и пересылке как единое целое. Прежде чем работать с файлом, его нужно открыть для доступа, т.е. создать и инициализировать область данных, которая содержит информацию о файле: имя, путь и т.д. В языке Си это выполняет функция fopen. Она связывает физический файл на носителе с логическим именем в программе. Логическое имя – это указатель на файл, т.е. на область памяти, где хранится информация о файле. Указатели на файлы необходимо объявлять. Формат объявления такого указателя следующий: FILE *указатель на файл; Формат объявления функции fopen (“строка_1”, “строка_2”); в строке_1 (заключенной в кавычки) указывается место, в которое вы собираетесь поместить файл, например “a:mas_dat.dat” – файл с именем mas_dat.dat будет находиться на дискете (а:), “d:\\work\\sved.txt” – файл с именем sved.txt будет находиться на d:, в каталоге work. В строке_2 указываются коды режимов доступа к открываемым файлам: w - файл открывается только для записи; если файла с заданным именем нет, то он будет создан, если же такой файл существует, то перед открытием прежняя информация уничтожается; r - файл открывается только для чтения; если такого файла нет, то возникает ошибка; a - файл открывается для добавления в конец новой информации; r+ - файл открывается для редактирования данных; возможны и запись, и чтение информации; w+ - то же, что и для r+; a+ - то же, что и для a, только запись можно выполнять в любое место файла; доступно и чтение файла; t - файл открывается в текстовом режиме; указывается поле r, w, a, r+, w+, a+; b - файл открывается в двоичном режиме; указывается поле r, w, a, r+, w+, a+. Текстовый режим отличается от двоичного тем, что при открытии файла как текстового пара символов «перевод строки», «возврат каретки» заменяется на один символ: «перевод строки» для всех функций записи данных в файл, а для всех функций вывода символ «перевод строки» теперь заменяется на два символа: «перевод строки», «возврат каретки». По умолчанию файл открывается в текстовом режиме. Пример: FILE *f; f= fopen ("d:\\work\\Dat_sp.cpp", "w"); или FILE *f= fopen ("d:\\work\\Dat_sp.cpp", "w"); - открывается для записи текстовый файл Dat_sp.cpp с указателем f, который будет находиться на диске d, в каталоге work. Если при открытии файла произошла ошибка, функция fopen возвращает значение NULL. Приведем пример стандартной последовательности операторов, необходимых для корректной работы с файлом: #include <stdio.h> ... FILE *f_my; If(!(f_my = fopen(“rez.txt”, “r+t”))) { puts(“\n Ошибка при открытии файла!”); getch(); return; } ... // Работа с файлом fclose(f_my); ...
После работы доступ к файлу необходимо закрыть с помощью функции fclose (указатель_на_файл). Например, из предыдущего примера файл закрывается так: fclose (f); Для закрытия нескольких файлов введена функция, объявленная следующим образом: void fcloseall (void); Для работы с текстовыми файлами удобнее всего пользоваться функциями fprintf, fscanf. Формат параметров и выполняемые функции аналогичны известным операторам форматного ввода-вывода, только добавлен параметр – указатель на файл, к которому применяется данная функция. Рассмотрим простой пример: #include<stdio.h> void main() { int a=2,b=3; FILE *f1; if(!(f1=fopen(“d:\\work\\f_rez.txt”,”w+t”))) { puts(“\n Файл не создан!”); getch(); return; } fprintf(f1,” Файл результатов \n”); fprintf(f1,” %d плюс %d = %d\n”,a,b,a+b); fclose(f1); } Просмотрев содержимое файла, можно убедиться, что данные в нем располагаются так же, как на экране при использовании функции printf. Функция int fgets (char *S,int m,FILE *fp) – выполняет чтение строки S из файла fp до тех пор, пока не встретит символ '\n' или пока не будет считано m байт. Функция int fputs (char *S, FILE *fp) - записывает строку S в файл fp до тех пор, пока не встретится '\0', который в файл не переносится и на символ '\n' не заменяется. Функции работы с текстовыми файлами удобны при создании результирующих файлов для отчетов по лабораторным и курсовым работам. Для создания баз данных удобнее пользоваться функциями работы с бинарными файлами. В основном прототипы этих функций описаны в библиотеках stdio.h и io.h. Рассмотрим некоторые из них: 1) int fread (void * ptv, int size, int n, FILE *fp) - считывает n блоков по size байт каждый из файла fp в область памяти, на которую указывает ptv (необходимо заранее отвести память под считываемый блок); 2) int fwrite (void * ptv, int size, int n, FILE *fp) - записывает n блоков по size байт каждый из области памяти, на которую указывает ptv в файл fp; 3) int fileno (указатель_файла) – возвращает дескриптор файла (число, определяющее номер файла); 4) long filelength (int дескриптор_файла) – возвращает длину файла в байтах; 5) int chsize (int дескриптор_файла, long позиция) – выполняет изменение размера файла, признак конца файла устанавливается после байта с номером «позиция»; 6) int fseek (указатель_файла, long количество_байт, int код) – выполняет смещение текущей позиции в файле на количество_байт в направлении признака код: 0 - от начала файла; 1 - от текущей позиции указателя; 2 - от конца файла; 7) long ftell (указатель_файла) - возвращает значение указателя на текущую позицию файла (-1 – ошибка); 8) int feof (указатель_файла) – возвращает ненулевое значение при правильной записи признака конца файла; 9) int fgetpos (указатель_файла,long*текущая_позиция) – определяет значение текущей позиции файла; возвращает 0 при успешном завершении. Пример программы работы с файлом структур Создать файл, содержащий сведения о студентах: фамилия, три оценки, средний бал. Организовать возможность просмотра содержимого файла и добавления новых данных в конец файла. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct Sved { char Fam[20]; int mark[3]; float S_Bal; } zap; char Spis[]="d:\\work\\Sp.dat"; FILE *F_zap; void main () { int i,kodR,size=sizeof(Sved); float s; while(1) { puts(" Создание - 1"); puts(" Просмотр - 2"); puts(" Добавление - 3"); puts(" Выход - 0"); scanf(“%d”, &kodR); switch(kodR) { case 1: case 3: if(kodR==1) F_zap=fopen(Spis,"w+b"); else F_zap=fopen(Spis,"a+b"); while(2) { puts(" Фамилия (Завершение ввода - 0)"); scanf(“%s”, zap.Fam); if((zap.Fam[0])=='0') break; puts(" Marks (3) "); for(s=0,i=0;i<3;i++) { scanf(“%d”, &zap.mark[i]); s+=zap.mark[i]; } zap.S_Bal=s/3.; fwrite(&zap, size, 1, F_zap); } fclose(F_zap); break; case 2: F_zap=fopen(Spis,"r+b"); while(2) { if(!fread(&zap, size, 1, F_zap)) break; printf(" %20s %2d %2d %2d %5.2f\n", zap.Fam,zap.mark[0],zap.mark[1],zap.mark[2],zap.S_Bal); } fclose(F_zap); break; case 0: return; } // Конец Switch } // Конец While(1) } // Конец программы Варианты заданий Написать программу обработки файла типа запись, содержащую следующие пункты меню: Создание, Просмотр, Коррекция – добавление новых данных или исправление старых.
Список товаров, имеющихся на складе, включает: наименование товара; количество единиц товара; цену единицы товара; дату поступления товара на склад. Вывести в алфавитном порядке список товаров, хранящихся более месяца, стоимость которых превышает 1000 рублей. Для получения места в общежитии формируется список студентов, который включает: Ф.И.О. студента; номер группы (буква и четыре цифры); средний балл; доход на одного члена семьи. Общежитие в первую очередь предоставляется тем студентам, чьи доходы на члена семьи меньше двух минимальных зарплат, затем остальным в порядке уменьшения среднего балла. Вывести список очередности предоставления места в общежитии. В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны: номер рейса; тип автобуса; пункт назначения; время отправления; время прибытия на конечный пункт. Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени. На междугородной АТС информация о разговорах содержит: дату разговора; код и название города; время разговора; тариф; номер телефона в этом городе; номер телефона абонента. Вывести по интересующему вас городу общее время разговора с ним и сумму. Информация о сотрудниках фирмы включает: Ф.И.О. сотрудников; табельный номер; количество проработанных часов за месяц; почасовой тариф. Рабочее время свыше 144 ч считается сверхурочным и оплачивается в двойном размере. Вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 12% от суммы заработной платы. Информация об участниках соревнований содержит: Ф.И.О. игрока; игровой номер; возраст; рост; вес. Вывести информацию о самой молодом, рослом и легком участнике соревнований. Для книг, хранящихся в библиотеке, задаются: регистрационный номер книги; автор; название; год издания; издательство; количество страниц. Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года. Различные цеха завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают: наименование; количество; номер цеха. Для заданного цеха необходимо вывести количество выпущенных изделий по каждому наименованию в порядке убывания количества. Информация о сотрудниках предприятия содержит: Ф.И.О.; номер отдела; должность; дату начала работы. Вывести список сотрудников по отделам в порядке убывания стажа работы. Создать файл, содержащий сведения о месячной заработной плате сотрудников отдела. Каждая запись содержит поля: фамилия сотрудника, наименование отдела, размер заработной платы за месяц. Вычислить общую сумму выплат за месяц по отделу А, а также среднемесячный заработок сотрудникам этого отдела. Напечатать для бухгалтерии ведомость для сотрудников этого отдела, у которых зарплата ниже введенной с клавиатуры. Создать файл, содержащий сведения о количестве изделий категории А, В, С, собранных рабочими за месяц. Структура записи имеет поля: фамилия сборщика, наименование цеха, количество изделий по категории, собранных рабочими за месяц. Считая данными (вводятся с клавиатуры) значения расценок Sa, Sв, Sc за выполненную работу по сборке единицы изделия категорий А, В, С, выдать на печать следующую информацию: - общее количество изделий категории А, В, С, собранных рабочими цеха X; - ведомость заработной платы рабочих цеха X; - средний размер заработной платы работников этого цеха. Создать файл, содержащий сведения о телефонах абонентов. Каждая запись имеет поля: фамилия абонентов, год установки телефона, номер телефона. На печать вывести информацию: по вводимой с клавиатуры фамилии абонента выдается номер телефона; определяется количество установленных телефонов с XXXX года (год вводится с клавиатуры). Создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например, от 2 до 5 лет. Вывести на печать: название игрушек, которые подходят детям от 1 до 3 лет; стоимость самой дорогой игрушки и ее наименование; название игрушки, которая по стоимости не превышает «х» р. Значение «х» вводится с клавиатуры. Создать файл, содержащий сведения о сдаче студентами сессии. Структура записи: номер группы, фамилия студента, оценки по пяти экзаменам и пяти зачетам (зачет – незачет). На печать вывести: фамилии неуспевающих студентов с указанием номера группы и количества задолженностей; средний балл, полученный каждым студентом группы Х (вводится с клавиатуры), и всей группой в целом. Создать файл, содержащий сведения об ассортименте обуви в магазине. Структура записи: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д для женской обуви, М -для мужской, П - для детской. На печать вывести информацию: - о наличии и стоимости обуви артикула Х (вводится с клавиатуры); ассортиментный список женской обуви с указанием наименования и имеющего в наличии числа пар каждой модели.
Контрольные вопросы 1. Как описываются структуры в языке Си? 2. Что такое структурная переменная? 3. Как обратиться к полю структурной переменной? 4. Укажите правила открытия, закрытия файла в языке Си. 5. Какие режимы доступа к файлам вы знаете?
Список рекомендуемой литературы
1. Березин Б.И., Березин С.Б. Начальный курс С и С++. – М.: Диалог-МРТИ,1999. - 288 с. 2. Больски М.Н. Язык программирования СИ. Справочник. - М.: Радио и связь, 1988. 3. Демидович Е.М. Основы алгоритмизации и программирования. Язык СИ. - Мн.: Бестпринт, 2001. – 440 c. 4. Касаткин А.И., Вольвачев А.Н. Профессиональное программирование на языке Си: Oт Turbo–C к Borland C++: Справочное пособие – Мн.: Вышэйшая школа,1992. - 240 с. 5. Касаткин А.Н. Профессиональное программирование на языке СИ. Управление ресурсами. Справочное пособие. Мн.: Высш. школа.1992 6. Керниган Б., Ритчи Д. Язык программирования Си. - М.: Финансы и статистика,1992. - 271 с. 7. Климова Л.И. С++. Практическое программирование. - М.: Кудиц-Образ, 2001. – 587 c. 8. Котлинская Г.П., Галиновский О.И. Программирование на языке СИ. - Мн.: Выш.шк., 1991. – 155 c. 9. Подбельский В.В., Фомин С.С. Программирование на языке Си. М.: Финансы и статистика. 2001. 10. Романовская Л.М., Русс Т.В., Свитковский С.Г. Программирование в среде СИ для ПЭВМ ЕС. - М.: Финансы и статистика, 1992. 11. Страуструп Б. Язык программирования С++. 2-е изд.: В 2 т. Киев: ДиаСофт,1993. 12. Тимофеев В.В. Программирование в среде С++ Builder 5. - М.: БИНОМ, 2000. 13. Шилд Г. Программирование на Borland С++. - Мн.: ПОПУРРИ, 1999. – 800 c. 14. Юлин В.А., Булатова И.Р. Приглашение к СИ. - Мн.: Высш.шк., 1990. 15. Программирование. Основы программирования на алгоритмическом языке С. Лабораторный практикум под общей редакцией Бусько В.Л. Мн. БГУИР, 2003 Приложение 1
|
||||||
|
Последнее изменение этой страницы: 2020-11-28; просмотров: 205; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.008 с.) |