Главная страница
Навигация по странице:

  • Стандартные типы данных

  • Данные вещественных типов

  • Явные и неявные преобразования типов в С++.

  • Операции инкремента и декремента

  • Задачи для индивидуального решения (пользуясь оператором switch)

  • Лабораторная работа №4 Программирование циклических алгоритмов Цель работы

  • Цикл с известным заранее числом повторений (оператор for)

  • Цикл с предусловием (оператор while)

  • Цикл с постусловием (оператор do while)

  • !!! МЕТОДИЧКА_Срр_Часть1. Учебнометодическое пособие предназначено для студентов, изучающих дисциплину Программирование


    Скачать 2.01 Mb.
    НазваниеУчебнометодическое пособие предназначено для студентов, изучающих дисциплину Программирование
    Анкорcxfsd
    Дата04.03.2022
    Размер2.01 Mb.
    Формат файлаpdf
    Имя файла!!! МЕТОДИЧКА_Срр_Часть1.pdf
    ТипУчебно-методическое пособие
    #382624
    страница3 из 6
    1   2   3   4   5   6
    Объявление переменных
    Язык С++ требует явного объявления всех переменных используемых в программе вместе с указанием соответствующих им типов. Объявления переменной имеет следующий формат:
    <спецификатор типа> имя_1, имя_2, ..., имя_n; спецификатор типа – одно или несколько ключевых слов, определяющие тип объявляемой переменной. В языке С++ имеется стандартный набор типов данных, используя который можно сконструировать новые (уникальные) типы данных;
    имя_1, имя_2, имя_n – идентификаторы, соответствующие именам переменных.
    Стандартные типы данных
    В таблице 3.1 приведены ключевые слова, которые определяют диапазон значений и размер области памяти, выделяемой под переменные целого типа.
    Таблица 3.1. Целые типы данных
    Тип
    Размер памяти в байтах
    Диапазон значений char
    1 от -128 до 127 int
    2 от -32768 до 32767 short
    2 от -32768 до 32767 long
    4 от -2 147 483 648 до 2 147 483 647 unsigned сhar
    1 oт 0 до 255 unsigned int
    2 от 0 до 65535 unsigned short
    2 от 0 до 65535 unsigned long
    4 от 0 до 4 294 967 295
    Например: unsigned int n; int b,f2,f3; int c; long d;
    Отметим, что тип char используется для представления символа. Значением объекта типа char является код (размером 1 байт), соответствующий представляемому символу. Для представления символов русского алфавита, модификатор типа идентификатора данных имеет вид unsigned char, так как коды русских букв превышают величину 127.
    В языке С++ не определено представление в памяти и диапазон значений для идентификаторов типа int и unsigned int. Размер памяти для переменной с модификатором типа int определяется длиной машинного слова, которое имеет различный размер на разных компьютерах. Например, на 16-ти разрядных ЭВМ размер слова будет равен 2-м байтам, а на 32-х разрядных машинах - 4-м байтам, это соответствует типам short или long в зависимости от архитектуры используемой машины. Это означает, что одна и та же программа может правильно работать на одном компьютере и не работать на другом.
    Восьмеричные и шестнадцатеричные константы также могут иметь модификатор unsigned, для этого необходимо указать префикс u или U после константы. Константа без этого префикса считается знаковой.
    Например:
    0xA8C (int);
    01756l (long);
    0xF7u (unsigned int);
    Данные вещественных типов
    В таблице 3.2 приведены типы данных, используемые для представления чисел с плавающей точкой.
    Таблица 3.2. Вещественные типы данных
    Тип
    Размер памяти в байтах
    Диапазон значений float
    4 3.4E-38 ... 3.4E+38 double
    8 1.7E-308 ... 1.7E+308 long double
    10 3.4E-4932 ... 3.4E+4932

    Типы double и long double кроме более широкого числового диапазона отличаются большей точностью.
    Примеры: float f, a, b; double x,y;
    Записывая арифметические выражения на языке С++, необходимо помнить и о еще одной особенности этого языка, делающей его универсальным – возможности преобразования типов.
    Преобразования типов
    Представим себе следующий оператор присваивания: int ival = 0;
    // обычно компилируется с предупреждением ival = 3.145 + 3;
    В результате переменная ival получит значение 6 (при складывании литералов разных типов – 3.145 типа double и 3 типа int). Язык C++ обычно не может сразу выполнить данную операцию, так как ему сначала необходимо привести операнды к одному типу. Для этих целей были введены правила преобразования арифметических типов, суть которых заключается в переходе от операндов меньшего типа к большему во избежание потери точности вычислений.
    В данном примере целое число 3 приводится к типу double, и только после этого производится сложение. Подобные преобразования осуществляются автоматически и называются неявным преобразованием типов данных.
    В результате сложения двух чисел уже одного типа double получится число 6.145, которое тоже будет иметь тип double. Присвоение этого числа переменной ival, которая имеет тип int, приведет к автоматическому отбрасыванию дробной части числа (а не округлением). Таким образом, 6.145 превращается в 6, и этот результат присваивается переменной ival. Такое преобразование приводит к потере точности, поэтому большинство компиляторов выдают соответствующее предупреждение.
    Так как компилятор не округляет числа при преобразовании double в int, при необходимости мы должны позаботиться об этом сами. Например: double dva1 = 8.6; int iva1 = 5; ival += dva1 + 0.5; // преобразование с округлением
    При желании мы можем произвести явное преобразование типов:
    // инструкция компилятору привести double к int ival = static_cast< int >( 3.145 ) + 3;
    В этом примере дается явное указание компилятору о приведении величины 3.145 к целому типу.
    Ниже представлены правила неявного и явного преобразования типов данных (как в первом и во втором примерах соответственно).
    Явные и неявные преобразования типов в С++.
    Правила неявного преобразования.
    Операции преобразования типа: float a=1; float b; b=a+(int)2.1;
    В языке С используется автоматическое приведение типа при вычислениях (при вычислениях с различными типами данных):
    int a=1; float b; b=a+2.1; //В результате: 3.1
    Правила:
    1) тип char приводится к short;
    2) short – к int;
    3) signed – к unsigned;
    4) все целые типы преобразуются к long, а long – к unsigned long; double f; unsigned char ch; unsigned long m; int I; f*(I+ch/m)
    Результат операции в скобках приводится к double перед умножением.
    Явное приведение типа.
    Правила:
    1) целое со знаком преобразуется к более короткому целому со знаком путем усечения старших бит:
    Unsigned char ch; ch=()65535

    255
    Целое со знаком преобразуется к более длинному целому со знаком путем размножения знаков.
    2) при преобразовании целого со знаком к целому без знака, целое число со знаком преобразуется к размеру целого без знака и результат интерпретируется как целое без знака.
    Unsigned char ch1; //Пример описания. В других языках такого нет. char ch2=-1; ch1=ch2

    255 3) преобразование целого со знаком к плавающему типу происходит без потери информации, за исключением случая преобразования типа long к float, тогда точность может быть частично потеряна.
    4) целое без знака преобразуется к более длинному целому со знаком путем расширения нулем.
    5) когда целое без знака преобразуется к целому со знаком того же размера, битовый шаблон не изменяется, однако значение, которое оно представляет, изменяется, если знаковый бит установлен.
    Unsigned short A1=65535; short A2=;
    A2=A1;
    A2

    .1 6) величина типа float преобразуется к double без изменения значений. Величины double, преобразованные к float, представляются точно, если это возможно.
    7) при преобразовании величины с плавающей точкой к целым типам они сначала преобразуются к типу long, при этом дробная часть отбрасывается, а затем величины типа
    long преобразуются к требуемому типу. Если значение слишком велико для long, то результат будет не определён (отбрасывается младшая часть мантиссы).
    Операции инкремента и декремента
    Операции ++ и – – это операции инкремента и декремента.
    Операция инкремента увеличивает значение операнда на единицу. Операция декремента уменьшает значение операнда на единицу. Например, следующий оператор: х = х + 1; с применением операции инкремента можно записать в таком виде: х++;
    Аналогично, оператор х = х
    – 1; эквивалентен оператору х– –;
    Эти операции отличаются тем, что они могут быть записаны как в постфиксной форме, когда символ операции следует за операндом, как в приведенных примерах, так и в префиксной форме, когда он предшествует операнду. В приведенных примерах применение любой из этих форм не имеет никакого значения. Однако, когда операции инкремента/декремента являются частью более сложного выражения, проявляется внешне незначительное, но важное различие между этими двумя формами. В префиксной форме значение операнда увеличивается или уменьшается до извлечения значения для использования в выражении. В постфиксной форме предыдущее значение извлекается для использования в выражении, и лишь после этого значение операнда изменяется.
    Например: х = 42; у = ++х;
    В этом случае значение у устанавливается равным 43, как и можно было ожидать, поскольку увеличение значения выполняется перед присваиванием значения х переменной у. Таким образом, строка у=++х эквивалентна следующим двум операторам: х = х + 1; y = х;
    Однако если операторы записать как х = 42; у = х++; значение переменной х извлекается до выполнения операции инкремента, и поэтому значение переменной у равно 42. Конечно, в обоих случаях значение переменной х установлено равным 43. Следовательно, строка у=х++; эквивалентна следующим двум операторам: у = х; х = х + 1;
    В заключении вопрос: почему язык программирования получил название С++, а не
    ++С?
    Задачи для индивидуального решения (пользуясь оператором switch):
    1. По номеру y (y > 0) некоторого года определить с – номер его столетия. Учесть, что, к примеру, началом XXI столетия был 2001, а не 2000 год.
    2. Даны произвольные числа a, b, c. Если нельзя построить треугольник с такими длинами сторон, то выдать соответствующее сообщение; если можно, то напечатать какой он: равносторонний, равнобедренный, разносторонний.
    3. По введенному номеру месяца выдать на экран сообщение о времени года и названии введенного месяца. Например: 1 – январь, зима.
    4. Даны a и b. Напечатать максимальное и минимальное значения выражений с указанием формул, по которым производились вычисления.

    5. Составить программу, которая при вводе символа с клавиатуры выводит
    «цифра», если введена цифра; «латинская буква» при вводе латинской буквы и «не цифра и не латинская буква» во всех остальных случаях.
    Вариант 1 1.
    По введенному времени и известному расписанию занятий вывести сообщение о том, что это: пара (с указанием ее номера) или перемена.
    Вариант 2 1.
    По введенному номеру месяца вывести на экран сообщение о номере квартала.
    Вариант 3 1.
    Составить программу, которая по введенному году и номеру месяца определяет число дней в этом месяце.
    Вариант 4 1.
    При вводе с клавиатуры символа:
    + вывести сообщение «сложение»;
    − вывести сообщение «вычитание»;
    * вывести сообщение «умножение»;
    / вывести сообщение «деление» с указанием формулы и примера с конкретными значениями, введенными с клавиатуры.
    Вариант 5 1.
    Составить программу, которая при вводе символа "{" или "}" выводит сообщение «фигурная скобка»;. при вводе "[" или "]" – «квадратная скобка»; при вводе "(" или ")" – «круглая скобка»; в остальных случаях – сообщение «не скобка».
    Вариант 6 1.
    Даны произвольные числа a, b и c. Присвоить максимальное из них переменной a, минимальное - переменной с, среднее - переменной b.
    Вариант 7 1.
    Составить программу, которая при вводе оценки в виде цифры выводит оценку в виде слова: 5 – отлично, 4 – хорошо, 3 – удовлетворительно, 2 – неудовлетворительно.
    Вариант 8 1.
    Составить программу, которая выводит введенный возраст человека с добавлением слов «год», «года», «лет» (41 год, 3 года, 20 лет).
    Вариант 9 1.
    По введенному номеру квартала вывести на экран, какие месяцы входят в этот квартал.
    Вариант 10 1.
    Составить программу, которая по введенному номеру дня недели выдает его название. Например, 1 – понедельник.

    Лабораторная работа №4
    Программирование циклических алгоритмов
    Цель работы: изучить циклические конструкции в языке С++, научиться составлять программы решения задач с использованием циклов.
    Общие сведения
    Алгоритм является циклическим, если он содержит многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений этих операторов может быть задано в явной (цикл с известным числом повторений) или неявной (цикл с неизвестным заранее числом повторений) форме.
    В ходе выполнения работы необходимо рассмотреть различные варианты организации циклов и особенности их использования.
    Цикл с известным заранее числом повторений (оператор for)
    Оператор for – является наиболее распространенным способом организации циклов и имеет следующий вид: for (выражение 1; выражение 2; выражение 3) оператор ;
    Выражение 1 устанавливает начальное значение переменной, управляющей циклом. Выражение 2 определяет условие, при котором тело цикла будет выполняться.
    Выражение 3 задает условие изменения переменной, управляющей циклом после каждого выполнения тела цикла.
    Схема выполнения оператора for:
    1. вычисляется выражение 1.
    2. вычисляется выражение 2.
    3. если значения выражения 2 отлично от нуля (истина), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.
    Особенностью данного цикла является то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.
    Пример: int a,b; for (a=1; a<=10; a++) b=a*a;
    В этом примере вычисляются квадраты чисел от 1 до 10 включительно.
    Возможности оператора for позволяют использовать несколько переменных для управления циклом.
    Пример: int t, b; char string[100], tmp; for (t=0, b=100; t < b; t++, b--)
    { tmp=string[t]; string[b]=tmp;}
    В данном примере показана запись строки символов в обратном порядке. Для управления циклом здесь используются две переменные t и b записанные через запятую и выполняемые последовательно.
    Еще одним вариантом использования оператора for является бесконечный цикл.
    Для организации такого цикла используется пустое условное выражение, а для выхода из цикла применяется дополнительное условие и оператор break.
    Пример: for (;;)
    { ...

    ... break;
    }
    Так как в языке Си оператор может быть пустым, значит и тело оператора for также может быть пустым. Такая форма оператора может быть использована для организации поиска.
    Пример: for (i=0; t[i]<10 ; i++);
    В данном примере переменная цикла i принимает значение номера первого элемента массива t, значение которого больше 10.
    Цикл с предусловием (оператор while)
    Оператор while называется циклом с предусловием и имеет следующий вид: while (выражение) оператор;
    В качестве выражения можно использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:
    1. вычисляется выражение.
    2. если выражение истинно, то выполняется тело оператора while, если ложно, то выполнение цикла заканчивается.
    3. процесс повторяется с пункта 1.
    Так же как и в цикле со счетчиком for, в операторе while вначале происходит проверка условия. Поэтому оператор while удобно использовать в ситуациях, когда тело оператора не всегда нужно выполнять.
    Внутри операторов for и while допускается использовать локальные переменные, которые должны быть объявлены с определением соответствующих типов.
    Цикл с постусловием (оператор do while)
    Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда тело цикла необходимо выполнить хотя бы один раз.
    Формат оператора имеет следующий вид: do тело while (выражение);
    Схема выполнения оператора do while:
    1. выполняется тело цикла.
    2. вычисляется выражение.
    3. если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.
    Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.
    Операторы while и do while могут быть вложенными.
    Пример: int i,j,k; i=0; j=0; k=0; do {i++; j--; while (k < i) k++;
    } while (i<30 && j<-30);
    Использование операторов цикла рассмотрим на следующем примере.

    Пример 1: На промежутке от 1 до M найти все числа Армстронга. Натуральное число из n цифр называется числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу.
    Например, десятичное число 153 – число Армстронга, потому что:
    1³ + 5³ + 3³ = 153.
    Другие примеры начальных чисел Армстронга в десятичной системе счисления:
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, ….
    Числа 153, 370, 371 и 407 имеют специальное название – числа Армстронга (в честь математика, который их впервые исследовал). Строгое математическое определение таково: n-значное число называется числом Армстронга, если оно равно сумме n-ых степеней своих цифр.
    n
    Числа Армстронга
    n
    Числа Армстронга
    3 153; 370; 371; 407 8
    24678050; 24678051; 88593477 4
    1634; 8208; 9474 9
    146511208; 472335975; 534494836;
    912985153 5
    54748; 92727; 93084 10 4679307774 6
    548834 11 32164049650; 32164049651;
    40028394225; 42678290603;
    44708635679; 49388550606;
    82693916578; 94204591914 7
    1741725; 4210818; 9800817; 9926315 14 28116440335967
    Этапы решения задачи:
    1. Математическая модель: x

    [1;M], x=
    =
    2. Составим блок схему программы (рисунок 4.1).
    Рис. 4.1. Алгоритм решения задачи
    3. Распишем составные части блока «Находим все числа Армстронга на заданном промежутке и печатаем их» (рисунок 4.2).

    Рис. 4.2. Алгоритм решения основного блока задачи
    4. Опишем блок «Подсчитываем сколько цифр в числе i» (рисунок 4.3)
    Рис. 4.3. Алгоритм подсчета количества цифр в числе i
    5. Опишем блок «Проверяем, является ли i числом Армстронга» (рисунок 4.4)

    Рис. 4.4. Алгоритм проверки числа Армстронга
    Дальнейшая детализация не требуется, запишем блок-схему целиком (рисунок 4.5).
    Рис. 4.5. Общая схема вычисления числа Армстронга

    Дальнейшей детализации не требуется, переведем программу на язык С++.
    #include using namespace std;
    #include int main()
    { int i,k,s,p,n, M; cout<<"Vvedite M:"; cin>>M; for (i=1; i<=M; i++)
    { s=0; k=i; n=0; while (k!=0) { k=k/10; n=n+1;
    } k=i; while (k!=0)
    { p=k%10; k=k/10; if (p!=0) s=int(s+exp(n*log(float (p))));
    } if (s==i) cout<} return 0;
    }
    Реализовав данную программу в интегрированной среде программирования, получим результирующее окно, представленное на рисунке 4.6.
    Рис. 4.6. Окно выполнения задачи
    1   2   3   4   5   6


    написать администратору сайта