Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование лекция 3-4.doc
Скачиваний:
8
Добавлен:
08.03.2016
Размер:
137.22 Кб
Скачать

Переменные

Переменная — лексема, представляющая собой изображение изменяемого объекта. С технической точки зрения, переменная – это область памяти, в которую могут помещаться различные числа (двоичные коды). Любая переменная до её использования в программе должна быть описана, т. е. для нее должны быть указаны тип и имя (идентификатор).

Пример

тип переменной имя переменной;

Предпочтительно использовать именно такой способ описания, чтобы при необходимости можно было модифицировать имя переменной. Кроме того, в этом случае каждую переменную удобно снабдить комментарием, поясняющим ее смысл, например,

int i; /* i – счетчик циклов */

Любые литеры, помещенные между /* и */ игнорируются компилятором и ими можно пользоваться, чтобы сделать программу более понятной. Комментарий можно располагать в любом месте программы, где могут стоять литеры пробела, табуляции или литера новая строка.

Общий случай объявления переменных

тип переменных имя переменной 1,имя переменной 2, … ;

При объявлении переменных им можно задавать начальные значения – производить инициализацию.

int i=0, к, n, m=l;

float x=314.159E-2,у;

char а='а';

В программировании различают беззнаковые целые числа (unsigned) и целые числа со знаком (signed). Знак числа обычно кодируется старшим битом машинного слова. Традиционно, если старший бит равен 1, то число считается отрицательным, только, если оно не определено как беззнаковое. С помощью суффикса U (или и) можно представить целую константу в виде беззнакового целого.

Пример

50000U – константа типа unsigned int

Константе 50000U выделяются 2 байта вместо четырех, как было бы при отсутствии суффикса. В этом случае, т.е. для unsigned int, знаковый бит используется для представления одного из разрядов кода числа и диапазон значений становится от 0 до 65535.Суффикс L (или l) позволяет выделить целой константе 4 байта.

unsigned int i;

Совместное использование в любом порядке суффиксов U (или и) и L (или l) позволяет приписать целой константе тип unsigned long, и она займет в памяти 32 разряда, причем знаковый разряд будет использоваться для представления разряда кода (а не знака).

Пример

OLU — целая константа типа unsigned long длиной 4 байта

2424242424UL — константа типа unsigned long

Кроме численных переменных во всех языках программирования существует возможность использовать переменные для хранения других типов данных. Самой простой, с одной стороны, и самой "экзотической", с другой стороны, является переменная для хранения данных логического типа.

Логический тип Boolean может принимать лишь два значения: False (ложь) и True (истина). Иногда говорят, что логическая переменная имеет значение "да" или "+" (истина), "нет" или "-" (ложь).

int a=1, b=5;

if (a>b)

printf (“a=%d/n”, a);

Ввод и вывод информации

Основной задачей программирования является обработка информации, поэтому любой язык программирования должен иметь средства для ввода и вывода данных. В языке Си нет операторов ввода-вывода; ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы данных функций находятся в файле stdio.h. Чаще всего вывод осуществляется через функцию printf, а ввод — scanf.

Функция printf — функция форматированного вывода. Она переводит данные из внутреннего кода в символьное представление и выводит полученные изображения символов (результатов) на экран дисплея. При этом у программиста имеется возможность форматировать данные, т. е. влиять на их представление на экране дисплея. Возможность форматирования условно отмечена в самом имени функции с помощью литеры f в конце её названия (print formatted).

Общая форма записи функции printf()

printf("строка форматов", объект 1, объект 2,..., объект n])

Строка форматов состоит из следующих элементов:

  1. управляющих символов;

  2. текста, который выводится на экран;

  3. форматов, предназначенных для вывода значений переменных различных типов.

Объекты могут отсутствовать. Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие слэша перед ним.

Основные управляющие символы (эскейп-последовательности):

1) '\n' — новая строка. Ее можно получить и явным образом:

#include <stdio.h>

