Перейти к основному содержимому

Практические задачи по языку C для Junior уровня

Задача 1: Приветствие пользователя

ОписаниеНапишите программу, которая запрашивает имя пользователя и выводит персонализированное приветствие
НавыкиБазовый ввод-вывод, работа со строками
Требования• Запросить имя пользователя
• Вывести приветствие в формате "Привет, [имя]! Добро пожаловать в мир программирования на C!"
Показать решение
#include <stdio.h>;

int main() {
char name[50];

printf("Введите ваше имя: ");
scanf("%s", name);

printf("Привет, %s! Добро пожаловать в мир программирования на C!\n", name);

return 0;
}

Задача 2: Калькулятор чаевых

ОписаниеСоздайте программу для расчета чаевых в ресторане
НавыкиАрифметические операции, форматированный вывод
Требования• Запросить сумму счета
• Запросить процент чаевых
• Вывести сумму чаевых и итоговую сумму
Показать решение
#include <stdio.h>

int main() {
float bill, tipPercent, tipAmount, total;

printf("Введите сумму счета: ");
scanf("%f", &bill);

printf("Введите процент чаевых: ");
scanf("%f", &tipPercent);

tipAmount = bill * (tipPercent / 100);
total = bill + tipAmount;

printf("Сумма чаевых: %.2f\n", tipAmount);
printf("Итого к оплате: %.2f\n", total);

return 0;
}

Задача 3: Конвертер температур

ОписаниеПрограмма для конвертации температуры между Цельсием и Фаренгейтом
НавыкиУсловные операторы, математические формулы
Требования• Меню выбора направления конвертации
• Формулы: F = C × 9/5 + 32 и C = (F - 32) × 5/9
• Точность до 2 знаков после запятой
Показать решение
#include <stdio.h>

int main() {
int choice;
float temperature, result;

printf("Выберите конвертацию:\n");
printf("1. Цельсий в Фаренгейт\n");
printf("2. Фаренгейт в Цельсий\n");
printf("Ваш выбор: ");
scanf("%d", &choice);

printf("Введите температуру: ");
scanf("%f", &temperature);

if (choice == 1) {
result = (temperature * 9.0/5.0) + 32;
printf("%.2f°C = %.2f°F\n", temperature, result);
} else if (choice == 2) {
result = (temperature - 32) * 5.0/9.0;
printf("%.2f°F = %.2f°C\n", temperature, result);
} else {
printf("Неверный выбор\n");
}

return 0;
}

Задача 4: Проверка пароля

ОписаниеПрограмма для проверки надежности пароля по его длине
НавыкиРабота со строками, функция strlen
Требования• Запросить пароль
• Проверить длину (минимум 8 символов)
• Вывести сообщение о надежности
Показать решение
#include <stdio.h>
#include <string.h>

int main() {
char password[100];
int length;

printf("Введите пароль: ");
scanf("%s", password);

length = strlen(password);

if (length >= 8) {
printf("Пароль надежный (длина: %d символов)\n", length);
} else {
printf("Пароль слишком короткий! Минимум 8 символов (текущая длина: %d)\n", length);
}

return 0;
}

Задача 5: Калькулятор ИМТ

ОписаниеРасчет индекса массы тела и определение категории веса
НавыкиВложенные условия, математические расчеты
Требования• Ввод роста (м) и веса (кг)
• Формула: ИМТ = вес / (рост²)
• Категории: недостаточный (<18.5), норма (18.5-24.9), избыточный (25-29.9), ожирение (≥30)
Показать решение
#include <stdio.h>

int main() {
float weight, height, bmi;

printf("Введите ваш вес (кг): ");
scanf("%f", &weight);

printf("Введите ваш рост (м): ");
scanf("%f", &height);

bmi = weight / (height * height);

printf("Ваш ИМТ: %.2f\n", bmi);

if (bmi < 18.5) {
printf("Категория: Недостаточный вес\n");
} else if (bmi < 25) {
printf("Категория: Нормальный вес\n");
} else if (bmi < 30) {
printf("Категория: Избыточный вес\n");
} else {
printf("Категория: Ожирение\n");
}

return 0;
}

Задача 6: Таблица умножения

ОписаниеВывод таблицы умножения для заданного числа
НавыкиЦикл for, форматированный вывод
Требования• Запросить число
• Вывести таблицу умножения от 1 до 10
• Использовать цикл for
Показать решение
#include <stdio.h>

