close

Вход

Забыли?

вход по аккаунту

?

S - Lab 1(1)

код для вставкиСкачать
Лабораторная работа 1
Основы объектно-ориентированного языка C++
1 Типы данных
Стандарт С89 определяет пять фундаментальных типов данных: char - символьные данные, int - целые, float - с плавающей точкой, double - двойной точности, void - без значения. На основе этих типов формируются другие типы данных. Размер (объем занимаемой памяти) и диапазон значений этих типов данных для разных процессоров и компиляторов могут быть разными. Однако объект типа char всегда занимает 1 байт. Размер объекта int обычно совпадает с размером слова в конкретной среде программирования. В большинстве случаев в 16-разрядной среде (DOS или Windows 4.1) int занимает 16 битов, а в 32-разрядной (Windows 95/98/NT/2000) - 32 бита. Однако полностью полагаться на это нельзя, особенно при переносе программы в другую среду. Необходимо помнить, что стандарт С обусловливает только минимальный диапазон значений каждого типа данных, но не размер в байтах.
Конкретный формат числа с плавающей точкой зависит от его реализации в трансляторе. Переменные типа char обычно используются для обозначения набора символов стандарта ASCII, символы, не входящие в этот набор, разными компиляторами обрабатываются по-разному. Диапазон значений типов float и double зависит от формата представления чисел с плавающей точкой. Стандарт С определяет для чисел с плавающей точкой минимальный диапазон значений от 1Е-37 до 1Е+37. Минимальное количество цифр мантиссы для типов с плавающей точкой приведено в табл. 1.
Таблица 1 ТипТипичный размер в битахМинимально допустимый диапазон значенийchar8от -127 до 127unsigned char8от 0 до 255signed char8от -127 до 127int16 или 32от -32767 до 32767unsigned int16 или 32от 0 до 65535signed int16 или 32то же, что intshort int16от -32767 до 32767unsigned short int16от 0 до 65535signed short int16то же, что short intlong int32от -2 147 483 647 до 2 147 483 647long long int64от -(263-1) до (263-1), добавлен стандартом C99signed long int32то же, что long intunsigned long int32от 0 до 4 294 967 295unsigned long long int64от 0 до (264-1), добавлен в C99float32от 1E-37 до 1E+37, с точностью не менее 6 значащих десятичных цифрdouble64от 1E-37 до 1E+37, с точностью не менее 10 значащих десятичных цифрlong double80от 1E-37 до 1E+37, с точностью не менее 10 значащих десятичных цифр 2 Переменные
2.1 Объявление переменных
Переменная - это именованный участок памяти, в котором хранится значение, которое может быть изменено программой. Все переменные перед их использованием должны быть объявлены. Общая форма объявления имеет такой вид: тип список_переменных;
Здесь тип означает один из базовых или объявленных программистом типов (если необходимо - с одним или несколькими спецификаторами), а список_переменных состоит из одного или более идентификаторов, разделенных запятыми. Ниже приведены примеры объявлений: int i,j,l;
short int si;
unsigned int ui;
double balance, profit, loss;
Необходимо помнить, что в С имя переменной никогда не определяет ее тип. Объявление переменных может быть расположено в трех местах: внутри функции, в определении параметров функции и вне всех функций. Это - места объявлений соответственно локальных, формальных параметров функций и глобальных переменных. В языке С имена переменных, функций, меток и т.п. называются идентификаторами. Длина идентификатора (количество символов, из которых состоит идентификатор) является натуральным числом, обычно идентификатор представляет собой последовательность из одного или нескольких символов. Первый символ должен быть буквой или символом подчеркивания, последующие символы должны быть буквами, цифрами или символами подчеркивания. Ниже приведены примеры правильных и неправильных записей идентификаторов:
Таблица 1
Правильные Неправильные count 1count test23 hi!here high_balance high...balance 2.2 Квалификатор const
Переменная, к которой в объявлении (декларации) применен квалификатор const, не может изменять свое значение. Ее можно только инициализировать, то есть присвоить ей значение в начале выполнения программы. Компилятор может поместить переменную этого типа в постоянное запоминающее устройство, так называемое ПЗУ (ROM, read-only memory). Например, в объявлении const int a=10;
создается переменная с именем а, причем ей присваивается начальное значение 10, которое в дальнейшем в программе изменить никак нельзя. Переменную, к которой в объявлении применен квалификатор const, можно использовать в различных выражениях. Однако свое значение она может получить только в результате инициализации или с помощью аппаратно-зависимых средств. 2.3 Специальные символьные константы
Чтобы представить большинство символьных констант, достаточно заключить соответствующий символ в одинарные кавычки. Но некоторые символы, например, символ возврата каретки, требуют специального представления. В языке С определены специальные символьные константы, приведенные в табл. 2. Иногда их называют ESC-последовательностями, управляющими последовательностями и символами с обратным слэшем. Управляющие последовательности можно использовать вместо ASCII-кодов для обеспечения лучшей переносимости программы. В следующем примере программа выводит символ новой строки (т.е. переходит на новую строку), выводит символ табуляции (т.е. переходит на первую позицию табуляции) и, наконец, выводит строку Простой тест. #include <stdio.h>
int main(void)
{
printf("\n\tПростой тест.");
return 0;
}
Таблица 2. Специальные символьные константы
КодНазначение\b Удаление предыдущего символа \f Подача бумаги \n Новая строка \r Возврат каретки \t Горизонтальная табуляция \" Двойные кавычки \' Одинарная кавычка \\ Обратный слэш \v Вертикальная табуляция \a Сигнал \? Знак вопроса \N Восьмеричная константа (N - восьмеричное представление) \xN Шестнадцатеричная константа (N - шестнадцатеричное представление) 3 Операции
Язык С содержит большое количество встроенных операций. Их роль в С значительно больше, чем в других языках программирования. Существует четыре основных класса операций: арифметические, логические, поразрядные и операции сравнения. Кроме них, есть также некоторые специальные операторы, например, оператор присваивания. 3.1 Оператор присваивания
Оператор присваивания может присутствовать в любом выражении языка С. Этим С отличается от большинства других языков программирования (Pascal, BASIC и FORTRAN), в которых присваивание возможно только в отдельном операторе. Общая форма оператора присваивания: имя_переменной=выражение;
Выражение может быть просто константой или сколь угодно сложным выражением. В отличие от Pascal или Modula-2, в которых для присваивания используется знак ":=", в языке С оператором присваивания служит единственный знак присваивания "=". Адресатом (получателем), т.е. левой частью оператора присваивания должен быть объект, способный получить значение, например, переменная. 3.2 Множественные присваивания
В одном операторе присваивания можно присвоить одно и то же значение многим переменным. Для этого используется оператор множественного присваивания, например: x = y = z = 0;
Следует отметить, что в практике программирования этот прием используется очень часто. 3.3 Составное присваивание
Составное присваивание - это разновидность оператора присваивания, в которой запись сокращается и становится более удобной в написании. Например, оператор x = x+10;
можно записать как x += 10;
Оператор "+=" сообщает компилятору, что к переменной х нужно прибавить 10. "Составные" операторы присваивания существуют для всех бинарных операций (то есть операций, имеющих два операнда). Любой оператор вида переменная = переменная оператор выражение;
можно записать как переменная оператор = выражение;
Еще один пример: x = x-100;
означает то же самое, что и x -= 100;
Составное присваивание значительно компактнее, чем соответствующее простое присваивание, поэтому его иногда называют стенографическим (shorthand) присваиванием. В программах на С этот оператор широко используется, поэтому необходимо хорошо его усвоить. 3.4 Арифметические операции
В табл. 3 приведены арифметические операции С. Операции +, -, * и / работают так же, как и в большинстве других языков программирования. Их можно применять почти ко всем встроенным типам данных. Если операция / применяется к целому или символьному типам, то остаток от деления отбрасывается. Например, результатом операции 5/2 является 2.
Оператор деления по модулю % в С работает так же, как и в других языках, его результатом является остаток от целочисленного деления. Этот оператор, однако, нельзя применять к типам данных с плавающей точкой.
Таблица 3
Оператор Операция - Вычитание, так же унарный минус + Сложение * Умножение / Деление % Остаток от деления -- Декремент, или уменьшение ++ Инкремент, или увеличение 3.5 Операции увеличения (инкремента) и уменьшения (декремента)
В языке С есть два полезных оператора, значительно упрощающие широко распространенные операции. Это инкремент ++ и декремент --. Оператор ++ увеличивает значение операнда на 1, а - уменьшает на 1. Иными словами, x = x+1;
можно записать как ++x;
Аналогично оператор x = x-1;
равносилен оператору x--;
Как инкремент, так и декремент могут предшествовать операнду (префиксная форма) или следовать за ним (постфиксная форма). Например x = x+1;
можно записать как в виде ++x;
так и в виде x++;
Однако префиксная и постфиксная формы отличаются при использовании их в выражениях. Если оператор инкремента или декремента предшествует операнду, то сама операция выполняется до использования результата в выражении. Если же оператор следует за операндом, то в выражении значение операнда используется до выполнения операции инкремента или декремента. То есть для выражения эта операция как бы не существует, она выполняется только для операнда. Например, x = 10;
y = ++x;
присваивает у значение 11. Однако если написать x = 10;
y = x++;
то переменной у будет присвоено значение 10. В обоих случаях х присвоено значение 11, разница только в том, когда именно это случилось, до или после присваивания значения переменной у. Большинство компиляторов С генерируют для инкремента и декремента очень быстрый, эффективный объектный код, значительно лучший, чем для соответствующих операторов присваивания. Поэтому везде, где это возможно, рекомендуется использовать инкремент и декремент. Приоритет выполнения арифметических операторов следующий: Наивысший ++ --
- (унарный минус)
* / %
Наинизший + -
Операции с одинаковым приоритетом выполняются слева направо. Используя круглые скобки, можно изменить порядок вычислений. В языке С круглые скобки интерпретируются компилятором так же, как и в любом другом языке программирования: они как бы придают операции (или последовательности операций) наивысший приоритет. 3.6 Операции сравнения и логические операции
Операции сравнения - это операции, в которых значения двух переменных сравниваются друг с другом. Логические же операции реализуют средствами языка С операции формальной логики. Между логическими операциями и операциями сравнения существует тесная связь: результаты операций сравнения часто являются операндами логических операций. Таблица 4
Операторы сравненияОператор Операция >Больше чем>=Больше или равно<Меньше чем<=Меньше или равно==Равно!=Не равноЛогические операцииОператорОперация&&И||ИЛИ!НЕ, отрицание 4 Консольный ввод-вывод
В языке С не определено никаких ключевых слов, с помощью которых можно выполнять ввод/вывод. Вместо них используются библиотечные функции. Система ввода/вывода языка С - это элегантная конструкция, которая обеспечивает гибкий и в то же время слаженный механизм передачи данных от одного устройства к другому. Впрочем, эта система достаточно большая и состоит из нескольких различных функций. Заголовочным файлом для функций ввода/вывода является <stdio.h>. Имеются как консольные, так и файловые функции ввода/вывода. С практической точки зрения консольный и файловый ввод/вывод отличаются друг от друга очень мало. Однако теоретически они находятся в двух очень "разных мирах". В этой главе подробно рассказывается о функциях ввода/вывода на консоль. В следующей же главе представлена система файлового ввода/вывода, а также говорится, что имеется общего между этими двумя системами. 4.1 Чтение и запись символов
Самыми простыми из консольных функций ввода/вывода являются getchar(), которая читает символ с клавиатуры, и putchar(), которая отображает символ на экране. Первая из этих функций ожидает, пока не будет нажата клавиша, а затем возвращает значение этой клавиши. Кроме того, при нажатии клавиши на клавиатуре на экране дисплея автоматически отображается соответствующий символ. Вторая же функция, putchar(), отображает символ на экране в текущей позиции курсора. В следующей программе продемонстрировано применение getchar() и putchar(). В этой программе с клавиатуры вводятся символы, а затем они отображаются на другом регистре. То есть символы, вводимые на верхнем регистре, выводятся на нижнем, а вводимые на нижнем - выводятся на верхнем. Чтобы остановить программу, введите точку. #include <stdio.h>
#include <ctype.h>
int main(void)
{
char ch;
printf("Введите какой-нибудь текст (для завершения работы введите точку).\n");
do {
ch = getchar();
if(islower(ch)) ch = toupper(ch);
else ch = tolower(ch);
putchar(ch);
} while (ch != '.');
return 0;
}
4.2 Чтение и запись строк
Среди функций ввода/вывода на консоль есть и более сложные, но и более мощные: это функции gets() и puts(), которые позволяют считывать и отображать строки символов. Функция gets() читает строку символов, введенную с клавиатуры, и записывает ее в память по адресу, на который указывает ее аргумент. Символы можно вводить с клавиатуры до тех пор, пока не будет введен символ возврата каретки. Он не станет частью строки, а вместо него в ее конец будет помещен символ конца строки ('0'), после чего произойдет возврат из функции gets(). На самом деле вернуть символ возврата каретки с помощью этой функции нельзя (а с помощью getchar() - как раз можно). Перед тем как нажимать <ENTER>, можно исправлять неправильно введенные символы, пользуясь для этого клавишей возврата каретки на одну позицию (клавишей backspace). Вот прототип для gets(): char *gets(char *cmp);
Здесь cmp - это указатель на массив символов, в который записываются символы, вводимые пользователем, gets() также возвращает cmp. Следующая программа читает строку в массив str и выводит ее длину: #include <stdio.h>
#include <string.h>
int main(void)
{
char str[80];
gets(str);
printf("Длина в символах равна %d", strlen(str));
return 0;
}
Необходимо очень осторожно использовать gets(), потому что эта функция не проверяет границы массива, в который записываются введенные символы. Таким образом, может случиться, что пользователь введет больше символов, чем помещается в этом массиве. Хотя функция gets() прекрасно подходит для программ-примеров и простых утилит, предназначенных только для вас, но в профессиональных программах ею лучше не пользоваться. Ее альтернативой, позволяющей предотвратить переполнение массива, будет функция fgets(), которая описана в следующей главе. Функция puts() отображает на экране свой строковый аргумент, после чего курсор переходит на новую строку. Вот прототип этой функции: int puts(const char *cmp);
puts() признает те же самые управляющие последовательности[1], что и printf(), например, \t в качестве символа табуляции. Вызов функции puts() требует намного меньше ресурсов, чем вызов printf(). Это объясняется тем, что puts() может только выводить строку символов, но не может выводить числа или делать преобразования формата. В результате эта функция занимает меньше места и выполняется быстрее, чем printf(). Поэтому тогда, когда не нужны преобразования формата, часто используется функция puts(). Функция puts() в случае успешного завершения возвращает неотрицательное значение, а в случае ошибки - EOF. Однако при записи на консоль обычно предполагают, что ошибки не будет, поэтому значение, возвращаемое puts(), проверяется редко. Следующий оператор выводит фразу Привет: puts("Привет");
В таблице 5 перечислены основные функции консольного ввода/вывода.
Таблица 5. Основные функции ввода/вывода
Функция Ее действияgetchar()Читает символ с клавиатуры; обычно ожидает возврат каретки getche()Читает символ, при этом он отображается на экране; не ожидает возврата каретки; в стандарте С не определена, но распространена достаточно широко getch()Читает символ, но не отображает его на экране; не ожидает возврата каретки; в стандарте С не определена, но распространена достаточно широко putchar()Отображает символ на экране gets()Читает строку с клавиатуры puts()Отображает строку на экране 4.3 Форматный ввод / вывод на консоль
Функции printf() и scanf() выполняют форматный ввод и вывод, то есть они могут читать и писать данные в разных форматах. Данные на консоль выводит printf(). А ее "дополнение", функция scanf(), наоборот - считывает данные с клавиатуры. Обе функции могут работать с любым встроенным типом данных, а также с символьными строками, которые завершаются символом конца строки ('0'). Прототип функции printf(): int printf(const char *управляющая_строка, ...);
Функция printf() возвращает число выведенных символов или отрицательное значение в случае ошибки. Управляющая_строка состоит из элементов двух видов. Первый из них - это символы, которые предстоит вывести на экран; второй - это спецификаторы преобразования, которые определяют способ вывода стоящих за ними аргументов. Каждый такой спецификатор начинается со знака процента, за которым следует код формата. Аргументов должно быть ровно столько, сколько и спецификаторов, причем спецификаторы преобразования и аргументы должны попарно соответствовать друг другу в направлении слева направо. Например, в результате такого вызова printf() printf("Мне нравится язык %c %s", 'C', "и к тому же очень сильно!");
Будет выведено Мне нравится язык C и к тому же очень сильно!
В этом примере первому спецификатору преобразования (%c), соответствует символ 'C', а второму (%s), - строка "и к тому же очень сильно!". Функция scanf() - это программа ввода общего назначения, выполняющая ввод с консоли. Она может читать данные всех встроенных типов и автоматически преобразовывать числа в соответствующий внутренний формат, scanf() во многом выглядит как обратная к printf(). Вот прототип функции scanf(): int scanf(const char *управляющая_строка, ...);
Эта функция возвращает количество тех элементов данных, которым было успешно присвоено значение. В случае ошибки scanf() возвращает EOF, управляющая_строка определяет преобразование считываемых значений при записи их переменные, на которые указывают элементы списка аргументов. Управляющая строка состоит из символов трех видов: спецификаторов преобразования, разделителей, символов, не являющихся разделителями. 4.4 Использование модуля iostream.h для консольного ввода/вывода
Использование cout для вывода
Для вывода символов и чисел на экран вы можете использовать выходной поток cout.
В C++ можно использовать с cout специальные символы для вывода табуляции или новой строки и даже для воспроизведения звука на вашем компьютере.
В C++ можно легко отображать числа в десятичном, восьмеричном (по основанию 8) или шестнадцатеричном (по основанию 16) формате.
Используя в командной строке операционной системы операторы переназначения, вы можете перенаправить выходные сообщения своей программы, посылаемые в cout, с экрана в файл или на принтер.
Следующая программа выводит число 1001 на ваш экран:
#include <iostream.h>
void main(void)
{
cout << 1001;
}
Кроме отображения целых чисел (чисел без десятичной точки), cout также позволяет вашим программам отображать числа с плавающей точкой, например 1.2345:
#include <iostream.h>
void main(void)
{
cout << 0.12345;
}
Как вы уже знаете, двойной знак "меньше" является операцией вставки (эта операция вставляет символы в выходной поток для отображения). С помощью cout вы можете использовать несколько операций вставки в пределах одного оператора:
#include <iostream.h>
void main(void)
(
cout << 1 << 0 << 0 << 1;
}
Если необходимо переместить курсор в начало следующей строки, можно поместить символ новой строки (\n) в выходной поток. В C++ вам предоставляется два разных способа генерации новой строки. Во-первых, вы можете поместить символы \n внутри символьной строки:
#include <iostream.h>
void main(void)
{
cout << "Это строка один\nЭто строка два";
}
В дополнение к использованию символа новой строки для продвижения курсора в начало следующей строки ваши программы могут использовать символ endl (конец строки):
#include <iostream.h>
void main(void)
{
cout << "А теперь..." << endl
<< "Учимся программировать на языке C++";
}
Использование cin для ввода
Вы можете использовать входной поток cin для присваивания определенным переменным символов и чисел, введенных с клавиатуры.
При применении cin для чтения и присваивания переменной значения, введенного с клавиатуры, можно использовать содержимое переменной так, как если бы ваша программа использовала оператор присваивания для сохранения значения в переменной.
Когда ваша программа использует cin для выполнения ввода с клавиатуры, остерегайтесь ошибок переполнения и ошибок, возникающих при вводе пользователем значения неверного типа.
Точно так же как выходной поток cout позволяет вашим программам записать вывод на экран, входной поток cin позволяет программам читать ввод с клавиатуры:
#include <iostream.h>
void main(void)
{
int number; II Число, читаемое с клавиатуры
cout << "Введите ваше любимое число и нажмите Enter: ";
cin >> number;
cout << "Ваше любимое число равно " << number << endl;
}
Когда вы откомпилируете и запустите эту программу, на вашем экране появится сообщение, предлагающее вам ввести ваше любимое число. Если вы введете число и нажмете ENTER, программа присвоит ввод переменной number. Затем, используя cout, программа выведет сообщение, отображающее ваше любимое число.
Следующая программа запрашивает у вас два числа. Программа присваивает числа переменным first и second. Затем программа выводит числа, используя cout:
#include <iostream.h>
void main(void)
{
int first, second; // Числа, введенные с клавиатуры
cout << "Введите два числа и нажмите Enter: ";
cin >> first >> second;
cout << "Были введены числа " << first << " и " << second << endl;
}
Обратите внимание на использование с cin двух операторов извлечения:
cin >> first >> second;
В этом случае cin присвоит первое введенное значение переменной first, a второе переменной second. Если для вашей программы требуется третье значение, вы можете использовать третий оператор извлечения, как показано ниже:
cin >> first >> second >> third;
Методика выполнения лабораторной работы
Изучить теоретические сведения. Создать консольное приложение(-я), где реализовать полученные от преподавателя задания.
Для создания консольного приложения в C++Builder необходимо:
1. Закрыть все открытые проект: File -> Close All.
2. Добавить новый проект: Project -> Add New Project.
3. Выбрать пиктограмму Console Application.
4. Определить тип консольного приложения.
Задание на лабораторную работу
Задание 1
Даны x, y, z . Вычислить a, b, если:
, .
Задание 2
Вычислить площадь треугольника по всем известным формулам.
Задание 3
Присвоить случайным образом значения числовым переменным а1, а2,..., а9. Вывести на экран значения этих переменных следующей таблицей:
а1
а2 а3
а4
а5 а6
а7 а8 а9
Задание 4
Сделать проверку делится ли натуральное число p делится нацело на натуральное число q.
16
Документ
Категория
Рефераты
Просмотров
57
Размер файла
142 Кб
Теги
lab
1/--страниц
Пожаловаться на содержимое документа