Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на С.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

Управляющие последовательности

И на последок, помните мы говорили об управляющих последовательностях (например, \n) , их еще называют escape последовательности. Вот вам список некоторых из этих последовательностей:

сигнал-звонок

\f перевод-страницы

\n новая-строка

\t горизонтальная-табуляция

\v вертикальная-табуляция

\\ обратная наклонная черта

\? знак вопроса

\' одиночная кавычка

\" двойная кавычка

//UPD (5 июля 2012):

И еще один небольшой, но важный комментарий. Рассмотрим простой пример.

Листинг3.7

#include <stdio.h>

int main(){

int a;

a=getchar();

printf("a=%d",a);

return(0);

}

Ниже представлен результат её работы.

Как видите, ввели мы f, а на выходе получили 102. Чудеса, да и только.

На самом деле все просто. Когда функция getchar считывает символ входного потока, она возвращает значение int этого символа, равное коду символа в таблице кодов ASCII.

Каждому символу в этой таблице ставится в соответствие его порядковый номер. Например, символу f соответствует номер 102, а цифре 1, номер 49. Т.е. если вы введете 1, то в переменную сохранится не 1, а 49. Таблицу кодов ASCII вы легко найдете в интернете.

А как же быть, спросите вы.

Да легко, можно воспользоваться для вывода символов функцией putchar, как мы уже это делали выше, а можно в спецификаторе формата использовать не %d, а %c. Тогда всё встанет на свои места.

Резюме урока:

  • Научились работать со справочниками функций

  • Изучили функции посимвольного ввода и вывода

  • Изучили спецификаторы и модификаторы формата для функции printf

  • Немножко поговорили о потоках в программировании

Задание для практической работы:

  • Поэкспериментируйте с модификаторами формата для спецификатора %e.

  • Напишите программу которая будет использовать различные escape-последовательности.Посмотрите и на сколько символов вправо сдвигает курсор последовательность \t, посмотрите на сколько строчек вниз сдвигает курсор последовательность \v.

  • Напишите программу которая считывает с клавиатуры 6 чисел, записанных через пробел. (1 2 64.3 0.624 25.07 43900) причем первые два числа считываются с помощью функции getchar. Для вывода запрещено использовать пробелы, все сдвиги оформляйте через табуляцию и с помощью модификаторов формата. Программа выводит данные на экран в виде такой таблицы:

Занятие 4. Арифметические выражения и стандартные математические функции. Приоритет операций. Инкремент. Декремент.

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

Оператор присваивания. Арифметические выражения.

В языке программирования Си, существуют различные операторы. Самым главным является оператор присваивания, который обозначается символом =. Он используется в любой программе, кроме простейших, типа нашей первой программы, выводящей на экран Hello world. Как вы уже помните из урока программирования посвященного типам данных, с помощью него мы присваиваем переменной находящейся слева от оператора присваивания, значение выражения находящегося справа от него. Например:

Листинг 4.1

int a,b;

a=7;// переменной a присвоить значение 7

b=2;// переменной b присвоить значение 2

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

«+» - сложение

«-» - вычитание

«*» - умножение

«/» - деление

Кроме четырех основных есть еще такая операция как получение остатка от деления «%».

Их можно использовать совместно с оператором присваивания. Например:

Листинг 4.2.

int a;

a=7+3;// переменной a присвоить результат выражения 7+3, т.е.в неё запишется 10

a=a-2;// переменной a присвоить результат выражения a-2

Обратите внимание на последнюю строчку. С точки зрения математики такая запись не имеет смысла. Это надо понимать следующим образом. Сначала берется значение переменной a, из него вычитается 2 и после этого результат этого выражения записывается снова в переменную a. В результате работы программы Листинг 4.2, в переменной a будет значение 8. ( Во второй строке мы присвоили её значение 10. Потом, в третей строке, мы берем 10 вычитаем 2, получаем 8, и записываем этот результат снова в переменную а.)

Кстати, очень важное замечание.

После того как мы объявили переменную, её значение не определено, в ней содержится какой-то мусор, не стоит считать, что её значение после объявления равно 0.

Т.е. пока мы в переменную a не сохранили значение 10, там был непонятный мусор.

Еще один важный момент. Посмотрите на листинг 4.3

Листинг 4.3

int a,b;

a=10;// переменной a 10

b=a-2;// переменной b присвоить результат выражения a-2

Когда мы используем переменную в каком-то выражении мы работаем не с самой переменной, а только со значением, которое в ней сохранено. Т.е. когда мы переменной b присваиваем значение выражения a-2, в переменной a так и остается значение 10. Оно на 2 не уменьшается. Компьютер в выражение a-2 подставляет значение переменной a, т.е. он заменяет a-2, на 10-2.

Теперь рассмотрим простейшую программу

Листинг 4.4

#include <stdio.h>

int main(){

int a,b;

float c;

a=7;

b=2;

c=a+b; // в переменную с записать сумму переменных a и b

printf("summa %f\n", c);

c=a-b;

printf("raznozt' %f\n", c);

c=a*b;

printf("proizvedenie %f\n", c);

c=a/b;

printf("delenie %f\n", c);

c=a%b;

printf("ostatok ot deleniya %f\n", c);

return (0);

}

Вот результат её работы:

Программа иллюстрирующая работу стандартных арифметических операторов.

Если вы были внимательны, то заметили, наверное, что при делении получился неправильный ответ. 7 поделить на 2 равняется 3.5.

Это одна из особенностей языка программирования Си.

При делении целочисленной переменной на целочисленную переменную остаток от деления теряется. Поэтому 7/2 получилось 3.

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

Листинг 4.5

c=(float)a/b;

c=a/(float)b;

Такая операция называется явным преобразованием типа.Таким образом можно привести и переменную типа float к типу int. Но тогда мы потеряем всю дробную часть, которая стоит после точки. О преобразовании типов в языке Си, мы ещё будем говорить в следующих уроках.