Страница 50 из 69
main ()
{
puts("Hello, world");
}
Заметим, что в конце строки опущен \n; это не нужно, так как
puts сама добавляет этот символ.
Наоборот, функция putchar записывает единственный символ на
экран и не добавляет \n. Оператор putchar(ch) эквивалентен printf
("%c",ch).
Зачем же нужно использовать puts и/или putchar вместо
printf? Одним из доводов является тот, что программа, реализующая
printf, гораздо больше; если вы не нуждаетесь в ней (для числово-
го вывода или специального форматирования), то, используя puts и
putchar, можно сделать свою программу меньше и быстрее. Например,
файл .EXE, создаваемый компиляцией версии HELLO.C, использующий
puts, значительно меньше, чем файл .EXE для версии, использующей
printf.
- 411,412 -
Типы данных.
-----------------------------------------------------------------
При написании программы, вы работаете с некоторым видом ин-
формации, большинство которой попадает в один из 4-х основных ти-
пов: целые числа, числа с плавающей точкой, текст и указатели.
Целые - это числа, которые используются для счета ( 1, 2, 5,
-21 и 752, например).
Числа с плавающей точкой могут содержать дробные разряды и
экспоненту (5.4567*10^65). Иногда их называют действительными
(вещественными) числами (real).
Текст состоит из символов (а, Z, !, 3) и строк ("Это просто
проверка").
Указатели не хранят информацию; вместо этого каждый из них
содержит адрес памяти ЭВМ, в которой хранится информация.
Числа с плавающей точкой.
------------------------
Си поддерживает 4 основных типа данных в различных формах.
Вы уже использовали 2 из них: целые (int) и символы (char). Сей-
час будем модифицировать последнюю программу для использования
3-го типа: чисел с плавающей точкой (float). Войдите в редактор
Турбо Си и преобразуйте программу к следующему виду:
#include
main ()
{
char msg[30];
strcpy(msg, "Hello, world");
puts(msg);
}
[30], после msg, предписывает компилятору выделить память
для 29 символов, то есть для массива из 29 переменных типа char
(30-е знакоместо будет заполнено нулевым символом - \0 - часто
называемым нулевым завершителем или ограничителем ). Переменная
msg не содержит символьное значение; она хранит адрес (некоторого
места в памяти) первого из этих 29 переменных типа char.
Когда компилятор обнаруживает оператор strcpy(msg, "Hello,
world"), он делает две вещи:
- Создает строку "Hello, world", ограниченную (\0) символом
(с кодом ASCII 0),в некотором месте файла объектного кода.
- Вызывает подпрограмму strcpy, которая копирует символы из
- 417,418 -
этой строки по одному в участок памяти, указываемый пере-
менной msg. Он делает это до тех пор пока не будет скопи-
рован нулевой символ в конце строки "Hello, world".
Когда вы вызываете функцию puts(msg), то ей передается зна-
чение msg - адрес первой буквы, на которую он указывает. Затем
puts проверяет, не является ли символ по этому адресу нулевым.
Если да, то puts заканчивает работу; иначе puts печатает этот
символ, добавляет единицу (1) к адресу и делает проверку на нуле-
вой символ снова.
Из-за этой зависимости от нулевого символа известно, что
строки в Си называются "завершающиеся нулем", т.е. они представ-
ляют из себя последовательности символов, заканчивающиеся нулевым
символом. Этот подход позволяет снять ограничения с длины строк;
строка может быть такой длины, какой позволяет память для ее хра-