int main() {
int number, i;

printf("Введите число для таблицы умножения: ");
scanf("%d", &number);

printf("\nТаблица умножения для %d:\n", number);
printf("-------------------\n");

for (i = 1; i <= 10; i++) {
printf("%d × %d = %d\n", number, i, number * i);
}

return 0;
}

Задача 7: Счетчик слов

ОписаниеПодсчет количества слов в введенной строке
НавыкиОбработка строк, циклы, логические флаги
Требования• Считать строку с пробелами
• Подсчитать слова (разделенные пробелами)
• Вывести результат
Показать решение
#include <stdio.h>
#include <string.h>

int main() {
char str[1000];
int i, words = 0;
int inWord = 0;

printf("Введите строку: ");
fgets(str, sizeof(str), stdin);

for (i = 0; str[i] != '\0'; i++) {
if (str[i] == ' ' || str[i] == '\n' || str[i] == '\t') {
inWord = 0;
} else if (inWord == 0) {
inWord = 1;
words++;
}
}

printf("Количество слов: %d\n", words);

return 0;
}

Задача 8: Калькулятор среднего балла

ОписаниеРасчет среднего балла студента по нескольким предметам
НавыкиЦиклы, массивы, накопление суммы
Требования• Ввод количества предметов
• Ввод оценок по каждому предмету
• Расчет и оценка среднего балла
Показать решение
#include <stdio.h>

int main() {
int n, i;
float grade, sum = 0, average;

printf("Введите количество предметов: ");
scanf("%d", &n);

for (i = 1; i <= n; i++) {
printf("Введите оценку по предмету %d: ", i);
scanf("%f", &grade);
sum += grade;
}

average = sum / n;

printf("\nСредний балл: %.2f\n", average);

if (average >= 4.5) {
printf("Отличная успеваемость!\n");
} else if (average >= 3.5) {
printf("Хорошая успеваемость\n");
} else {
printf("Нужно подтянуть учебу\n");
}

return 0;
}

Задача 9: Генератор паролей

ОписаниеПростой генератор числовых паролей заданной длины
НавыкиГенерация случайных чисел, циклы
Требования• Запросить длину пароля
• Генерировать случайные цифры
• Использовать srand и rand
Показать решение
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
int length, i;

srand(time(NULL));

printf("Введите длину пароля: ");
scanf("%d", &length);

printf("Сгенерированный пароль: ");

for (i = 0; i < length; i++) {
printf("%d", rand() % 10);
}

printf("\n");

return 0;
}

Задача 10: Поиск максимума в массиве

ОписаниеПоиск максимального элемента и его позиции в массиве
НавыкиДинамические массивы, поиск экстремума
Требования• Ввод размера массива
• Заполнение массива
• Поиск максимума и его индекса
Показать решение
#include <stdio.h>

int main() {
int n, i, maxPos = 0;

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

int arr[n];

for (i = 0; i < n; i++) {
printf("Введите элемент %d: ", i + 1);
scanf("%d", &arr[i]);
}

for (i = 1; i < n; i++) {
if (arr[i] > arr[maxPos]) {
maxPos = i;
}
}

printf("\nМаксимальный элемент: %d\n", arr[maxPos]);
printf("Позиция: %d\n", maxPos + 1);

return 0;
}

Задача 11: Калькулятор расхода топлива

ОписаниеРасчет расхода топлива автомобиля и стоимости поездки
НавыкиПрактические расчеты, форматированный вывод
Требования• Ввод: расстояние (км), топливо (л), цена за литр
• Расчет: расход на 100км, общая стоимость
• Вывод всех показателей
Показать решение
#include <stdio.h>

int main() {
float distance, fuel, price;
float consumption, cost;

printf("Введите пройденное расстояние (км): ");
scanf("%f", &distance);

printf("Введите количество израсходованного топлива (л): ");
scanf("%f", &fuel);

printf("Введите цену за литр топлива: ");
scanf("%f", &price);

consumption = (fuel / distance) * 100;
cost = fuel * price;

printf("\nРасход топлива: %.2f л/100км\n", consumption);
printf("Стоимость поездки: %.2f руб.\n", cost);
printf("Стоимость за км: %.2f руб.\n", cost / distance);

return 0;
}

Задача 12: Реверс строки

ОписаниеПереворот введенной строки задом наперед
НавыкиРабота со строками, индексация массивов
Требования• Считать строку
• Создать перевернутую копию
• Вывести обе строки
Показать решение
#include <stdio.h>
#include <string.h>

