Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
153
Добавлен:
11.05.2015
Размер:
328.83 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Санкт-Петербургский государственный университет аэрокосмического приборостроения

Н.В. Кучин, М.М.Павлова

ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ СИ

Учебное пособие

Санкт-Петербург 2001

УДК 519. 682 (075)

ББК 32. 973 – 18.1 К95

Кучин Н. В., Павлова М. М.

К95 Основы программирования на языке СИ: Учеб. пособие / СПбГУАП. СПб., 2001. 86 с.

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

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

Рецензенты:

кафедра информатики и прикладной математики СПбГИТМО (ТУ) (кандидат технических наук доцент Т. А. Павловская); профессор кафедры радиолокационных систем

государственного университета телекоммуникаций им. М. А. Бонч-Бруевича доктор технических наук В. В. Волков

Утверждено редакционно-издательским советом университета

в качестве учебного пособия

© СПбГУАП, 2001

© Н.В.Кучин, М.М.Павлова, 2001

2

ПРЕДИСЛОВИЕ

Язык C был создан в начале 70-х годов двадцатого столетия и в настоящее время является основой для создания значительной части системных программ и приложений. Он эффективен как для решения задач системного программирования, так и для создания прикладных программ. Среди преимуществ языка C можно отметить переносимость программ, написанных на языке С, на компьютеры различной архитектуры и из одной операционной системы в другую, лаконичность записи алгоритмов, логическую стройность, возможность получить эффективный код программ, сравнимых по скорости с программами, написанными на ассемблере. Удобство языка С основано на том, что он является одновременно и языком высокого уровня, имеющим полный набор конструкций структурного программирования, поддерживающим модульность, блочную структуру программ, возможность раздельной компиляции модулей. В то же самое время язык С имеет набор низкоуровневых средств, позволяющих иметь удобный доступ к аппаратным средствам компьютера, в частности, позволяющих добраться до каждого бита памяти. Гибкость и универсальность языка С обеспечивает его широкое распространение.

Учебное пособие ориентировано на начинающих программистов, имеющих первоначальные понятия об основах алгоритмизации на уровне курса информатики. Каждый раздел пособия снабжен соответствующими примерами, которые представляют собой программы, написанные на языке С, или отдельные конструкции таких программ. Все приводимые примеры используют стандарт ANSI языка С и ориентируются на трансляторы, созданные фирмой Borland International Inc., как самые распространенные. Усвоение учебного материала, представленного в данном пособии, позволит приобрести устойчивые навыки правильного написания программ на языке С, а также значительно облегчить изучение объектно-ориентированного языка – С++.

3

1.ОСНОВНЫЕ ПОНЯТИЯ ЯЗЫКА С

1.1.Алфавит, идентификаторы, ключевые слова, комментарии

Алфавитом языка называется совокупность символов, используемых в языке. Язык C различают, в отличие от многих других языков программирования, прописные и строчные буквы. Язык C, как говорят, является чувствительным к регистру. В языке С имена COLOR, color, и Color определяют три различные имени переменных. Поэтому при написании программ необходимо быть внимательным при использовании регистров. Обычно используется следующее соглашение – имена переменных содержат только строчные буквы (нижний регистр), константы

имакросы – прописные буквы (верхний регистр).

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

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

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

4

ayto

double

int

struct

break

else

long

switch

case

enum

registr

typedef

char

extern

return

union

const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

Часть символов язык C рассматривает как пробельные символы. Это не только символ пробела ‘ ‘, но символы табуляции, символы перевода строки, возврата каретки, символ перевода страницы.

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

1.2. Примеры простых программ

Рассмотрим следующую программу:

# include < stdio.h > /* Пример 1 */ main()

{

int year; year = 2000;

printf(“Сейчас %d год\n”,year);

}

Первая строка # include < stdio.h > сообщает о необходимости подключения файла stdio.h. Этот файл содержит информацию, необходимую для правильного выполнения функций библиотеки ввода/вывода языка С. Язык C предусматривает использование таких файлов, которые называются заголовочными. В данном случае использование файла stdio.h необходимо, так как в этом файле находится информация о функции printf () , которая используется в нашей программе.

Вторая строка /* Пример 1 */ является комментарием.

5

Строка main() определяет имя функции. Любая программа на языке C включает одну или более функций. Выполнение программы начинается с функции main(). Поэтому каждая программа на языке C должна содержать эту функцию.

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

Строка int year; объявляет переменную, названную year, и сообщает компилятору, что это переменная целого типа. В языке C все переменные должны быть объявлены прежде, чем они будут использованы. Процесс объявления переменных включает в себя определение имени и указания типа переменных.

Строка year = 2000; является оператором присваивания. Здесь переменной с именем year присваивается значение 2000. Заметим, что в языке C в операторе присваивания используется просто знак равенства. Все операторы в языке C заканчиваются символом “ точка с запятой”.

Строка printf(“Сейчас %d год\n”,year); является вызовом стандартной функции printf(), которая выводит на экран некоторую информацию. Эта строка состоит из двух частей: имени функции printf() и двух ее аргументов “Сейчас %d год\n” и year, разделенных запятой. Функция printf() является универсальной функцией форматного вывода. Для вызова функции нужно правильно написать имя функции и в скобках указать необходимые фактические аргументы. Первый аргумент функции printf() – это строка в кавычках “Сейчас %d год\n”, которую называют управляющей строкой. Эта строка может содержать любые символы или спецификации формата, начинающиеся с символа %. Обычные символы просто отображаются на экран в том порядке, в котором они следуют. Спецификация формата, начинающаяся с символа %d указывает формат, в котором будет выводится значение переменной year, являющейся вторым аргументом функции printf(). Спецификация %d указывает, что будет выводится целое число в десятичной записи. Комбинация символов ‘\n’ сообщает функции printf() о необходимости перехода на новую строку. Этот символ называется символом новой строки.

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

