Язык программирования С++

Автор работы: Пользователь скрыл имя, 01 Марта 2010 в 23:39, Не определен

Описание работы

Язык программирования С++
(Лекции)

Файлы: 1 файл

90146_lekcii_programmirovanie_na_yazyke_si.doc

— 1.04 Мб (Скачать файл)

     2.5. Константы

      В языке Си представляют собой постоянные параметры, константы, которые не изменяются в ходе исполнения программ. Константы могут быть для любого типа данных. Примеры констант приведены в табл. 2.2.

Пример  констант различных типов данных

                                                                   Таблица 2.2.

Имя константы Тип Примеры
символ char ’A’     ‘ч’     ‘\n’   
целое int 10     -9345     32000
длинное целое long 100000    5L
вещественное  двойной точности double 3.14     1.23456789     –8.9е-40

     2.5.1. Константы типа символ

     Можно задавать в двух формах в виде отдельного символа, который записывается в  одиночных кавычках ('А ') или в  виде целого числа (55). При этом необходимо помнить, что константы, например, '0' и 0 описывают различные данные.

     В языке Си существуют символьные константы, обозначающие специальные управляющие символы, такие как: перевод строки, звуковой сигнал, горизонтальная табуляция. Эти символы нельзя ввести с клавиатуры. Для их использования вначале записывается символ '\'  – обратный слеш. Например, символ, означающий перевод строки, описывается так: '\n', горизонтальная табуляция – '\t'. Перечень основных специальных символов приведен в таблице 2.3.

