ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6819
Скачиваний: 51
306
она собирается. Данная программа состоит из одной функции main. Круглые скобки указывают
именно на то, что main() - имя функции. Программа, написанная на языке Си всегда начинает вы-
полняться с функции, называемой main(). Программист имеет возможность выбирать имена для
всех используемых им функций, кроме main. В круглых скобках в общем случае содержится ин-
формация (параметры), передаваемые этой функции. В нашем примере параметры не требуются и,
следовательно, в скобках ничего не содержится.
/* Простая программа */-комментарий. Использование комментариев облегчает процесс понимания
программы любым программистом. Большим удобством при написании комментариев является возмож-
ность располагать их в той же строке, что и операции, которые они объясняют. Длинный комментарий мо-
жет помещаться в отдельной строке или даже занимать несколько строк. Все, что находится между симво-
лом, указывающим начало комментария /*, и символом, указывающим его
конец */, игнорируется компилятором, поскольку он не в состоянии интерпретировать язык, отлич-
ный от Си.
{ } - фигурные скобки отмечают начало и конец тела функции. Фигурные скобки применя-
ются также для того, чтобы объединить несколько операторов программы в сегмент или «блок».
int num; - оператор описания. С помощью такого оператора мы объявляем, что будем ис-
пользовать в программе переменную num, которая принимает целые (int) значения.
Точка с запятой в конце строки является частью оператора языка Си, а не разделителем
операторов, как в Паскале.
Слово int служит «ключевым словом», определяющим один из основных типов данных
языка Си. Ключевыми словами называются специальные зарезервированные слова, используемые
для построения фраз языка.
В языке Си все переменные должны быть объявлены. Это означает, что, во-первых, в нача-
ле программы необходимо привести список всех используемых переменных, а во-вторых, необхо-
димо указать тип каждой из них. Вообще, объявление переменных считается «хорошим стилем»
программирования.
num=l; - оператор присваивания. Служит для присваивания переменной num значения 1.
printf("этo моя %d-я программа на языке Си.\n",num); - вызов функции printf() форматного
вывода на печать. Этот оператор выводит на печать значение переменной num в формате, содер-
жащемся в строке в кавычках (в данном случае печатается приведенная в кавычках фраза. Симво-
лы %d указывают компилятору, где в выводимой строке и в какой форме необходимо вставить
значение переменной num. Символ % сигнализирует программе, что, начиная с этой позиции, не-
обходимо вывести значение переменной, a d указывает, что число надо печатать в десятичном
формате.
Символы \n не появляются на экране. Эти символы служат директивой начать новую стро-
ку на устройстве вывода. Комбинация символов \n на самом деле представляет собой один символ,
называемый «новая строка». Для этого символам (\n) не существует соответствующей клавиши на
клавиатуре. Символ «новая строка» служит примером «управляющей последовательности», кото-
рую невозможно ввести с клавиатуры.
В общем случае обращение к этой функции имеет вид:
printf(<фopмaт>,<выpaжeниel>,<выpaжeниe2>,...,<выpaжeниeN>);
где <выражение1>, <выражение2>, ..., <выражение№» - произвольные выражения, результаты ко-
торых надо вывести.
Управляющая строка «формат» содержит объекты двух типов: обычные символы, которые
просто копируются в выходной поток (печатаются), и спецификации преобразования значений из
внутреннего машинного представления в текстовое для вывода на печатающем устройстве.
Каждая спецификация преобразования начинается с символа % и заканчивается символом
преобразования. Между % и символом преобразования могут (не обязательно) находиться
1) знак минус, указывающий, что преобразуемый параметр должен быть выровнен влево в
своем поле;
2) целое число, задающее минимальный размер поля: преобразованный параметр будет на-
печатан в поле-минимум оказанного размера; если в преобразованном параметре символов мень-
ше, чем размещается в указанном поле, то слева будут добавлены пробелы (или справа, если ука-
зано выравнивание влево);
3) строка цифр с начальным нулем - лишние позиции поля заполняются нулями, а не про-
белами:
307
4) точка, отделяющая размер поля от последующей строки цифр (только для преобразова-
ния строк %s) - строка цифр указывает максимальное число символов, выводимых в одной строке.
Символы преобразования:
d - десятичное число со знаком;
u - десятичное число без знака;
О - восьмеричное число без знака (и без ведущего 0);
х - шестнадцатеричное число без знака (и без ведущего 0);
s - символьная строка;
с - одиночный символ;
f- действительное число в представлении с фиксированной точкой;
е-действительное число в экспоненциальном представлении;
g - наиболее короткое представление действительного числа; и др.
Функцией ввода, аналогичной функции вывода printf(), является scanf() - стандартная
функция форматного ввода.
Обращение к этой функции имеет вид
sсаnf(<формат>,<&имя1>,<&имя2>,...,<&имяN>);
где <имя1>, <имя2>, ..., <имяN> - имена переменных, значения которых надо ввести. Нали-
чие символа "&" перед каждым именем обязательно (кроме переменных строкового типа), его
смысл будет пояснен ниже.
При обращении к функции scanf выполнение программы приостанавливается, ожидается
ввод значений указанных переменных, после чего работа программы продолжается.
В качестве спецификаций в формате можно использовать те же символы, что и в функции
printf(). Спецификации формата должны соответствовать количеству и типу вводимых перемен-
ных. В управляющей строке функции scanf нет промежуточных управляющих символов между %
и символом преобразования, за исключением "*". Если присутствует символ *, входное поле про-
сто пропускается и никакого присваивания не производится. Обычные символы (кроме °о) сопос-
тавляются с очередными (отличными от символов промежутков) символами входного потока, и в
случае отличия дальнейший ввод игнорируется.
Программа 83
#include<stdio.h>
main()
(
int data,month,year; char name[15],town[15];
printf("Kaк вас зовут? "); scanf("%s",name); printf("Укажите дату, месяц и
год вашего рождения.\пДата:");
scanf("%d",%data) ;
printf ("Месяц (числом) :") ; scanf ("%d", Sinonth) ;
printf("Год:"); scant("%d",&year);
printf("А в каком городе? "); scanf("%s",town);
printf("Вот мы и познакомились...\n");
printf("Вас зовут %s ",name); printf("Вы родились в городе %s
(%d.%d.%d)",town,data, month,year);)
Результат работы программы:
Как вас зовут? Иван
Укажите дату, месяц и год вашего рождения.
Дата : 23
Месяц (номером): 02
Год: 1054
А в каком городе? Новгород
Вот мы н познакомились...
Вас зовут Иван
Вы родились в городе Новгород
(23.02.1054)
6.2. ЭЛЕМЕНТЫ СИ: АЛФАВИТ, ИДЕНТИФИКАТОРЫ, ЛИТЕРАЛЫ, СЛУЖЕБНЫЕ
308
СЛОВА
Перечислим основные символы языка Си, образующие его
алфавит
:
1) строчные латинские буквы
abcdefghijklmnopqrstuvwxyz
2) прописные латинские буквы
ABCDEFGHIJKLMNOPQRSTUVWXYZ
3) арабские цифры
0123456789
4) специальные символы
*
звездочка
_
подчеркивание
+
плюс
(
круглая скобка левая
-
минус
)
круглая скобка правая
/
дробная черта
<
меньше
\
обратная дробная черта
>
больше
%
процент
^
стрелка вверх
!
восклицательный знак
[
квадратная скобка левая
=
знак равенства ] квадратная скобка правая
?
вопросительный знак
#
номер
:
двоеточие
{
фигурная скобка левая
;
точка с запятой
}
фигурная скобка правая
&
коммерческое ''и"(амперсанд)
|
вертикальная черта
'
апостроф
~
черта сверху (тильда)
.
точка
"
кавычки
,
запятая пробел
5) управляющие символы
\t
горизонтальная табуляция
\n
перевод строки и возврат каретки
\r
возврат каретки
\f
перевод страницы
\b
возврат на шаг (на один символ)
Множество основных символов расширено буквами русского алфавита (строчными и про-
писными). Они могут быть использованы только в комментариях, символьных константах и стро-
ках.
Лексемами
называют последовательности
символов языка (идентификаторы, служебные
слова, константы, строки, составные знаки операций, разделители). Лексемы разделяются пробе-
лами и другими неграфическими символами языка.
Идентификатор
- это последовательность латинских букв, цифр и символа ''_", начинаю-
щаяся с буквы или символа "_".
309
Прописные и строчные латинские буквы считаются различными! Например, у и Y - это
разные имена. Рекомендуется в именах переменных использовать только строчные буквы.
Примеры правильных идентификаторов:
schetchik get_line a 12 Parami
_
ab
Примеры неправильных идентификаторов:
%ab 12abc -x вася
Литералы
- это неизменяемые объекты языка (константы). Литерал может быть числовым,
символьным или строковым Числовые литералы могут быть десятичными (целыми и веществен-
ными, простыми и длинными), восьмеричными, шестнадцатиричными.
Примеры.
I*
Целые десятичные литералы */
57 32000001 /* длинный*/ 2е3 5ЕЗ
/* Вещественные десятичные литералы */
0.00 5.37.1е-3 6.34Е-2 .21е+56
Лидирующий нуль (0) указывает на числовой восьмеричный литерал:
030 /* Десятичное 24 */
040 /* Десятичное 32 - символ пробел */
Лидирующий 0х указывает на числовой шестнадцатиричный литерал:
0х22 /* Десятичное 34 - символ "*/
0х6С /* Десятичное 108 - символ i */
Символьный литерал - это один символ, заключенный в одинарные кавычки:
-'c"*"q
'
-
"\007" /* Звонок, восьмеричный код после
\ */
"\х0а" /* Перевод на новую строку, шестнадцатиричный код после \х */
Последовательность символов, заключенных в двойные кавычки, называется строковым
литералом. Примеры:
"STRING\n"
"" /* Строчный литерал состоит из одного символа "\0" */
"Очень,"\
"очень,"\
"очень длинный строковый литерал!"
Следующие зарезервированные служебные (ключевые) слова языка запрещено использо-
вать в качестве идентификаторов.
auto
- автоматический;
default
- по умолчанию;
break
-завершить;
do
-выполнить;
case
-вариант;
double
-двойной точности;
char
-символьный;
else
-иначе;
continue
- продолжить;
entry
- вход;
extern
-внешний;
short
-короткий;
for
-
для;
sizeof -
размер;
float
-плавающее;
static
-статический;
goto
- перейти;
struct
- структура;
if
— если;
switch
- переключатель;
int
- целое; '
typedef
- определение типа;
310
long
-длинное;
union
-объединение;
register
-регистровый;
unsigned
-без знака;
return
- возврат;
while
- пока.
6.3. ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ
Типы данных.
Программа на процедурных языках, к которым относится Си, представляет
собой описание операций над величинами различных типов. Тип определяет множество значений,
которые может принимать величина, и множество операций, в которых она может участвовать.
В языке Си типы связаны с именами (идентификаторами) величин, т. е. с переменными. С
переменной в языке Си связывается ячейка памяти. Тип переменной задает размер ячейки, способ
кодирования ее содержимого, допустимые преобразования над значением данной переменной. Все
переменные должны быть описаны до их использования. Каждая переменная должна быть описа-
на только один раз.
Описание состоит из спецификатора типа и следующего за ним списка переменных. Пере-
менные в списке разделяются запятыми. В конце описания ставится точка с запятой.
Примеры
описаний:
char a,b; /*
Переменные а и b имеют тип
char */ int
х; /*
Переменная х - типа int
*/ char sym; /"
Описаны переменные sym типа char;
*/ int count.num; /* num и count типа int */
Переменным могут быть присвоены начальные значения внутри их описаний. Если за име-
нем переменной следует знак равенства и константа, то эта константа служит в качестве инициа-
лизатора.
Примеры:
char backch = '\0
'
;
int i = 0;
Рассмотрим основные типы в языке Си.
int - целый ("integer").
Значения этого типа - целые числа из некоторого ограниченного
диапазона (обычно от- 32768 до 32767). Диапазон определяется размером ячейки для типа и зави-
сит от конкретного компьютера. Кроме того, имеются служебные слова, которые можно использо-
вать с типом int: short int («short integer» - «короткое целое»), unsigned int («unsigned integer» - «це-
лое без знака»), long int («длинное целое»), которые сокращают или, наоборот, расширяют диапа-
зон представления чисел.
char
- символьный («character»). Допустимое значение для этого
типа — один
символ (не пу-
тать с текстом!). Символ записывается в апострофах.
Примеры:
'х"2"?'
В памяти компьютера символ занимает один байт. Фактически хранится не символ, а число
- код символа (от 0 до 255). В специальных таблицах кодировки указываются все допустимые
символы и соответствующие им коды.
В языке Си разрешается использовать тип char как числовой, т. е. производить операции с
кодом символа, применяя при этом спецификатор целого типа в скобках - (int).
float - вещественный (с плавающей точкой).
Значения этого типа - числа, но, в отличии
от char и int, не обязательно целые.
Примеры:
12.87 -316.12 -3.345е5 12.345e-15
double - вещественные числа двойной точности.
Этот тип аналогичен типу float, но име-
ет значительно больший диапазон значений (например, для системы программирования Borland-C
от 1.7Е-308 до 1.7Е+308 вместо диапазона от 3.4Е-38 до 3.4Е+38 для типа float). Однако увеличе-
ние диапазона и точности представления чисел ведет к снижению скорости выполнения программ
и неэкономному использованию оперативной памяти компьютера.
Обратите внимание на отсутствие в этом списке строкового типа. В языке Си нет специаль-
ного типа, который можно было бы использовать для описания строк. Вместо этого строки пред-