6

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

# include < stdio.h >

/* Пример 2: вычисление длины окружности */ main()

{

int radius; float length;

printf(“ Введите значение радиуса: \n”); scanf(“%d”,&radius);

length = 3.1415*2*radius; printf(“Радиус-%d\n,Длина- %f\n”,radius,length);

}

Вэтой программе по сравнению с предыдущей появились новые моменты.

Во-первых, объявлены переменные двух разных типов: radius – типа целое(int); length – типа с плавающей запятой (float), содержащую дробную часть.

Во-вторых, используется функция scanf() для ввода с клавиатуры значения радиуса окружности. Первый аргумент функции scanf() “%d” указывает, что будет вводится целое десятичное число. Второй аргумент – имя переменной, которой будет присвоено введенное значение. Символ & (амперсанд) перед именем переменной radius необходим для правильной работы функции scanf(). Более подробно использование этого символа будет обсуждаться позднее.

Вследующей строке программы целые числа 2 и radius умножаются на число с плавающей запятой 3.1415 и результат присваивается переменной типа float. Язык C допускает использование в выражениях переменных разных типов. Для вывода результатов используется функция printf(), которая содержит 4 аргумента. Спецификатор формата %f используется для печати значения переменной length типа float.

Врассмотренном примере длина окружности вычисляется только для целых радиусов. Для того чтобы программа могла вычислять длину окружности для любых радиусов, необходимо объявить переменную radius как float, а в функции scanf() использовать спецификатор “%f”.

7

1.3. Определение некоторых понятий

Исходный текст (source cod) – текст программы на языке программирования.

Объектный код (object cod) – текст программы на машинном языке, который не может выполняться компьютером. Получается после компиляции исходного текста файла или программы.

Компоновщик (linker) – программа, строящая выполняемый модуль из объектных модулей. Эта программа собирает откомпилированный текст программы и функций из стандартных библиотек языка C в одну выполняемую программу.

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

Время компиляции (compiler time) – период, во время которого происходит компиляция программы. Во время компиляции обнаруживаются синтаксические ошибки, сделанные при составлении текста программы.

Время выполнения (run time) – период, во время которого происходит выполнение программы.

8

2.ПЕРЕМЕННЫЕ, КОНСТАНТЫ, ОПЕРАЦИИ И ВЫРАЖЕНИЯ

2.1.Базовые типы данных и объявление переменных

Вязыке C все переменные должны быть объявлены до их использования. В нем определены 5 типов данных, которые считаются базовыми:

char – символьные; int – целые;

float – с плавающей точкой;

double – с плавающей точкой двойной длины; void – пустой, не имеющий значения.

Типы char и int являются целыми типами и предназначены для хранения целых чисел. Хотя тип char по названию символьная переменная, любой символ в компьютере связан с целым числом – кодом этого символа в таблице ASCII. Сам символ нам необходим, когда информация выводится на экран или на принтер или, наоборот, вводится с клавиатуры. Подобные преобразования символа в код и обратно производятся автоматически. Тип char по умолчанию является знаковым типом, однако, настройкой опций интегрированной среды можно установить по умолчанию беззнаковый тип char. Тип int является всегда знаковым, также как и типы float и double.

Переменные типа double и float являются числами с плавающей точкой.

Ключевое слово void привнесено из стандарта ANSI для языка C++. Нельзя создать переменную типа void. Тем не менее введение такого типа оказалось необходимым, что будет показано в дальнейшем.

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

В стандарте ANSI языка C такими модификаторами являются следующие зарезервированные слова:

9

signed – знаковый; unsigned – беззнаковый; long – длинный; short – короткий.

Модификаторы signed и unsigned могут применяться к типам char и int. Модификаторы short и long могут применяться к типу int. Модификатор long может применяться также к типу double. Модификаторы signed и unsigned могут комбинироваться с модификаторами short и long применительно к типу int.

В табл. 2.1 приведены все возможные типы данных с различными модификациями модификаторов.

 

 

 

Таблица 2.1

 

Типы данных и модификаторы

 

 

 

 

Тип

 

Размер в байтах

Интервал изменений

 

 

 

 

char

 

1

От –128 до 127

 

 

 

 

unsigned char

 

1

От 0 до 255

 

 

 

 

signed char

 

1

От –128 до 127

 

 

 

 

int

 

2

От –32768 до 32767

 

 

 

 

unsigned int

 

2

От 0 до 65535

 

 

 

 

signed int

 

2

От –32768 до 32767

 

 

 

 

short int

 

2

От –32768 до 32767

 

 

 

 

unsigned short int

 

2

От 0 до 65535

 

 

 

 

signed short int

 

2

От –32768 до 32768

 

 

 

 

long int

 

4

От –2147483648 до 2147483647

 

 

 

 

signed long int

 

4

От –2147483648 до 2147483647

 

 

 

 

unsigned long int

 

4

От 0 до 4294967295

 

 

 

 

float

 

4

От 3.4E–38 до 3.4E+38

 

 

 

 

double

 

8

От 1.7E–308 до 1.7E+308

 

 

 

 

long double

 

10

От 3.4E–4932 до 3.4E+4932

 

 

 

 

Запись 3.4E-38 соответствует числу 3.4*10–38, это так называемый научный формат записи числа с плавающей точкой.

Различие между целыми числами со знаком и целыми числами без знака состоит в том, как интерпретируется старший бит целого числа. Если старший бит целого числа со знаком равен нулю, – число положи-

10