Специальные символы

                                                             Таблица 2.3.

      Обозначение Назначение
      \n       перевод строки
      \r       возврат каретки
      \t       горизонтальная  табуляция
      \v       вертикальная  табуляция
      \b       стирание  символа, возврат на шаг
      \f       перевод страницы
      \”       двойная кавычка
      \’       апостроф, одиночная кавычка
      \\       обратный  слеш
      \0       нулевой символ, конец строки
             звуковой  сигнал
      \?       символ  вопроса

     2.5.2. Целые константы 

     Эти константы не имеют десятичной точки  и порядка числа. В программировании очень часто используются числа, записанные в других системах счисления - двоичной, восьмеричной и шестнадцатеричной. Для двух последних систем в языке Си есть специальная форма записи:

     – для восьмеричных целых констант перед числом записывается ноль, и  далее используются цифры 0…7;

     – для шестнадцатеричных целых  констант перед числом устанавливаются два символа 0х и далее используются цифры 0... 9, а также буквы латинского алфавита A, B, C, D, E, F обозначающие соответственно числа от 10 до 15. Примеры целых констант:

     восьмеричные:   01  077  012340

     шестнадцатеричные:  0х51  0х6А0  0xF59В

     2.5.3. Вещественные константы

       на языке Си по умолчанию  воспринимаются программой как  числа типа double. Их можно записать в двух формах:

     – в виде числа с десятичной точкой, например, 0.1, 15.189;

      – в научном виде (экспоненциальной форме), в котором вместо показателя основания записывается символ Е (или е), например: 1.1Е–10, –5е2 (что эквивалентно математической форме записи чисел 1.1×10–10 и –5×102).

      Различие  между числами float и double состоит не только в большем диапазоне последних, но и в более точном значении чисел типа double – верными являются 15...16 значащих цифр.

     2.6. Макроопределения

     Наряду  с использованием в тексте программ констант в языке Си существует возможность применения макроопределений (макросов). Макроопределение устанавливает соответствие между именем и определённым значением. Для использования макросов существует несколько предпосылок. Если в программе используется одна и та же константа несколько раз в различных местах программ, то становится желательным использовать соответствующее макроопределение. Другой вариант применения макросов - использование хорошо понимаемых имен.

     В общем случае форма записи макроопределения следующая:

     #define <ИмяМакроса>  <3аменяемоеВыражение>

      где <ИмяМакроса> – любое разрешенное имя переменной, при этом желательно использовать заглавные буквы (что облегчает чтение программы). Примеры макросов:

     #define NUNBER 1OO

     #define LEFT 75

     #define RIGHT 77

     #define ENTER 13

     #define SPACE 0x20

     #define PI 3.14159

     После определения этих макросов в заголовке, в тексте программы можно использовать имена NUMBER, LEFT, RIGHT и т.д. На этапе создания исполняемого файла (точнее в фазе препроцессора, выполняемой до компиляции) происходит замена имен макросов на соответствующие им значения. Например, если в тексте программы встречаются имена NUMBER, то происходит замена этого имени на значение 100.

     2.7. Преобразование типов  данных

      Исходно предполагается, что пользователь правильно  использует типы констант и переменных. Что произойдет, если в выражениях присутствуют данные различных типов? В этом случае язык Си выполняет автоматическое приведение типов данных. Например, какое число будет записано в переменной а после инициализации

      int а=11.54;

      Так как переменная а определяется как переменная целого типа, то дробная часть вещественной константы 11.54 будет отброшена без округления и в ячейке переменной а будет записано целое число 11.

      То  же самое произойдет, т.е. не будет  учитываться дробная часть числа, если исполнить следующие операторы:

      float i;

     i=1/10;

      Это происходит, потому что в начале вычисляется правая часть выражения, а она содержит только целые константы 1 и 10, следовательно, результат тоже будет целое число: 1/10=0, а не 0.1 как ожидалось. Окончательно переменной i будет присвоено значение 0 и это несмотря на то, что она определяется вещественной.

      В общем случае при расчете арифметических выражений приведение типов данных в языке Си происходит следующим образом:

      1) все переменные типа char преобразуются в тип int, переменные типа float - в тип double.

      2) для любой пары операндов (т.е.  в результате вычисления, например, суммы или произведения двух чисел) происходит следующее преобразование:

      – если хотя бы один из операндов double, то и второй преобразуется в этот тип;

      – если хотя бы один из операндов long, то и другой преобразуется в long;

      – если хотя бы один из операндов unsigned, то и другой преобразуется в unsigned.

      3) конечный результат после операции  присваивания приводится к типу  переменной в левой части выражения.

      Рассмотрим  пример вычисления арифметического  выражения:

      char а=25, b=20;

      int i,j,

      long k;

      double d=l.55;

      i=a*b;

      k=10000*b;

      j = b*d;

      printf(“i=%d k=%ld j=%d”,i,k,j);

      При вычислении значения переменной  i хотя обе переменные имеют тип char и как будто бы результат перемножения должен выйти за максимальные размеры, но по первому правилу обе переменные приводятся к целому типу. В этом случае результат за допустимые пределы не выйдет i=25*20=500. Для второй переменной k целого типа результат выходит за пределы целого, хотя переменная  k объявлена типа длинного целого, поэтому результат перемножения будет неверный. Чтобы исправить эту ошибку необходимо строчку переписать следующим образом:

      k=(long)10000*b;

      Для третьей переменной j результатом перемножения будет вещественное число двойной точности, при присвоении  этого результата происходит приведение типа (double)®(int) и при этом происходит потеря дробной части полученного произведения.  пределы.

     2.8. Задания для решения

     2.8.1. Составьте программу, в которой  объявляются две целые переменные a1 и a2, вещественная переменная b и переменные типа символ c и d. Переменная a2 инициализирована значением 10.

     2.8.2. Найдите ошибки в приведенной  программе

      #include <conio.h>       

      #include <studio.h>       

      void main() {                   

      int printf=5;     /* объявление целой переменной          */

      long number-one;     объявление переменной типа длинное целое

      double f=1e,

             scanf=3.14;/* объявление вещественных переменных   */

      char if_else='a',

           red%bull=100;/* объявление переменных типа символ    */

      unsigned float a=5,

           void=1.e-10;;/* объявление вещественных переменных   */

      getch();              /* ожидание нажатия любой клавиши     */

      }

     2.8.2. Напишите программу, в которой  вводится переменная типа символ, она инициализируется значением  125. Прибавьте единицу к переменной  и выведите новое значение  переменной на экран. Повторите  эти операции (увеличения на единицу и вывода на экран) еще 3 раза. Какие значения переменной будут выведены? Объясните результат. 

     2.8.4. Составьте программу, в которой  сообщение "Привет мир" на  экран бы выводилось в кавычках.

     2.8.5. Запишите в тетради с указанием всех пробелов и созданных новых строк, что будет выведено на экран следующими функциями (символ V означает символ пробела):

      printf(“Это\nVПростоVV\nСтрока\n\n”);

      printf(“H\nVE\nVVL\nVVVL\nVVVVO\n”);

      printf(“\t\tИванов\n\tПетров\n\Сидоров\n”);

 

3. ФУНКЦИИ ВВОДА-ВЫВОДА

     3.1. Простейшие функции  ввода-вывода

     Язык  Си содержит множество стандартных  функции ввода–вывода информации (с  клавиатуры, на экран, из файла и в него и т.д.). В данной главе рассматриваются только самые простые функции – ввода информации с клавиатуры и вывода на экран: printf, scanf, cprintf, cscanf, getch. Эти функции определены в стандартной и консольной библиотеках: <stdio.h> и <conio.h>.

Информация о работе Язык программирования С++