 |
- 93,94 -
Турбо Паскаль Турбо Си
----------------------------------------------------------------
type
Days = (Sun,Mon,Tues,Wed, enum days = (Sun,Mon,Tues,Wed,
Thurs,Fri,Sat); Thurs,Fri,Sat);
var
Today : Days; enum days today;
----------------------------------------------------------------
Операции.
----------------------------------------------------------------
В Турбо Си имеются все операции Турбо Паскаля и еще некото-
рые другие.
Основным отличием между этими двумя языками является ис-
пользование операции присвоения. В Паскале, присвоение (:=) яв-
ляется оператором. В Си присвоение (=) - оператор, который может
использоваться в выражениях.
В таблице 6.1 дается сравнение операций на Турбо Паскале и
Турбо Си. Операции объединены в группы и приводятся в порядке
приоритета.
- 95,96 -
Табл.6.1 Операции на Паскале и Си
----------------------------------------------------------------
унарный минус A:= - B; a= - b;
унарный плюс A:= + B; a= + b;
логическое НЕ not Flag; !flag;
поразрядное
дополнение A:= not B; a=-b;
адрес A:=Addr(B); a=&b;
указатель(ссылка) A:= IntPtr^; a=*intptr;
размер A:= SizeOf(B); a=sizeof(b);
увеличение A:= Suсс(A); a++ и ++a
уменьшение A:= Pred(A); a-- и --a
умножение A:= B*C; a= b*c;
целочисленное
деление A:= BdivC; a= b/c;
деление X:= B/C; x= b/c;
модуль (остаток) A:= B mod C; a= b%c;
сложение A:= B + C; a=b+c;
вычитание A:= B - C; a=b-c;
сдвиг вправо A:= B shr C; a=b>>c;
сдвиг влево A:= B shl C; a=b< B a > b
больше или равно A > = B a >= b
меньше чем A < B a < b
меньше или равно A < = B a <= b
равно A = B a==b
не равно A<>B a!=b
поразрядное И A:= B and C; a=b&c;
поразрядное ИЛИ A:= B or C; a=b|c;
поразрядное
исключающее ИЛИ A:= B xor C; a=b^c;
логическое И Flag1 and Flag2 flag1 && flag2
логическое ИЛИ Flag1 or Flag2 flag1 || flag2
- 97,98 -
присвоение A:= B; a=b;
A:= A B; a = b;
----------------------------------------------------------------
Отметим некоторые важные особенности Си.
Во-первых, увеличение (положительное приращение) (++) и
уменьшение (отрицательное приращение) (--) могут располагаться до
и после имени переменной. Если оператор расположен до переменной,
то она увеличивается (уменьшается), перед вычислением выражения;
если после, то сначала вычисляется выражение, а затем изменяется
значение переменной.
Во-вторых, логические операции в Си (&&,||) - эффективно вы-
числяемые. Это значит, что если первый параметр определяет истин-
ность выражения, то второй никогда не вычисляется. Так, в отличие
от Паскаля, Си позволяет записать:
while (i <= limit && list[i] != 0) ... ;
где limit - максимальный допустимый индекс массива list. Если
первое выражение (i <= limit) ложно, то Си знает, что все выраже-
ние ложно и не надо вычислять второе выражение (list(i)!=0), где
может быть ошибка в диапазоне индекса массива.
В-третьих, Си позволяет вам брать общее выражение вида
A=AB,
где любая бинарная операция (кроме && и ||), и заменять его
на
А=В.
Так, например, вместо А=А*В, вы можете написать А*=В,и так далее.
Ввод.
----------------------------------------------------------------
Опять же в Турбо Паскале имеется одна базовая команда ввода
Read() с некоторыми вариантами (Readln(), Read(f), ...). В Турбо
- 99,100 -
Си главная функция, используемая для ввода с клавиатуры - scanf
имеет формат:
scanf (<форматная строка>, <адр1>, <адр2>,...);
где <форматная строка> - строка, содержащая опции форматирования,
(аналогично printf), а каждый <адр> - адрес, по которому scanf
размещает вводимые данные. Это значит, что вам часто необходимо,
будет использовать оператор адреса (&). Есть также другие общеис-
пользуемые команды: gets, которая читает входную строку до тех
пор, пока вы не нажмете Ввод, и getch, которая читает символ пря-
мо с клавиатуры без эхо.
Приведем несколько команд ввода на Паскале и, соответствен-
но, на Си.
Турбо Паскаль (версия 3.x) Турбо Си
----------------------------------------------------------------
Readln(A,B); scanf("%d%d",&a,&b);
Readln(Name); scanf("%s",name);
/* или gets(name); */
Readln(X,A); scanf("%f%d",&x,&a);
Readln(Ch); scanf("%c",ch);
Read(Kbd,Ch); ch = getch();
----------------------------------------------------------------
Отметим одно важное отличие между двумя способами ввода
строк (scanf и gets). Scanf читает все символы до тех пор, пока
не встретится пробел (табуляция, конец строки); напротив, gets
считывает любые символы, пока вы не нажмете Ввод.
- 101,102 -
 |
|