Практические задачи по языку 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;
}