Главная страница

Васин Д.Ю. - Язык программирования Си. Курс лекций - 2003. Руководство для начинающих. М. Мир, 1988г. 512 с. Трой Д. Программирование на языке Си для персонального компьютера ibm pc Пер с англ. М. Радио и связь, 1991г. 432 с


Скачать 1.1 Mb.
НазваниеРуководство для начинающих. М. Мир, 1988г. 512 с. Трой Д. Программирование на языке Си для персонального компьютера ibm pc Пер с англ. М. Радио и связь, 1991г. 432 с
Дата30.06.2022
Размер1.1 Mb.
Формат файлаdoc
Имя файлаВасин Д.Ю. - Язык программирования Си. Курс лекций - 2003.doc
ТипРуководство
#621128
страница14 из 29
1   ...   10   11   12   13   14   15   16   17   ...   29

3.19. Вы не можете программировать в изоляции


В классической книге Джеральда Уэйнберга Психология программирования для компьютеров (The Psychology of Computer Programming, New York, Van Nostrand Reinhold, 1971) приводится прелестная история об автоматах с газированной водой. Администрация одного вычислительного центра решила, что сотрудники тратят массу времени у автоматов с газированной водой. Люди создают много шума и ничего при этом не делают, поэтому автоматы убрали. Через несколько дней консультанты на местах были настолько перегружены работой, что к ним стало невозможно обратиться. Мораль в том, что люди вовсе не зря тратили время; оказывается, издавая весь этот шум, они помогали друг другу в решении проблем. Изоляция может стать настоящей проблемой в группе объектно-ориентированного проектирования, которая обязательно должна состоять из пользователей, проектировщиковпрограммистов, специалистов по документации и т.д., работающих совместно. Так как число программистов в этой группе зачастую меньше, чем в более традиционных проектных коллективах, то становится трудно найти кого-то, с кем можно обсудить проблемы; производительность страдает. Подумайте о еженедельных дружеских вечеринках, как средстве повышения производительности.

3.20. Прочь глупости


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

3.21. Пишите программу с учетом сопровождения — сопровождаюшим программистом являетесь вы сами


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

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

4. Язык программирования С

4.1. Символика языка Си


Как и любой другой алгоритмический язык Си базируется на трех китах, соответственно представляющих:

  • изобразительные средства языка – алфавит;

  • объекты – данные разного типа;

  • процедуры обработки данных – операторы.

Все это, естественно, дополняется синтаксисом языка – сводом правил по написанию предложений (строк программы) и оформлению программных модулей.

Алфавит Си в большинстве своем совпадает с алфавитом других алгоритмических языков программирования, т.к. он продиктован спецификой клавиатуры ПК. В его состав входят большие и малые буквы латинского алфавита, цифры и различные разделители – скобки, знаки препинания и другие отображаемые символы клавиатуры. Буквы русского языка, как и в большинстве языков, имеют ограниченное применение – как правило, для описания значений текстовых констант и символьных переменных. Кроме того, в Си довольно своеобразно используются и трактуются некоторые символы и их сочетания. Более подробная информация об этом приведена в табл. 1 – 4.

Таблица 1

Операции над одним операндом

Обозначение

операции

Пояснение

&x

адрес переменной x

*p

имя переменной, на которую смотрит указатель p

–x

смена знака значения переменной x

+x

редко используемая операция, не меняющая значения x

x

инвертирование битов целочисленного значения x

!x

отрицание значения x (0 или не 0)

+ +x

увеличение значения x на 1 до его использования в последующих вычислениях

x+ +

увеличение значения x на 1 после его использования в последующих вычислениях

– –x

уменьшение значения x на 1 до его использования в последующих вычислениях

x– –

уменьшение значения x на 1 после его использования в последующих вычислениях

sizeof x

определение размера значения переменной x в байтах

Таблица 2

Операции над двумя операндами

Обозначение

операции

Пояснение

a + b

сложение числовых данных

ab

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

a * b

умножение числовых данных

a / b

деление числовых данных. Если операнды целочисленные, то дробная часть результата теряется.

a % b

остаток от деления целочисленных данных

a << k

сдвиг значения aна k двоичных разрядов влево (аналог умножения a на 2k)

a >> k

сдвиг значения a на k двоичных разрядов вправо (аналог деления a на 2k)

a & b

поразрядное логическое умножение целочисленных операндов (операция «И»)

a | b

поразрядное логическое сложение целочисленных операндов (операция «ИЛИ»)

a ^ b

операция «исключающее ИЛИ» над целочисленными операндами

a < b

сравнение числовых или символьных данных на «меньше»

a <= b

сравнение числовых или символьных данных на «меньше или равно»

a > b

сравнение числовых или символьных данных на «больше»

a >= b

сравнение числовых или символьных данных на «больше или равно»

