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

6

теория

д/з

1

Простые типы данных. Модификаторы. переменные.

2

Структура программы. Ввод- вывод. Объявление функций.

3

условный оператор Swith и break

4

циклы

5

массивы.

6

практическая работа

7

Указатели

8

Строки

9

Практичесоке занятие

10

Графика

11

Функции

12

Указатели и массивы

13

sizeof. приоритеты операций.

14

перечислимый тип

15

Структуры

16

макроопредения.

17

файлы. Потоки. Стандартные . Текстовые. Двоичные.Текстовые файлы

18

практическая работа

19

структуры

20

практическая работа

21

Поразрядные операции

22

Подготовка к зачетной работе

23

теоретический зачет

24

итоговый зачет по курсу

Си-сравнительно универсальный язык программирования созданный еще в 1972 г. Деннисом Ритчи(фирма Bell Labaratories, США). Первоначально язык был реализован в операционной системе UNIX на ЭВМ PDP - 11

Простые типы данных

Базовые числовые типы данных

В Си имеется небольшое количество простых типов данных, причем все они являются числовыми.

Целочисленные типы: char, int.

Вещественные типы: float, double.

Модификаторы

Для образования типов, производных от простых, имеются модификаторы, которые (для числовых типов) бывают двух видов; модификаторы знака и модификаторы размера. Модификаторы записываются перед названием типа.

Модификаторы знака: signed (знаковый), unsigned (беззнаковый).

Модификаторы размера: short, long.

. Описание переменных

Описание переменных в Си имеет вид:

<имя типа> <список переменных>;

Пример: int а, b, с ;

Переменные можно инициализировать при описании.

Пример: int а=1,Ь,с=2;

Переменные (об этом еще будет подробнее сказано ниже) могут описываться на внешнем уровне (глобальные переменные) и в начале любого блока (локальные переменные).

2. Запись числовых констант

1. Запись целых констант

Можно явно указать компилятору тип числовой константы. Делается это посредством символов "U" и "L", которыми могут заканчиваться числовые константы. Так, запись 1U означает, что используется значение 1 типа unsigned int. Запись 1L обозначает единицу типа long, a 1UL ? единицу типа unsigned long. (Регистр букв "U" и "L" значения не имеет.)

Кроме этого, числовые константы могут быть представлены в восьмеричном и шестнадцатеричном видах. Если запись целого числа начинается с нуля (например, 010), то это означает, что число записано в восьмеричной системе счисления (т.е. 010 ? это 8), а если перед числом имеется префикс Ох, это означает, что число представ­лено в шестнадцатеричной системе счисления.

2. Запись вещественных констант

Если в записи числовой константы имеется точка (1.5) или экспоненциальное расширение (lE-l), то компилятор считает ее вещественной. Разумеется, в записи может присутствовать и то, и другое: 1.5Е?1. (Регистр буквы "Е" значения не имеет.) Вещественные константы по умолчанию имеют тип double. В некоторых системах программирования имеется возможность явно объявить, что вещественная константа имеет тип f 1 о а -:, посредством символа "F" на конце: 1. 5F.

3. Запись символьных констант

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

' \п' ? переход на новую строку;

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

'\а' ? звуковой сигнал;

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

3. Операции над числовыми данными

1. Арифметические операции над данными целочисленных типов

Над данными целочисленных типов определены следующие операции: +, -, *, / (целочисленное деление, в Паскале эта операция называется div), % (взятие остатка, в Паскале эта операция называется mod), ++, --(последние две операции могут быть префиксными и постфиксными), >>,<<,&, | ,^, ~.

Сначала разберемся с целочисленным делением. Рассмотрим следующий пример:

float a;

а=1/2;

Вопрос: какое значение получит переменная а ?

Ответ: 0. Дело в том, что если оба операнда операции деления целые, то выполняется целочисленное деление. Что потом мы сделаем с результатом (в данном случае результат присваивается вещественной переменной), значения не имеет. Ситуации, подобные приведенным,

очень часто портят нервы начинающим программи­ровать на Си. Как же выйти из положения? Вариантов существует несколько (один еще будет рассмотрен ниже). Например, можно один (любой) из операндов сделать вещественным (а можно и оба, это уже роли не играет), т.е. записать выражение

