Array M. УЭИТ - Язык Си - руководство для начинающих
- Название:Язык Си - руководство для начинающих
- Автор:
- Жанр:
- Издательство:Мир
- Год:1988
- Город:Москва
- ISBN:5-03-001309-1 /русск./
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Array M. УЭИТ - Язык Си - руководство для начинающих краткое содержание
Язык Си — руководство для начинающих
Язык Си - руководство для начинающих - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Строка 3: нужно использовать {, а не (
Строка 4: gи hдолжны разделяться запятой, а не точкой с запятой
Строка 5: правильная
Строка 6: (пустая) правильная
Строка 7: перед едолжна стоять по крайней мере одна цифра: например, 1е21или 1 0е21
Строка 8: правильная
Строка 9: нужно использовать }, а не )
Недостающие строки:
первая - переменной rateнигде не присваивается значеиие.
вторая - переменная hнигде не используется.
4. Символьные строки директива #define, функции printf( ) и scanf( )
В этой главе мы продолжим нашу "игру" с данными покопаемся в вопросах, выходящих за пределы тех, которые были связаны с типами данных, и рассмотрим символьную строку Сначала опи шем важное средство языка - препроцессор Си - и узнаем, как задавать и использовать символические константы. Затем вновь об судим способы ввода и вывода данных, при этом более полно ис следуем возможности функций printf( )и scanf( ). Ну, а теперь вы вероятно, ожидаете примера программы, который должен быть помещен в начале главы; мы не будем вас разочаровывать и приведем его:
/* непринужденный разговор */
# define DENSITY 62 4 /* плотность тела человека в фунтах на кубический фут */
main( ) /* любопытствующая программа*/
{
float weight, volume;
int size, letters;
char name [40]; /* или попробуйте "static char name [40], */
printf(" Привет! Как вас зовут?\n" );
scanf(" %s" , name);
printf("%s, Каков ваш вес в фунтах?\n", name);
scani("%f", &weight);
size = sizeof name;
letters = strlen (name);
volume = weight/DENSITY;
printf(" Прекрасно, %s, ваш объем %2 2f кубических фута.\n", name, volume);
printf(" Кроме того, ваше имя состоит из %d букв,\n", letters);
printf(" и для его размещения в памяти у нас есть %d байт.\n", size);
}
Результат работы программы "непринужденный разговор" может, например, выглядеть следующим образом:
Привет ! Как вас зовут?
Анжелика
Анжелика Каков ваш вес в фунтах?
102,5
Прекрасно, AНЖЕЛИКА ваш объем 1,64 кубических фута
Кроме того, ваше имя состоит из 8 букв
и для его размещения в памяти у нас есть 40 байт
Перечислим основные новые черты этой программы:
1. Мы использовали "массив" для хранения "символьной строки" - в данном случае для некоторого имени.
2. При вводе и выводе строки была использована "спецификация преобразования" %s.
3. Для определения символической константы DENSITYбыл использован препроцессор языка Си.
4. Для нахождения длины строки была использована функция strlen( ).
СИМВОЛЬНЫЕ СТРОКИ - ВВЕДЕНИЕ
"Символьная строка" - это последовательность, состоящая из одного или более символов В качестве примера рассмотрим следующую строку:
"Строки изливались прямо из сердца!"
Кавычки не являются частью строки. Они вводятся только для того, чтобы отметить ее начало и конец, т.е. играют ту же роль, что и апострофы в случае одиночного символа.
В языке Си нет специального типа, который можно было бы использовать для описания строк Вместо этого строки представля ются в виде "массива" элементов типа char. Это означает, что символы в строке можно представить себе расположенными в со седних ячейках памяти - по одному символу в ячейке (рис. 41).
РИС. 4. 1. Строка как массив ячеек
Необходимо отметить, что на рисунке последним элементом массива является символ \0. Это "нуль-символ", и в языке Си он используется для того, чтобы отмечать конец строки Нуль-символ - не цифра 0; он не выводится на печать и в таблице кода ASCII имеет номер 0. Наличие нуль-символа означает, что количество ячеек массива должно быть по крайней мере на одну больше, чем число символов, которые необходимо размещать в памяти.
Ну, а теперь спросим, что такое массив? Массив можно пред ставить себе как совокупность нескольких ячеек памяти, объединен ных в одну строку Если вы предпочитаете более формальные и строгие определения, то массив - это упорядоченная последова тельность элементов данных одного типа В нашем примере мы создали массив из 40 ячеек памяти, в каждую из которых можно по местить один элемент типа char. Мы осуществили это с помощью оператора описания
char name [40];
Квадратные скобки указывают, что переменная name- массив, 40 - число его элементов, a charзадает тип каждого элемента. (В комментариях к программе было отмечено, что при желании вы можете воспользоваться более сложным оператором описания):
static char name [40],
Ввиду некоторой специфики, связанной с реализацией функции scanf( )в нашей системе, мы вынуждены использовать эту вторую
РИС.4.2. Описание имени массива типа char
форму, но весьма вероятно, что вы сможете выбрать любую из них. Если обнаружится, что при работе с первой формой оператора описания у вас возникнут трудности при решении наших примеров, попробуйте воспользоваться второй. В действительности вторая форма должна работать в любой системе, но мы не хотим применить тип staticдо тех пор, пока не рассмотрим в гл. 10 понятие классов памяти).
На первый взгляд все это выглядит довольно сложным: вы должны создать массив, расположить символы в виде строки и не забыть добавить в конце \0. К счастью, о большинстве деталей компилятор может "позаботиться" сам.
Попробуйте выполнить приведенную ниже программу, чтобы посмотреть, как просто все происходит на практике:
/* похвала 1*/
#define PRAISE " Вот эта да, какое великолепное имя"
main( )
{
char name [50];
printf(" Как вас зовут? \n" );
scanf(" %s", name);
printf(" Привет, %s %s\n" , name, PRAISE);
}
Символ %sслужит указанием функции printf( )напечатать строку. Результат выполнения программы похвала 1может выглядeть, например, так:
Как вас зовут ?
Элмо Бланк Привет, Элмо, Вот эта да, какое великолепное имя !
Как видите, нам не пришлось самим помещать нуль символ в конец массива. Эта задача была выполнена за нас функцией scanf( )при чтении вводимой строки. PRAISE- "символическая строковая константа". Ниже мы рассмотрим директиву #defineболее подробно, а пока вы должны знать, что кавычки, в которые заключена фраза, следующая за строковой константой PRAISE, идентифицируют эту фразу как строку, и поэтому в ее конец будет помещен нуль-символ.
Читать дальшеИнтервал:
Закладка: