Краткое описание языка С

advertisement
Алфавит

Идентификаторами в языке Си являются последовательности букв и цифр,
начинающиеся с буквы, причем символ подчеркивания
рассматривается
компилятором как буква. Большие и малые буквы латинского алфавита
считаются различными. Длина идентификатора формально может быть
произвольной, однако только лишь первые 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
<else
statement2>
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

Одной из основных особенностей языка Си по отношению к
большинству других языков программирования высокого уровня
является полное отсутствие в нем предопределенных операторов
ввода/вывода

Все необходимые для этого средства предоставляются функциями из
стандартных библиотек языка Си

Для вывода используется функция printf( )
Для ввода используется функция scanf()

Ввод и вывод в языке 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 <stdio.h>
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 <= 5; count++)
root = 0.5*(root + arg/root);
return (root);
}
Download