Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 156; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.170.38 (0.008 с.) |