ПРИЛОЖЕНИЕ Б - Оформление программного кода
1. В программе должны использоваться два вида комментариев: многострочные и однострочные.
1.1. Многострочные комментарии используются в местах, требующих большого количества текста для описания. Для обозначения многострочного комментария в языке «С» используется конструкция «/* */». В программе должен присутствовать как минимум один многострочный комментарий в начале кода, содержащий информацию о дате выполнения, назначении программы и авторе, например:
/* Лабораторная работа по алгоритмизации №1
* «Операторы условия»
* Программа ставит диагноз больному в соответствии
* с его жалобами, задавая наводящие вопросы.
* Выполнил студент группы 1-4
* Пупкин Василий Иванович
* 20 февраля 2009г
*/
1.2. Однострочные комментарии используются в конце строк кода для пояснения сложных конструкций и логики программы. В языке «Си» для однострочных комментариев используется конструкция «// текст» в конце строки кода, например:
int fun (int a, int b) {
return (a>b)?a:b; //возвращаем максимальное из a,b
}
2. Операторные скобки и отступы.
2.1. Текст программы должен быть отформатирован в соответствии с требованиями к удобочитаемости кода. Все вложенные (зависимые) операторы должны иметь отступ. Отступ должен быть образован символом табуляции (кнопка «tab»). Вложенным оператор является, если он входит в составную конструкцию языка и является зависимым от внешнего оператора. Например, языковые конструкции «for», «while» и «do» имеют зависимые (вложенные) операторы. Оператор «if…else» имеет два вложенных оператора. Примеры оформления вложенных операторов:
for (int i=0;i<10;i++) a=b+i;
for (int i=0;i<10;i++)
a=b+i;
while (a>10) a=fun();
while (a>10)
a=fun();
2.2. Если требуется вложить более одного зависимого оператора (фрагмент программы), используются операторные скобки: «{}». Открывающая операторная скобка ставится после оператора, в который требуется вложить другие операторы. Закрывающая операторная скобка ставится под оператором, в который требуется вложить другие операторы, на той же позиции, что и первая буква этого оператора. Между операторными скобками помещаются все вложенные операторы, с отступом относительно внешнего оператора. Это условие соблюдается для всех уровней вложенности, например:
for (int i=0;i<10;i++) {
a=b+i;
c=c+a+b;
}
while (a>10) {
b=fun();
a=a-1;
}
for (int i=0;i<10;i++) {
a=b+i;
while (a>10) {
b=fun();
a=a-1;
}
c=c+a+b;
}
В третьем случае операторы «b=fun()» и «a=a-1» вложены в оператор «while», а сам оператор «while» вместе с операторами «a=b+i» и «c=c+a+b» вложены в оператор for. Пример оформления оператора «if…else» без операторных скобок:
if (a>b) c=a;
else c=b;
Пример оформления оператора «if…else» с операторными скобками:
if (a>b) {
c=a;
d=a+1;
} else {
b=2;
a=b;
}
Пример оформления сложносоставного оператора «if…else»:
if (a>b) {
c=a;
d=b;
if (m>0) {
m=m-1;
} else c=c+1; // блок else относится к несоблюдению if(m>0)
} else {// блок else относится к несоблюдению if(a>b)
if (a==b) {
c=a+1;
d=b+1;
} else { // блок else относится к несоблюдению if(a==b)
c=0;
d=0;
}
}
ПРИЛОЖЕНИЕ В – КРАТКИЙ ОБЗОР ОСНОВНЫХ КОНСТРУКЦИЙ ЯЗЫКА С
Основные типы данных.
Наименование типа | Описание типа | Примечания |
Целое | int long short | Целочисленные константы могут быть десятичными, восьмеричными или шестнадцатиричными. Восьмеричные константы |
Беззнаковое целое | unsigned int unsigned short unsigned long | обязательно начинаются с 0, шестнадцатиричные с 0х или 0Х. Длинная целая константа явно определяется буквой l или L, стоящей после константы. |
Вещественное | float double | |
Литерное | char | Символьные константы состоят зи одного символа ASCII,заключенного в апострофы (‘’). |
Беззнаковое литерное | unsigned char | Символьные данные считаются данными типа int и полностью совместимы с этим типом. |
Указатель | int * char * char ** и т. д. |
Из указанных простых типов строятся структурированные типы (массивы, строки, структуры и т.д.)
Строка | char[] | Строковая константа представляет собой последовательность кодов ASCII, заключенную в кавычки (“”). В конце каждой строки компилятор помещает нулевой символ (‘\0’). В [] указывается максимальная длина строки. |
Массив | int[] float[] и т.д. | В [] указывается размер массива. Имя массива является данным типа “указатель”. |
Основные операции.
Арифметические операции.
Операция | Назначение | Примеры использования |
+ | Суммирование значений. Увеличение значения переменной на заданную величину (в том числе увеличение адреса). | c=a+b; c+=3; (эквивалент c=c+3;) |
- | Вычисление разности. Уменьшение значения переменной на заданную величину (в том числе уменьшение адреса). Изменение знака. | c=a-b; c-=3; (эквивалент c=c-3;) c=-c; |
* | Вычисление произведения. | c=a*b; c*=a;(эквивалент c=c*a;) |
/ | Частное от деления. | c=a/3; c/=3;(эквивалент c=c/3;) |
% | Остаток от деления. | c=b%2; c%=b(эквивалент c=c%b;) |
++ | Увеличение на единицу. | i++; j=i++;(эквивалент j=i; i++;) J=++i;(эквивалент i++; j=i;) *p++=0; (эквивалент *p=0; p++;) *++p=0; (эквивалент p++; *p=0;) |
-- | Уменьшение на единицу. | i--; j=i--;(эквивалент j=i; i--;) J=--i;(эквивалент i--; j=i;) *p--=0; (эквивалент *p=0; p--;) *--p=0; (эквивалент p--; *p=0;) |
Операции отношения.
Операция | Значение выражения |
== | Истина, если значение правой части выражения (до знака ==) равно значению левой, иначе - Ложь |
!= | Истина, если значение правой части выражения (до знака !=) не равно значению левой, иначе - Ложь |
< | Истина, если значение правой части выражения (до знака <) меньше значения левой, иначе - Ложь |
> | Истина, если значение правой части выражения (до знака >) больше значения левой, иначе - Ложь |
<= | Истина, если значение правой части выражения (до знака <=) не превышает значения левой, иначе - Ложь |
>= | Истина, если значение правой части выражения (до знака >=) не меньше значения левой, иначе - Ложь |
*З а м е ч а н и е.Логическое значение Ложь представляется целым нулевым значением, а Истина - любым ненулевым значением.
Логические операции.
Операция | Значение выражения | Пример |
!(отрицание) | Истина, если значение аргумента ложно. | !a |
||(логическое ИЛИ) | Истина, если истинно значение одного из операндов. | x<a || x>b |
&&(логическое И) | Истина, если истинно значение обоих операндов | x<a&&x>b |
Побитовые операции.
Обозначение | Операция | Пример |
~ | Дополнение до единицы значения аргумента. | с=~mask; |
>> | Сдвиг вправо двоичного представления аргумента на указанное число разрядов. | x=x>>3; |
<< | Сдвиг влево двоичного представления аргумента на указанное число разрядов. | x=x<<3; |
& | Побитовая операция И двоичных представлений аргументов. | y=x&mask; |
| | Побитовая операция ИЛИ двоичных представлений аргументов. | s=a1|a2; |
^ | Побитовая операция исключающее ИЛИ двоичных представлений аргументов. | s=a1^a2; |
Адресные операции.
Операция | Значение | Пример |
& | Значением выражения является адрес переменной. | ptr=&n; |
* | Значением выражения является переменная или функция, адресуемая указателем. | *ptr=3; (*Fptr)(); |
Другие операции.
Операция | Назначение | Пример |
?: условная операция | Если значение логического выражения истинно, то значением всего выражения является значение первого из указанных выражений, иначе - второго. | abs=(i<=0) ? -i: i; (если i<=0, то abs=-i, иначе abs=i) |
(тип) преобразование типа | Значение выражения преобразуется в указанный тип данных. | x=(float)n/3; |
sizeof | Вычисление числа байт, требуемых для размещения объекта. | IntSize=sizeof(int); |
Основные операторы.
Оператор | Формат | Примечания и примеры |
Составной | { операторы } | ( x=2; y=0; } |
Присваивания | идентификатор=выражение | x=3; |
Вызова функции | ИмяФункции(арг1,...,аргN) | fclose(file); |
Пустой | ; | |
Заиершения | break; | Прекращает выполнение ближайшего вложенного внешнего оператора switch, while, do или for. |
Продолжения | continue; | Передает управление в начало ближайшего внешнего оператора цикла, вызывая начало следующей итерации. |
Возврата | return; return выражение; | Прекращает выполнение текущей функции и возвращает управление вызвавшей программе с передачей значения выражения (если оно указано). |
Перехода | goto метка; | Управление передается на оператор с указанной меткой. Область действия ограничена текущей функцией. |
Условный | if (выражение) оператор if(выражение) оператор1 else опратор2 | Если выражение истинно, то выполняется оператор.Если выражение истинно, то выполняется оператор1 (оператор2 не выполняется). Если выражение ложно, то выполняется оператор2. |
Выбора | switch(выражение) { case константа: операторы case константа: операторы default: операторы } | Сравнивает значение выражения с константами во всех вариантах case и передает управление оператору, который соответствует значению выражения. Далее выполняются все операторы подряд, пока не встретится оператор break. Операторы, связанные с меткой default, выполняются, если ни одна из констант не равна значению выражения. |
Цикл с предусловием | while (выражение) оператор | Если выражение истинно, то оператор выполняется до тех пор, пока выражение не станет ложным. |
Цикл с постусловием | do оператор while (выражение) | Выполняется оператор, затем вычисляется выражение, и если выражение истинно, то оператор выполняется до тех пор, пока оно не станет ложным. |
Цикл с параметром | for (выражение1; выражение2; выражение3) оператор | Выражение1 описывает инициализацию цикла; Выражение2 - проверка условия завершения цикла Если оно истинно, то выполняется оператор; Выражение3 вычисляется после каждой итерации. Цикл повторяется, пока выражение2 не станет ложным. |