main() {

printf("

Здравствуй,язык Си!");

}

Литера «новая строка» никогда не вставляется автоматически. Поэтому одну строку можно напечатать по шагам с помощью нескольких обращений к функции printf():

#include <stdio.h>

main() {

printf("Здравствуй, ");

printf("язык ");

printf("Си!");

}

  1. '\t' — горизонтальная табуляция;

  2. '\v' — вертикальная табуляция;

  3. '\b' — возврат на символ;

  4. '\r' — возврат каретки на начало строки;

  5. '\”' — двойная кавычка;

  6. '\\' — наклонная черта;

  7. '\?' — знак вопроса;

  8. '\а' — звуковой сигнал-звонок;

  9. '\f' — перевод страницы

  10. '\ооо' — восьмеричный код;

  11. '\xhh' — шестнадцатеричный код.

Printf не является частью языка Си. В языке Си нет специальных конструкций языка, определяющих ввод-вывод, т.о. рrintf – лишь полезная функция стандартной библиотеки.

Управляющая строка содержит два типа объектов: обычные символы, которые просто копируются в выходной поток, и спецификации преобразований, каждая из которых вызывает преобразование и печать очередного аргумента PRINTF.

Каждая спецификация преобразования начинается с символа % и заканчивается символом преобразования. Между % и символом преобразования могут находиться:

  • знак минус, который указывает о выравнивании преобразованного аргумента по левому краю его поля.

  • строка цифр, задающая минимальную ширину поля. Преобразованное число будет напечатано в поле по крайней мере этой ширины, а если необходимо, то и в более широком. Если пре образованный аргумент имеет меньше символов, чем указанная ширина поля, то он будет дополнен слева (или справа, если было указано выравнивание по левому краю)заполняющими символами до этой ширины. Заполняющим символом обычно является пробел, а если ширина поля указывается с лидирующим нулем, то этим символом будет нуль (лидирующий нуль в данном случае не означает восьмеричной ширины поля).

  • точка, которая отделяет ширину поля от следующей строки цифр.

  • строка цифр (точность), которая указывает максимальное число символов строки, которые должны быть напечатаны, или число печатаемых справа от десятичной точки цифр для переменных типа FLOAT или DOUBLE.

  • модификатор длины L, который указывает, что соответствующий элемент данных имеет тип LONG, а не INT.

Ниже приводятся символы преобразования и их смысл:

  1. %d, %i – int, десятичное целое;

  2. %о – int, беззнаковое восьмеричное целое число (без ведущего нуля);

  3. %х, %Х –int, беззнаковое шестнадцатеричное целое (без ведущих ох и ОХ), для 10…15 используется abcdef или ABCDEF;

  4. %и – int, беззнаковое десятичное целое;

  5. %с – int, одиночная литера;

  6. %s – char *; печатает литеры, расположенные до знака \0 или в количестве, заданном точностью;

  7. %f – float, double; [-]m.dddddd, где количество цифр d задается точностью (по умолчанию равно 6);

  8. %е, %Е – double; [-]m.ddddddе±хх, или [-]m.ddddddЕ±хх;

  9. %g, %G – double; используют %е или %Е, если экспанента меньше, чем -4 или больше или равна точности; в противном случае используют %f

  10. %р – void *; указатель (представление зависит от реализации)

  11. %% – аргумент не преобразуется; печатается знак %.

Буква h, если печатаемое целое должно рассматриваться как short; l – если целое должно рассматриваться как long.

Следующая таблица демонстрирует влияние задания различных спецификаций на печать "HELLO, WORLD" (12 символов). Мы поместили двоеточия вокруг каждого поля для того, чтобы вы могли видеть его протяженность.

:%10S: :HELLO, WORLD:

:%10-S: :HELLO, WORLD:

:%20S: : HELLO, WORLD:

:%-20S: :HELLO, WORLD :

:%20.10S: : HELLO, WOR:

:%-20.10S: :HELLO, WOR :

:%.10S: :HELLO, WOR:

Предостережение: PRINTF использует свой первый аргумент для определения числа последующих аргументов и их типов. Если количество аргументов окажется недостаточным или они будут иметь несоответственные типы, то возникнет путаница, и вы получите бессмысленные результаты.

printf("\n Здравствуй, язык Си!");

Результат работы программы: Здравствуй, язык Си!

Пример

а=5;

printf("\n Значение переменной а=%d.",а);

Результат работы программы

Значение переменной а=5.

Пример

х=2.78;

printf("\n Значение переменной x=%f",x);

Результат работы программы

Значение переменной х=2.780000

При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью.

Пример

y=3;

printf("\n Значение переменной у=%10.7f",y);

Результат работы программы

Значение переменной у=3.0000000

В программе 10 — общее количество позиций под значение переменной; 7 — количество позиций после десятичной точки.

Функция форматированного ввода данных с клавиатуры scanf выполняет чтение кодов, вводимых с клавиатуры, преобразует их во внутренний формат и передаёт программе. При этом программист может повлиять на правила интерпретации входных кодов с помощью спецификаций форматной строки.

Общая форма записи функции scanf()

scanf ("строка_форматов", адрес_объекта_1, адрес_объекта_2, ..., адрес_объекта_n);

Строка форматов аналогична функции printf(). Адрес объекта генерируется следующим образом: &имя объекта. Строка форматов и список аргументов для функции обязательны.

Пример программы

scanf("%d", &m); /* Ввести целое число и присвоить*/

/* его значение переменной m.*/

scanf("%lf", &xl); /* Ввести значение переменной xl,*/

/* имеющей тип double.*/

Упражнения:

  1. Выясните, что произойдет, если в стринговую константу аргумента функции printf вставить \с.

2) Введите обозначения и объявите переменные x, y, z и s. Запишите инструкции, которые присваиваютпеременной "x" значение -25,6, переменной "y" значение 128 и пременной "z" значение, равное нулю. Вычислите сумму значений трех величин по формуле: s=x+y+z.

3) Объявите переменные: storona_kv и s_kv для вычисления площади квадрата. Запишите инструкцию, которая присваивает переменной storona_kv значение, равное длине стороны квадрата, например, 25. Запишите вторую инструкцию, которая вычисляет площадь s_kv квадрата.

4) Объявите переменные для вычисления периметра разностороннего треугольника:

dlina_a - длина первой стороны треугольника, dlina_b - длина второй стороны, dlina_c - длина третей стороны; p_tr - периметр треугольника.

5) Обозначьте и объявите переменные для вычисления площади равнобочной трапеции.

6) Обозначьте и объявите переменные для пересчета веса из фунтов в килограммы. Напишите инструкцию для пересчета.

7) Обозначьте и объявите переменные для вычисления периметра трапеции. Напишите необходимую для этого команду.

8) Обозначьте и объявите переменные величины для вычисления площади кольца. Напишите необходимые для этого команды.

9) Продумайте и объявите переменные для вычисления объема и полной поверхности цилиндра. Напишите необходимые для этого инструкции.

10) Продумайте и объявите переменные для вычисления стоимости покупки нескольких тетрадей, шариковых авторучек и карандашей. Напишите необходимые для этого команды.

Задача 10. Продумайте и объявите переменные для вычисления 12% -го подоходного налога на оклад величиной в 10 тысяч рублей. Напишите инструкции, необходимые для этого инструкции.