Напишите структуру - C (СИ)
Формулировка задачи:
Напишите программу «Речные рыбы». Информация о рыбах должна содержаться в записях со следующими полями: название, средний размер, средний вес, средняя продолжительность жизни. Разработать различные виды запросов информации из базы данных программы, например выдать список рыб в алфавитном порядке, заданных размеров и т. д.
Решение задачи: «Напишите структуру»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <string.h> #define MAX_NAME 24 #define SIZE 10 struct animal{ char name[MAX_NAME];// Название double size; // Средний размер (м.) double weight; // Средний вес (кг.) int year; // Продолжительность жизни (лет) }fish[SIZE],fishAlf[SIZE];//fishAlf - рыбы по алфавиту int inScan(void) { FILE *base = fopen("base.txt","r");// Указатель на файл; r - чтение из файла if(!base) return printf("Файл не найден!"); else{ size_t i; for( i = 0; i < SIZE; i++){// Заполнение структуры из файла fscanf(base, "%s", &fish[i].name); fscanf(base, "%lf", &fish[i].size); fscanf(base, "%lf", &fish[i].weight); fscanf(base, "%d", &fish[i].year); fishAlf[i] = fish[i]; } fclose(base); for( i = 0; i < SIZE; i++){// Размещение стркутры в алфавитном порядке size_t j; for( j = i+1; j < SIZE; j++){ if(strcmp(fishAlf[i].name, fishAlf[j].name)>0){ struct animal tmp = fishAlf[i]; fishAlf[i] = fishAlf[j]; fishAlf[j] = tmp; } } } } } int outPrint(int alf, double size, double weight, int year) { struct animal *p_fish; if(alf) p_fish = fishAlf;// Если выбрали в алфавитном порядке else p_fish = fish; // Если выбрали не в алфавитном порядке size_t i; for( i = 0; i < SIZE; i++){ if(p_fish[i].size >= size){ if(p_fish[i].weight >= weight){ if(p_fish[i].year >= year){ printf("\nНазвание: %s\n", p_fish[i].name); printf("Размер: %.2lf м.\n", p_fish[i].size); printf("Вес: %.3lf кг.\n", p_fish[i].weight); printf("Продолжительность жизни: %d лет\n", p_fish[i].year); } } } } } int findAnimal(void) { printf("Параметры для вывода списка рыб:"); printf("Вывод по алфавиту (0 - нет, 1 - да): "); int alf = EOF; while(alf < 0 || alf > 1){ scanf("%d", &alf); if(alf < 0 || alf > 1) printf("Неверно! Вывод по алфавиту ( 0 - нет, 1 - да): "); } printf("Размеры рыбы от N м.: "); double size; scanf("%lf", &size); printf("Вес рыбы от N кг.: "); double weight; scanf("%lf", &weight); printf("Продолжительность жизни от N лет: "); int year; scanf("%d", &year); return outPrint(alf, size, weight, year); } int main(void) { setlocale(LC_ALL, "Rus"); printf("~ ПРОГРАММА 'РЕЧНЫЕ РЫБЫ' ~\n\n"); inScan(); findAnimal(); return 0; }
Объяснение кода листинга программы
- Объединение
#include <stdio.h>
,#include <stdlib.h>
,#include <locale.h>
,#include <string.h>
в начале кода предоставляет функции для работы с файлами, математическими операциями, строками и вводом-выводом данных. - Переменная
MAX_NAME
определяет максимально возможное количество символов в названии рыбы (24 символа). - Переменная
SIZE
определяет количество рыб в базе данных (10 рыб). - Структура
animal
содержит поляname
(название рыбы, макс. 24 символа),size
(средний размер рыбы, double),weight
(средний вес рыбы, double) иyear
(продолжительность жизни рыбы, int). - Массив
fish
иfishAlf
содержат информацию о рыбах. ЗначенияfishAlf
иfish
идентичны, ноfishAlf
отсортирован в алфавитном порядке. - Функция
inScan
считывает данные из файлаbase.txt
и заполняет структуруanimal
(переменныеfish
иfishAlf
). - Функция
outPrint
выводит информацию о рыбах, соответствующих заданным параметрам (алфавитный порядок, размер, вес, продолжительность жизни). - Функция
findAnimal
запрашивает у пользователя параметры для вывода списка рыб и вызывает функциюoutPrint
. - В функции
main
программа инициализируется, считывается информация из файлаbase.txt
в структурыfish
иfishAlf
(вызывается функцияinScan
) и выполняется поиск рыбы по заданным параметрам (вызывается функцияfindAnimal
). - Программа завершается, когда пользователь возвращает
0
(ноль) в качестве значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д