Смекни!
smekni.com

Курс лекции по Информатике (стр. 10 из 11)

char *msg;

Звездочка перед идентификатором msg сообщает компилятору о том, что msg является ссылкой на символ. Другими словами, в переменную msg (ее формат – p, т.е. тип указатель) может быть записан адрес некоторого символа. Однако в данном случае компилятор не резервирует место для хранения символов и не инициализирует переменную msg конкретным адресом.

Имена, которые присваиваются константам, типам данных, переменным и функциям известны как идентификаторы. Приведем примеры идентификаторов:

- char, int, float - предопределенные типы данных;

- main - основная функция программы;

- msg, x, y - переменные, определенные пользователем;

- printf, puts - библиотечные функции.

Все идентификаторы должны начинаться с буквы (a…zили A…Z) или с символа подчеркивания ( _ ). В идентификаторе могут использоваться и цифры. Идентификаторы зависят от регистра, т.е. компилятор различает буквы верхнего и нижнего регистра. Например, следующие 3 идентификатора: indx, Indx, INDX различны. Идентификаторы различаются по первым 32 символам.

Лекция 13

Операторы

Для манипуляции данными в языке Си имеются многочисленные операторы.

Оператор присваивания имеет формат:

Переменная= выражение;

В языке Си присваивание обозначается знаком равенства ( = ).

Семантика оператора – значение выражения правой стороны присваивается переменной с левой стороны в качестве нового значения.

Язык Си поддерживает стандартный набор бинарных арифметических операций:

умножение - ( * )

деление - ( / )

взятие остатка – (%)

сложение - ( + )

вычитание - ( - )

и операцию унарного минуса ( a + ( - b ) ), которая выполняет дополнение до двух.

Оператор инкремента ( ++ ) позволяет добавить единицу к любому значению, а оператор декремента ( -- ) – вычесть единицу.

Сложение и вычитание могут производиться в середине выражения,

Кроме того, можно определить, будут ли они выполняться до или после вычисления всего выражения. Рассмотрим две строки:

sum = a + b++;

sum = a + ++b;

Первая строка производит следующие действия: складываются значения переменных aи b, результат вычисления присваивается переменной sum, затем переменная bувеличивается на единицу. Вторая строка делает следующее: значение bувеличивается на единицу, значение aскладывается с b, результат сложения присваивается переменной sum.

В языке Си имеются следующие побитовые операторы:

cдвиг влево - ( << )

сдвиг вправо – ( >> )

И – ( & )

ИЛИ – ( I)

исключающее ИЛИ – ( ^ )

НЕ – ( ~).

Эти операторы позволяют выполнять действия низкого уровня над различными значениями на уровне нулей и единиц.

Язык Си поддерживает два адресных оператора:

оператор взятия адреса ( & ) и косвенный оператор ( * ).

Оператор & возвращает адрес переменной: если sumесть переменная типа int, тогда &sum есть адрес (ячеки памяти) этой переменной. Если msgесть указатель (ссылка) на переменную типа char, тогда *msgесть символ, на который указывает msg.

Лекция 14

Ввод

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

Функция scanfпредназначена для интерактивного ввода данных с клавиатуры. Она имеет формат анологичный функции printf:

scanf(<форматная строка>,<адрес>,<адрес>,…);

Эта функция использует многие спецификаторы формата, рассмотренные ранее: %dдля целых чисел, %fдля чисел с плавающей точкой, %s для строк и т.д. Однако у этой функции есть важная отличительная черта: за форматной строкой следуют не значения а адреса. Например,

scanf(“%d %d”, &a, &b);

Эта строка означает, что программа ожидает ввода двух десятичных целых значений, разделенных пробелом. Первое значение введется по адресу переменной a (&a), а второе – по адресу переменной b.

Для ввода строковых данных в языке Си имеется функция gets, имеющая формат

gets(name);

Эта функция воспринимает любую информацию до тех пор, пока не нажмете клавишу Enter. В конце введенной строки добавляется функцией нулевой символ &bsol;0.

Для ввода единичного символа в языке Си имеется функция getch, которая считывает с клавиатуры один символ. В отличие от функций scanf и gets функция считанный символ не передает в основную память, а сама принимает значение символа, считанного склавиатуры. Таким образом значение функции getch может быть присвоено переменной типа char например,

char x;

x = getch();

Лекция 15

Условные операторы

Рассмотрим операторы отношения и логические операторы, которые принимают значения true (истина) и false (ложь).

Операторы отношения позволяют сравнивать два значения, результат оператора зависит от того, истинно или ложно сравнение. Если сравнение ложно, значение результата равно нулю, если истинно, значение равно единице. В языке Си следующие операторы отношения:

больше чем - >

больше или равно - >=

меньше чем - <

меньше или равно - <=

равно - = =

не равно - !=

