Компьютерные и информационные технологии
Создание работающего консольного приложения со средой C++ Builder, рассмотрение типов данных языка и операторов ввода-вывода. Ознакомление с операторами языка, использование операторов выбора и цикла. Описание работы с функциями и одномерными массивами.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 26.02.2014 |
Размер файла | 1005,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Лабораторная работа 1
Знакомство со средой C++ Builder 6.0. Создание консольного приложения
Цель работы - познакомиться со средой C++ Builder, создать работающее консольное приложение.
Теория
Среда разработки C++ Builder
C++ Builder представляет собой SDI-приложение (Single Document Interface - одно-документный интерфейс), т.е. приложение, способное загрузить и использовать одновременно только один документ. Главное окно C++ Builder содержит настраиваемую инструментальную панель (наверху слева) и палитру компонентов (наверху справа). Помимо этого, по умолчанию при запуске C++ Builder появляются окно инспектора объектов (слева) и форма нового приложения (справа). Под окном формы приложения находится окно редактора кода.
C++ Builder является очень мощной средой с большими возможностями для разработки различных приложений под Windows, представляющих оконный интерфейс пользователя. Но сейчас вы только начинаете изучать язык программирования высокого уровня C++, и поэтому вам проще будет писать программы для консольных приложений Win32. К программированию под Windows мы вернемся позже. Консольное приложение Win32 - это программа, которая запускается в окне DOS под Windows NT. Представляет собой окно с черным экраном и текстовым интерфейсом пользователя.
Задание
1. Запустите C++ Builder.
2. В меню File выберите Close all и щелкните по нему мышкой.
3. Откройте диалоговое окно выбора типа нового проекта, перейдя по меню: “File->New->Other…”
Рис. 1
Или нажмите на кнопку на панели “Standard”.
4. В открывшемся окне на вкладке “New” выберите “Console Wizard”, и нажмите “OK”.
Рис. 2
5.
6. Установите параметры как на рисунке и нажмите “OK”.
Рис. 3
7. Перед вами откроется диалоговое окно со сгенерированным начальным кодом:
Рис. 4
8. Модифицируйте программу как показано ниже:
#pragma hdrstop
#pragma argsused
#include <iostream.h>
#include <conio.h>
int main(int argc, char* argv[])
{
cout << "Hello world, this is my first program on C++!\n";
cout << "Press any key to exit";
while(!kbhit());
return 0;
}
9. Сохраните проект: “File->Save Project As”. В диалоговом окне выберите или создайте новую папку для проекта, задайте имя исходного файла, он имеет расширение “*.cpp” (файл с вашей программой):
Рис. 5
Затем задайте имя проекта, он имеет расширение “*.bpr” и содержит параметры и настройки вашего проекта:
Рис. 6
10. Для запуска программы на выполнение нажмите на кнопку “Run” на панели “Debug”:
11. Программа готова, и выполняется:
12.
Рис. 7
Лабораторная работа 2
Переменные и константы. Базовые типы. Арифметические операции
Цель работы - познакомиться с типами данных языка С++ и операторами ввода-вывода, приобрести навыки в записи выражений на языке C++.
Теория
Элементы языка C++
1. Алфавит языка, который включает:
1) прописные и строчные латинские буквы и знак подчеркивания;
2) арабские цифры от 0 до 9;
3) специальные знаки “{},| []()+-/%*.\':;&?<>=!#^
4) пробельные символы (пробел, символ табуляции, символы перехода на новую строку).
2. Из символов формируются лексемы языка:
1) идентификаторы - имена объектов C/C++-программ. В идентификаторе могут быть использованы латинские буквы, цифры и знак подчеркивания. Прописные и строчные буквы различаются, например, PROG1, prog1 и Prog1 - три различных идентификатора. Первым символом должна быть буква или знак подчеркивания (но не цифра). Пробелы в идентификаторах не допускаются;
2) ключевые (зарезервированные) слова - это слова, которые имеют специальное значение для компилятора. Их нельзя использовать в качестве идентификаторов;
3) знаки операций - это один или несколько символов, определяющих действие над операндами. Операции делятся на унарные, бинарные и тернарные по количеству участвующих в этой операции операндов;
4) константы - это неизменяемые величины. Существуют целые, вещественные, символьные и строковые константы. Компилятор выделяет константу в качестве лексемы (элементарной конструкции) и относит ее к одному из типов по ее внешнему виду;
5) разделители - скобки, точка, запятая пробельные символы.
Операции
Операция - это просто символ, который обозначает некоторое определенное действие над значением данного. В соответствии с количеством операндов, которые используются в операциях они делятся на унарные (один операнд), бинарные (два операнда) и тернарные (три операнда). Далее приведено описание основных операций (таблица).
Операция |
Описание |
|
Унарные операции |
||
++ |
Увеличение значения операнда на единицу:префиксная операция увеличивает операнд до его использования,постфиксная операция увеличивает операнд после его использования |
|
-- |
Уменьшение значения операнда на единицу:префиксная операция уменьшает операнд до его использования,постфиксная операция уменьшает операнд после его использования |
|
sizeof |
вычисление размера (в байтах) для объекта того типа, который имеет операнд |
|
- |
Унарный минус |
|
+ |
Унарный плюс |
|
! |
Логическое отрицание (НЕ). В качестве логических значений используется 0 (false) - ложь и не 0 (true) - истина, отрицанием 0 будет 1, отрицанием любого ненулевого числа будет 0 |
|
& |
Получение адреса операнда |
|
* |
Получение значения, находящегося по указанному адресу (разыменование) |
|
new |
Выделение памяти |
|
delete |
Освобождение памяти |
|
(type) |
Преобразование типа |
|
Бинарные операции |
||
Мультипликативные |
||
* |
умножение операндов арифметического типа |
|
/ |
деление операндов арифметического типа |
|
% |
получение остатка от деления целочисленных операндов |
Выражение (expression) - комбинация операций и операндов, результатом которой является определенное значение. Каждый операнд в выражении может, в свою очередь, быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета и ассоциативности выполнения операций. С помощью операций в выражениях образуются новые значения и изменяются значения переменных.
Далее приведены приоритеты операций (таблица).
Ранг |
Операции |
|
1 |
( ) [ ] -> . |
|
2 |
! ~ - ++ -- & * (тип) sizeof тип( ) |
|
3 |
* / % (мультипликативные бинарные) |
|
4 |
+ - (аддитивные бинарные) |
|
5 |
< > <= >= (отношения) |
|
6 |
== != (отношения) |
|
7 |
&& (конъюнкция «И») |
|
8 |
|| (дизъюнкция «ИЛИ») |
|
9 |
?: (условная операция) |
|
10 |
= *= /= %= -= &= ^= |= <<= >>= (операция присваивания) |
|
11 |
, (операция запятая) |
Константы в C++
Константа - это лексема, представляющая изображение фиксированного числового, строкового или символьного значения. Константы делятся на 5 групп:
1) целые;
2) вещественные (с плавающей точкой);
3) перечислимые;
4) символьные;
5) строковые.
Компилятор выделяет лексему и относит ее к той или другой группе, а затем внутри группы к определенному типу по ее форме записи в тексте программы и по числовому значению.
Целые константы могут быть десятичными, восьмеричными и шестнадцатеричными (таблица).
Название |
Определение |
Примеры |
|
Десятичная константа |
Последовательность десятичных цифр, начинающаяся не с 0, если это число не 0 |
8, 0, 192345 |
|
Восьмеричная константа |
Последовательность восьмеричных цифр, которым предшествует 0 |
026, 034, 017 |
|
Шестнадцатеричная константа |
Последовательность шестнадцатеричных цифр, которым предшествуют символы 0х или 0Х |
0хА, 0Х00F, 0х123 |
Вещественные константы могут иметь две формы представления: с фиксированной точкой и с плавающей точкой (таблица).
Название |
Вид |
Примеры |
|
Константы с фиксированной точкой |
[цифры].[цифры] |
5.7, .0001, 41. |
|
Константа с плавающей точкой |
[цифры][.][цифры]E|e[+|-] [цифры] |
0.5е5, .11е-5, 5Е3 |
Типизированные константы языка C++ - те же переменные, занимающие место в памяти и имеющие определенный тип, только их значение нельзя изменять, поэтому инициализация констант обязательно происходит сразу при объявлении. Чтобы сделать переменную неизменяемой, необходимо написать ключевое слово const перед ее объявлением, можно определить сразу несколько типизированных констант, разделяя их определения запятыми.
сonst Тип Имя константы 1=Значение константы 1, Имя константы 2=Значение константы 2;
Компилятор языка следит за тем, чтобы константа никогда не изменялась и считает ошибкой все операторы, где такое изменение могло бы произойти.
Перечислимые константы вводятся с помощью ключевого слова enum. Это обычные целые константы, которым приписаны уникальные и удобные для использования обозначения.
Пример
enum {one=1, two=2, three=3, four=4};
enum {zero,one,two,three};
enum {ten=10, three=3, four, five, six};
enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
Символьные константы - это один или два символа, заключенные в апострофы. Символьные константы, состоящие из одного символа, имеют тип char и занимают в памяти один байт, символьные константы, состоящие из двух символов, имеют тип int и занимают два байта. Последовательности, начинающиеся со знака \, называются управляющими, они используются:
1) для представления символов, не имеющих графического отображения, например:
\a - звуковой сигнал,
\b - возврат на один шаг,
\n - перевод строки,
\t - горизонтальная табуляция;
2) для представления символов: \ , ' , ? , ” ( \\, \' ,\? ,\” );
3) для представления символов с помощью шестнадцатеричных или восьмеричных кодов (\073, \0хF5);
4) строковая константа - это последовательность символов, заключенная в кавычки. Внутри строк также могут использоваться управляющие символы. Например:
”\nНовая строка”,
”\n\”Алгоритмические языки программирования””.
Переменные в С++
Переменные (variables) - поименованные области в памяти ЭВМ. ЯВУ используют переменные для хранения данных. Объявление переменной задает ее тип. Тип переменных определяет количество памяти, отводимой под переменную, а, также, ее правильное использование в программе. Имя переменной - правильный идентификатор (identifier).
Значение переменной - информация, которую содержит переменная в данный момент. Значение переменной может меняться. Наиболее явный способ изменить значение переменной заключается в использовании оператора присваивания (assignment statement). Первое присвоение значения переменной называется инициализацией (initialization). Если переменная не получила определенного значения, то говорят, что она не инициализирована.
Типы C++ можно разделить на простые и составные. К простым типам относят типы, которые характеризуются одним значением. В языке C++ определено 6 простых типов данных:
1) int (целый);
2) char (символьный);
3) wchar_t (расширенный символьный) (C++);
4) bool (логический) (C++);
5) float (вещественный);
6) double (вещественный с двойной точностью).
Типы float и double относятся к типам с плавающей точкой.
Существует 4 спецификатора типа, уточняющих внутреннее представление и диапазон стандартных типов
1) short (короткий);
2) long (длинный);
3) signed (знаковый);
4) unsigned (беззнаковый).
На разных машинах типы могут иметь различный размер, стандартом языка размер типов не установлен. Количество байт, действительно занимаемых типом в памяти, можно определить при помощи оператора sizeof. Например, если определена целая переменная int a, то ее размер - sizeof(a) байт.
char - символьный (занимает память как символ ASCII-кода -1 байт). Значение символьной переменной - любой допустимый символ, записываемый в апострофах. Например: 'ф', '5'. 'А' и 'а' - различаются;
int - целый - размер и диапазон значений зависят от компилятора и процессора: 2 байта для 16-разрядного компилятора, 4 - для 32-разрядного;
float - вещественный - числа с плавающей точкой, представляются в памяти двумя значениями: мантиссой и порядком (123456 = 0.123456Е+6). Тип float занимает 4 байта памяти;
double - вещественный двойной точности - позволяет представлять вещественные числа с большей точностью, занимает 8 байт.
На разных машинах типы могут иметь различный размер, стандартом языка размер типов не установлен. Количество байт, действительно занимаемых типом в памяти, можно определить при помощи оператора sizeof. Например, если определена целая переменная int a, то ее размер - sizeof(a) байт.
Ввод и вывод данных
В языке C/C++ нет встроенных средств ввода и вывода - он осуществляется с помощью функций, типов и объектов, которые находятся в стандартных библиотеках. Существует два основных способа: функции C и объекты C++.
Для ввода/вывода данных в стиле C используются функции, которые описываются в библиотечном файле stdio.h.
1) printf (форматная строка, список аргументов);
форматная строка - строка символов, заключенных в кавычки, которая показывает, как должны быть напечатаны аргументы.
Пример
printf (”Значение числа Пи равно %f\n”, pi);
Форматная строка может содержать:
1) символы печатаемые текстуально;
2) спецификации преобразования;
3) управляющие символы.
Каждому аргументу соответствует своя спецификация преобразования:
%d, %i - десятичное целое число;
%f - число с плавающей точкой;
%e,%E - число с плавающей точкой в экспоненциальной форме;
%u - десятичное число в беззнаковой форме;
%c - символ;
%s - строка.
В форматную строку также могут входить управляющие символы:
\n - управляющий символ новая строка;
\t - табуляция;
\a - звуковой сигнал и др.
Также в форматной строке могут использоваться модификаторы формата, которые управляют шириной поля, отводимого для размещения выводимого значения. Модификаторы - это числа, которые указывают минимальное количество позиций для вывода значения и количество позиций ля вывода дробной части числа:
%[-]m[.p]C, где
- - задает выравнивание по левому краю,
m - минимальная ширина поля,
p - количество цифр после запятой для чисел с плавающей точкой и минимальное количество выводимых цифр для целых чисел (если цифр в числе меньше, чем значение р, то выводятся начальные нули),
С - спецификация формата вывода.
printf("\nСпецификации формата:\n%10.5d - целое,
\n \\ %10.5f - с плавающей точкой\
\n %10.5e - \\в экспоненциальной форме
\n%10s - строка", 10, 10.0, 10.0, "10");
Будет выведено:
Спецификации формата:
00010 - целое
10.00000 - с плавающей точкой
1.00000е+001 - в экспоненциальной форме
10 - строка.
2) scanf (форматная строка, список аргументов);
в качестве аргументов используются адреса переменных.
Пример
scanf(“ %d%f ”, &x,&y);
При использовании библиотеки классов C++, используется библиотечный файл iostream.h, в котором определены стандартные потоки ввода данных от клавиатуры cin и вывода данных на экран cout, а также соответствующие операции:
1) << - операция записи данных в поток;
2) >> - операция чтения данных из потока.
Пример
#include <iostream.h>;
…
cout << “\nВведите количество элементов: ”;
cin >> n;
Операторы языка C заканчиваются точкой с запятой, а не разделяются ею: нельзя записать операторное выражение, не завершив его точкой с запятой. Исключением является составной оператор - после него точка с запятой не ставится.
Задание
1. Запустите C++ Builder.
2. Наберите программу, выполняющую следующие действия вашего варианта задания (таблица):
1) для задачи 1 записать выражение, зависящее от координат точки X1 и Y1 и принимающее значение TRUE, если точка принадлежит заштрихованной области, и FALSE, если не принадлежит;
2) для задачи 2 вычислить значение выражения, используя различные вещественные типы данных (float и double);
3) результаты всех вычислений вывести на печать.
3. Выполните компиляцию программы. При наличии ошибок внесите исправления.
4. Сдайте отчет преподавателю.
Варианты
№ |
Задача 1 |
Задача 2 |
|
1 |
, |
||
2 |
, |
||
3 |
, |
||
4 |
, |
||
5 |
, |
||
6 |
, |
||
7 |
, |
||
8 |
, |
||
9 |
, |
||
10 |
, |
||
11 |
, |
||
12 |
, |
||
13 |
, |
||
14 |
, |
||
15 |
, |
||
16 |
, |
||
17 |
, |
||
18 |
а=10, b=0.01 |
||
19 |
а=1000, b=0.0001 |
||
20 |
а=1000, b=0.0001 |
||
21 |
а=100, b=0.001 |
||
22 |
а=100, b=0.001 |
||
23 |
а=100, b=0.001 |
||
24 |
а=100, b=0.001 |
||
25 |
а=100, b=0.001 |
Лабораторная работа 3
Циклический и ветвящийся поток управления
Цель работы - познакомиться с операторами языка С++, получить практические навыки использования операторов выбора и операторов цикла.
Теория
С помощью операторов в программе задается поток управления (control flow) - порядок, в котором выполняется программа. Простая или линейная последовательность операторных выражений выполняется в порядке их перечисления в программе, но возможно изменить поток управления, применяя структуры ветвлений и циклов, а, также, переход, досрочное завершение и пропуск итераций.
1. Ветвящийся поток управления задают операторы выбора (selection statements).
2. Циклический поток управления задают операторы цикла (iteration statements).
Алгоритмы разветвляющейся структуры
Алгоритм разветвляющейся структуры или ветвление - программная конструкция, предполагающая выбор одной из нескольких ветвей алгоритма (определенной последовательности операторных выражений) в зависимости от некоторых условий.
Реализуют этот алгоритм операторы выбора (selection statements), которых существует две разновидности: ветвление с двумя ветвями-вариантами и множественное ветвление (переключатель). Они изменяют поток управления программы, заставляя ее выполнять лишь некоторую свою часть.
Ветвление с двумя ветвями-вариантами происходит по следующему алгоритму. Вначале проверяется условие. Если результат - истина, то выполняется первая ветвь алгоритма, а вторая пропускается. Если же результат - ложь, то, наоборот, выполняется вторая ветвь алгоритма, а первая пропускается. После этого управление будет передано операторному выражению, стоящему сразу за структурой ветвления.
Любая ветвь алгоритма может представлять собой как один оператор, так и блок (в том числе и другое ветвление).
Операторы выбора
Операторы выбора - это условный оператор и переключатель.
1. Ветвление с двумя ветвями-вариантами в языке C реализуется оператором if, имеющим следующий синтаксис:
if(Логическое выражение)
Оператор 1;
else
Оператор 2;
Пример
if(x>y) max=x; else max=y;
Ветвь if не может быть пустой (должен быть хотя бы пустой оператор ; ), ветвь else может отсутствовать.
Так как телом цикла может быть любая последовательность операторов (блок), то не исключается случай, когда им становится другой цикл или же ветвление.
2. Переключатель определяет множественный выбор.
Оператор switch можно рассматривать как усложненный if. Он позволяет выполнять один из нескольких блоков кода в зависимости oт значения выражения. Выражение может быть переменной, возвращаемым значением функции или любым арифметическим выражением C++. Синтаксис оператора switch:
switch (выражение)
{
case значение_1: блoк_1; break;
case значенue_2: блок_2; break;
…
case значение_n: блoк_n, break;
default: блок_last; break;
}
Оператор switch состоит из нескольких частей. Прежде всего, вы можете заметить выражение. Затем операторы case проверяют выражение на равенство определенной величине. Оператор switch позволяет выполнять различные блоки кода в зависимости от значения выражения. Блок_1 выполняется, когда выражение равно значение_1, блок_2 - когда выражение равно значение_2, и т.д. до блока n, когда выражение равно значение_n. Если выражение не равно ни одному из значение_1 - значение_n, выполняется блок_last. B каждом из case присутствует оператор break. Он используется для выхода из блока switch - это означает, что значение выражения совпало с одной из величин и оставшаяся часть оператора switch может быть игнорирована. B самом конце вы видите оператор default. Блок, следующий за этим оператором, выполняется при отсутствии совпадений, Включение оператора default не обязательно.
Пример
#include <iostream.h>
int main()
{
int i;
cout<<"\nEnter the number";
cin>>i;
switch(i)
{
case 1:cout<<"\nThe number is one";
case 2:cout<<"\n2*2="<<i*i;
case 3: cout<<"\n3*3="<<i*i;break;
case 4: cout<<"\n"<<i<<" is very beautiful!";
default:cout<<"\nThe end of work";
}
return 0;
}
Результаты работы программы:
1. При вводе 1 будет выведено:
The number is one
2. При вводе 2 будет выведено:
2*2=4
3. При вводе 3 будет выведено:
3*3=9
4. При вводе 4 будет выведено:
is very beautiful!
5. При вводе всех остальных чисел будет выведено:
The end of work
Операторы циклов
1. Цикл с заданным числом повторений.
Заданное число повторений организует цикл с параметром, его контролирует одна переменная. Цикл с параметром в языке C++ реализуется оператором for, имеющим следующий синтаксис:
for(Инициализация; Условие; Оператор управления)
Тело цикла
Пример
for(int i=1; i<=10; i++)
factorial*=i;
В цикле можно одновременно объявлять и инициализировать переменную, контролирующую цикл.
Цикл выполняется, пока условие принимает значение истина (не равно 0). Если условие ложно (равно 0), цикл не выполняется, если оно всегда истинно, то цикл будет бесконечным. Если условие опущено, то считается, что его значение - истина.
Если сразу после круглых скобок поставить точку с запятой, то этот оператор (пустой оператор) будет считаться телом цикла.
Оператор управления выполняется при каждой итерации и может быть любым. Он не заканчивается точкой с запятой.
Если на месте одного из операторов инициализации, условия или управления стоят несколько операторов, то они разделяются запятыми.
2. Цикл с постусловием.
Цикл с проверкой условия в конце цикла работает так: вначале выполняется тело цикла, после чего вычисляется логическое выражение, определяющее, повторять ли тело цикла. Тело цикла в любом случае выполнится хотя бы один раз (до проверки логического выражения в конце цикла).
Цикл с проверкой условия в конце цикла в языке C++ реализуется оператором do-while, имеющим следующий синтаксис:
do
{
Тело цикла
}
while(Логическое выражение);
Пример
do
{
cout << "Введите число: ";
cin >> x;
s+=x;
cout <<"Продолжить? (Y/N) ";
getchar(); /*Чистка буфера клавиатуры
cin >> answer; /*Чтение ответа
}
while((answer=='y')||(answer=='Y'));
Тело цикла do-while выполняется вновь, если логическое выражение, указанное в круглых скобках после слова while истинно (не равно 0), если же логическое выражение ложно (равно 0), то выполнение цикла прекращается. То есть: "выполнять тело цикла, пока выражение истинно".
3. Цикл с предусловием.
Цикл с проверкой условия в начале цикла работает так: сразу вычисляется логическое выражение, определяющее, повторять ли тело цикла. В отличие от цикла с проверкой условия в конце цикла, тело цикла может не выполнится ни разу. Чтобы не возникла неопределенность, все необходимые переменные нужно инициализировать перед циклом с проверкой условия в начале цикла. Цикл с проверкой условия в начале цикла в языке C реализуется оператором while, имеющим следующий синтаксис:
while(Логическое условие)
Тело цикла;
Пример
int n=10;
while (n != 1)
{
n--;
factorial*=n;
}
Тело цикла while выполняется вновь, если логическое выражение, указанное после слова while истинно (не равно 0), если же логическое выражение ложно (равно 0), то выполнение цикла прекращается. То есть: «пока выражение истинно, выполнять тело цикла».
Так как телом цикла может быть любая последовательность операторов (блок), то не исключается случай, когда им становится другой цикл.
Операторы перехода
Операторы перехода выполняют безусловную передачу управления.
1. break - оператор прерывания цикла.
{
оператор;
if (<выражение_условие>) break;
оператор;
}
Оператор break целесообразно использовать, когда условие продолжения итераций надо проверять в середине цикла.
Пример
// Найти сумму чисел, числа вводятся с клавиатуры до тех пор, пока не будет //введено 100 чисел или 0.
for(s=0, i=1; i<100;i++)
{
cin>>x;
if( x==0) break; // если ввели 0, то суммирование
//заканчивается
s+=x;
}
2. continue - переход к следующей итерации цикла. Он используется, когда тело цикла содержит ветвления.
Пример
//Найти количество и сумму положительных чисел
for( k=0,s=0,x=1;x!=0;)
{
cin>>x;
if (x<=0) continue;
k++; s+=x;
}
3. goto <метка> - передает управление оператору, который содержит метку.
В теле той же функции должна присутствовать конструкция:
<метка>:оператор;
Метка - это обычный идентификатор, областью видимости которого является функция. Оператор goto передает управления оператору, стоящему после метки. Использование оператора goto оправдано, если необходимо выполнить переход из нескольких вложенных циклов или переключателей вниз по тексту программы или перейти в одно место функции после выполнения различных действий.
Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и только один выход.
Нельзя передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию, на операторы, которые стоят после инициализации.
4. return - оператор возврата из функции. Он всегда завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [выражение];
Задание
1. Запустите C++Builder.
2. Для вашего варианта задания (таблица) напишите программу, используя все типы циклов (for, while, do while).
3. Выполните компиляцию программы. При наличии ошибок внесите исправления.
4. Сдайте отчет преподавателю.
Варианты
№ |
Задача 1 |
Задача 2 |
|
1 |
Дана последовательность из n целых чисел. Найти минимальный элемент в этой последовательности |
, всего n слагаемых |
|
2 |
Дана последовательность из n целых чисел. Найти количество четных элементов этой последовательности |
||
3 |
Дана последовательность целых чисел, за которой следует 0. Найти сумму элементов с нечетными номерами из этой последовательности |
Найти количество цифр в десятичном числе k |
|
4 |
Дана последовательность целых чисел, за которой следует 0. Найти количество элементов этой последовательности, кратных числу К |
||
Дана последовательность целых чисел, за которой следует 0. Найти номер минимального элемента в этой последовательности |
Сформировать n чисел Фибоначчи (a1=1, a2=1,ai=ai-1+ai-2). |
||
Дана последовательность целых чисел, за которой следует 0. Найти количество нечетных элементов этой последовательности |
, где n>2 |
||
Дана последовательность целых чисел, за которой следует 0. Найти количество четных элементов этой последовательности |
, всего n слагаемых |
||
Дана последовательность целых чисел, за которой следует 0. Найти минимальный элемент в этой последовательности |
|||
Дана последовательность целых чисел, за которой следует 0. Найти номер максимального элемента в этой последовательности |
Дана последовательность из 100 чисел. Найти номер первого отрицательного числа |
||
Дана последовательность целых чисел, за которой следует 0. Найти максимальный элемент в этой последовательности |
|||
Дана последовательность целых чисел, за которой следует 0. Найти сумму четных элементов этой последовательности |
|||
Дана последовательность целых чисел, за которой следует 0. Найти среднее арифметическое этой последовательности |
|||
Дана последовательность целых чисел, за которой следует 0. Найти разность минимального и максимального элементов в этой последовательности |
Найти сумму цифр в десятичном числе k |
||
Дана последовательность из n целых чисел. Найти разность минимального и максимального элементов в этой последовательности |
|||
Дана последовательность целых чисел, за которой следует 0. Найти сумму нечетных элементов этой последовательности |
Определить является ли число k простым |
||
Дана последовательность из n целых чисел. Найти количество нечетных элементов этой последовательности |
|||
Дана последовательность из n целых чисел. Найти количество элементов этой последовательности, кратных ее первому элементу |
, всего n слагаемых |
||
Дана последовательность целых чисел, за которой следует 0. Найти сумму минимального и максимального элементов в этой последовательности |
|||
Дана последовательность из n целых чисел. Найти количество элементов этой последовательности, кратных числу К |
, всего n слагаемых |
||
Дана последовательность из n целых чисел. Определить, каких чисел в этой последовательности больше: положительных или отрицательных |
Дано число k. Определить, является ли оно числом Фибоначчи |
||
Дана последовательность целых чисел, за которой следует 0. Найти сумму элементов с четными номерами из этой последовательности |
|||
Дана последовательность из n целых чисел. Найти количество элементов этой последовательности, кратных числу K1 и не кратных числу K2 |
Найти первое отрицательное число последовательности u=cos(ctg(n)), где n=1,2,3…. |
||
Дана последовательность целых чисел, за которой следует 0. Найти количество элементов этой последовательности, кратных ее первому элементу |
Определить является ли число k степенью 3 |
||
Дана последовательность целых чисел, за которой следует 0. Найти количество элементов этой последовательности, кратных числу K1 и не кратных числу K2 |
|||
Дана последовательность целых чисел, за которой следует 0. Определить, каких чисел в этой последовательности больше: положительных или отрицательных |
Сформировать все числа Фибоначчи не превышающие заданное число Q |
Лабораторная работа 4
Функции. Вызов функций с формальными параметрами, передаваемыми по значению
Цель работы - приобрести навыки работы с функциями в языке С++.
Функция
Функция - это подпрограмма, которая может оперировать данными и возвращать значение. Каждая программа на языке С++ содержит, по крайней мере одну функцию - main(), которая при запуске программы вызывается автоматически. Функция main() может вызывать другие функции, а те, в свою очередь, могут вызывать следующие и т.д.
Каждая функция состоит из заголовка и тела. Заголовок - это прототип, только в конце точка с запятой не ставится. В заголовке задается имя функции, список параметров, тип возвращаемого значения. Тело функции - это блок. Тело функции определяет алгоритм работы.
Рассмотрим программу, печатающую степени числа 2:
float pow(float, int); /*pow() определена в другом месте*/
main()
{
for (int i=0; i<10; i++)
cout << pow(2,i) << "\n";
}
Первая строка функции - описание, указывающее, что pow - функция, получающая параметры типа float и int и возвращающая float. Описание функции используется для того, чтобы сделать определенными обращения к функции в других местах.
При вызове функции тип каждого параметра функции сопоставляется с ожидаемым типом точно так же, как если бы инициализировалась переменная описанного типа. Это гарантирует надлежащую проверку и преобразование типов. Например, обращение pow(12.3,"abcd") вызовет недовольство компилятора, поскольку "abcd" является строкой, а не int. При вызове pow(2,i) компилятор преобразует 2 к типу float, как того требует функция. Функция pow может быть определена следующим образом.
Пример
float pow(float x, int n)
{
if(n<0)error("извините, отрицательный показатель для pow()");
switch (n)
{
case 0: return 1;
case 1: return x;
default: return x*pow(x,n-1);
}
}
Первая часть определения функции задает имя функции, тип возвращаемого ею значения (если таковое имеется) и типы и имена ее параметров (если они есть). Значение возвращается из функции с помощью оператора return.
Каждая функция в программе на С++ должна быть один раз определена и может быть объявлена несколько раз по мере необходимости. По правилам языка С++ функция должна быть определена (или объявлена) до того, как использована (вызвана).
Определение функции состоит из двух частей: заголовка и тела. В общем случае заголовок функции включает следующие части:
1) спецификаторы класса памяти: extern или static. По умолчанию - extern;
2) тип возврата, возможно void. По умолчанию - int;
3) модификаторы;
4) имя функции;
5) список объявления параметров;
6) спецификацию исключений throw (список типов исключений).
Спецификация класса памяти влияет на область видимости имени функции. Так спецификатор extern означает, что объявленная функция доступна из любого места программы.
Тело функции - это блок, т. е. последовательность описаний переменных и операторов, заключенных в фигурные скобки. Даже если функция не выполняет никаких действий, тело функции должно присутствовать в определении. В этом случае тело функции будет состоять просто из скобок { }.
Примеры определений функций
void print (char *name, int value) //Ничего не возвращает
{
cout << “\n” << name << value; //Нет оператора return
}
float min (float a, float b) //В функции два оператора возврата
{
if (a<b) return a; //Возвращает минимальное
return b; //из значений аргумента
}
float cube (float x) // возвращает значение типа float
{
return x*x*x; // Возведение в куб вещественного числа
}
void write (void) //Ничего не возвращает,
{ //ничего не получает
cout << “\n имя: ”; //Всегда печатает одно и то же
}
Определения функций не должны быть вложенными. В отличие от определений, прототипы - объявления функции - могут быть вложенными в другие функции. Главное, чтобы прототип был прописан до вызова соответствующей функции.
Пример
float Max(float x, float y) // определение до вызова
{
return (x<y ? y : x);
}
void main ()
{
float Cube (float a); // прототип вложен до определения в
//главную функцию
int cc=15, k=2;
k=Cube (k);
cc=5+Max(k, cc)/3+ Cube(k); // вызовы функций
cout << c;
}
float Cube (float x) //определение функции Cube
{
return (x*x*x);
}
Результат: 522
Параметры
Параметр - это значение некоторого данного, которое нужно передать из одной функции в другой. При передаче параметров они сохраняются в стеке. Вы можете менять параметры в функции, но, так как вы меняете параметр, сохраненный в стеке, то при возврате из функции все изменения будут потеряны. Если вы хотите получить из функции модифицированные параметры, то следует передавать в функцию не сами параметры, а их адреса, и в функции, соответственно работать с адресами.
Пример
#include <iostream.h>
void main()
{
int fun(int x);
int a=5;
fun(a);
cout << fun(a);
}
int fun(int x)
{
return (x++);
}
Результат: 6.
Несмотря на то, что в функции параметр меняется, в основной программе значение переменной a остается неименной. Вот как выглядит та же программа при работе с адресами:
Пример
#include <iostream.h>
void main()
{
int fun(int *x);
int a=5;
fun(&a);
cout << fun(a);
}
int fun(int *x)
{
return (*x++);
}
Результат: 6.
Локальные и внешние переменные
Разность между ними состоит в определении области действия. Внешние (external) переменные отличаются тем, что имеют глобальную область действия, доступны любой функции.
Пример:
int x=456;
main()
{
cout << x;
}
Хотя x определена за пределами функции main, она доступна в этой функции.
Локальные переменные доступны только в теле тех функций, в которых они определены. Если возникает конфликт между именами глобальных и локальных переменных, то выигрывают локальные.
Пример
int x=456; //глобальное описание
main()
{
int x=675; // локальное описание
cout << x;
}
Результат: 675.
Задание
1. Запустите C++Builder.
2. Составьте программу в соответствии с вашим вариантом задания, вычисляющую многократно значение функции при изменении аргумента в указанном диапазоне и с заданным шагом (см. таблицу вариантов задания). Вычисления проводить в отдельной функции. Организовать вывод значения аргумента и вычисленного значения функции в виде таблицы:
x |
y(x) |
|
… |
… |
|
… |
… |
3. Выполнить компиляцию программы. При наличии ошибок внести исправления.
4. Сдайте отчет преподавателю.
Варианты
№ |
Функция |
Диапазон изменения аргумента и шаг (h) |
|
Лабораторная работа 5
Одномерные массивы
оператор язык функция массив
Цель работы - познакомиться с одномерными массивами, приобрести навыки написания программ на языке C++ с использованием одномерных массивов.
Теория
Массив - это структура однотипных данных, занимающих непрерывную область памяти. Массив имеет размер - количество элементов в нем. Определение одномерного массива:
type имя_массива [константное_выражение];
Здесь имя_массива - идентификатор; константное_выражение - количество элементов в массиве; type - произвольный тип данных языка C++, который будут иметь элементы массива, например, int, double и т.д. В некоторых случаях допустимо описание массива без указания количества его элементов, т.е. без константного выражения в квадратных скобках.
Каждый элемент массива имеет свой номер (также называемый индексом), обращение к элементу массива осуществляется путем указания его индекса. В языке C++ элементы нумеруются, начиная с 0, поэтому последний элемент массива имеет номер на 1 меньше размера массива.
Пример
//Здесь создаются 4 элемента массива - a[0], a[1], a[2], a[3].
float a[4];
При определении массива может выполняться его инициализация, т.е. элементы массива получают конкретные значения. Инициализация выполняется по умолчанию, если массив статический или внешний. В этих случаях всем элементам массива компилятор автоматически присваивает нулевые значения.
Пример
void f (void)
{
static float F[4]; //Внутренний статический массив
long double A[10] ; //Массив автоматической памяти
}
void main ()
{
extern int D[]; //Описание массива
…
f ();
…
}
int D[8]; //Внешний массив (определение)
Массивы D[8], F[4] инициализированы нулевыми значениями.
Явная инициализация элементов массива разрешена только при его определении и возможна двумя способами: либо с указанием размера массива в квадратных скобках, либо без явного указания (без конкретного выражения) в квадратных скобках.
Пример
char СН[] = { 'А', 'В', 'С', 'D'}; //Массив из 4 элементов
int IN[6] = { 10, 20, 30, 40 }; //Массив из 6 элементов
char STR[] == "ABCD", //Массив и» 5 элементов
В тех случаях, когда массив не определяется, а описывается, список начальных значений задавать нельзя. В описании массива может отсутствовать и его размер.
Пример
/*программа, которая создает массив типа int[], заданного размера, считывает с клавиатуры его элементы, затем прибавляет к каждому элементу массива число 1, затем выводит результат на экран*/
#include <iostream.h>
int main()
{
const int n=20; //Размер массива
int i; //Счетчик в циклах
int arr[n]; //Объявление массива
//Считываем массив
cout<<"Введите "<<n<<" целых чисел: ";
for(i=0;i<n; ++i)
cin>>arr[i];
//Прибавляем по 1 к каждому элементу
for(i=0;i<n;++i)
arr[i]+=1;
//Выводим массив на экран
for(i=0;i<n;++i)
cout<<arr[i]<<" ";
cout<<endl;
return 0;
}
При написании программ часто возникает потребность в присвоении переменной случайного значения или в заполнении массива случайными числами. Для этого используется генератор случайных значений rand ()%n, который генерирует псевдослучайные числа в диапазоне от 0 до n-1. Для того чтобы генератор работал, необходимо подключить библиотеки <stdlib.h> и <stdio.h>, а до использования генератора написать функцию randomize(), которая инициализирует генератор.
Пример
1.
/*программа, которая выводит на экран 10 чисел, сгенерированных случайным образом*/
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i;
randomize();
printf("Ten random numbers from 0 to 99\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
2.
/*программа, которая заполняет массив с помощью генератора случайным чисел*/
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i;
randomize();
const int n=20;
int arr[n];
for(i=0;i<n; ++i)
arr[i]= rand() % 100;
return 0;
}
Задание
1. Запустите C++Builder.
2. Составьте программу в соответствии с вашим вариантом задания (таблица), используя массивы. Размер массива задайте сами. Сделайте три варианта программы. В первом элементы массива определяются в программе, во втором задаются пользователем, а в третьем заполняются с помощью генератора случайных чисел. Исходный и конечный массивы выведите на экран.
3. Выполните компиляцию программы. При наличии ошибок внести исправления.
4. Сдайте отчет преподавателю.
Варианты
№ |
Задача |
Диапазон изменения значений элементов массива |
|
1 |
Вывести на экран все четные числа в массиве |
[-100…100] |
|
2 |
Определить число нулей и число единиц в массиве |
0 или 1 |
|
3 |
Поменять 0 и 1 ролями |
0 или 1 |
|
4 |
Определить, сколько значений в массиве превышают среднее значение |
[-50…120] |
|
5 |
Сгруппировать все ненулевые значения в начале массива |
[-1…4] |
|
6 |
Вычислить произведение элементов массива |
[-20.5…50.5] |
|
7 |
Вывести на экран все нечетные числа в массиве |
[-60…20] |
|
8 |
Найти количество положительных элементов в массиве |
[-30…40] |
|
9 |
Определить, есть ли в данном массиве два соседних элемента с одинаковыми знаками |
[-100…50] |
|
10 |
Переставить элементы массива в обратном порядке |
[1…78] |
|
11 |
Определить, сколько в массиве элементов, которые строго больше обоих своих соседей |
[-3.2…104.2] |
|
12 |
Сгруппировать все нулевые значения в начале массива |
[-2…1] |
|
13 |
Найти значение наибольшего элемента в массиве |
[-40…70] |
|
14 |
Циклически сдвинуть элементы массива вправо |
[1…66] |
|
15 |
Отсортировать массив по возрастанию |
[-25…50] |
|
16 |
Поменять у элементов массива знаки |
[-36…70] |
|
17 |
Вычислить разность элементов массива |
[45.7…157.7] |
|
18 |
Положительные элементы массива поменять местами с отрицательными |
[-100…200] |
|
19 |
Переставьте соседние элементы массива |
[-25…80] |
|
20 |
Найти значение наименьшего элемента в массиве |
[-200…-30] |
|
21 |
Найти количество отрицательных элементов в массиве |
[-50…30] |
|
22 |
Найти количество элементов массива, которые больше п... |
Подобные документы
Общие данные об основных операторах языка SQL. Интерактивный режим работы. Использование языка SQL для выбора информации из таблиц, для вставки, редактирования и удаления данных в них. Связь между операциями реляционной алгебры и операторами языка SQL.
реферат [146,5 K], добавлен 06.02.2015Анализ операторов ввода и вывода, а также характеристика форматов, используемых в этих операторах. Оформление законченной программы с применением этих операторов. Структура программы. Алфавит языка и типы данных. Ввод и вывод информации. Форматный вывод.
лабораторная работа [62,0 K], добавлен 15.07.2010Конструкции условных операторов if-else и простые типы языка Си. Общая схема работы компилятора. Алгоритм построения дерева разбора, строки вывода синтаксического разбора. Построение обратной польской записи как формы внутреннего представления программы.
курсовая работа [1,3 M], добавлен 01.06.2013Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016Строгая типизация и наличие средств структурного (процедурного) программирования императивного языка Pascal. Структура программы, выражения, строки. Правила и описание типов, процедур и функций, операторов ввода - вывода, модулей и подпрограмм.
курсовая работа [37,3 K], добавлен 28.06.2008Характеристика языка программирования С++. Описание классов и методов. Выполнение решения вычислительных процессов по заданным формулам. Создание диалогового приложения. Разработка инструкции пользователя. Операции над одномерными и двумерными массивами.
дипломная работа [2,0 M], добавлен 16.04.2017Принцип работы основных операторов языка программирования Turbo-Paskal: оператор присваивания, выбора Case, безусловного перехода, цикла, уловный, составной. Формальное описание и вызов функции и процедуры. Требования к списку фактических параметров.
реферат [261,8 K], добавлен 09.02.2011Особенности синтаксиса языка программирования С++. Создание панели меню, для получения информации о программе, сохранения результата и выхода из программы. Работа с файлами, двумерными и одномерными динамическими массивами, функциями, строками и циклами.
курсовая работа [782,3 K], добавлен 06.02.2016Внутренний язык СУБД для работы с данными. Результат компиляции DDL-операторов. Описание DML-языка, содержащего набор операторов для поддержки основных операций манипулирования содержащимися в базе данными. Организация данных и управление доступом в SQL.
лекция [131,0 K], добавлен 19.08.2013Изучение циклических операторов: оператора цикла, управляемого счетчиком, оператора цикла с предусловием и постусловием. Минимизированные функции, текст программы. Алгоритм работы приложения по нахождению функции с помощью операторов break и continue.
лабораторная работа [474,2 K], добавлен 23.11.2014Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011Встроенные типы данных, основные конструкции, структуры и применение языка Javа. Введение в интегрированную среду разработки Eclipse. Листинг программы, иллюстрирующей работу с одномерными массивами (создание массива). Спецификация класса Figure.
методичка [1,4 M], добавлен 30.06.2009Язык структурированных запросов SQL (Structured Query Language) и его место в сфере доступа к информации в реляционных базах данных. Структура и основные типы данных языка. Синтаксис и семантика главных операторов SQL, последние стандарты языка.
реферат [98,7 K], добавлен 29.03.2012Построение базовой линейной структуры и организация ввода с формы переменной. Определение значения функции и построение блок-схемы базовой структуры "ветвление". Использование цикла со счетчиком. Рассмотрение особенностей работы с одномерными массивами.
контрольная работа [1,4 M], добавлен 10.12.2021Ознакомление с понятием, особенностями объявления, инициализацией и принципами работы с одномерными и двумерными массивами. Изучение смысла тернарной операции вывода элементов матрицы. Рассмотрение сущности и способов использования указателей переменных.
лабораторная работа [22,1 K], добавлен 15.07.2010Изучение функций и возможностей среды разработки языка программирования Pascal. Рассмотрение работы с одномерными и двумерными массивами, со строками и числами. Математическая формулировка задач. Разработка алгоритмов, описание структуры программ.
курсовая работа [879,8 K], добавлен 11.02.2016Общая характеристика интерфейса языка программирования Delphi. Рассмотрение окна редактора кода, конструктора формы, инспектора объектов и расширения файлов. Ознакомление с основными этапами создания и сохранения простого приложения; проверка его работы.
презентация [184,3 K], добавлен 18.03.2014Понятие и характеристика операторов ввода и вывода информации, случаи их применяется в программах и основные виды: составной оператор Begin ... end, условный оператор If. Суть операторов безусловного перехода и циклических процессов, примеры применения.
реферат [27,9 K], добавлен 03.03.2010Введение в API-программирование. Структура API-программ. Организация ввода-вывода в консольном приложении Windows. Организация низкоуровнего консольного ввода-вывода. Расширенная поддержка клавиатуры в консоли. Поддержка работы с мышью в консоли.
курсовая работа [91,0 K], добавлен 10.02.2015Программирование линейных алгоритмов. Процедуры ввода READ и READLN и вывода WRITE и WRITELN. Примеры решения задач на языке Паскаль. Оператор присваивания и выражения. Основные способы формирования структурных операторов. Операторы вызова процедур.
курсовая работа [44,3 K], добавлен 18.03.2013