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

  • Обработка двумерных массивов

  • [конст. выраж1][конст. выраж2]…, [конст. выраж1][конст. выраж2]…;

  • Задание 2

  • Программирование с применением функций

  • [класс] тип имя ([список параметров])[throw (исключения)] {тело функции}

  • Программирование с возвратом из функций нескольких значений

  • Шафеева практика С. Практикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2


    Скачать 1.01 Mb.
    НазваниеПрактикум по программированию на языке с методические указания к лабораторным работам Омск 2008 2
    АнкорШафеева практика С.pdf
    Дата06.04.2018
    Размер1.01 Mb.
    Формат файлаpdf
    Имя файлаШафеева практика С.pdf
    ТипПрактикум
    #17709
    КатегорияИнформатика. Вычислительная техника
    страница3 из 7
    1   2   3   4   5   6   7
    <класс><тип><идетификатор>[конст. выраж1][конст. выраж2]…;
    Квадратные скобки здесь обязательны, константное выражение в квадратных скобках задает количество элементов в массиве (размерность) по каждому измерению. Число измерений определяется числом квадрат- ных скобок. Индексирование элементов в языке Си начинается с нуля.
    Пример. Найти значение и номер наименьшего элемента в одномер- ном массиве. При задании элементов исходного массива типизированной константой СА решения задачи имеет вид (рис.8, а) и используется сле- дующая программа:

    23
    #include
    #include
    void main ()
    {
    int a[10] = {5,2,7,1,8,3,4,5,6,6};
    int i, min, n; min = a[0]; n =
    0
    ; for (i=
    0
    ; i<10; i++)
    { if (a[i] { min = a[i]; n=i
    +1
    ;
    }
    }
    Начало
    Задание массива А min = a
    1
    , n = 1 i=2,10 a
    i
    , n=i
    Вывод min, n
    Конец
    Начало
    Ввод а
    1
    i = 2,10 min >a i min=a
    1
    , n=1 min=a i
    , n=i
    Ввод а
    i
    Вывод min, n
    Конец
    Рис.8 a) b)
    Нет
    Да
    Нет
    Да

    24 printf ("минимальный элемент %d-й равен %d\n ", n, min); getch();
    }
    Если элементы массива вводятся с клавиатуры, то СА имеет вид
    (рис.8,б) и текст программы изменится:
    #include
    #include
    void main ()
    { int a[10];
    int i, min, n; printf(“Введите элементы массива: ”); scanf ("%d",&a[0]); min = a[0]; n = 1; for (i=1; i<10; i++)
    { scanf ("%d", &a[i]); if (a[i] { min = a[i]; n = i
    +1
    ;
    }
    } printf ("минимальный элемент %d равен n= %d\n ", n, min); getch();
    }
    Задание 1
    Начертить структурную схему алгоритма, написать и отладить прог- рамму для одной из следующих задач. В программе 6_1 исходные масси- вы задать типизированными константами. В программе 6_2 элементы ис- ходных массивов ввести через оператор ввода.
    1. Дан массив из N чисел (N<12). Вычислить среднее геометрическое значение.
    2. Дан массив из N чисел (103. Дано 20 чисел. Найти их среднее арифметические значение.
    4. Дано 12 вещественных чисел. Найти порядковый номер того из них, которое наиболее близко к какому-нибудь заданному целому числу Х.
    5. Дана последовательность из 15 целых чисел. Определить коли- чество отрицательных чисел в ней и максимальное число подряд следую- щих отрицательных чисел.
    6. Дано 15 целых чисел. Найти наибольшее из них. Определить, сколько из чисел принимает наибольшее значение.
    7. Дано целое n>1 и вещественные числа x
    1
    ,x
    2
    ,..,x n
    . Вычислить мате- матическое ожидание и дисперсию по формулам

    25
    M=


    n
    i
    i
    n
    x
    1
    /
    , D=
    )
    1
    /(
    )
    (
    1 2




    N
    M
    i
    i
    n
    x
    8. Дан массив из N чисел (89. Даны два одномерных массива А и В. Вычислить элементы массива
    С по правилу: если а i
    и b i
    различны, то с i
    присвоить их сумму, при одина- ковых а i
    , b i в с i
    переписать соответствующий элемент массива А.
    10. Дано 10 вещественных чисел. Вычислить разность между макси- мальным и минимальным из них.
    11. Дано 10 вещественных чисел. Определить, образуют ли они воз- растающую последовательность.
    12. Дан массив X из n чисел (61
    - x
    2
    + x
    3
    - ...- x n-1
    + x n
    13. Дано 18 чисел. Определить, количество элементов, отличных от последнего числа.
    14. Дано 12 чисел. Напечатать сначала все отрицательные , а затем все остальные.
    15. Сформировать одномерный массив из 15 простых чисел.
    16. Дано восемь натуральных чисел. Найти их наибольший общий делитель.
    17. Дана последовательность натуральных чисел. Вычислить сумму тех из них, порядковые номера (индексы) которых - простые числа.
    18. Дан массив из 20 натуральных чисел. Вычислить сумму тех из них, порядковые номера которых - числа Фибоначчи, определяемые форму- лами f
    0
    = f
    1
    = 1; f n
    = f n-1
    + f n-2
    при n = 1, 2 ,3 ,... .
    19. Дан массив X из n чисел. Вычислить: y = x n
    (x n
    +x n-1
    )(x n
    + x n-1
    + x n-2
    )...(x n
    + ... + x
    1
    ) .
    20. Дано 24 целых числа. Распечатать их в обратном порядке по шесть чисел в строке.
    Задание 2 (программа 6_3)
    Модифицировать программу 3_2 для функций F1(x) и F2 (x) таким образом, чтобы результаты были сформированы в виде трех одномерных массивов. Выполнить ее и сравнить результаты с полученными в лабора- торных работах 3 и 4.
    Лабораторная работа 7
    Обработка двумерных массивов
    Цель работы: научиться разрабатывать и отлаживать программы с использованием матриц.
    Массив можно представить как ряд или последовательность данных, а можно как таблицу, данные которой распределены по строкам и столбцам.
    В двумерном массиве, одна размерность соответствует строкам, а вторая

    26 столбцам. При объявлении массива каждая размерность представляет со- бой дополнительный индекс.
    Описание двумерного массива (матрицы):
    <класс><тип><идетификатор>[конст. выраж1][конст. выраж2]…,
    <идетификатор>[конст. выраж1][конст. выраж2]…;
    Пример. Вычислить суммы элементов в столбцах двумерного числового массива
    А размером [1..3,1..4].
    Текст программы для СА (рис. 9):
    #include
    #include
    void main ()
    {
    int a [3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};
    int s[4];
    // массив сумм int i, j; clrscr(); for ( j=0; j<4; ++j)
    { s[j] = 0; for ( i=0; i<3; ++i ) s[j] = s[j] + a[i][j]; printf (" s[%d] = %d ", j, s[j]);
    } getch();
    }
    Задание 1 (программа 7_1)
    1. Даны матрицы A,B [1..4,1..4] вещественных чисел. Вычислить матрицу С по- элементным сложением соответствующих элементов матриц А и В.
    2. Дана матрица B[1..5,1..5] вещественных чисел. Найти для нее транспонированную матрицу.
    3. Даны матрица A[1..4,1..4] вещественных чисел и константа К. Вы- числить матрицу С=А*К.
    4. Сформировать массив по правилу 1 0 0 ... 0 2 1 0 ... 0 3 2 1 ... 0 10 9 8 ... 1 .
    5. Даны натуральное N и элементы квадратной вещественной матри- цы А пятого порядка. Вычислить N-ю степень каждого элемента этой матрицы
    Начало
    Задание
    А(3х4) j=1, 4 s
    j
    =0
    Вывод s
    j
    Конец
    Рис.9 i=1,3 s
    j
    =s j
    +a im

    27

    ij
    1
    = а
    ij
    , а
    ij
    2
    = а
    ij
    * а
    ij
    , а
    ij
    3
    = а
    ij
    2
    * а
    ij и т.д., где i, j = 1,2,...,5).
    6. Сформировать массив по правилу 0 0 0 ...0 0 1 0 ...0 0 0 2 ...0

    0 0 0 ...9 .
    7. Сформировать массив последовательностью натуральных чисел:
    1 2 ... 10 11 12 ... 20 21 22 ... 30 91 92 ... 100 .
    8. Сформировать двумерный массив:
    1 2 3 4 5 5 1 2 3 4 4 5 1 2 3 3 4 5 1 2 2 3 4 5 1 .
    9. Дана матрица A[1..N,1..N] целых чисел. Сформировать вектор В из максимальных элементов каждой строки.
    10. Дана матрица A[1..6,1..6] челых чисел и переменная Х. Элементы нечетных строк матрицы А заменить на Х.
    11. Дана матрица B[1..5,1..5]. Получить массив С удалением (либо об- нулением) n-й строки и k-го столбца из матрицы В.
    12. Определить, является ли заданная квадратная матрица девятого порядка магическим квадратом, т. е. такой, в которой суммы элементов во всех строках и столбцах одинаковы.
    13. Определить, является ли заданная целая квадратная матрица шес- того порядка симметричной (относительно главной диагонали).
    14. Дана вещественная матрица A[1..7,1..4]. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент оказался в верхнем левом углу.
    15. Дана вещественная матрица размером 4х8. Упорядочить ее строки по неубыванию сумм их элементов.
    16. Для заданной целой матрицы размером 6х8 элементов напечатать индексы всех ее седловых точек. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно на- ибольшим в своем столбце или, наоборот, является наибольшим в своей строке и наименьшим в своем столбце.
    17. Дана матрица A[1..6,1..2] вещественных чисел. Рассматривая A
    [i,1] и A [i,2] как координаты точек на плоскости, определить радиус наи-

    28 меньшего круга (с центром в начале координат), внутрь которого попада- ют все эти точки.
    18. Дан массив F[1..N,1..M] из целых малых величин, определить ко- личество «особых» элементов в нем. Элемент считается «особым», если он больше суммы остальных элементов своего столбца.
    19. Дана матрица D[1..5,1..6] из целых чисел. Упорядочить элементы строк в нем по убыванию.
    20. Дан массив М координат точек на плоскости. Найти наибольшее расстоя-ние между этими точками.
    Задание 2 (программа 7_2)
    Сформировать таблицу Пифагора.
    Задание 3 (программа 7_3)
    Модифицировать программу 6_3 таким образом, чтобы значения X, F1 и F2 были представлены двумерным массивом, состоящим из трех строк.
    Лабораторная работа 8
    Программирование с применением функций
    Цель работы: научиться разрабатывать и отлаживать программы с использованием подпрограмм (функций).
    Объявление функции (прототип, заголовок) задает ее имя, тип воз- вращаемого значения и список передаваемых параметров. Определение функции содержит, кроме объявления, тело функции, представляющее со- бой последовательность операторов и описаний в фигурных скобках:
    [класс] тип имя ([список параметров])[throw (исключения)] {тело функции}
    С помощью необязательного модификатора класс можно явно задать область видимости функции, используя ключевые слова extern, static: extern – глобальная видимость во всех модулях программы (по умол- чанию); static – видимость только в пределах модуля, в котором определена функция.
    Тип возвращаемого функцией значения может быть любым, кроме массива и функции (но может быть указателем на массив или функцию).
    Если функция не должна возвращать значение, указывается тип void.
    Список параметров определяет величины, которые требуется передать в функцию при ее вызове. Элементы списка параметров разделяются запя- тыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя (в объявлении имена можно опускать).
    Механизм возврата из функции в вызвавшую ее функцию реализуется оператором
    return [выражение];

    29
    Пример. Даны три массива A (5), B (5), C (5). Найти среднее арифме- тическое значение наименьших элементов массивов.
    До написания программы разрабатывается СА главной программы
    (рис.10, а) и СА для подпрограммы нахождения наименьшего элемента в любом массиве (рис.10, б). Отлаженная программа решения задачи имеет следующий вид:
    #include
    #include typedef int* mass; // переопределение типа: mass – указатель на целые
    // функция вычисления минимального элемента в массиве
    int minim (mass d)
    { int i, min; min = d[0]; for (i=1; i<5; ++i) if ( d[i]return min;
    }
    void main ()
    { int a[] = {5,2,7,1,8}; int b[] = {3,4,5,6,6}; i=2,5 min=d i
    Вывод min
    Конец n/n minim=min d
    i
    Да
    Нет minim (d)
    Начало sr=(minim(A)+
    minim(B)+
    +minim(C))/3
    Вывод sr
    Конец
    Задание массивов
    A,B,C
    Рис.10 б) а)

    30 int c[] = {3,8,5,2,6}; int n; float sr; sr = (minim(a) + minim(b) + minim(c)) / 3; printf(" sr= %5.2f ", sr); getch();
    }
    Задание 1 (программа 8_1)
    Написать и отладить программы для задач из лабораторных работ 1 и
    6 с применением подпрограммы - функции с параметрами. Вычисление функции (или обработку массива) выполнить в подпрограмме, а ввод ис- ходных данных и вывод результатов - в основной программе. Предусмот- реть, по крайней мере, два обращения к функции с различными фактичес- кими параметрами (двумя массивами).
    Для отладки программ использовать средства среды Си (см. прил. А): пошаговое исполнение программы (трассировку) с контролем значений переменных в окне отладчика Watch.
    Задание 2 (программа 8_2)
    1.
    По заданным вещественным массивам A [1..6], B [1..6] и C [1..6] вычислить
    (max B)/max A + (max C)/max(B+C) при min A < max B, max(B+C) + max C в противном случае.
    2. Даны две квадратные вещественные матрицы шестого порядка. На- печатать квадрат той из них, в которой наименьший след (сумма диаго- нальных элементов), считая, что такая матрица одна.
    3. Определить координаты центра тяжести трех материальных точек с массами m
    1
    ,m
    2
    ,m
    3
    и координатами (x
    1
    ,y
    1
    ), (x
    2
    ,y
    2
    ), (x
    3
    ,y
    3
    ) по формулам x
    c
    = (m
    1
    x
    1
    +m
    2
    x
    2
    +m
    3
    x
    3
    )/(m
    1
    +m
    2
    +m
    3
    ),
    y c
    = (m
    1
    y
    1
    +m
    2
    y
    2
    +m
    3
    y
    3
    )/(m
    1
    +m
    2
    +m
    3
    ).
    Вычисление координаты оформить функцией с параметрами.
    4. Вычислить все медианы для каждого из трех треугольников по за- данным в массивах A, B, C сторонам: m a
    =0.5 2
    2 2
    2 2
    a
    c
    b


    , m b=
    0.5 2
    2 2
    2 2
    b
    c
    a


    , m c
    =0.5 2
    2 2
    2 2
    c
    b
    a


    . Вычисление медианы оформить функцией.
    5. Даны три одномерных массива вещественных чисел A [1..6], B
    [1..8] и С[1..7]. Найти общую сумму положительных элементов в масси- вах. Нахождение суммы элементов в массиве оформить функцией.
    6. Даны два двумерных массива целых чисел с размерами (4х5) элементов. Под- считать количество отрицательных элементов в каждом из них.



    31 7. Даны два одномерных массива целых чисел A [1..8] и B[1..8]. Найти сумму их максимальных элементов. Для нахождения максимального эле- мента в массиве использовать функцию.
    8. Даны два двумерных массива целых чисел с размерами (5х5) эле- ментов каждый. Подсчитать произведение элементов главных диагоналей в каждом из них.
    9. Даны три одномерных массива вещественных чисел A[1..6], B[1..8] и С[1..7]. Найти среднее геометрическое значение положительных элемен- тов для каждого.
    10. Даны две матрицы целых чисел M[1..3,0..1], К[1..3,0..2]. Найти среднее арифметическое значение для каждой из них.
    11. Даны три одномерных массива целых чисел A[1..6], B[1..8] и
    С[1..7]. Подсчитать количество неотрицательных элементов в каждом.
    12. Даны две матрицы целых чисел S[1..3,0..2], К[1..3,0..2], в каждой из которых имеется по два одинаковых числа. Распечатать их значения.
    13. Даны два одномерных массива целых чисел A[1..6] и B[1..8]. Вы- числить значение Z=(min A[i] + min B[j]) / min (A[i]+B[j]). i
    j i, j
    14. По заданным целым массивам X[0..7] и Y[8..15] вычислить


    7 0
    i
    x i
    2
    при


    7 0
    i
    x i
    y i+8
    >0,


    15 8
    i
    y i
    2
    в противном случае.
    15. Дана матрица целых чисел D[1..6,1..5]. Найти наименьшую из сумм неотрицательных элементов строк матрицы. Для вычисления суммы использовать подпрограмму (функцию).
    16. Дана матрица целых чисел E [1..3,1..5]. Используя функцию, найти среднее геометрическое значение для каждого столбца матрицы.
    17. Дана матрица целых чисел F [1..4,1..5]. Найти наименьшие зна- чения элементов в каждой из строк матрицы с помощью функции.
    18. Даны две квадратные вещественные матрицы шестого порядка.
    Напечатать квадрат той из них, в которой наименьший след (сумма диа- гональных элементов), считая, что такая матрица одна.
    19. Сформировать двумерный массив 1 2 3 4 5 1 4 9 16 25 1 8 27 64 125
    Найти правило и оформить функцией вычисление любой строки.
    20. Даны две матрицы целых чисел V [1..2,1..3], W [1..3,1..2]. Найти суммы элементов строк и столбцов в этих матрицах.

    Z

    32
    Лабораторная работа 9
    Программирование с возвратом из функций нескольких значений
    Цель работы: научиться разрабатывать и отлаживать программы с использованием функций, вычисляющих несколько значений.
    Для возврата значений из функции можно использовать два способа.
    Первый способ заключается в использовании глобальных переменных.
    Второй способ позволяет возвратить одно значение с помощью оператора return, а другие записать в ячейки памяти с указанными адресами. В последнем случае в функцию необходимо передать адреса ячеек, куда надо поместить значения. Это выполняется с помощью указателей.
    Пример 1. Написать программу, функция в которой будет вычислять квадрат и куб аргумента. (Одно значение будем возвращать из функции оператором return, другое будет записываться по указателю int*.)
    # include
    # include // для потоковых функций ввода/вывода
    int fun(int, int*);
    // прототип функции
    void main()
    { int a, kub, qv; cin>>a;
    // ввод из потока qv=fun(a,&kub); //исходное число, адрес ячейки, куда поместить второе значение cout<<"для числа " << a<< "\t квадрат=" <1   2   3   4   5   6   7


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