Практические задания по программированию на C/C++

Данный материал представляет собой подборку из 11 практических заданий по программированию на языке C/C++. В сборник включены алгоритмы вычисления таблиц функций, работа с одномерными и двумерными массивами, поиск экстремальных значений, а также задачи на обработку структур данных и чтение информации из файлов. Каждое задание сопровождается полным исходным кодом, комментариями и примерами реализации логики обработки данных.

Задание №1: Вычисление таблицы значений функции

#include <windows.h>
#include <stdio.h>
#include <math.h>

const char info[] =
"                       Задание №1n"
"n"
"1.2 Вычисление таблицы значений функции одного аргументаn"
"n"
"     Составить алгоритм и  программу вычисления  таблицы значенийn"
"функции f(x) из задачи 1.1 для N значений аргумента X, равномерноn"
"распределенных на отрезке [A, B]. Для  проверки  программы задатьn"
"N=10; A=0.55; B=1.n"
"n"
"   3n"
"  x     x        3    3     4n"
"---- - e  ln|1.37  + x | + ---n"
"  __                        3n"
"/3n"
"n";

int main()
{
    const double A    = 0.55, B = 1.0, e = 0.00001;
    const int    N    = 10;
    const double CONST_3 = sqrt(3);
    const double CONST_1_37 = pow(1.37, 3.0);
    const double CONST_4_3 = 4.0 / 3.0;
    double x, y, x3;
    const double step = (B - A) / (N - 1);
    int i;
    SetConsoleOutputCP(1251);
    printf(info);
    printf(" №   X      Yn-----------------n");
    for (i = 0, x = A; x <= B + e; x += step)
    {
        x3 = x * x * x;
        y = x3 / CONST_3 - exp(x) * log(fabs(CONST_1_37 + x3)) + CONST_4_3;
        printf("%2d %.2lf %.6lfn", ++i, x, y);
    }
    printf("n");
    system("pause");
    return 0;
}

Задание №2: Накопление сумм и произведений

#include <windows.h>
#include <stdio.h>
#include <math.h>

const char info[] =
"              Задание №2n"
"n"
"1.3.2 Накопление сумм и произведенийn"
"n"
"     Составить циклический алгоритм и  программу  для  вычисленияn"
"результата по формуле. Для проверки программы задать X=0.5; n=20.n"
"n"
"              n                ____n"
"            +---+     k-1     / k+xn"
"            |   | ln(x    + / e    )n"
"tg sin(x) + |   | -------------------n"
"            |   |     0.5k + |x|n"
"            k = 1n";

int main()
{
    const double X = 0.5;
    const int    n = 10;
    double v, prod = 1.0, Xk_1 = 1.0, modX = fabs(X);
    int k;
    SetConsoleOutputCP(1251);
    printf(info);
    v = tan(sin(X));
    for (k = 1; k <= n; ++k)
    {
        prod *= log(Xk_1 + sqrt(exp(k + X))) / (0.5 * k + modX);
        Xk_1 *= X;
    }
    printf("Значение выражения равно %lfnn", v + prod);
    system("pause");
    return 0;
}

Задание №3: Вычисление таблицы значений функции с выбором формулы

#include <windows.h>
#include <stdio.h>
#include <math.h>

const char info[] =
"                 Задание №3n"
"n"
"1.6 Вычисление таблицы значений функции одногоn"
"    аргумента с выбором формулыn"
"n"
"     Составить программу вычисления N значений функции Y для X,n"
"изменяющегося  от  X1 с  шагом  dX.  Для проверки  правильностиn"
"программы задать для A, X1 и dX из второй таблицы:n"
"A = -7.17, dX = 0.5, X1 = -3.0, N = 13n"
"n"
"             _____________________________________n"
"      /     /  ___________________n"
"     |     /  /    4     2       2          2    2n"
"     | - / /  16A  + 4A (x + A)  - (x + A)  - A  , при x < 0n"
"     |n"
"Y = <     _____________
"     |   / 2          2n"
"     | / A  - (x + A)  - 2A, при x >= 0n"
"     |n"
"      
";

