Файл: 3 Лабораторная работа 1 основы программирования в системе.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.11.2023

Просмотров: 12

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


1
МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Омский государственный технический университет СИСТЕМЫ ПРОГРАММИРОВАНИЯ Методические указания к лабораторным работам Омск Издательство ОмГТУ
2012

2 Составители ОП. Шафеева И. А. Волчкова ассистент, С. А. Гончаров, ассистент. Рассмотрены правила создания проектов в системах программирования
Visual Studio, Code::Blocks и Eclihse IDE С, технологии проектирования сложных программ со структурами, указателями, состоящих из нескольких модулей и многих подпрограмм. Приводятся примеры разработки программ для задач разного уровня сложности. Предназначены для выполнения студентами лабораторных работ по дисциплинам Системы программирования, Программирование, Технологии разработки программного обеспечения. Печатается по решению редакционно-издательского совета Омского государственного технического университета
© ОмГТУ, 2012

3 Лабораторная работа № 1 ОСНОВЫ ПРОГРАММИРОВАНИЯ В СИСТЕМЕ
V
ISUAL
S
TUDIO С+ Инструкция по работе в Visual Studio С+ Запуск Microsoft Visual Studio 2010 производится выполнением Пуск > Программы > Microsoft Visual Studio 2010 > Microsoft Visual Studio 2010. Для создания нового проекта необходимо выделить опции вменю Файл > Создать > Проект. При этом откроется окно создания проекта, в котором нужно выбрать тип нового проекта. Для чего во вкладке Установленные шаблоны активизировать Другие языки > Visual C++ > Пустой проект. Далее необходимо ввести имя проекта и путь для создаваемого проекта и нажать на кнопку «Ok».

4 В появившимся окне Обозреватель решений необходимо создать файл исходного кода, для чего, щелкнуть правой кнопкой мыши на папке Файлы исходного кода, выбрать Добавить > Создать элемент. Далее в появившемся окне Добавление нового элемента выбрать тип файла Файл С+ (.срр)» и нажать на кнопку Добавить. Для добавления уже существующих файлов в проект, щелкнув правой кнопкой мыши на папке Файлы исходного кода, выбрать Добавить > Существующий элемент ив появившемся окне найти нужный файл. При успешном создании файла набирается код программы, компилируется и выполняется нажатием клавиши или иконки, выделенной наследующем рисунке. При наличии ошибок в коде программы сообщения о них выводятся в окне Список ошибок.