так: а=1. /2;.

Перейдем к рассмотрению операций инкремента (++) и декремента (--). Эти операции могут применяться исключительно к переменным и, соответственно, увеличивают и уменьшают значение переменной на 1. В Паскале имеются соответствующие процедуры inc и dec. Наличие в Си данных операций связано с тем, что в системе команд большинства микропроцессоров имеются специальные операции для увеличения и уменьшения значения (обычно в регистре) именно на 1. Поэтому запись а++; предпочтительнее записи a=a+l;, поскольку в большинстве случаев операция инкремента выполняется быстрее. Одна из распространенных, но "простых" ошибок (т.е. обычно дети допускают их единожды, понимают, в чем дело, и больше уже не ошибаются), следующая ? операцию инкремента пробуют применить к выражению. Например, написать что-то вроде а= (b+с) ++;. Более тонкий, хотя тоже не очень сложный вопрос ? префиксное и постфиксное использование этих операций. Если мы просто увеличиваем значение переменной на 1, то никакой разницы между записями а++; и ++а; нет. Другое

дело ? использование этих операций в выражениях. Рассмотрим следующие примеры:

а=3;b=2;

с=а++*b++;

В результате выполнения приведенной последовательности операторов переменная с получит значение б, а переменные а и b ? значения 4 и 3 соответственно.

Битовые операции >> (в Паскале ? shr), <<(shl), & (and), | (or), ^ (хоr), ~ (not) применяются к машинному (двоичному) представлению числа.. Арифметические операции над вещественными данными

+,-, *, /, ++, -- (последние две операции могут быть префиксными и постфиксными),

. Операции отношения

Операции отношения (>,>=,<,<=,==, !=) также совсем простые, и особенностей, связанных с их использованием, практически нет. Следует обратить внимание, что результатом операции отношения является целое число (обычно 0, если результат операции "ложь", и 1, если "истина"; но гарантируется лишь то, что при "лжи" вырабатывается 0, а при "истине" ? значение, отличное от нуля).

Логические операции

С логическими операциями, которых всего три (&&, | | , ! ), надо быть внимательными и не путать их с битовыми. Дело в том, что с точки зрения компилятора оба выражения: (а==1)&&(b>2) и (а==1)&(b>2) являются синтаксически правильными. Ведь в результате выполнения операций отношения == и > получаются целые числа, с которыми можно производить как логическую операцию & &, так и битовую

операцию &.

Операция присваивания

С операцией присваивания для тех, кто изучает Си после Паскаля, иногда возникают проблемы. Самое важное: в Си присваивание ? именно операция, а не оператор, как в Паскале. Как и всякая другая, операция присваивания вырабатывает значение, которое может использоваться в выражениях. Самый простой пример, иллюстрирующий сказанное, следующий. Пусть нам нужно присвоить одно и то же значение нескольким переменным. В Паскале это можно сделать лишь последовательными присваиваниями: а:=1; b:=1; с:=1. В Си запись короче: a=b=c=l;. ля любой бинарной операции ор запись а=а ор b (понятно, что имена переменных могут быть и другими) может быть заменена более короткой записью: а ор= b. Пример: выражение а=а+b; можно переписать в виде a+=b;.

Операция запятая (,)

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

Операция приведения к типу (тип)

При рассмотрении операций над целыми числами (конкретно ? операции деления) мы уже приводили "опасный" пример:

float с;

с=1/2;

и объяснили, почему переменная с получит значение 0. Там же был указан и выход из положения ? явно записать одно из чисел (или оба) как вещественное:

float с;

с=1./2;

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

float с;

int a=l,b=2;

c=a/b;

Здесь можно выйти из положения, явно приведя одну из переменных (или обе, но в этом нет необходимости ) к вещественному типу. Операция приведения к типу является унарной префиксной операцией и записыва­ется перед выражением, к которому она применяется. Сама 0операция имеет вид (тип). Для нашего примера это выглядит следующим образом:

float c;

int a=l,b=2; с=(float)a/b;