Студопедия

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника



Листинг 1.2




Читайте также:
  1. Листинг 1.1
  2. Листинг 1.6
  3. Листинг 14.2. Пример реализации класса
  4. Листинг 5.1. Приложение Mini-Registry-browser, главный модуль
  5. Формат файла листинга

 

#include <stdio.h>

#include <string.h> //#include <windows.h> //0

int main()

const int l name = 30; //1

 

struct Man

{

int birth year;

char name[l name + 1];

float pay;

};

const int l dbase = 100;

Man dbase[l dbase];

char name[l name + 1];

 

FILE *fin;

 

if ((fin = fopen("dbase.txt", "r"))== NULL)

{

puts("Ошибка открытия файла\n");

return 1;

}

 

int i = 0;

while(!feof(fin))

{

fgets(dbase[i].name.l name.fin);

fscanf(fin. "%l%f\n" .&dbase[i].birth year. &dbase[i].pay); //2

i++;

if (i > 1 dbase)

{

puts("Слишком длинный файл\n");

return 1;

}

}

 

int n record = i, n man = 0;

float mean pay = 0;

 

while(true)

{

puts("Введите фамилию или нажмите Enter для окончания:");

gets(name);

if(strlen(name) == 0)break; //3

//OemToChar(name, name); //4

 

bool not found = true;

for (i = 0; i < n record; i++)

{

 

if (strstr(dbase[i]. name. name))

if (dbase[i]. name[strlen(name)] == '')

{

strcpy(name. dbase[i]. name);

// CharToOem(name.name); //5

printf("%30s%5i%10.2f\n".name. dbase[i].birth year.

dbase[i].pay); //6

n man++; mean_pay += dbase[i].pay;

not found = false;

}

}

if (not found) puts("Такого сотрудника нет\n");

}

if(n man > 0) printf("Средний оклад: %10.2f\n".mean pay/n man};

 

return 0;

}

 

Из всех именованных констант осталась одна, задающая длину поля фамилии (l name, оператор 1). Все остальные константы определять нет смысла, потому что ввод осуществляется не через буферную переменную, а непосредственно в поля структуры с помощью функции чтения строки fgets и форматного ввода fscanf (оператор 2). Эта функция сама выполняет действия по преобразованию подстро­ки в число, которые мы явным образом задавали в предыдущей программе.

Мы упростили выход из цикла ввода запросов, теперь для завершения цикла до­статочно нажать клавишу Enter (оператор 3). Для вывода сведений о сотруднике мы использовали функцию pri ntf (оператор 6).

 

Пример 1.2. Сортировка массива структур



 

Написать программу, которая упорядочивает описанный в предыдущей задаче файл по году рождения сотрудников.

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

Для сортировки применим метод выбора. При всей своей простоте он достаточно эффективен. Основ­ная идея этого метода: из массива выбирается наименьший элемент и меняется местами с первым элементом, затем рассматри­ваются элементы, начиная со второго, наименьший из них меняется местами со вторым элементом, и так далее. Для упорядочивания требуется количество про­смотров, на единицу меньшее, чем количество элементов в массиве (при послед­нем проходе цикла при необходимости меняются местами предпоследний и по­следний элементы массива).

 


Дата добавления: 2015-04-15; просмотров: 3; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2020 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты