-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Лабораторная работа №4.
Студент: Киселев Георгий, ИВТ-1.1
Комплект 1:
Задача 1.1:
Постановка задачи:
Создать две функции для вычисления факториала числа:
- Используя цикл.
- Используя рекурсию.
Математическая модель:
Факториал числа ( n ): ( n! = n \times (n-1) \times \dots \times 1 ).
Список идентификаторов:
| Имя переменной | Тип данных | Описание |
|---|---|---|
n |
int |
Входное число |
result |
int |
Результат (факториал) |
Код программы:
#include <stdio.h>
// Факториал через цикл
int factorial_loop(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
// Факториал через рекурсию
int factorial_recursive(int n) {
if (n == 0 || n == 1) return 1;
return n * factorial_recursive(n - 1);
}
int main() {
int num = 5;
printf("Факториал через цикл: %d\n", factorial_loop(num));
printf("Факториал через рекурсию: %d\n", factorial_recursive(num));
return 0;
}Результат:
Факториал через цикл: 120
Факториал через рекурсию: 120
Задача 1.2:
Постановка задачи:
Поменять местами значения чётных и нечётных ячеек массива.
Список идентификаторов:
| Имя переменной | Тип данных | Описание |
|---|---|---|
arr |
int* |
Динамический массив |
size |
int |
Размер массива |
Код программы:
#include <stdio.h>
#include <stdlib.h>
void swap_even_odd(int *arr, int size) {
for (int i = 0; i < size - 1; i += 2) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
int main() {
int size = 12;
int *arr = (int*)malloc(size * sizeof(int));
for (int i = 0; i < size; i++) arr[i] = i;
swap_even_odd(arr, size);
for (int i = 0; i < size; i++) printf("%d ", arr[i]);
free(arr);
return 0;
}Результат:
1 0 3 2 5 4 7 6 9 8 11 10
Задача 1.3:
Постановка задачи:
Создать функции для работы с двумерным массивом: выделение/освобождение памяти, заполнение, вывод.
Код программы:
#include <stdio.h>
#include <stdlib.h>
double** create_matrix(int rows, int cols) {
double **matrix = (double**)malloc(rows * sizeof(double*));
for (int i = 0; i < rows; i++) {
matrix[i] = (double*)malloc(cols * sizeof(double));
}
return matrix;
}
void free_matrix(double **matrix, int rows) {
for (int i = 0; i < rows; i++) free(matrix[i]);
free(matrix);
}
void fill_matrix(double **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
matrix[i][j] = i + j;
}
}
}
void print_matrix(double **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%.2f ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int rows = 3, cols = 3;
double **matrix = create_matrix(rows, cols);
fill_matrix(matrix, rows, cols);
print_matrix(matrix, rows, cols);
free_matrix(matrix, rows);
return 0;
}Результат:
0.00 1.00 2.00
1.00 2.00 3.00
2.00 3.00 4.00
Комплект 2:
Задача 2.1:
Постановка задачи:
Выполнить операции со строками: вычисление длины, копирование, конкатенация, сравнение, изменение регистра.
Код программы:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MY_SIZE 20
int main() {
char my_string[MY_SIZE] = "Hello";
char dest[MY_SIZE];
// Длина строки
printf("Длина: %zu\n", strlen(my_string));
// Копирование
strcpy(dest, my_string);
printf("Копия: %s\n", dest);
// Конкатенация
char str1[20] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2);
printf("Конкатенация: %s\n", str1);
// Сравнение
printf("Сравнение: %d\n", strcmp("abc", "abd"));
// Изменение регистра
for (int i = 0; i < strlen(my_string); i++) {
my_string[i] = toupper(my_string[i]);
}
printf("Верхний регистр: %s\n", my_string);
return 0;
}Результат:
Длина: 5
Копия: Hello
Конкатенация: Hello, World!
Сравнение: -1
Верхний регистр: HELLO
Задача 2.2:
Код программы:
#include <stdio.h>
#include <stdlib.h>
int main() {
char str_int[] = "123";
char str_double[] = "45.67";
printf("Целое: %d\n", atoi(str_int));
printf("Дробное: %.2f\n", atof(str_double));
return 0;
}Результат:
Целое: 123
Дробное: 45.67
Задача 2.3:
Код программы:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int main() {
char str[] = "A1b C,d!";
for (int i = 0; i < strlen(str); i++) {
printf("Символ '%c': ", str[i]);
if (isalpha(str[i])) printf("буква ");
if (isdigit(str[i])) printf("цифра ");
if (isspace(str[i])) printf("пробел ");
if (ispunct(str[i])) printf("знак пунктуации ");
printf("\n");
}
return 0;
}Результат:
Символ 'A': буква
Символ '1': цифра
Символ 'b': буква
Символ ' ': пробел
Символ 'C': буква
Символ ',': знак пунктуации
Символ 'd': буква
Символ '!': знак пунктуации
Metadata
Metadata
Assignees
Labels
No labels