Skip to content

Программирование_Самостоятельная_работа_1 #2

@veskprogrammer

Description

@veskprogrammer

Тема: Динамический массив и каталог книг

Задача 1. Динамический массив и вычисление среднего арифметического

Постановка задачи

Напишите программу на языке Си, которая:

  1. Запрашивает у пользователя количество элементов массива (целое число N).
  2. Динамически выделяет память для массива из N элементов типа float.
  3. Заполняет массив значениями, введёнными с клавиатуры.
  4. Вычисляет и выводит среднее арифметическое всех элементов массива.
  5. При обращении к элементам массива использует арифметику указателей (без оператора [ ]).
  6. Освобождает выделенную память в конце работы программы.

Список идентификаторов

Имя переменной Тип данных Описание
N int Количество элементов массива
arr float* Указатель на массив
sum float Сумма элементов массива
average float Среднее арифметическое

Код программы

#include <stdio.h>
#include <stdlib.h>

int main() {
    int N;
    printf("Введите количество элементов массива: ");
    scanf("%d", &N);

    float *arr = (float *)malloc(N * sizeof(float));
    if (arr == NULL) {
        printf("Ошибка выделения памяти.\n");
        return 1;
    }

    printf("Введите элементы массива:\n");
    float *ptr = arr;
    for (int i = 0; i < N; i++) {
        scanf("%f", ptr);
        ptr++;
    }

    float sum = 0;
    ptr = arr;
    for (int i = 0; i < N; i++) {
        sum += *ptr;
        ptr++;
    }

    float average = sum / N;
    printf("Среднее арифметическое: %.2f\n", average);

    free(arr);
    return 0;
}

Результаты работы программы

Введите количество элементов массива: 3
Введите элементы массива:
1.5
2.5
3.5
Среднее арифметическое: 2.50

Задача 2. Каталог книг

Постановка задачи

Создайте структуру Book, которая содержит следующие поля:

  • title – массив символов (строка) для хранения названия книги (максимум 50 символов);
  • author – массив символов для хранения имени автора (максимум 50 символов);
  • year – целое число, обозначающее год издания книги.

Напишите программу, которая:

  1. Создаёт массив из 3-х экземпляров структуры Book.
  2. Запрашивает у пользователя данные для каждой книги (название, автора и год издания).
  3. Выводит информацию обо всех книгах на экран, используя для этого отдельную функцию printBook(), которая принимает указатель на структуру Book.

Список идентификаторов

Имя переменной Тип данных Описание
books Book[] Массив структур Book
title char[50] Название книги
author char[50] Автор книги
year int Год издания книги

Код программы

#include <stdio.h>
#include <string.h>

struct Book {
    char title[50];
    char author[50];
    int year;
};

void printBook(struct Book *book) {
    printf("Название: %s\n", book->title);
    printf("Автор: %s\n", book->author);
    printf("Год издания: %d\n\n", book->year);
}

int main() {
    struct Book books[3];

    for (int i = 0; i < 3; i++) {
        printf("Введите данные для книги %d:\n", i + 1);
        printf("Название: ");
        fgets(books[i].title, 50, stdin);
        books[i].title[strcspn(books[i].title, "\n")] = '\0';

        printf("Автор: ");
        fgets(books[i].author, 50, stdin);
        books[i].author[strcspn(books[i].author, "\n")] = '\0';

        printf("Год издания: ");
        scanf("%d", &books[i].year);
        getchar(); // Очистка буфера
    }

    printf("\nИнформация о книгах:\n");
    for (int i = 0; i < 3; i++) {
        printBook(&books[i]);
    }

    return 0;
}

Результаты работы программы

Введите данные для книги 1:
Название: Война и мир
Автор: Лев Толстой
Год издания: 1869
Введите данные для книги 2:
Название: Преступление и наказание
Автор: Федор Достоевский
Год издания: 1866
Введите данные для книги 3:
Название: 1984
Автор: Джордж Оруэлл
Год издания: 1949

Информация о книгах:
Название: Война и мир
Автор: Лев Толстой
Год издания: 1869

Название: Преступление и наказание
Автор: Федор Достоевский
Год издания: 1866

Название: 1984
Автор: Джордж Оруэлл
Год издания: 1949

Задача 3. Определение сезона по номеру месяца

Постановка задачи

Создайте перечисление Season со следующими значениями: WINTER, SPRING, SUMMER, AUTUMN.

Напишите программу, которая:

  1. Запрашивает у пользователя номер месяца (целое число от 1 до 12).
  2. На основе введённого номера месяца определяет и выводит соответствующий сезон:
    • Зима: декабрь (12), январь (1) и февраль (2);
    • Весна: март (3), апрель (4) и май (5);
    • Лето: июнь (6), июль (7) и август (8);
    • Осень: сентябрь (9), октябрь (10) и ноябрь (11).

Математическая модель

Не требуется.

Список идентификаторов

Имя переменной Тип данных Описание
month int Номер месяца
season Season Сезон

Код программы

#include <stdio.h>

enum Season { WINTER, SPRING, SUMMER, AUTUMN };

int main() {
    int month;
    printf("Введите номер месяца (1-12): ");
    scanf("%d", &month);

    enum Season season;
    if (month == 12 || month == 1 || month == 2) {
        season = WINTER;
    } else if (month >= 3 && month <= 5) {
        season = SPRING;
    } else if (month >= 6 && month <= 8) {
        season = SUMMER;
    } else if (month >= 9 && month <= 11) {
        season = AUTUMN;
    } else {
        printf("Неверный номер месяца.\n");
        return 1;
    }

    switch (season) {
        case WINTER:
            printf("Зима\n");
            break;
        case SPRING:
            printf("Весна\n");
            break;
        case SUMMER:
            printf("Лето\n");
            break;
        case AUTUMN:
            printf("Осень\n");
            break;
    }

    return 0;
}

Результаты работы программы

Введите номер месяца (1-12): 7
Лето

Информация о студенте

Киселев Георгий, 1 курс, группа ИВТ-1.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions