Копия СистемыПрограммирования
.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
