Копия СистемыПрограммирования
.pdfМИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Омский государственный технический университет»
СИСТЕМЫ
ПРОГРАММИРОВАНИЯ
Методические указания к лабораторным работам
Омск Издательство ОмГТУ
2012
1
Составители: О. П. Шафеева И. А. Волчкова
С. А. Гончаров
Рассмотрены правила создания проектов в системах программирования
Visual Studio, Code::Blocks и Eclihse IDE C/С++, технологии проектирования сложных программ со структурами, указателями, состоящих из нескольких модулей и многих подпрограмм. Приводятся примеры разработки программ для задач разного уровня сложности.
Предназначены для выполнения студентами лабораторных работ по дисциплинам «Системы программирования», «Программирование», «Технологии разработки программного обеспечения».
Печатается по решению редакционно-издательского совета Омского государственного технического университета
© ОмГТУ, 2012
2
Лабораторная работа № 1
ОСНОВЫ ПРОГРАММИРОВАНИЯ В СИСТЕМЕ VISUAL STUDIO С/C++
Инструкция по работе в Visual Studio С/C++
Запуск Microsoft Visual Studio 2010 производится выполнением: Пуск >
Программы > Microsoft Visual Studio 2010 > Microsoft Visual Studio 2010. Для создания нового проекта необходимо выделить опции в меню:
Файл > Создать > Проект.
При этом откроется окно создания проекта, в котором нужно выбрать тип нового проекта. Для чего во вкладке «Установленные шаблоны» активизировать: Другие языки > Visual C++ > Пустой проект.
Далее необходимо ввести имя проекта и путь для создаваемого проекта и нажать на кнопку «Ok».
3
В появившимся окне «Обозреватель решений» необходимо создать файл исходного кода, для чего, щелкнуть правой кнопкой мыши на папке «Файлы исходного кода», выбрать: Добавить > Создать элемент.
Далее в появившемся окне «Добавление нового элемента» выбрать тип файла «Файл С++ (.срр)» и нажать на кнопку «Добавить».
Для добавления уже существующих файлов в проект, щелкнув правой кнопкой мыши на папке «Файлы исходного кода», выбрать: Добавить > Существующий элемент и в появившемся окне найти нужный файл.
При успешном создании файла набирается код программы, компилируется и выполняется нажатием клавиши <F5> или иконки, выделенной на следующем рисунке. При наличии ошибок в коде программы сообщения о них выводятся в окне «Список ошибок».
4
Форматированный ввод/вывод в С/С ++. Структура простой программы
Шаблон для ввода:
%[*][длина][модификатор] символ преобразования.
Символы преобразования:
d (или i) – используется для вывода целого десятичного числа (int), u – десятичное целое без знака,
f – вещественное число в естественной форме (float), e (Е) – вещественное число в экспоненциальной форме,
g (G) – наиболее короткая запись числа из двух форм e или f, c – для вывода отдельного символа,
s – для вывода строки символов, o – восьмеричное число,
x – шестнадцатеричное число (буквы строчные), X – шестнадцатеричное число (буквы прописные).
Шаблон для вывода:
%[флажок][длина][.точность][модификатор] символ преобразования.
1. Подготовить в окне редактирования программу, состоящую из одной главной функции:
#include <stdio.h> /* подключение библиотеки <stdio.h> */
5
void main() |
/* заголовок главной программы */ |
|
{ |
|
|
int x, y, z; |
/* объявление переменных целого типа */ |
|
x = 5; y = 6; |
/* операторы присваивания */ |
|
z = x + y; |
|
|
printf("сумма = %d \n", z); |
/* стандартная функция вывода из |
|
|
|
библ.<stdio.h> */ |
}
Сохранить программу в файле: имя0_1.с.
Откомпилировать (F5), при необходимости исправить ошибки путем установки маркера на нужное сообщение и нажатия клавиши <Enter>. Для перехода к следующей ошибке нажать <F8>.
Дополнить вывод значениями 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>. Iostream использует объекты cin, cout для передачи информации через стандартные потоки ввода и вывода. Эти объекты являются частью стандартного пространства имён — std, поэтому необходимо его подключение командой using namespace std.
Пример программы.
#include <iostream> using namespace std; void main()
6
{ |
|
int i; |
|
cout << "\t Язык С++\n"; |
// Вывод сообщения и перевод строки |
cout << "Введите число "; // Вывод подсказки |
|
cin >> i; |
// Ввод переменной |
cout<<" Вы ввели число "<< I << "\n"; // Вывод сообщения, значения и |
|
} |
// перевод строки |
Заменить в трех примерах форматированный ввод и вывод на потоковый.
Лабораторная работа № 2
РАЗРАБОТКА ПРОГРАММ ИЗ НЕСКОЛЬКИХ ФУНКЦИЙ. ОБРАБОТКА ДВУМЕРНЫХ МАССИВОВ
Пример 1. Даны три двумерных массива. Найти средние арифметические значения в каждом из них.
#include <stdio.h> // Передача в подпрограмму двумерного массива
#include <math.h>
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; // Тело функции printf("Введите размер матрицы: "); scanf("%d", &z);
printf("Введите массив из %dx%d элементов\n\n",z,z); for ( i=0; i<z; i++ )
{
for ( j=0; j<z; j++ )
{
printf("Введите %d-е элементы %d-й строки трех матриц: ", (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));
7
} |
|
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 ) { printf("Деление на ноль\n"); return 0; } |
return (double)s / (k*k); |
|
} |
// Конец функции |
Пример 2. Даны три массива A (5), B (5), C (5). Найти средние арифметические значения в каждом из них. Ввод элементов массивов оформить отдельной функцией.
#include <stdio.h> #include <math.h> int ka, kb, kc;
int a[5], b[5], c[5];
void vvod(int d[5], int *k) // Заголовок функции ввода
{
int i,z; // Тело функции printf("Введите число элементов: "); scanf("%d", &z); *k = z;
printf("Введите массив из %d элементов\n\n",z); for (i=0; i<z; i++)
{
printf("Введите %d-й элемент: ",(i+1)); scanf("%d",&d[i]);
}
}// Конец функции vvod
double sr(int k, int f[5]) // Заголовок функции
{
int i,s; s=0;
for (i=0; i<k; i++) s = s + f[i];
// if ( k==0 ) { printf("Деление на ноль\n"); return 0;}
8
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 B) / min A +(min C) / min(B +C) |
при min A < min B, |
|
Z = |
min(B +C) + min A в противном |
случае. |
|
2.Даны две квадратные вещественные матрицы шестого порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.
3.Вычислить все медианы для каждого из трех треугольников по заданным
в массивах A, B, C сторонам: m =0.5 2b2 |
+2c2 |
−a2 |
, |
m =0.5 |
2a |
2 |
+2c |
2 |
−b |
2 |
, |
a |
|
|
|
b |
|
|
|
|
mc=0.5 2a2 +2b2 −c2 . Вычисление медианы оформить функцией.
4.Даны два двумерных массива целых чисел размером 4х5 элементов каждый. Подсчитать количество отрицательных элементов в каждом из них.
5.Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и
С[1..7]. Найти общую сумму положительных элементов в массивах. Нахождение суммы элементов в массиве оформить функцией.
6.Даны два двумерных массива целых чисел размером 5х5 элементов каждый. Подсчитать произведение элементов главных диагоналей в каждом из них.
7.Даны два одномерных массива целых чисел A [1..8] и B [1..8]. Найти сумму их максимальных элементов. Для нахождения максимального элемента в массиве использовать функцию.
8.Даны две квадратные вещественные матрицы шестого порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.
9
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.По заданным целым массивам X [0..7] и Y [8..15] вычислить
∑7 |
xi2 |
при |
∑7 |
xi yi > 0, |
|
|
|
|
|
Z = i=70 |
|
|
i=0 |
|
∑yi2 |
в противном случае. |
|||
i=0 |
|
|
|
|
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 размером 5х5 каждая. Выбрать из них положительные и отрицательные элементы и записать соответственно в массивы Aпол, Аотр, Bпол, Вотр. Подсчитать количество чисел в каждом полученном массиве, число положительных и число отрицательных.
22. Даны одномерные массивы В [1..8], C [1..8]. Записать их в виде матриц ВВ[1..2,1..4], CC [1..2,1..4], найти наибольшие элементы в каждой.
10