5 Форматированный ввод/вывод в С/С ++. Структура простой программы Шаблон для ввода
%[*][длина][модификатор] символ преобразования. Символы преобразования
d (или i) – используется для вывода целого десятичного числа (int),
u – десятичное целое без знака,
f – вещественное число в естественной форме (float),
e (Е – вещественное число в экспоненциальной форме,
g (G) – наиболее короткая запись числа из двух форм e или f,
c – для вывода отдельного символа,
s – для вывода строки символов,
o – восьмеричное число,
x – шестнадцатеричное число (буквы строчные,
X – шестнадцатеричное число (буквы прописные. Шаблон для вывода
%[флажок][длина][.точность][модификатор] символ преобразования.
1. Подготовить в окне редактирования программу, состоящую из одной главной функции
#include
/* подключение библиотеки */

6
void main() /* заголовок главной программы */
{
int x, y, z;
/* объявление переменных целого типа */
x = 5; y = 6;
/* операторы присваивания */
z = x + y; сумма = %d \n", z);
/* стандартная функция вывода из библ */
} Сохранить программу в файле имя0_1.с. Откомпилировать (F5), при необходимости исправить ошибки путем установки маркера на нужное сообщение и нажатия клавиши . Для перехода к следующей ошибке нажать . Дополнить вывод значениями z в восьмеричной и шестнадцатеричной системах счисления. Сохранить (Ctrl+S).
2. Вычислить Z1 = X + Y++; Z2= ++X + Y; с выводом на печать x = значение, y = значение,
z = значение звонок. Сохранить программу в файле имя0_2.с.
3. Заменить операции присваивания исходных данных оператором ввода scanf. Предусмотреть задания числа позиций для вывода и выравнивание полевому краю для параметра z [1, 7, 8]. Сохранить программу в файле имя0_3.с.
4. Вычислить помимо z1, z2, z3 = y/ x. Получить для z3 результат с точностью до трех знаков после десятичной точки. Сохранить полученные программы в файлы имя0_4.с и имя0_5.с. Выполнить для трех примеров, записать полученные результаты.
5. Создать программу для ввода, сложения, умножения, деления и вывода вещественных чисел с типами double и float. Использовать для вывода символы преобразования f, e, E, g, G, задание длины и точности, составные операции +=,
*=, /=. Потоковый ввод/вывод в С Для использования потокового ввода/вывода необходимо подключить библиотеку . Iostream использует объекты cin, cout для передачи информации через стандартные потоки ввода и вывода. Эти объекты являются частью стандартного пространства имён — std, поэтому необходимо его подключение командой using namespace std. Пример программы.
#include
using namespace std;
void main()

7
{ int i;
cout << "\t Язык С // Вывод сообщения и перевод строки
cout << "Введите число "; // Вывод подсказки
cin >> i; // Ввод переменной
cout<<" Вы ввели число "<< I << "\n"; // Вывод сообщения, значения и
}
// перевод строки
Заменить в трех примерах форматированный вводи вывод на потоковый. Лабораторная работа № 2 РАЗРАБОТКА ПРОГРАММ ИЗ НЕСКОЛЬКИХ ФУНКЦИЙ. ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ

Пример 1. Даны три двумерных массива. Найти средние арифметические значения в каждом из них.
# include // Передача в подпрограмму двумерного массива
# include int ka, kb, kc; int a[5][5], b[5][5], c[5][5];
double sr(int k, int f[5][5]); // Прототип функции
void main() Основная программа
{ int i, j, z; // Тело функции Введите размер матрицы "); scanf("%d", &z); Введите массив из %dx%d элементов for ( i=0; i{ for ( j=0; j{ Введите е элементы й строки трех матриц ", (j+1),(i+1)); scanf("%d %d %d" , &a[i][j], &b[i][j], &c[i][j]);
}
} printf("srA = %lg\n\n",sr(z,a));
// Обращение к функции SR printf("srB = %lg\n\n",sr(z,b)); printf("srC = %lg\n",sr(z,c));

8
}
double sr(int k, int f[5][5])
// Заголовок функции
{ int i, j; float s; s = 0; for ( i = 0; I < k; i++) for ( j = 0; j < k; j++) s = s + f[i][j];
// if ( k==0 ) { Деление на ноль return 0; }
return (double)s / (k*k);
}
// Конец функции Пример 2. Даны три массива A (5), B (5), C (5). Найти средние арифметические значения в каждом из них. Ввод элементов массивов оформить отдельной функцией.
#include
#include int ka, kb, kc; int a[5], b[5], c[5];
void vvod(int d[5], int *k) // Заголовок функции ввода
{ int i,z; // Тело функции Введите число элементов "); scanf("%d", &z); *k = z; Введите массив из %d элементов for (i=0; i{ Введите й элемент ",(i+1)); scanf("%d",&d[i]);
}
} // Конец функции vvod
double sr(int k, int f[5]) // Заголовок функции
{ int i,s; s=0; for (i=0; i// if ( k==0 ) { Деление на ноль return 0;}

9 return (double)s/k;
} // Конец функции sr
void main() // Главная программа
{ int i; vvod(a,&ka); /* Обращение к процедуре, возвращающей в основную программу массив A и его размер */ printf("srA = %g\n\n",sr(ka,a)); // Обращение к функции SR vvod(b,&kb); printf("srB = %g\n\n", sr(kb,b) ); vvod(c,&kc); printf("srC = %g\n", sr(kc,c) );
} Задание программа 2_1) Разработать программы, содержащие функции для следующих задач.
1. Для вещественных массивов A [1..5], B [1..5] и C [1..5] вычислить min
)
min(
/
)
(min min
/
)
(min
случае
противном
в
A
C
B
B
A
при
C
B
C
A
B
Z
2. Даны две квадратные вещественные матрицы шестого порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов, считая, что такая матрица одна.
3. Вычислить все медианы для каждого из трех треугольников по заданным в массивах 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

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

10 9. Даны три одномерных массива целых чисел A [1..6], B [1..8] и С [1..7]. Подсчитать количество неотрицательных элементов в каждом.
10. Даны две матрицы целых чисел V [1..2,1..3], W [1..3, 1..2]. Найти суммы элементов строки общую сумму элементов в каждой из этих матриц.
11. Даны два одномерных массива целых чисел A [1..6] и B [1..8]. Вычислить значение Z = (min A[i] + min B[j]) / min (A[i] + B[j]).
12. Для двух квадратных матриц четвертого порядка найти и напечатать числа, ближайшие к среднему арифметическому значению в каждой. Использовать функцию.
13. По заданным целым массивами вычислить



⎪⎪


>

=



=
=
=
7 0
2 7
0 7
0 2
,
0
i
i
i
i
i
i
i
случае
противном
в
y
y
x
при
x
Z
14. Найти правило и оформить функцией вычисление любой строки.
15. Даны три одномерных массива вещественных чисел К [1..6], B [1..8] и С [1..7]. Найти общую сумму положительных элементов в массивах, указать наименьшую и наибольшую из них. Нахождение суммы элементов в массиве оформить функцией.
16. Дана матрица целых чисел D [1..6,1..5]. Найти наименьшую из сумм неотрицательных элементов строк матрицы. Для вычисления суммы использовать подпрограмму (функцию.
17. Для трех одномерных массивов напечатать по одному числу, ближайшему к среднему арифметическому значению. Среднее арифметическое значение вычислить в функции.
18. Дана матрица целых чисел E [1..3,1..5]. Используя функцию, найти среднее геометрическое значение для каждого столбца матрицы.
19. Даны три одномерных массива. Вычислить средние геометрические значения для них и их сумму.
20. Дана матрица целых чисел F [1..4,1..5]. Найти наименьшие значения элементов в каждой из строк матрицы с помощью функции.
21. Даны квадратные матрицы A и B размером х каждая. Выбрать из них положительные и отрицательные элементы и записать соответственно в массивы пол, Аотр, пол, Вотр. Подсчитать количество чисел в каждом полученном массиве, число положительных и число отрицательных.
22. Даны одномерные массивы В [1..8], C [1..8]. Записать их в виде матриц
ВВ[1..2,1..4], CC [1..2,1..4], найти наибольшие элементы в каждой.

11 Лабораторная работа № 3 ПРИМЕНЕНИЕ АДРЕСОВ И УКАЗАТЕЛЕЙ ПРИ ВОЗВРАТЕ ИЗ ФУНКЦИЙ НЕСКОЛЬКИХ ЗНАЧЕНИЙ
Если необходимо из функции вернуть несколько значения, их помещают по заданным адресам. Пример 1. Вычислить среднее арифметическое значение для наименьших и отдельно для наибольших элементов в каждом из трех массивов.
#include
#include
#include int a[5] ={5,2,7,4,8}, b[5] ={3,4,5,6,6}, c[5] Глобальные переменные
int mm(int d[5], int* mx) // Заголовок функции
{ int min, max, i; min = d[0]; max = d[0]; for (i=1; i<5; i++)
{ if (d[i]max) max=d[i];
} Минимальный элемент равен = %d\n",min); Максимальный элемент равен = %d\n",max);
*mx = max;
return min;
}
// Конец блока функции
void main()
{
// Блок основной программы int n, mxA, mxB, mxC; double srMin, srMax; srMin=(double)(mm(a,&mxA)+mm(b,&mxB)+mm(c,&mxC))/3; // три обращения к функции printf("srMin = %g\n",srMin); srMax=(double)(mxA+mxB+mxC)/3; printf("srMax = %g\n",srMax); getch();
}

12 Пример 2. Заполнить таблицу Пифагора и вычислить сумму ее элементов с использованием передачи в функцию указателя на указатель.
#include using namespace std; double zapoln(int **M, int m, int n); void print(int **M, int m, int n); double S=0;
int main()
{ int m = 10; Количество строк в массиве int n = 10; Количество столбцов в массиве int **A; Двумерный массив Создание двумерного массива
A = new int*[m]; Создание массива указателей for (int i=0; iA[i] = new int[n]; double sum = zapoln(A, m, n); Заполнение массива print(A, m, n); Вывод массива cout <<"Summ = " << sum << endl; return 0;
}
double zapoln(int **M, int m, int n)
{ for (int i=0; i{
M[i][j] = (i+1)*(j+1);
S+=M[i][j];
}
return S; Возврат суммы элементов
}
void print(int **M, int m, int n)
{ for (int i=0; i{ for (int j=0; j

13
{ cout.width(5); cout << M[i][j];
} cout << endl;
}
} Задание программа 3_1) Разработать программы из нескольких функций, возвращающих два и более значений, для следующих задач.
1. Составить подпрограмму для перемножения двух квадратных матриц, с помощью которой вычислить вторую, третью и четвертую степени матрицы
M [1..5,1..5]. Для каждой матрицы вычислить сумму и среднее арифметическое значение элементов.
2. Даны массивы A [1..6], B [1..6], C [1..6], вычислить суммы положительных и отрицательных элементов. Получить АСА. Даны две матрицы целых чисел V [1..2,1..3], W [1..3,1..2]. Найти суммы элементов строки столбцов в этих матрицах. Сравнить общие суммы элементов в соответствующих матрицах, вычисленные через суммы строки суммы столбцов.
4. По заданным вещественным массивами вычислить min
)
min(
/
))
(max(
min
/
)
(max
случае
противном
в
A
A
C
B
B
A
при
C
B
B
C
B
B
Y
5. Даны две матрицы целых чисел V [1..2,1..3], W [1..2,1..3]. Найти общие суммы элементов строк, из функции вернуть две суммы.
6. Даны массивы A [1..5], B [1..6]. Получить новые массивы путем сдвига элементов в массивах на два разряда вправо, освободившиеся слева элементы обнулить. Сдвиг элементов в массиве оформить подпрограммой, из подпрограммы вернуть выпавшие справа разряды.
7. Даны две целые квадратные матрицы четного порядка. Элементы массивов счетными номерами строки и столбца заменить нулем (стереть. Напечатать исходные и полученные массивы. Подсчитать количество четных и нечетных чисел в каждом.
8. Вычислить значение функции Z = x1+e x2
, где x1, x2 – корни уравнения
A
i x
2
+ B
i x + C
i
= 0, где i = 1, 2,.., N. Коэффициенты уравнения заданы в массивах
A [1..N], B [1..n], C [1..N]. Для вычисления корней использовать подпрограмму.

14 9. Даны две целые квадратные матрицы шестого порядка. Распечатать элементы главных диагоналей каждой из них и вычислить суммы элементов отдельно главных и побочных диагоналей.
10. Даны два одномерных массива Аи. Получить A
2
, С, АС. Подсчитать число четных и число нечетных чисел в полученных массивах. Перемножение массивов и подсчет выполнить в подпрограмме.
11. Даны массивы A [4][4], B [4][4]. Получить новые массивы путем сдвига элементов в массивах на два разряда вправо, освободившиеся слева элементы обнулить. Сдвиг элементов в массиве оформить подпрограммой, из подпрограммы вернуть суммы элементов выше главной диагонали и отдельно ниже.
12. Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и С [1..7]. Найти среднее геометрическое значение положительных элементов и номера ближайших к ним элементов для каждого массива.
13. Даны две матрицы целых чисел S [1..3,0..2], Кв каждой из которых имеется по два одинаковых числа. Распечатать их значения.
14. Даны массивы A [1..6], B [1..6], C [1..6]. Преобразовать их, каждому элементу массива присваивая значение соседнего с ним справа. Последнему элементу присвоить значение первого. Напечатать исходные, результирующие массивы и отдельно последние два элемента результирующего.
15. По заданным элементам вещественных матриц A, B и С вычислить



>
+
+
+
<
+
+
=
min min
)
(
min
)
(
min
)
(
min min min
)
(
max
/
))
(
(max
)
(
max
/
))
(
(max
i
i
i
i
i
i
i
i
i
i
i
B
A
при
a
c
c
b
B
A
при
c
b
c
a
b
z
16. По заданным вещественным массивами С [1..6] вычислить. Даны две целые квадратные матрицы четного порядка. Напечатать массивы, транспонированные матрицы, количество четных и число нечетных чисел в каждой.
18. Даны массивы A [1..6], B [1..8]. Выбрать из них положительные элементы и записать соответственно в массивы A [1..k] и B [1..k], где k < 6, n < 8; из отрицательных элементов сформировать массивы A2 [1..6-k], B2 [1..8-n]. Напечатать суммы и произведения элементов для каждого.
19. Даны квадратные матрицы A, Си размером 4x4 каждая. Напечатать средние арифметические значения в них отдельно для положительных и отрицательных элементов.
20. Даны массивы целых чисел F [8], В [8]. Найти и напечатать значения и индексы минимальных элементов, сколько в каждом массиве таких же.

15 21. Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и С [1..7]. Найти среднее геометрическое значение положительных элементов и номера ближайших к ним элементов для каждого массива.
22. Даны две целые квадратные матрицы шестого порядка. Распечатать элементы главных и побочных диагоналей каждой из них, вычислить суммы элементов отдельно главных и побочных диагоналей. Лабораторная работа № 4 СОЗДАНИЕ ПРОЕКТОВ ИЗ НЕСКОЛЬКИХ ФАЙЛОВ В
E
CLIPSE
IDE
С/С++
Инструкция по работе в Eclipse IDE С/С++ Главное окно (рабочее место) среды разработки программного обеспечения
Eclipse IDE представлено наследующем рисунке. Рабочее место разделено на части (перспективы
1) обозреватель проекта,
2) редактор исходного кода,
3) обозреватель консоли,
4) файл исходного кода,
5) меню “Project”.
2 3
1 5
4

16 В обозревателе проекта (Project Explorer) создаются проекты. В окне редактирования вводится и редактируется исходный код. Eclipse IDE использует консоль для показа различных сообщений или выходной информации от консольных приложений. Для создания проекта необходимо выполнить File > New > C Project. Также можно создать проект, используя контекстное меню по клику правой кнопкой мыши на Project Explorer, и выбрать New > C Project во всплывающем окне. В диалоговом окне необходимо задать имя проекта и нажать кнопку
«Finish». При успешном создании проекта он отобразится в Project Explorer. Далее необходимо создать файл исходного кода C. Для чего нужно щелкнуть правой кнопкой мыши на проект в Project Explorer и выбрать New > Source file. В появившемся диалоговом окне нужно ввести имя исходного файла и задать для него расширение .c. Файл появится в обозревателе проекта (поле 4). Далее в окно редактора исходного кода ввести текст программы. Для компиляции программы необходимо выбрать вменю (поле 5) опцию «Build Project» или щелкнуть правой кнопкой мыши на проект в Project

17
Explorer и выбрать туже опцию «Build Project». Если в проекте нет ошибок, то можно запустить приложение нажатием клавиш . При модульном программировании проектируется структура главной программы, затем разрабатываются и программируются модули. Пример. Найти соотношение между максимальными элементами для массивов Аи В. Выделим вычисление наибольшего элемента в подпрограмму, которую вынесем в отдельный модуль.
#include
#include
#include "r_pos.h" // подключение модуля из текущего каталога int i;
void main()
{ int a[8], b[8]; int s; Введите массив A из 8 чисел типа int \n"); for ( i=0; i<8; ++i ) scanf("%d", &a[i]); Введите массив B из 8 чисел типа int\n"); for (i=0; i<8; ++i) scanf("%d",&b[i]); Сообщение = "); printf(" max(A)/max(B) = %6.3f \n", (float)max(a)/max(b)); getch();
}
// Интерфейсная часть модуля r_pos
typedef int * mass; int max(mass d);
extern int i;
// Исполняемая часть модуля
int max( mass d )
{ int mx; mx = d[0]; for (i=1; i<8; ++i)

18 if (mx < d[i]) mx = d[i]; printf(" %d: ", mx); return mx;
} Задание программа 4_1) Разработать программы, скрыв подпрограммы в отдельном файле (модуле, при этом использоватьпередачупараметров в функции и глобальную переменную, на которую по возможности организовать ссылку из другого файла (модуля.
1. Для матриц целых чисел S [1..3,0..2], K [1..3,0..2], в которых имеется по два одинаковых числа, найти и напечатать их значения и индексы.
2. Даны две матрицы целых чисел M [1..3,0..1], К [1..3,0..2]. Найти средние арифметические значения для каждой из них и индексы ближайших к ним чисел. Для массивов A [1..6], B [1..6], C [1..6], переставить элементы в них таким образом, чтобы слева подряд были записаны отрицательные, а справа положительные числа. Подсчитать количество положительных, отрицательных и нулевых элементов в каждом массиве.
4. Даны одномерные массивы A [1..6], B [1..8], C [1..10]. Записать их в виде матриц AA [1..3,1..2], BB [1..2,1..4], CC [1..5,1..2], найти наименьшие элементы в новых и напечатать их номера.
5. Для заданных матриц целых чисел V (-1..2,0..3), W [1..3,0..2] сформировать одномерные массивы VV и WW, записывая элементы построчно. Напечатать индексы исходных матриц для максимальных значений и сами значения.
6. Дана матрица чисел H [1..5,1..6]. Переставить элементы в строках матрицы таким образом, чтобы они были расположены в порядке возрастания их модулей. Подсчитать, сколько в исходных матрицах положительных, отрицательных чисел и нулей.
7. В матрице чисел G [1..3,1..6] переставить элементы так, чтобы элементы каждого столбца матрицы были смещены циклически вправо. Перестановку элементов в столбце реализовать подпрограммой, напечатать три выпавших элемента.
8. Даны массивы A [1..8], B [1..8], C [1..8]. Упорядочить элементы в них в порядке убывания их модулей, напечатать наименьшее и наибольшее значения и их номера.
9. Для заданных массивов A [4][4], B [1][6], C [4][6] вычислить суммы положительных и отдельно отрицательных элементов, число нулей.

19 10. Даны две матрицы целых чисел V [1..2,1..3], W [1..2,1..3]. Найти общие суммы элементов столбцов, из функции вернуть три суммы.
11. По элементам двух массивов Аи получить A
2
, С, АС. Подсчитать число положительных, число отрицательных чисел и нулей в полученных массивах. Перемножение массивов и подсчет выполнить в подпрограмме. Даны матрицы целых чисел S [0..3,0..2], K [0..3,0..2]. Найти и напечатать значения и индексы минимальных элементов.
13. Для матриц, состоящих из целых чисел S [3][3], С [3][3], B[3][3], найти и напечатать значения и индексы максимальных элементов.
14. Даны две матрицы целых чисел А [3][2], К [3][2]. Найти средние арифметические значения для каждой из них и индексы ближайших к ним чисел.
15. Для матриц F [4][4], С [4][4] найти и напечатать значения и индексы максимальных по модулю отрицательных элементов и отдельно положительных. Даны одномерные массивы К [1..8], C [1..10]. Записать их в виде матриц
КК [1..2,1..4], CC [1..5,1..2], найти наибольшие элементы в каждой и напечатать их индексы.
17. Для трех одномерных массивов целых чисел A [1..9], B [1..8] и С [1..7] подсчитать количество неотрицательных элементов в каждом и найти по два ближайших к ним числа.
18. Даны матрицы целых чисел F [4][4], С [4][4]. Найти и напечатать значения и индексы минимальных по значению положительных элементов, отличных от нуля.
19. Для каждой из трех матриц вещественных чисел найти среднее геометрическое значение положительных элементов и индексы ближайших к ним элементов.
20. Даны квадратные матрицы A и B размером х. Выбрать из них положительные и отрицательные элементы и записать соответственно в массивы пол,
Аотр и пол, Вотр. Подсчитать количество чисел в каждом полученном массиве. Найти средние арифметические и средние геометрические значения элементов для каждого массива.
21. Для квадратных матриц A и B размером х напечатать средние арифметические значения и ближайшие к ним в каждой матрице.
22. Даны массивы целых чисел КВ. Найти и напечатать значения и индексы максимальных элементов, сколько в каждом массиве элементов, совпадающих с максимальным.

20 Лабораторная работа № 5 ПРОГРАММИРОВАНИЕ С ВОЗВРАТОМ ИЗ ФУНКЦИИ СТРУКТУР
Структуры состоят из ряда полей, поэтому водной функции можно вычислить несколько значений и поместить в разные поля структуры. Поскольку структура является единым объектом, то ее целиком можно возвратить из функции оператором return. Пример Вычислить сумму элементов, максимальное и минимальное значения в массиве с использованием возврата из функции структуры.
#include typedef struct array_info
{ int max, min, sum;
}
ARRAY_INFO;
ARRAY_INFO GetArrayInfo(int*, int);
ARRAY_INFO GetArrayInfo(int* array, int len)
{
ARRAY_INFO info = {array[0], array[0], array[0]}; int i = 1; while(i < len)
{ if (array[i] > info.max) info.max = array[i]; if (array[i] < info.min) info.min = array[i]; info.sum += array[i]; i++;
}
return info;
}
int main()
{ int mass[6] = {1, 22, 3, -4, 5, 6}; int len = 6;
ARRAY_INFO s = GetArrayInfo(mass, len); printf("min=%d max=%d sum=%d",s.min, s.max, s.sum); return 0;
}

21 Задание Для задач из лабораторных работ 3 и 4 разработать программы, возвращающие несколько значений через поля структуры. Лабораторная работа № 6 ОСНОВЫ ПРОГРАММИРОВАНИЯ В СИСТЕМЕ Инструкция по работе в Code::Blocks Для реализации лабораторных работ необходима среда разработки
Code::Blocks, которая поддерживает языки Си С. Ее запуск производится через файл codeblocks.exe. При этом откроется окно редактирования сменю. Для создания нового проекта необходимо перейти по ссылке Create a new
project или File-New-Project. При этом откроется окно создания проекта, в котором нужно выбрать тип нового проекта – Console application Консольное приложение) и нажать на кнопку «Go» Перейти.

22 Далее при успешном создании приложения откроется окно Console applica-
tion, в котором необходимо выбрать из списка язык С или С+ (по заданию преподавателя) и нажать на кнопку «Next» Далее. В следующем окне нужно ввести имя проекта и путь для создаваемого проекта и нажать на кнопку «Next» Далее.

23 Поля следующего окна создания проекта должны быть заполнены так, как показано на рисунке. По нажатию кнопки «Finish» в менеджере проектов во вкладке Projects открыть папку Sources, найти файл main.c и открыть его.После чего откроется окно редактирования с заготовкой короткой программы «Hello, world!».

24 Далее набирается код программы, компилируется и выполняется нажатием клавиши или иконки, выделенной наследующем рисунке. При наличии ошибок в коде программы сообщения о них выводятся в окне «Build log». При компиляции программы в среде Code::Blocks наиболее частыми ошибками являются следующие.
1. Компиляция предыдущей программы вместо текущей Необходимо перезапустить Code::Blocks и еще раз скомпилировать нужную программу.
2. "Имя программы - Debug" uses an invalid compiler. Skipping... Необходимо правильно указать среде путь до компилятора (до папки CodeB-
locks/MinGW) вменю во вкладке Toolchain
executables.

25 Разработка программ из нескольких функций. Вычисление значения интегралов Пример Вычислить значение интеграла двумя методами методом прямоугольников и методом трапеций. Для каждого метода составить отдельную подпрограмму. Подынтегральная функция f = pow((x+1),(-1/3)).
# include
# include
double mpr(double a,double h,int n)
{ double s = 0, i2; int i; for (i=1; i<(n+1); i++) s = s + pow(((a+(i-0.5)*h)+1), (-1/3.0)); i2 = h*s;
return i2;
}
double mtr(double a,double b,double h,int n)
{ double s = 0, i3; int i;

26 for (i=1; ireturn i3;
}
void main()
{ double a,b,h; int n; Введите границы отрезка интегрирования scanf("%lg %lg",&a,&b); Введите количество отрезков разбиения scanf("%d",&n); h = (double)(b-a)/n; Интеграл по методу прямоугольников равен %lg\n", mpr(a,h,n)); Интеграл по методу трапеций равен %lg\n", mtr(a,b,h,n));
} Задание Разработать программу для вычисления значения определенного интеграла на интервале [a,b] (a, b подобрать самостоятельно) численными методами прямоугольников и трапеций [9] для следующих вариантов.
1.
dx
x
b
a

+
3 1
2.
dx
x
b
a

+ 3 2
3.

+
b
a
dx
x )
2
(
1 3
4.


b
a
x
dx
e
x
2 5.
tgdx
x
b
a

2 6.

+
b
a
dx
x
)
1
(
cos
2 7.
dx
xe
x
b
a

cos
8.
dx
x
x
b
a

ln
2 9.

+
+
b
a
dx
x
x
)
1
(
)
1
lg(
2 10.
dx
x
e
b
a
x

+

)
1
ln(
11.
xdx
e
b
a
x
2
sin
2

12.

+
b
a
dx
x
x
)
1
(
sin
3

27 13.
dx
e
e
b
a
x
x


+
)
(
14.
dx
x
arctg
x
b
a
)
(
2

15.

+
b
a
dx
x
x
x
)
cos
(sin cos
16.
dx
x
x
b
a
)
sin(

17.

b
a
dx
x
x
arctg
)
(
2 18.

+
+
b
a
dx
x
x
)
1
(
)
1
ln(
2 19.

+
b
a
dx
x )
)
ln(
1
(
1 20. Интервал интегрирования разбить равномерно на N > 50 частей. Библиографический список
1. ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, пpогpамм, данных и систем.
– М. : Изд-во стандартов, 1991.
– 26 с.
2. Крылов, Е.В. Техника разработки программ / Е.В. Крылов, В.А. Острей- ковский, Н.Г. Типикин. – М. : Высш. шк, 2008. – 469 с.
3. Пpогpаммиpование на Си С+ : практикум / А.В. Кpячков и д. – М. : Радио и связь, 1997. – 344 с.
4. Макогон, В.С. Язык программирования Си для начинающих / В.С. Мако- гон. – Одесса : НПФ "АСТРОПРИНТ", 1993. – 96 с.
5. Методы проектирования программ : метод. указания / сост. ОП. Шафее- ва. – Омск : Изд-во ОмГТУ, 2004. – 32 с.
6. Павловская, ТАСС. Программирование на языке высокого уровня / ТА. Павловская. – СПб. : Питер, 2002. – 462 с.
7. Подбельский, В.В. Программирование на языке Си / В.В. Подбельский,
С.С. Фомин. – Мс. Флоренсов, АН. Введение в программирование. Семантический подход : учеб. пособие / АН. Флоренсов. – Омск : Изд-во ОмГТУ, 1998. – 220 с.
9. Численные методы : метод. указания / сост ОБ. Малков, Е. Т. Гегечко- ри. – Омск : Изд-во ОмГТУ, 1995. – 28 с.
10. Шафеева, ОП. Технологии программирования. С+ : учеб. пособие / ОП. Шафеева. – Омск : Изд-во ОмГТУ, 2007. – 80 с.
11. Программирование на языке С : метод. указания / сост. ОП. Шафеева, ЮГ. Каворина, ГС. Шукурова. – Омск : Изд-во ОмГТУ, 2008. – 72 с.

28 Приложение А Операции языка С/С++ Вес Знак Наименование операции Вид операции Порядок
1
( )
[]
-> вызов функции выделение элемента массива выделение элемента структуры или объединения выделение элемента структуры, адресуемой (го) указателем выражение слева направо

2
!

-
++
--
&
* тип) sizeof логическое отрицание побитовое отрицание изменение знака (унарный минус) увеличение на 1 (инкремент) уменьшение на 1 (декремент) определение адреса обращение по адресу преобразование типа определение размера в байтах унарные справа налево

3
*
/
% умножение деление остаток отделения бинарные арифметич.

4
+
- сложение вычитание бинарные арифметич.

5
<<
>> сдвиг влево сдвиг вправо сдвига

6
<
<=
>
>= меньше чем меньше или равно больше чем больше или равно отношения

7
==
!= равно неравно отношения

8 & поразрядная операция "И" побитовая

9 ^ исключающее "ИЛИ побитовая

10 | поразрядная "ИЛИ" побитовая

11 && логическая операция "И" логическая

12 || логическая операция "ИЛИ" логическая

13 ?
: условная операция тернарная


29 14
=
+=
-=
*=
/=
%=
<<=
>>=
&=
|=
^= простое присваивание составные присваивания сложение с присваиванием вычитание с присваиванием умножение с присваиванием деление с присваиванием остаток отделения с присваиванием сдвиг двоичного числа влево с присв. сдвиг двоичного кода вправо с присв. побитовая операция "И" с присв. поразрядная операция "ИЛИ" c присв. исключающее "ИЛИ" с присв. присваивания бинарные для двоичных операндов, операция "запятая" (соединения) тернарная
→ Приложение Б Типы данных Обозначение Размер, байт Диапазон Тип данных char, signed char
1
-128...127 Символьный со знаком unsigned char
1 0...255 Символьный без знака short, short int, signed short, signed short int
2 -32768...32767 Короткое целое со знаком unsigned short, unsigned short int
2 0...65535 Короткое целое без знака int, signed, signed int
1, 2, 4 Зависит от реализации Целое unsigned, unsigned int
1, 2, 4 Зависит от реализации Целое без знака long, signed long, long int
4
-2147483648…
2147483647 Длинное целое со знаком unsigned long
4 0...4294967295 Длинное целое без знака float 8
-3.4e-38...
3.14e+38 Вещественное число с плавающей точкой double 8 ее Вещественное число удвоенной точности long double
10
-3.4e-4932...
.4e4932 Длинное вещественное число удвоенной точности

30 Приложение В Операторы языка С/С++
1. Оператор "Выражение" имеет три формы
<идентификатор>=<выражение>; // выполяет простое присваивание
<идентификатор><знак>=<выражение>; // составное присваивание,
<идентификатор>=<идентификатор>=<выражение>; реализует многоступенчатое присваивание справа налево. Примеры z = x; w += 2; /* w = w + 2*/ s = t = 1;
2. Условный оператор записывается следующим способом
if (выражение) оператор
else (оператор Пример a) if (k != 0) k = k +1; b) if (k) k++; else k = k-1; else k--;
3. Оператор цикла со счетчиком

