1) Не забываете завершать комментарии.
Если комментарии записываются справа от операционной программы и занимают несколько строк, нужно следить за тем, чтобы каждая строка комментарий заканчивалась символом. В противном случае операторы программы будут трактоваться, как комментарии.
а = 100; / * инициализация */
printf ( " % d, f ); /* значение 100 */
В этом случае оператор printf войдет в комментарии, чтобы этого не случилось надо так:
а = 100; / * инициализация * /
printf ( " % d ", a ); / * значением 100 * /
2) Комментарии не могут размещаться внутри оператора.
3) Пропуск; в конце простого оператора приводит к ошибке.
4) Каждая переменная программы должна быть определена, а перед использованием проиниацилизирована. Имена переменных должны раскрывать их назначения.
5) При написании программы используйте смещение ее текста для выделения конструкции языка.
6) Не размещайте в одной строке более одного оператора.
7) Не путайте операции = и = =. Первая операция присваивает выражению, стоящему справа, значение выражения, стоящему слева. Вторая операция дает значение истинно или ложь в зависимости от того, равны значения в левой и правых частях или нет.
Замечание:В C значению истинно соответствует не только единица, но и любое другое не нулевое значение. Использование операции = в операторе if приводит к ошибке.
Пример:
if (i = 5); /*Использование такого = приведет к ошибке*/
printf (...);
────────────────
if (i = = 5); /*Правильная запись*/
printf(...);
8) Не забывайте о приоритете операции. Используйте скобки для обеспечения выполнения правильной последовательности действий.
9) Не возможно определить порядок обработки операндов в коммутативных операциях.
Пример:
int Z = 1; x = 1;
Z = (x*5) + (x = 0/2);
В этом случае можем получить различные значения в зависимости от того, какое выражение в скобках будет вычисляться в первую очередь, т.к. * и / имеет одинаковый приоритет.
Во избежание 2-хсмысленности следует использовать промежуточную переменную.
int Z, t, x = 1;
t = x * 5;
Z = t + ((x = 10)/2);
Необходимо помнить, что при использовании операции && и || порядок обработки строго определен, операции имеют вид:
выражение && выражение
выражение || выражение
В логической операции " u " && операндами могут быть любые скалярные выражения. Операция выполняется слева на право. Сначала вычисляются выражения слева, если оно равно " 0 ", то выражение справа не вычисляется и результатом операции будет " 0 ". Если не равно нулю результат будет единица. В логической операции " или "|| операндами могут быть любые скалярные выражения. Сначала вычисляются выражения слева, если оно равно нуль, то выражение справа не вычисляется и результатом операции будет единица. В противном случае вычисляется выражение справа и если оно равно нулю результатом операции будет ноль. Если выражение справа не=0, то результат будет единица.
Пример:
if ( * p || * p ++ )
│
обращение по адресу
В выраженном виде: вначале вычисляется левое выражение, если оно имеет значение истинно или = 1, то второе выражение не вычисляется. Это правило не действует для побитовых операций ( &-и и || -или).10) Не забывайте разницу между префиксами (++а), или постфиксными (а++) операциями.
11)Операции увеличения и уменьшения.Префиксные операции изменяют значение переменной до ее использования, а постфиксные – после.
Операции увеличения и уменьшения нельзя применять к выражениям, их можно применять только к отдельным переменным.
12) Будьте внимательны при выполнении операции сдвига. Сдвиг вправо данного типа unsigned (безнак.) эквивалентен делению на степень числа два. Сдвиг влево аналогичен умножению на степень числа два.
13) Определяете размер данного с помощью операции sizeof. Для определения размера некоторого объекта часто применяют const, что снижает мобильность некоторых программ. Использование sizeof поможет решить эту проблему.
14) Иногда в операторах if-else происходят ошибки из-за неправильного использования в операторе if-else операции присваивания вместо операции проверки на равенство.
15) Функция scanf может использоваться для чтения строк из потока ввода, для чего надо указать спецификатор формата %s. Этот спецификатор доставляет функции scanf считать символы, пока не встретится специальный символ, прочитанные символы помещаются в массив символов, на который указывает соответствующий аргумент, и результат завершается нулевым символом.
Применительно к scanf специальные символы – это пробел, новая строка, табуляция, переход форматов.
Пример:
# include < stdio.h >
main ( )
{ char str [80]
printf (" Введите строку ");
scanf ( " % S ", str );
printf (" это Ваша строка: % S", str);
}
При вводе строки экономический _ факультет программа выдаст только слово экономический.
16) Для определения длин (числа символов в строке) используется библиотечная функция strlen (s).Необходимо учитывать, что строка представляет массив элементов, в конце которого помещается символ \0 (По умолчанию). Следовательно, число байтов необходимых для хранения строки на единицу превышает число используемых символов.
Пример:
# include < stdio.h >
main ( )
{ int i, j, c;
char s[40]
printf ("ввод строки \ n ");
do {
scanf (" % S, S); / * ввести строку S * /
for (i=0, j=strlen (S) - 1; i<j; i++,i--) {
c = S[i], S[i] = S[j]; S[j] = 0; }
printf (" % S \ n ", S); }
while ( S[0] = = '0');
}