Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы и курсачи 2022-2023 / 1 сем / Baraeva_Elizaveta_lb1

.pdf
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
174 Кб
Скачать
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В. И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра МО ЭВМ
ОТЧЕТ
по дисциплине «Программирование»
Тема: Условия, циклы, оператор switch
Студентка гр. 2383
Бараева Е. Н.
Преподаватель
Гаврилов А. В.
Санкт-Петербург
2022
2
Цель работы.
Научиться пользоваться основными конструкции языка Си. Научиться
пользоваться циклами, условиями и оператором switch.
Задание.
Напишите программу, выделив каждую подзадачу в отдельную функцию. Реализуйте программу, на вход которой подается одно из значений 0, 1, 2,
3 и массив целых чисел размера не больше 100. Числа разделены пробелами.
Строка заканчивается символом перевода строки. В массиве есть хотя бы
один четный и нечетный элемент.
В зависимости от значения, функция должна выводить следующее:
0: индекс первого чётного элемента. (index_first_even) 1: индекс последнего нечётного элемента. (index_last_odd) 2: найти сумму модулей элементов массива, расположенных от первого
чётного элемента и до последнего нечётного, включая первый и не включая
последний. (sum_between_even_odd)
3: найти сумму модулей элементов массива, расположенных до первого
чётного элемента (не включая элемент)
иначе необходимо вывести строку "Данные некорректны".
Выполнение работы.
На вход программа принимает значение от 0 до 3 и записывает его в переменную task, затем через пробел подаются целые числа, которые записываются в массив arr размером 100 с помощью цикла while. Ввод заканчивается символом \n, который принимает переменная symbol.
В оператор switch подается переменная task. В зависимости от значения переменной выполняются различные функции, значения которых выводится на экран с помощью printf. Если task равна 0, то с помощью цикла for ищется первый четный элемент массива и записывается в переменную first_even, которую возвращает функция. Если task равна 1, то с помощью цикла for
3
ищется последний нечетный элемент массива и записывается в переменную
last_odd, которую возвращает функция. Если task равна 2, то с помощью цикла for и оператора if от первого четного до последнего нечетного элементов добавляются в переменную sum модули чисел массива. Затем функция возвращает sum. Если task равна 3, то с помощью цикла for и оператора if от начала до первого четного и от последнего нечетного до конца добавляются в переменную sum модули чисел массива. Затем функция возвращает sum. Если task равна какому-либо другому числу, то на экран выводится "Данные некорректны".
Разработанный программный код см. в приложении А.
Тестирование.
Результаты тестирования представлены в табл. 1. Таблица 1 – Результаты тестирования
№ п/п
Входные данные
Выходные данные
Комментарии
1.
0 -8 -23 -30 -11 -28 15 -20 -24
-27 5 -13 5 21 -5 16 30 -12 15
-14 -28 -27 -11 -5 4 29 -5
0
Верно
Вывод.
Были изучены основные управляющие конструкции языка Си, а также была изучена работа с циклами, условиями и оператором switch. Разработана программа, выполняющая считывание с клавиатуры команды и исходных данных пользователя. Для обработки команд пользователя использовался оператор switch. Для ввода данных была использована функция scanf и цикл
while.
4
ПРИЛОЖЕНИЕ А
ИСХОДНЫЙ КОД ПРОГРАММЫ
Название файла: main_lb1.c
#include <stdio.h> #include <stdlib.h> #define N 100
int index_first_even(int *mass){ int first_even; for(int i = 0; i < N; i++){ if(abs(mass[i]) % 2 == 0){ first_even = i; break; } } return first_even; }
int index_last_odd(int *mass){ int last_odd; for(int i = 0; i < N; i++){ if(abs(mass[i]) % 2 == 1){ last_odd = i; } } return last_odd; }
int sum_between_even_odd(int *mass){ int sum = 0; int first_even = index_first_even(mass); int last_odd = index_last_odd(mass); for(int i = 0; i < N; i++){ if(first_even <= i && i < last_odd){ sum += abs(mass[i]); } } return sum; }
int sum_before_even_and_after_odd(int *mass){ int sum = 0; int first_even = index_first_even(mass); int last_odd = index_last_odd(mass); for(int i = 0; i < N; i++){ if(i < first_even || last_odd <= i){ sum += abs(mass[i]); } } return sum; }
int main(){ int arr[N] = {0}, task, i = 0; char symbol;
5
scanf("%d", &task); while(symbol != '\n'){ scanf("%d%c", &arr[i], &symbol); ++i; } switch(task){ case 0: printf("%d\n", index_first_even(arr)); break; case 1: printf("%d\n", index_last_odd(arr)); break; case 2: printf("%d\n", sum_between_even_odd(arr)); break; case 3: printf("%d\n", sum_before_even_and_after_odd(arr)); break; default: puts("Данные некорректны\n"); } return 0;
}
Соседние файлы в папке 1 сем