int main()
{
    const double A  = -7.17, dX = 0.5, X1 = -3.0;
    const int    N  = 13;
    double x, y, A2 = A * A, A4 = A2 * A2, xA2;
    int i;
    SetConsoleOutputCP(1251);
    printf(info);
    printf(" Таблица функцииn №   X        Yn------------------n");
    for (i = 0, x = X1; i < N; x += dX)
    {
        xA2 = x + A; xA2 *= xA2;
        if (x < 0) y = sqrt(sqrt(16 * A4 + 4 * A2 * xA2) - xA2 - A2);
        else y = sqrt(A2 - xA2) - 2 * A;
        printf("%2d %5.2lf %9.6lfn", ++i, x, y);
    }
    printf("n");
    system("pause");
    return 0;
}

Задание №4: Обработка одномерных массивов

#include <windows.h>
#include <stdio.h>
#include <math.h>

const char info[] =
"              Задание №4n"
"n"
"1.4.1 Алгоритм с единственным цикломn"
"n"
"     Разработать алгоритм  и программу  с  единственным циклом дляn"
"обработки одномерных массивов.n"
"n"
"     Сформировать  одномерный  массив  Y из  элементов одномерногоn"
"массива X путем деления каждого элемента массива X на свой индекс.n";

int main()
{
    double X[] = { -3.14, 13, 156, -56.8, 67 };
    const unsigned N = sizeof(X) / sizeof(X[0]);
    double Y[N];
    int i;
    SetConsoleOutputCP(1251);
    printf(info);
    printf(" №    X      Yn----------------n");
    for (i = 0; i < N; ++i)
    {
        Y[i] = X[i] / (i + 1);
        printf("%2d %6.2lf %6.2lfn", i + 1, X[i], Y[i]);
    }
    printf("n");
    system("pause");
    return 0;
}

Задание №5: Алгоритмы с ветвлением в теле цикла

#include <windows.h>
#include <stdio.h>

const char info[] =
"              Задание №5n"
"n"
"1.4.2 Алгоритмы с ветвлением в теле циклаn"
"n"
"     Разработать  алгоритм и программу обработки одномерных массивов,n"
"используя единственный цикл.n"
"n"
"     При  заданных  XT,  YT, абсциссах  X1, X2, ..., Xn  и  ординатахn"
"Y1,  Y2,  ..., Yn n точек плоскости XOY  определить,  в  каком  числеn"
"случаев расстояние между одной из таких точек и точкой с координатамиn"
"XT, YT  превышает заданную величину B, и найти средние координаты дляn"
"заданной совокупности точек, исключая точку (XT,YT).n";

int main()
{
    double X[] = { -3.14, 13, 156, -56.8, 67 };
    double Y[] = { 10.14, 0, -90, -13.8, 167 };
    const unsigned N = sizeof(X) / sizeof(X[0]);
    double XT = 17.8, YT = -13, B = 120.8, distance, B2 = B * B, sumX = 0.0, sumY = 0.0, x, y;
    unsigned cnt, i;
    SetConsoleOutputCP(1251);
    printf(info);
    printf("XT = %lf, YT = %lf, B = %lfnn", XT, YT, B);
    printf(" №    X      Yn----------------n");
    for (i = cnt = 0; i < N; ++i)
    {
        x = X[i] - XT; y = Y[i] - YT;
        distance = x * x + y * y;
        if (distance > B2) ++cnt;
        sumX += X[i]; sumY += Y[i];
        printf("%2d %6.2lf %6.2lfn", i + 1, X[i], Y[i]);
    }
    printf("nСредние координаты исходных точек: X = %lf, Y = %lfn", sumX / N, sumY / N);
    if (cnt == 0) printf("Нет ни одной точки, расстояние от которой до заданной, превышает заданную величину Bnn");
    else printf("Число найденных точек равно %unn", cnt);
    system("pause");
    return 0;
}