int main() {
char str[100], reversed[100];
int length, i, j = 0;

printf("Введите строку: ");
scanf("%s", str);

length = strlen(str);

for (i = length - 1; i >= 0; i--) {
reversed[j] = str[i];
j++;
}
reversed[j] = '\0';

printf("Оригинальная строка: %s\n", str);
printf("Перевернутая строка: %s\n", reversed);

return 0;
}

Задача 13: Сортировка массива

ОписаниеСортировка массива методом пузырька
НавыкиВложенные циклы, алгоритм сортировки
Требования• Ввод массива произвольного размера
• Реализация пузырьковой сортировки
• Вывод отсортированного массива
Показать решение
#include <stdio.h>

int main() {
int n, i, j, temp;

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

int arr[n];

for (i = 0; i < n; i++) {
printf("Введите элемент %d: ", i + 1);
scanf("%d", &arr[i]);
}

// Сортировка пузырьком
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}

printf("\nОтсортированный массив: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");

return 0;
}

Задача 14: Менеджер контактов

ОписаниеПростая система управления контактами с использованием структур
НавыкиСтруктуры, массивы структур, поиск
Требования• Структура Contact (имя, телефон)
• Добавление нескольких контактов
• Вывод списка и поиск по имени
Показать решение
#include <stdio.h>
#include <string.h>

struct Contact {
char name[50];
char phone[20];
};

int main() {
int n, i, found = 0;
char searchName[50];

printf("Введите количество контактов: ");
scanf("%d", &n);

struct Contact contacts[n];

// Ввод контактов
for (i = 0; i < n; i++) {
printf("\nКонтакт %d:\n", i + 1);
printf("Имя: ");
scanf("%s", contacts[i].name);
printf("Телефон: ");
scanf("%s", contacts[i].phone);
}

// Вывод всех контактов
printf("\n=== Список контактов ===\n");
for (i = 0; i < n; i++) {
printf("%d. %s - %s\n", i + 1, contacts[i].name, contacts[i].phone);
}

// Поиск контакта
printf("\nВведите имя для поиска: ");
scanf("%s", searchName);

for (i = 0; i < n; i++) {
if (strcmp(contacts[i].name, searchName) == 0) {
printf("Найден контакт: %s - %s\n", contacts[i].name, contacts[i].phone);
found = 1;
break;
}
}

if (!found) {
printf("Контакт не найден\n");
}

return 0;
}

Задача 15: Файловый калькулятор

ОписаниеЧтение чисел из файла, вычисления и сохранение результатов
НавыкиРабота с файлами, обработка ошибок
Требования• Создание входного файла с числами
• Чтение и обработка данных
• Запись результатов в выходной файл
Показать решение
#include <stdio.h>

int main() {
FILE *inputFile, *outputFile;
float num1, num2;
float sum, diff, product, quotient;

// Создание входного файла с числами
inputFile = fopen("input.txt", "w");
if (inputFile == NULL) {
printf("Ошибка создания файла\n");
return 1;
}

printf("Введите первое число: ");
scanf("%f", &num1);
printf("Введите второе число: ");
scanf("%f", &num2);

fprintf(inputFile, "%.2f %.2f", num1, num2);
fclose(inputFile);

// Чтение чисел из файла
inputFile = fopen("input.txt", "r");
if (inputFile == NULL) {
printf("Ошибка открытия файла\n");
return 1;
}

fscanf(inputFile, "%f %f", &num1, &num2);
fclose(inputFile);

// Вычисления
sum = num1 + num2;
diff = num1 - num2;
product = num1 * num2;
quotient = (num2 != 0) ? num1 / num2 : 0;

// Запись результатов в выходной файл
outputFile = fopen("output.txt", "w");
if (outputFile == NULL) {
printf("Ошибка создания выходного файла\n");
return 1;
}

fprintf(outputFile, "Числа: %.2f и %.2f\n", num1, num2);
fprintf(outputFile, "Сумма: %.2f\n", sum);
fprintf(outputFile, "Разность: %.2f\n", diff);
fprintf(outputFile, "Произведение: %.2f\n", product);
if (num2 != 0) {
fprintf(outputFile, "Частное: %.2f\n", quotient);
} else {
fprintf(outputFile, "Деление на ноль!\n");
}

fclose(outputFile);

printf("\nРезультаты вычислений:\n");
printf("Сумма: %.2f\n", sum);
printf("Разность: %.2f\n", diff);
printf("Произведение: %.2f\n", product);
if (num2 != 0) {
printf("Частное: %.2f\n", quotient);
} else {
printf("Деление на ноль!\n");
}

printf("\nРезультаты также сохранены в файл output.txt\n");

return 0;
}