a == b

сравнение числовых или символьных данных на «равно»

a != b

сравнение числовых или символьных данных на «не равно»

y1 && y2

проверка одновременного выполнения условий y1 и y2

y1 || y2

проверка выполнения хотя бы одного из условий y1 или y2

p + int

прибавление к адресу (указатель p) целочисленного смещения int*sizeof, определяемого типом данных, на которые смотрит указатель

pint

вычитание из адреса (указатель p) целочисленного смещения int*sizeof, определяемого типом данных, на которые смотрит указатель

Таблица 3

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

Обозначение операции

Пояснение

v = e

присвоить переменной v значение выражения e

v1=v2=...=e

множественное присвоение значения выражения e переменным v1,v2,...

a += b

аналог оператора a = a + b

a –= b

аналог оператора a = ab

a *= b

аналог оператора a = a * b

a /= b

аналог оператора a = a / b

a %= b

аналог оператора a = a % b

a <<= k

аналог оператора a = a << k

a >>= k

аналог оператора a = a >> k

a &= b

аналог оператора a = a & b

a |= b

аналог оператора a = a | b

a ^= b

аналог оператора a = a ^ b

Таблица 4

Символы некоторых однобайтовых констант

Символ

Код ASCII

Пояснение

\0xHH

0xHH

шестнадцатеричный код (H – цифра от 0 до F)

\0qqq




восьмеричный код (q – цифра от 0 до 7)

\a

0x07

символ bel, генерирующий звук при выводе

\b

0x08

символ backspace, отменяющий предшествующий символ

\f

0x0C

символ Form Feed – перевод страницы

\n

0x0A

символ Line Feed – перевод строки

\r

0x0D

символ Carriage Return – перевод курсора в начало строки

\t

0x09

символ Tab – горизонтальная табуляция

\v

0x0B

символ вертикальной табуляции

\\

0x5C

символ \ – обратная наклонная черта (обратный слэш)

\’

0x27

символ одинарной кавычки

\

0x22

символ двойной кавычки

\?

0x3F

символ знака вопроса

Вообще говоря, к «символам» алфавита причисляют и набор служебных слов, используемых в оформлении программы. Ядро Си насчитывает порядка 40 таких слов (см. табл. 5), а с появлением расширения языка в виде C++ к ним добавилось еще порядка 20 новых терминов. С большинством из них мы будем знакомиться по мере освоения материала последующих разделов.

Таблица 5

Служебные слова ядра входного языка Borland C

Служебное слово

Назначение

Asm

включение команд на языке ассемблера

Auto

редко используемое объявление локальных переменных

Break

досрочный выход из циклов и переключателей

Case

начало строки выбора в переключателе

Cdecl

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

Char

объявление однобайтовых символьных или числовых данных

Const

объявление не модифицируемых переменных – именованных констант или параметров, передаваемых по адресу

continue

переход на продолжение цикла

default

строка выбора в переключателе, на которую переходят в случае, если не выбрана ни одна предыдущая строка

do

оператор цикла с постусловием

double

объявление вещественных данных с удвоенной точностью

else

начало альтернативной ветки в условном операторе if

enum

объявление перечислимых данных

extern

ссылка на глобальные данные, описанные в других файлах

far

объявление дальних указателей

float

объявление вещественных данных с обычной точностью

for

оператор цикла

goto

оператор безусловного перехода

huge

объявление дальних указателей

if

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

int

объявление целочисленных двухбайтовых данных

long

объявление целочисленных или вещественных данных повышенной длины

near

объявление ближних указателей

Pascal

объявление стиля Pascal для функций и данных (большие и малые буквы не различаются, параметры в стек заносятся с начала)

register

указание о размещении переменных в регистровой памяти

return

возврат из функции

short

объявление целочисленных двухбайтовых данных

signed

объявление целочисленных данных со знаком

sizeof

определение длины данных

static

объявление статических локальных переменных, сохраняющих свои значения после выхода из функции

struct

объявление данных типа структура

switch

оператор выбора – переключатель

typedef

переименование стандартного типа данных

union

объявление данных типа объединение

unsigned

объявление целочисленных данных без знака

void

указание об отсутствии аргументов или значения, возвращаемого функцией

volatile

указание о том, что значение переменной может быть изменено другой программой

while

описание условия прекращения цикла

В программах на языке Си можно встретить операцию, в которой участвуют одновременно 3 операнда :

min = (a < b) ? a : b ;

Символом этой операции является знак вопроса, а выполняется она следующим образом. Если условие, заключенное в скобках выполнено, то значение присваиваемого выражения задается выражением, расположенным справа от знака вопроса. В противном случае вычисляется значение выражения, расположенного справа от двоеточия.
1   ...   10   11   12   13   14   15   16   17   ...   29


написать администратору сайта