Задание №6: Нахождение экстремальных элементов

#include <windows.h>
#include <stdio.h>

const char info[] =
"                          Задание №6n"
"n"
"1.4.3 Нахождение экстремальных элементов в одномерных массивахn"
"n"
"     Составить программу нахождения экстремального элемента или егоn"
"порядкового номера при заданном одномерном массиве A из n элементовn"
"(или массивах A и C по n элементов в каждом).n"
"n"
"     Определить наибольшее из отношенийn"
"n"
"       m        mn"
"     ____      ____n"
"              |  |n"
"              |  |n"
"      / Ai  /  |  |Ain"
"     /         |  |n"
"     ----n"
"      i=1      i=1n";

int main()
{
    double A[] = { -3.14, 13, 156, -56.8, 67 };
    const unsigned N = sizeof(A) / sizeof(A[0]);
    double sum = 0.0, prod = 1.0, sum_prod, max = 0.0, v;
    unsigned i;
    bool zero = false;
    SetConsoleOutputCP(1251);
    printf(info);
    printf(" №    A    Сумма  Произведениеn------------------------------n");
    for (i = 0; i < N; ++i)
    {
        v = A[i]; sum += v; prod *= v;
        if (prod == 0.0) zero = true;
        else {
            sum_prod = sum / prod;
            if (i == 0 || max < sum_prod) max = sum_prod;
        }
        printf("%2d %6.2lf %6.2lf %11.2lfn", i + 1, v, sum, prod);
    }
    if (zero) printf("nЭкстремум нельзя определить из-за деления на нольnn");
    else printf("nМаксимальное соотношение равно %lfnn", max);
    system("pause");
    return 0;
}

Задание №7: Обработка матриц

#define _USE_MATH_DEFINES
#include <windows.h>
#include <stdio.h>
#include <cmath>

const char info[] =
"                          Задание №7n"
"n"
"2.5.1 Обработка матриц с небольшим количеством строк или столбцовn"
"n"
"     Составить алгоритм и программу для решения задачи с использованиемn"
"одномерных и двумерных (матриц) массивов.n"
"n"
"     Дана матрица из 3 строк и 6 столбцов. Элементы каждого столбцаn"
"представляют длины трех сопряженных ребер одного из 6 прямоугольныхn"
"параллелепипедов. Отпечатать номер каждого столбца,  которым  заданn"
"параллелепипед большего объема, чем объем шара с заданным  радиусомn"
"R V = 4/3 * Pi * R^3, и число таких столбцов.n";

int main()
{
    double M[][6] = { { 1, 2, 3, 4, 5, 6}, {14, 15, 1, 17, 8, 9}, {18, 4, 9, 10, 5, 1} };
    double R = 2.7, V = (4 * M_PI * R * R * R) / 3, VP, x, y, z;
    unsigned num[6], cnt = 0, i;
    SetConsoleOutputCP(1251);
    printf(info);
    printf("Радиус шара R = %lf, объем шара = %lfnn", R, V);
    printf("Информация о параллелепипедах (X,Y,Z - размеры, V - объем)nn №    X      Y       Z     Vn-------------------------------n");
    for (i = 0; i < 6; ++i)
    {
        x = M[0][i]; y = M[1][i]; z = M[2][i];
        VP = x * y * z;
        if (VP > V) num[cnt++] = i + 1;
        printf("%2d %6.2lf %6.2lf %6.2lf %7.2lfn", i + 1, x, y, z, VP);
    }
    if (cnt == 0) printf("nНет параллелериредов с объемом, который больше объема заданного шараnn");
    else {
        printf("nНомера найденных столбцов:");
        for (i = 0; i < cnt; ++i) printf(" %u", num[i]);
        printf("nn");
    }
    system("pause");
    return 0;
}

Оцените статью
Сессия под ключ дистанционно
Добавить комментарий

Заявка на расчет