Идентификаторами в языке Си являются последовательности букв и цифр, начинающиеся с буквы, причем символ подчеркивания рассматривается компилятором как буква. Большие и малые буквы латинского алфавита считаются различными. Длина идентификатора формально может быть произвольной, однако только лишь первые 31 символ являются значимыми для компилятора В программах на языке Си идентификаторы служат именами переменных, символических констант, функций, типов данных и меток. Общепринято для именования констант использовать большие буквы латинского алфавита, сохраняя малые буквы для обозначения переменных и функций Замечание. Не рекомендуется в прикладных программах использовать идентификаторы, начинающиеся с подчеркивания, ибо в конкретной среде это может привести к конфликту с именами создаваемых компилятором служебных переменных или констант Name, name1, Total_5, paper Алфавит
Под комментариями понимаются последовательности символов, игнорируемые компилятором. /* Characters */ - однострочный комментарий /* - многострочный комментарий Characters */ Комментарии
Все переменные в С должны быть предварительно описаны char v; int a; float r; double m; Можно объединять описания однотипных переменных int a,b,c; Переменные
Желательно присваивать начальные значение переменным при определении (инициализация) int a=0, b=3, c=4; Си В Си переменные должны быть определены в начале блока { int a=0,b=3,c=4;... a=b*5; } Блок { … } С++ В С++ переменные могут быть определены в любом месте
Массив это последовательность однотипных переменных, размещенных последовательно char v[10]; int a[43]; double m[128]; Обращение к элементам массива void main() { int a[4]= {1,2,3}; int b=3; b=a[0]+a[1]+a[2]+a[3]; } Массивы
int ndigit[10]= { 0,0,0,0,0,0,0,0,0,0}; int mas[] = { 1, 2, 3 }; В последнем примере длина массива определяется по числу инициализирующих значений. Инициализация массивов
Для символьных массивов существует специальный способ инициации без скобок и запятых char pattern[] = "the"; Это сокращение более длинного, но эквивалентного описания char pattern[] = {'t','h','e','\0'}; В первом случае длина массива полагается равной количеству символов в строке плюс один, а во втором равна количеству элементов в списке инициализации. В данном конкретном случае размер равен 4 (3 символа плюс закрывающий \0) С другой стороны, описание char line[80] = "This is a string"; объявляет массив, состоящий из 80 элементов типа char, но лишь 16 из них отличны от нуль-символа
Простейший оператор это выполняемая в процессоре инструкция В C операторы должны заканчиваться ; ; a=b+c; a=a*b; a=b-c; b=b/c; a = c*(d + e)/4; Составной оператор воспринимается как один оператор { a=b+c; a=a*b; a=b-c; b=b/c; } По правилам языка точка с запятой после закрывающей фигурной скобки не ставится. В программе на языке Си составные операторы могут быть использованы всюду наравне с простыми операторами. Простые операторы
Приоритеты и порядок выполнения ( ) [ ] ! ~ слева направо (type) * & справо налево sizeof слева направо * / % + - > >= == != & ^ | справо налево && справо налево ? : справо налево = += -= слева направо,
Условный оператор (if else) Условный оператор является простейшим и эффективным средством, позволяющим программировать разветвленные алгоритмы. Его формальный синтаксис задается следующей формулой: if (expression) statement1 if (i > 0) y = 5; else { x = y/2; y = 4; }
В конструкциях вида if (n > 0) if (a > b) z = a; else z = b; где один оператор if вложен в другой, else -часть связывается с ближайшим предыдущим оператором if. Чтобы изменить это соглашение, необходимо использовать фигурные скобки: if (n > 0) { if (a > b) z = a; } else z = b; Поскольку запись без скобок ненаглядна рекомендуется ставить скобки во избежание ошибок
Операторы цикла (три типа) while do while for
1. Оператор цикла while while (expression) statement count = 0; while (string[count] != '\0') count++; Если значение выражения expression истинно (отлично от нуля), то тело цикла выполняется до тех пор, пока это выражение не станет ложным (равным нулю), причем проверка производится всякий раз перед началом очередной итерации цикла. Если же значение выражения ложно в момент инициализации цикла, то тело цикла не выполняется ни разу и управление передается оператору, следующему за оператором while
2. Оператор цикла do-while do statement while (expression); count = 0; do string2[count] = string1[count]; while (string1[count++]); После однократного выполнения тела цикла вычисляется значение выражения expression. Если найденное значение истинно (отлично от нуля), то выполняется очередная итерация цикла. Этот процесс повторяется до тех пор, пока значение выражения не станет ложным (равным нулю), после чего управление передается оператору, непосредственно следующему за оператором do-while. Таким образом, тело цикла всегда будет выполнено хотя бы один раз
3. Оператор цикла for Оператор for является наиболее мощным средством реализации циклических алгоритмов и управления циклическими процессами. for (expression1; expression2; expression3) statement Перед началом выполнения цикла вычисляется значение инициализирующего выражения expression1 и значение выражения expression2. Если expression2 истинно (отлично от нуля), то выполняется оператор statement тела цикла, вычисляется корректирующее выражение expression3 и вновь проверяется истинность выражения expression2
s = 0; for (i = 0; i < n; i++) s = s + a[i]; Каждое из выражений в заголовке цикла может состоять из нескольких подвыражений, связанных между собой операцией запятая (, ). Эта операция обеспечивает последовательное вычисление своих операндов слева направо, причем ее результатом является значение самого правого операнда for (i = 0, j=0; i < n; i++, j+=2) s = s + i +j;
Любое из трех выражений, входящих в заголовок цикла, может быть опущено при сохранении следующей за ним точки с запятой. Бесконечный цикл for (; ; ) statement Как выйти из цикла? s = 0; for (i = 0; i < n; i++) if (a[i] >= 0) s = s + a[i]; else break; Как продолжить выполнение прервав текущую иттерацию? s = 0; for (i = 0; i < n; i++) { if (a[i] < 0) continue; s = s + a[i]; }
Каждое из выражений в заголовке цикла может состоять из нескольких подвыражений, связанных между собой операцией запятая (, ). Эта операция обеспечивает последовательное вычисление своих операндов слева направо, причем ее результатом является значение самого правого операнда for (i = 0, j=0; i < n; i++, j+=2) s = s + i +j;
Общая структура программы на языке Си Си Всякая программа на языке Си представляет собой совокупность одной или более функций, каждая из которых есть независимый набор описаний и операторов, заключенных между заголовком функции и ее концом void function1() { } int function2() { return 0 }
Общая структура программы на языке Си MAX 100 float mas[MAX]; /* Внешнее описание числового массива */ void maxind(int m); int funct1(int m) { return; } void main() { } void maxind(int m) { }
C Ввод и вывод в языке C Си Одной из основных особенностей языка Си по отношению к большинству других языков программирования высокого уровня является полное отсутствие в нем предопределенных операторов ввода/вывода Си Все необходимые для этого средства предоставляются функциями из стандартных библиотек языка Си Для вывода используется функция printf( ) Для ввода используется функция scanf()
C Ввод и вывод в языке C Параметры printf( ) и scanf() состоят из двух частей int i=5; printf("\ A = %6d ", i); int b; scanf("%d", &b); 1) Шаблоны для ввода и вывода в кавычках "%d" %d - для десятичных целых %o - для восьмеричных %x - для шестнадцатеричных %c - для символов %s - для символьных строк % - для самого символа % 2) Переменные которые выводятся ( i ) или в которые записывается информация ( &b )
#include double sqrt(float); /* Описание функции */ void main() { double dat, f1; printf("\nЗадайте положительное вещественное число... "); scanf("%lf", &dat); f1=sqrt(dat) printf("\nКорень из числа %20.6lf равен %20.6lf", dat, f); } double sqrt(float arg) { int count; double root = arg/2.0; for (count = 1; count