Например, выражение b < 0 принимает значение trueесли значение переменной bменьше нуля.

В языке Си имеются три логических оператора: И(&&), ИЛИ(II) и НЕ(!). Их необходимо отличать от побитовых операторов (&, I, ~). Логические операторы выполняются над логическими значениями trueи false, а побитовые операторы – над нулями и единицами, находящимися в битах. Логические операторы дают результат или равный 1 (истина) или равный 0 (ложь).

Оператор ifв языке Си имеет следующий формат:

if (выражение)

оператор 1;

else

оператор 2;

Выражение может быть любым выражением, принимающим целое значение или его значение может быть преобразовано к целому значению. Если это значение не равно нулю (т.е. истинно), тогда выполняется оператор 1, в противном случае оператор 2. Оператор ifдопускает и укороченный формат:

if (выражение)

оператор 1;

В данном случае оператор 1 выполняется только тогда, когда значение выражения не равно нулю. Если значение выражения равно нулю, тогда выполняется оператор следующий за if.

Если вместо оператора 1 стоит последовательность операторов, то ее надо записать в фигурных скобках. Это и будет составным оператором в языке Си. Составной оператор имеет вид:

{

оператор

оператор

………..

оператор

}

Циклы.

В языке Си имеются три вида циклов: while, for, do…while.

Цикл whileявляется наиболее общим видом цикла и имеет формат:

while (выражение)

оператор;

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

Цикл forвыполняет набор операторов (тело цикла) определенное число раз, пока некоторая переменная (параметр цикла) не пройдет некоторый промежуток значений. Цикл forимеет следующий формат:

for (выражение1; выражение2; выражение3)

оператор;

Выражение1 присваивает начальное значение параметру цикла.

Выражение2 проверяет условие продолжения цикла.

Выражение3 модифицирует параметр цикла на шаг.

Оператор может быть простым или составным.

Любое из трех выражений может быть пропущено, но точки с запятой обязательно должны стоять. Если пропущено выражение2, то считается что оно равно 1 (истинно) и цикл никогда не заканчивается(бесконечный).

Цикл do … whileреализует итерационный циклический вычислительный процесс и имеет следующий формат:

do оператор while(выражение);

Выполняется оператор (тело цикла) и вычисляется выражение, если оно принимает значение истина, то тело цикла выполняется вновь, если оно принимает значение ложь - происходит выход из цикла.

Лекция 16

Подпрограммы

В языке Си подпрограммы называются функциями. Теоретически, каждая функция должна возвращать какое-либо значение. Практически, значения, возвращаемые многими функциями, просто игнорируются. В язык Си имеется возможность определения функции типа void, что означает , что эти функции никогда не возвращают никакого значения.

В языке Си функцию можно объявить и определить. При объявлении функции вся программа узнает о ее существовании и все другие функции, включая main, могут к ней обращаться. При определении функции пишется программа, составляющая тело функции. Например,

/*Объявление функций*/

void get_parms (float *p1, float *p2);

float get_ratio (float divident, float divisor);

void put_ratio (float ratio);

const float INFINITY = 3.4E+38

/*Началопрограммы*/

main()

{

float a, b, ratio;

char ch;

do

{

get_parms (&a, &b); /*Вводпараметров*/

ratio = get_ratio(a, b); /*Вычислениеratio*/

put_ratio(ratio); /*Выводответа*/

printf (‘’Нажмите клавишу ’q’ , то выход, любую другую - продолжение ‘’);

} while ((ch = getch()) != ’q’);

}

/*Конецфункцииmain*/

/*Определениефункций*/

void get_parms (float *p1, float *p2)

{

printf(‘’ Введите два числа: ‘’);

scanf (‘’%f %f ‘’, p1, p2);

}

float qet_ratio(float divident, float divisor)

{

if (divisor = = 0.0)

return (INFINITY);

else

return (divident / divisor);

}

void put_ratio(float ratio)

{

if (ratio = = INFINITY)

printf (‘’Отношение не определено&bsol;n‘’);

else

printf (‘’Отношение = %f &bsol;n ‘’, ratio);

}

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

В следующей строке определяется константа с плавающей точкой INFINITY ( в языке Си принято обозначать глобальные константы символами верхнего регистра). Эта константа имеет очень большое положительное значение и используется для сигнализации об ошибке деления на ноль. Так как она определена здесь, область ее видимости распространяется на все функции, включая main. Далее идет функция main (головной модуль), т.е. основная часть программы. Каждая программа на языке Си имеет функцию main. При вызове программы операционной системой (или запуск из Турбо-Си ) управление передается функции main, из нее же происходит и возврат управления в операционную систему. В процессе выполнения головного модуля (функции main) осуществляется обращение к подпрограммам (функциям). После функции mainидут определения трех функций, объявленных в разделе прототипов.