Главная страница
Навигация по странице:

  • Цель работы

  • Протокол программы Matyushenko _ RV _1_2_10.с

  • Протокол библиотеки Matyushenko _ RV _1_1_10. h

  • Протокол библиотеки Matyushenko _ RV _3_1_12. h

  • Протокол библиотеки Matyushenko _ RV _4_1_12. h

  • ЛР СИ. Функции. Передача параметров


    Скачать 139.46 Kb.
    НазваниеФункции. Передача параметров
    АнкорЛР СИ
    Дата17.02.2022
    Размер139.46 Kb.
    Формат файлаdocx
    Имя файлаMatyushenko_RV_1_10.docx
    ТипОтчет
    #365284



    МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ

    (Национальный исследовательский университет)
    Кафедра 305

    Отчет по лабораторной работе на тему:

    «ФУНКЦИИ. ПЕРЕДАЧА ПАРАМЕТРОВ»
    Вариант №10


    Выполнил:

    Матюшенко Роман Викторович

    Студент гр. М30-204С-20







    Принял:

    Кузнецов И.М.

    Старший преподаватель кафедры 305

    Москва, 2021

    Цель работы: изучение методов использования функций языка Си.

    Задание на лабораторную работу:

    1) Написать функцию, которая сортирует одномерный массив в порядке убывания методом пузырька. В основной программе вызвать эту функцию для двух разных массивов.

    2) Оформить свои задания по лабораторным работам 3, 4 1-го семестра, и 1 второго семестра в виде функций. Организовать меню с вызовом этих функций.
    1 ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ

    Часто в программе требуется повторить определенную последовательность операторов в разных частях программы. Для того, чтобы описывать эту последовательность один раз, а применять многократно, в языках программирования применяются подпрограммы. Подпрограмма – автономная часть программы, выполняющая определенный алгоритм и допускающая обращение к ней из различных частей общей программы. В языке Си существует один вид подпрограмм – функции. Каждая программа в своем составе должна иметь главную функцию main(), служащую точкой входа в программу. Кроме функции main(), в программу может входить произвольное число функций, выполнение которых инициализируется либо прямо, либо вызовами из функции main(). Каждая функция по отношению к другой является внешней. Для того, чтобы функция была доступной, необходимо, чтобы до ее вызова о ней было известно компилятору. Форма записи функции: (){} Если тип возвращаемого функцией значения не указан, то подразумевается int. Если с именем функции не связан результат, то нужно указать тип функции void. Параметры, записываемые в обращении к функции, называются фактическими; параметры, указанные в описании функции – формальными. Фактические параметры должны соответствовать формальным по количеству, порядку следования и типу. Объекты, объявленные вне функции, действуют в любой функции и называются глобальными. Объекты, объявленные в функции, действуют только в ней и называются локальными. В теле функции обычно присутствует оператор return, определяющий возвращаемое функцией значение.

    Все параметры функции, кроме массивов, передаются по значению, т.е. внутри функции создаются локальные копии параметров. Если необходимо передать саму переменную, а не её копию, то в функцию передаётся адрес этой переменной. Таким образом, через параметры можно передавать результат выполнения функции. То есть, параметры, с помощью которых результаты должны передаваться из функции в точку вызова, описываются как указатели. Вызов функции может быть оформлен в виде оператора, если с именем функции не связано возвращаемое значение, или в виде выражения, если возвращаемое значение связано с именем функции. Прототип функции может указываться до вызова функции вместо описания функции для того, чтобы компилятор мог выполнить проверку соответствия типов аргументов и параметров. Прототип функции по форме такой же, как и заголовок функции. В конце него ставится «;». Функции можно подключать с помощью директивы #include . Такие файлы с функциями удобно использовать в диалоговых программах с пользовательским меню, позволяющих выбрать один из режимов.

    Пример 1: Функция с параметрами-значениями. Результат связан с именем функции. В программе объявляется прототип функции, а сама функция описывается ниже.

    //lab1_1

    #include

    #include

    int max(int, int); //Прототип функции

    void main()

    { int x, y, z;

    printf(" Enter x, y ");

    scanf("%d%d",&x, &y);

    z=max(x, y); //Вызов функции с фактическими параметрами

    printf("x=%d y=%d max=%d",x, y, z);

    getch();

    }

    int max(int a ,int b) //Заголовок функции с формальными параметрами

    { int c; if (a>b) c=a; else c=b; return c; }

    Пример 2: Функция с параметрами-указателями. Здесь передаются адреса фактических параметров, по которым и получаем результат. Функция меняет местами переменные x, y.

    //lab1_2

    #include

    #include

    main()

    { float x,y; void swap(float *, float *); // Прототип функции с параметрами - указателями

    printf("\n Enter x,y ");

    scanf("%f%f",&x,&y);

    swap(&x,&y); // Передаём адреса переменных

    printf("\n x=%4.2f y=%4.2f ",x,y);

    getch(); }

    void swap(float * a, float * b)

    {float c; c=*a; // *a - содержимое по адресу a *a=*b; *b=c; }

    Пример 3: Передача в функцию массива с использованием указателя. Результат – элементы массива возводятся в квадрат. Функция описывается до вызова, поэтому прототип не объявляется.

    //lab1_3

    #include

    #include

    void quart(int n, float * x) // Можно void quart(int n, float x[])

    {

    int i;

    for (i=0;i
    x[i]=x[i]*x[i];

    }

    main()

    { float z[]={1,2,3,4};

    int j;

    for (j=0;j<4;j++)

    printf(" %6.2f",z[j]);

    quart(4,z);

    for (j=0;j<4;j++)

    printf("\n %6.2f",z[j]);

    getch();

    }

    Пример 4: Подключение файлов с функциями и создание меню.

    //lab1_4

    #include

    #include

    #include " lab1_1.h"

    //#include "lab1_2.h"

    //#include "lab1_3.h"

    main()

    {

    int nom;

    while(1)

    {

    printf("\n 1. Value parameters \n");

    printf(" 2. Exit \n");

    scanf("%d", &nom);

    switch(nom)

    { case 1:printf("\n1st function calling result:\n max value is: %d\n",max(2,3));break;

    /* case nom:printf("\nn function calling result:\n max value is: %d\n",func_nom(a,b, ..., m));break;*/

    case 2:return 0;

    default:printf("Wrong mode");

    }

    }

    getch();

    }

    Содержимое lab1_1.h – функция max() из lab1_1.c.
    2 ХОД РАБОТЫ

    2.1) Протокол программы сортировки одномерного массива, в количестве двух массивов, по убыванию методом пузырька находится в приложении А.

    Результат вычислений программы изображён на рисунке 1.



    Рисунок 1 – Результат программы 1

    2.2) Протокол программы сортировки одномерного массива, в количестве двух массивов, по убыванию методом пузырька находится в приложении Б.

    Результат вычислений программы изображён на рисунке 2.



    Рисунок 2 – Результат программы 2
    3 ВЫВОДЫ

    В ходе выполнения лабораторной работы были получены знания о работе методов использования функций в языке Си.

    ПРИЛОЖЕНИЕ А

    #include

    #include

    #include

    #include

    #include

    // Функция сортировки прямым обменом (метод "пузырька")

    void bubbleSort(int *num, int size)

    {

    // Для всех элементов

    for (int i = 0; i < size - 1; i++)

    {

    for (int j = (size - 1); j > i; j--) // для всех элементов после i-ого

    {

    if (num[j - 1] < num[j]) // если текущий элемент меньше предыдущего

    {

    int temp = num[j - 1]; // меняем их местами

    num[j - 1] = num[j];

    num[j] = temp;

    }

    }

    }

    }

    int puz(int N)

    {

    int a[N]; // Объявляем массив из N элементов

    // Вводим значения элементов массива

    for (int i = 0; i < N; i++)

    {

    printf("a[%d] = ", i);

    scanf("%d", &a[i]);

    }

    bubbleSort(a, N); // вызываем функцию сортировки

    // Выводим отсортированные элементы массива

    for (int i = 0; i
    printf("%d ", a[i]);

    getchar(); getchar();

    return 0;

    }
    int main ()

    {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    int N;

    printf ("\n Приветствую! Это программа которая сортирует одномерный массив в порядке убывания методом пузырька.");

    printf ("\n В данной программе сортируется 2 массива одновременно.");

    printf ("\n Введите количество элементов в массиве №1:\n N=");

    scanf ("%d", &N);

    puz(N);

    printf ("\n Введите количество элементов в массиве №2:\n N=");

    scanf ("%d", &N);

    puz(N);

    return 0;

    }

    ПРИЛОЖЕНИЕ Б

    Протокол программы Matyushenko_RV_1_2_10.с:

    #include

    #include

    #include "Matyushenko_RV_1_1_10.h"

    #include "Matyushenko_RV_3_1_12.h"

    #include "Matyushenko_RV_4_1_12.h"
    int main()

    {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    float m;

    do

    {

    printf ("\n Приветствую! Это многофункциональная программа");

    printf ("\n Введите число (1) если хотите воспользоваться программой 1 ЛР 2 семестра");

    printf ("\n Введите число (2) если хотите воспользоваться программой 3 ЛР 1 семестра");

    printf ("\n Введите число (3) если хотите воспользоваться программой 4 ЛР 1 семестра");

    printf ("\n Введите число (9) если хотите выйти из приложения\n");

    scanf ("%f", &m);

    if(m==1) prog1();

    if(m==2) prog2();

    if(m==3) prog3();

    }

    while (m != 9);

    return 0;

    }
    Протокол библиотеки Matyushenko_RV_1_1_10.h:

    #include

    #include

    #include

    #include

    #include

    void prog1();

    // Функция сортировки прямым обменом (метод "пузырька")

    void bubbleSort(int *num, int size)

    {

    // Для всех элементов

    for (int i = 0; i < size - 1; i++)

    {

    for (int j = (size - 1); j > i; j--) // для всех элементов после i-ого

    {

    if (num[j - 1] < num[j]) // если текущий элемент меньше предыдущего

    {

    int temp = num[j - 1]; // меняем их местами

    num[j - 1] = num[j];

    num[j] = temp;

    }

    }

    }

    }

    int puz(int N)

    {

    int a[N]; // Объявляем массив из N элементов

    // Вводим значения элементов массива

    for (int i = 0; i < N; i++)

    {

    printf("a[%d] = ", i);

    scanf("%d", &a[i]);

    }

    bubbleSort(a, N); // вызываем функцию сортировки

    // Выводим отсортированные элементы массива

    for (int i = 0; i
    printf("%d ", a[i]);

    getchar(); getchar();

    return 0;

    }
    void prog1()

    {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    int N;

    printf ("\n Приветствую! Это программа которая сортирует одномерный массив в порядке убывания методом пузырька.");

    printf ("\n В данной программе сортируется 2 массива одновременно.");

    printf ("\n Введите количество элементов в массиве №1:\n N=");

    scanf ("%d", &N);

    puz(N);

    printf ("\n Введите количество элементов в массиве №2:\n N=");

    scanf ("%d", &N);

    puz(N);

    }
    Протокол библиотеки Matyushenko_RV_3_1_12.h:

    #include

    #include

    #include

    #include
    void prog2 ();
    int fact(int n)

    {

    if (n == 0 || n==1)

    return 1;

    else

    {

    return n * fact(n - 1);

    }

    }
    void prog2 ()

    {

    int i, N;

    float x, S1, S2, S3;

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    printf("\n Bведите число N \n");

    scanf("%d", &N);

    printf("\n Bведите число x \n");

    scanf("%f", &x);
    S1 = 0; S2 = 0; S3 = 0;

    for (i = 1; i <= N; i++)

    S1 += (pow(x,i)/fact(i));

    i = 0;

    while (i
    {

    i++; S2+=(pow(x,i)/fact(i));

    }

    i = 0;

    do

    {

    i++;

    S3+=(pow(x,i)/fact(i));

    } while (i
    printf("\nS1=%f \nS2=%f \nS3=%f \n", S1, S2, S3);

    }
    Протокол библиотеки Matyushenko_RV_4_1_12.h:

    #include

    #include

    #include

    #include

    #include
    void prog3 ();
    double f(double x)

    {

    return (((1-x)*log10(x))/sqrt(1-log10(x)));

    }
    double Formula_Trapesii(double a, double b, int n)

    {

    double h=(b-a)/n;

    double I1=f(a)+f(b);

    for (int i=0; i<=n-1; i++)

    {

    I1+=2*f(a+i*h);

    }

    I1*=h/2;

    return I1;

    }
    double Sympson(double a, double b, int n)

    {

    double h=(b-a)/n;

    double I2=f(a)+f(b);

    int k;

    for (int i=0; i<=n-1; i++)

    {

    k=2+2*(i%2);

    I2+=k*f(a+i*h);

    }

    I2*=h/3;

    return I2;

    }
    void prog3 ()

    {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);

    double a,b;

    double I1,I2;

    int n;

    a=2;

    b=7;

    n=100;

    I1=Formula_Trapesii(a, b, n);

    I2=Sympson(a, b, n);
    printf ("\n Приветствую! Это программа по вычислению определённого интеграла по формуле трапеции и по формуле Симпсона \n");

    printf ("\n Результат вычисления интеграла по формуле трапеции I1=%f \n Результат вычисления интеграла по формуле Симпсона I2=%f \n", I1, I2);

    }


    написать администратору сайта