for (<выражение1>;<условие выполнения>;<выражение2>) оператор где выражение - выражение инициализации параметра цикла, выражение - изменение параметра цикла. Пример for ( i=0; i<100; i++ ) sum += x[i]; // sum = sum + x[i];
4. Оператор цикла с предусловием
while ( выражение ) оператор Пример while (i<100) p++;
5. Оператор цикла с постусловием

do операторы while ( условие выполнения цикла ); Пример do
{ n *= i; i++;
}
while (i <= 100);
6. Оператор безусловного перехода

goto <идентификатор-метка>;
7. Оператор возврата из функции

return выражение

31 8. Оператор-переключатель:
switch ( выражение )
{
case константа : группа операторов
case константа : группа операторов
...
case константа : группа операторов
default: операторы
}; Метки определяют точки входа в тело оператора. Чтобы выполнить только одно действие, необходимо предусмотреть выход изданного оператора в нужном месте. Пример
switch (operand)
{ case 1: x *= y; break; case 2: x /= y; break; case 3: x += y; break; case 4: x -= y; break; case 5: x++; break; case 6: x++; break; case 7: case 8: case 9: printf("Not done\n"); break;
default: printf("Bye!\n"); exit(1);
}
9. Оператор break; организует досрочный выход из операторов while, do, for или switch.
10. Оператор continue; выполняет переход наследующую итерацию и выполняет первый оператор тела цикла while, do или for. Пример for (i = 0; i < 20; i++)
{ if (array[i] == 0) continue; array[i] = 1/array[i];
}

