
- •2). Арифметические преобразования
- •1) Основные типы данных, операции и выражения
- •Билет №4
- •Билет№5
- •1). Символьные константы
- •2). Условный оператор
- •1). Операции отношения
- •1). Логические операции
- •2). Определение функции
- •Тип возвращаемого значения
- •Идентификатор или имя функции
- •Список аргументов или параметров
- •2). Вызов функции
- •Вызывающее окружение
- •1) Адресные операции
- •1). Операции над структурами и объединениями
- •2). Указатели и массивы
- •1). Операция sizeof
- •2). Перечисления
- •2). Типы переменных
1). Символьные константы
Переменные типа char могут использоваться, как для самых коротких целых данных, так и для хранения кодов отдельных символов. Символическая константа представляется в виде символа заключенного в апострофы (одиночные кавычки).
Пример char c; c=’a’; c=’b’;
Для кодов, не имеющих видимого представления на экране, предусмотрены специальные обозначения: ‘\n ’-переход к началу новой строки (соответствует нажатию клавиши Enter); ‘\t’-горизонтальная табуляция; ‘\a’-звуковой сигнал; ‘\b’-возврат на один символ; ‘\v’-вертикальная табуляция, ‘\r’- возврат каретки.
Такие обозначения называют Escape-последовательности, они используются также для символов кавычка ‘\”’, апостроф ’\’’ и обратный слэш ‘\\’.
Символьные константы определяются в тексте путем заключения их в кавычки '. Есть три типа констант.
нормальные символы
многосимвольные константы
широкие символы
Вот посмотрите как каждый их типов объявляется:
char a='a';
int b = 'ab';
wchar_t c = L'ab';
Обратите внимание на то, что b имеет тип int. Именно это позволяет использовать два байта для константы. Широкая константа имеет ширину 4 байта. Все остальное будет игнорироваться.
2). Условный оператор
Условный оператор реализует выполнение определённых команд при условии, что некоторое логическое выражение (условие) принимает значение «истина» true. В большинстве языков программирования условный оператор начинается с ключевого слова if.
Встречаются следующие формы условного оператора:
Условный оператор с одной ветвью
if условие then команды end
При выполнении такого оператора вычисляется условие, и если оно истинно, то выполняются команды до ключевого слова end, в противном случае выполнение программы продолжается со следующей за условным оператором команды. В языках низкого уровня (ассемблерах) это — единственная доступная форма условного оператора. В некоторых языках для условного оператора с одной ветвью используется специальное ключевое слово (обычно это when).
Условный оператор с двумя ветвями
if условие then команды1 else команды2 end
при истинности условия выполняются команды1 при ложности — команды2. При необходимости проверить последовательно несколько условий возможно каскадирование условных операторов:
if условие1
then команды1
else if условие2 then команды2
else if условие3 then команды3
...
else if условиеN-1 then командыN-1
else командыN end;
В этом случае условия будут проверяться последовательно, и как только встретится истинное, будет выполнен соответствующий набор команд и исполнение перейдёт к команде, следующей за условным оператором. Если ни одно из условий не окажется истинным, выполняются командыN из ветви else.
Условный оператор с несколькими условиями
Вышеприведённая схема каскада условных операторов используется достаточно часто, поэтому ряд языков программирования содержит специальную конструкцию для неё, позволяющую записать множественное ветвление несколько компактнее и менее подверженную ошибкам написания:
if условие1 then команды1
elsif условие2 then команды2
elsif условие3 then команды3
...
else командыN end;
Порядок выполнения этого оператора в точности соответствует вышеприведённому каскаду простых операторов if-then-else, а отличие чисто формальное: вместо вложенных нескольких условных операторов эта конструкция является единым целым и содержит дополнительное ключевое слово elsifвпвыкпкункугнркегнелоарвенкункго, требующее после себя очередное условие.
Билет №8
1). Строковая константа (литерал) - последовательность символов (включая строковые и прописные буквы русского и латинского а также цифры) заключенные в кавычки (") . Например: "Школа N 35", "город Тамбов", "YZPT КОД".
Отметим, что все управляющие символы, кавычка ("), обратная дробная черта (\) и символ новой строки в строковом литерале и в языке программирования Смвольной константе представляются соответствующими управляющими последовательностями. Каждая управляющая последовательность представляется как один символ. Например, при печати литерала "Школа \n N 35" его часть "Школа" будет напечатана на одной строке, а вторая часть "N 35" на следующей строке.
Символы строкового литерала сохраняются в области оперативной памяти. В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0.
Строковый литерал имеет тип char[] . Это означает, что строка рассматривается как массив языке программирования Смволов. Отметим важную особенность, число элементов массива равно числу символов в строке плюс 1, так как нулевой символ (символ конца строки) также является элементом массива. Все строковые литералы рассматриваются компилятором как различные объекты. Строковые литералы могут располагаться на нескольких строках. Такие литералы формируются на основе использования обратной дробной черты и клавиши ввод. Обратная черта с символом новой строки игнорируется компилятором, что приводит к тому, что следующая строка является продолжением предыдущей. Например:
"строка неопределенной \n
длины"
полностью идентична литералу
"строка неопределенной длинны" .
Для сцепления строковых литералов можно использовать символ (или символы) пробела. Если в программе встречаются два или более строковых литерала, разделенные только пробелами, то они будут рассматриваться как одна символьная строка. Этот принцип можно использовать для формирования строковых литералов занимающих более одной строки.
2) Оператор-переключатель switch используется для выбора одного из нескольких альтернативных путей выполнения программы. Выполнение даного оператора начинается с вычисления значения, которое идет после switch в скобках. После этого выполняется та часть кода этого оператора, где значение условия совпадет с веткой case. После ветки case обязательно идет оператор break, который обрывает дальнейшее выполнение оператора switch и передает выполнение программы в точку, которая следует сразу после блока switch. Для лучшего понимания рассмотрим пример. Эдесь вычисляемым значением будет целая переменная а, в зависимости от значения переменной а, будет выполнятся та ветка case, которая будет равна а. В случае, если ни одно из case не равно а, то выполнится ветка default.
int a=1; int b=100;
switch (a) // вычисляем а = 1
{
case -5: // эта ветка не выполнится, так как 1 не равно -5
b=-5;
break;
case 1: // а эта ветка выполнится, 1 = 1
b=2; // после выполнения этой ветки b присвоится 2
break;
default: // эта ветка выполнится, если ни одна из веток case не выполнилась
b=0;
}
Следует добавить, что веток case в операторе switch может быть сколько угодно, а ветка default может опускаться (не использоваться).
Основное назначение оператора switch - заменить оператор if, когда в нем есть множество вложенных условий.
Билет № 9
1) Язык С имеет очень много операций. Каждая операция обозначается вполне определенным символом (знаком или комбинацией знаков). Введенное обозначение операции называют оператором языка программирования. Оператор сообщают компилятору, какое необходимо производить действие над операндами.
Следующие общепринятые определения надлежит хорошо помнить, понимать и знать:
Оператор - это действие или команда, которую может выполнить компьютер (вернее просто язык программирования).
Операнды - это данные, необходимые для выполнения оператора рассматриваемого языка.
Программа это запись алгоритма на языке компьютера (на языке программирования).
В этом опеределении акцентируется внимание именно на том, что без алгоритма нет программы, и стало быть без алгоритма не работает компьютер. Ведь жизнь компьютеру способна дать только программа. Стало быть эта компьютерная жизнь состоит в исполнении программ, то есть алгоритмов. Если жизнь часов в движении стрелок, то компьютер живет алгоритмами, выполняя программы. Это, естественно, только мое сугубо субъективное сравнение. Возможно не очень удачное. Но оно просится в голову и выплескивается в строках урока.
С другой стороны, программа состоит из строк. Каждая строка начинается с номера строки или адреса команды, за которым следует оператор(то есть сама команда). За оператором следуют операнды (или данные). Такова в целом структура программы. Это тоже нужно хорошо помнить и понимать.
3. Некоторые обозначения операций, принятые в языке С.
Приведем примеры обозначения операций, принятые в языке С:
(..) - открывающая и закрывающая скобки. Показывают старшинство выполнения действий в скобках.
. обыкновенная десятичная точка. Отделяет целую часть от дробной части числа.
++ увеличение на единицу (increment).
-- уменьшение на единицу (decrement).
+ сложение.
- вычитание.
* умножение.
/ деление.
> больше.
< меньше.
= равно.
== не равно.
&& логическое умножение или конъюнкция.
|| логическое сложение или дизъюнкция.
# знак операции препроцессора.
и так далее...
Каждая операция в языке С имеет вполне определенное число операндов (необходимых данных). Так, например, если требуется всего один операнд, то такую операцию называют унарной.
Если же для выполнения операции необходимы два операнда, то такая операция носит название бинарной операции.
В языке С существует только одна операция, которая требует три операнда. Это операция "?", которая будет рассмотрена нами попозже.
Отметим, что каждая операция имеет определенные типы данных, то есть операндов. Например, если необходимо выполнить побитовый сдвиг данных, то операнды должны быть целочисленными. аналогичное относится и к бинарным операциям. Кроме того, нужно еще знать, что, например, операция сложения выполняется в направлении слева направо. А операция присвоения, наоборот, выполняется справа налево.
Далее, каждая операция имеет свой приоритет. Так, например, сложение имеет более низкий приоритет по отношению к умножению или делению. В то же время сложение имеет более высокий приоритет по отношению к операции присвоения. Как правило унарные операции имеют более высокий приоритет, чем бинарные.
Отметим еще, что каждое выражение имеет определенное значение, то есть значит свой тип выражения. Рассмотрим теперь арифметические операции и их особенности.
4. Арифметические операции и их особенности в языке С.
В языке С к арифметическим операциям относятся следующие операции:
- вычитание или унарный минус;
+ сложение;
* умножение;
/ деление;
% деление по модулю;
++ увеличение на единицу;
-- уменьшение на единицу;
Операции сложения, вычитания, умножения и деления действуют так же, как в большинстве алгоритмических языков программирования. операции выполняются так: сначала вычисляется значение левого выражения (операнда), затем вычисляется значение выражения, стоящего справа от знака действия. Далее, в том случае, когда операнды имеют общий тип данных, этот же тип имеет и результат. Поэтому, если применяется деление "/" к целым числам, например, 11/3, то результат тоже будет целым, то есть в данном случае 3. А выражение 1/2 в этом случае будет равно нулю.
Операция "%" деление по модулю дает остаток от целочисленного деления. Она может применяться к целочисленным переменным. Теперь решим небольую задачу.
2) Оператор цикла while называется циклом с предусловием и имеет следующий формат:
while (выражение) тело ;
В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:
1. Вычисляется выражение.
2. Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется тело оператора while.
3. Процесс повторяется с пункта 1.
Оператор цикла вида
for (выражение-1; выражение-2; выражение-3) тело ;
может быть заменен оператором while следующим образом:
выражение-1;
while (выражение-2)
{ тело
выражение-3;
}
Так же как и при выполнении оператора for, в операторе while вначале происходит проверка условия. Поэтому оператор while удобно использовать в ситуациях, когда тело оператора не всегда нужно выполнять.
Внутри операторов for и while можно использовать локальные переменные, которые должны быть объявлены с определением соответствующих типов.
Билет№10
1). Операция присваивания
Рассматриваемая операция в языке С обозначается как "=". Оператор присваивания может использоваться в выражениях, которые включают в себя оператры сравнения или логические операторы. Например:
if ((f=x-y)>0) printf ("Число x больше, чем y");
Здесь вначале вычисляется величина x-y, которая присваивается переменной f. Далее ее значение сравнивается с нулем.
Важнейшей особенностью языка С является возможность записать в операторе присваивания несколько переменных величин для присваивания им одного и того же значения. Например
a=b=c=d=x*y;
Здесь Вы видите многократное использование знака присвоения "=". Как выполняется такой оператор? Сначала вычисляется значение правой части выражения: x*y. Далее полученное число записывается в память, отведенную под переменную "d". После этого это же значение записывается в память, отведенную под величину "с" и так далее под величины: "b" и "a".
В левой части оператора присвоения должно стоять выражение, которому можно присваивать значение. Такие выражения в языке С, например, просто переменная, называются величиной lvalue. Например, выражение 2=2 ошибочно, так как константе нельзя присвоить никакое значение. Поэтому константа не является величиной lvalue.
В языке С имеются еще дополнительные операции со знаком присвоения. Это +=, -=, /=, %=. Поясним немного данные операции. Так, например, вместо выражения a=a+5 можно написать a += 5. Здесь операция "+=" это аддитивная операция присвоения. В результате ее выполнения величина, стоящая справа от знака "=", то есть число 5, прибавляется к значению переменной, указанной слева от знака "=".
Отметим, что аналогично выполняются и такие операции, как:
m-=20, что означает то же самое, что и m=m+20;
m*=20, что означает то же самое, что и m=m820;
m/=10, что означает то же самое, что и m=m/10;
m%=10, что означает то же самое, что и m=m%10.
Указанные операции имеют тот же приоритет, что и операция "=". То есть приоритет этих операций ниже, чем приоритет арифметических операций. Отметим, что операция x+=5 выполняется значительно быстрее, чем операция x=x+5.
2) Оператор цикла 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 (a[k] < i) k++;
}
while (i<30 && j<-30);
Билет№11