Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Копия СистемыПрограммирования

.pdf
Скачиваний:
21
Добавлен:
30.03.2015
Размер:
1.54 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«Омский государственный технический университет»

СИСТЕМЫ

ПРОГРАММИРОВАНИЯ

Методические указания к лабораторным работам

Омск Издательство ОмГТУ

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