32 СОДЕРЖАНИЕ Лабораторная работа № 1 Основы программирования в системе Visual Studio С+ ............................... 3 Лабораторная работа № 2 Разработка программ из нескольких функций. Обработка двумерных массивов ............................................................................ 7 Лабораторная работа № 3 Применение адресов и указателей при возврате из функций нескольких значений ........................................................................ 11 Лабораторная работа № 4 Создание проектов из нескольких файлов в Eclipse IDE С/С++ .................. 15 Лабораторная работа № 5. Программирование с возвратом из функции структур .................................... 20 Лабораторная работа № 6. Основы программирования в системе Code::Blocks ........................................ 21 Библиографический список .................................................................................. 27 Приложение А. Операции языка С/С++ .............................................................. 28 Приложение Б. Типы данных ............................................................................... 29 Приложение В. Операторы языка С/С++ ............................................................ 30 Редактор ТА. Москвитина Компьютерная верстка – ТА. Бурдель
ИД № 06039 от 12.10.2001 г. Сводный темплан 2012 г. Подписано в печать 28.04.2012. Формат 60×84 1
/
16
. Бумага офсетная. Отпечатано на дупликаторе. Усл. печ. л. 2,0. Уч.-изд. л. 2,0. Тираж 50 экз. Заказ 348.
_________________________________________________________ Издательство ОмГТУ. 644050, г. Омск, пр. Мира, 11; т. 23-02-12 Типография ОмГТУ