Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Язык Си - руководство для начинающих - M. УЭИТ

Язык Си - руководство для начинающих - M. УЭИТ

Читать онлайн Язык Си - руководство для начинающих - M. УЭИТ

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 9 10 11 12 13 14 15 16 17 ... 98
Перейти на страницу:

Как записать константу типа char: 'r', 'U', '07', '?' и т. д.

Как записать константу типа float: 14,92, 1.67е-27 и т. д.

Что такое слова байты и биты.

В каких случаях используются различные типы данных.

ВОПРОСЫ И ОТВЕТЫ

     Рассмотрение приводимых ниже вопросов должно помочь вам глубже УСВОИТЬ материал данной главы.

Вопросы

1. Какими типами вы будете пользоваться при обработке данных следующего вида

     а. Население Рио Фрито

     б. Средний вес картины Рембрандта

     в. Наиболее часто встречающаяся буква в тексте данной главы

     г. Сколько раз указанная буква встречается в тексте

2. Определите тип и смысл (если он есть) каждой из следующих констант

     а. 'b'

     б. 1066

     в. 99 44

     г. OXAA

     д. 20е30

3. Вирджила Анн Ксенопод (ВАКС) написала программу с множеством ошибок Помогите ей обнаружить их:

#include < stdio h>

main

(

            float g, h,

            float tax, rate,

            g = e21, tax = rate*g,

)

Ответы

1.   a. int, возможно short, население выражается целым числом

     б. float, маловероятно, что среднее окажется целым числом

     в. char

     г. int, возможно unsigned

2.   a. char, символ "шаг назад"

     б. int, историческая дата

     в. float, степень чистоты после мытья

     г. Шестнадцатеричное число типа int, десятичное значение 170

     д. float, масса Солнца в кг

3.   Строка 1: правильная

     Строка 2: должна содержать пару круглых скобок вслед за именем main, т. е. main( )

     Строка 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; он не выводится на печать и в таблице кода ASCII  имеет номер 0. Наличие нуль-символа означает, что количество ячеек массива должно быть по крайней мере на одну больше, чем число символов, которые необходимо размещать в памяти.

     Ну, а теперь спросим, что такое массив? Массив можно пред ставить себе как совокупность нескольких ячеек памяти, объединен ных в одну строку Если вы предпочитаете более формальные и строгие определения, то массив - это упорядоченная последова тельность элементов данных одного типа В нашем примере мы создали массив из 40 ячеек памяти, в каждую из которых можно по местить один элемент типа char. Мы осуществили это с помощью оператора описания

char name [40];

     Квадратные скобки указывают, что переменная name - массив, 40 - число его элементов, a char задает тип каждого элемента. (В комментариях к программе было отмечено, что при желании вы можете воспользоваться более сложным оператором описания):

static char name [40],

     Ввиду некоторой специфики, связанной с реализацией функции scanf( ) в нашей системе, мы вынуждены использовать эту вторую

 

                                                                РИС.4.2. Описание имени массива типа char

     форму, но весьма вероятно, что вы сможете выбрать любую из них. Если обнаружится, что при работе с первой формой оператора описания у вас возникнут трудности при решении наших примеров, попробуйте воспользоваться второй. В действительности вторая форма должна работать в любой системе, но мы не хотим применить тип static до тех пор, пока не рассмотрим в гл. 10 понятие классов памяти).

     На первый взгляд все это выглядит довольно сложным: вы должны создать массив, расположить символы в виде строки и не забыть добавить в конце . К счастью, о большинстве деталей компилятор может "позаботиться" сам.

     Попробуйте выполнить приведенную ниже программу, чтобы посмотреть, как просто все происходит на практике:

/* похвала 1*/

#define PRAISE " Вот эта да, какое великолепное имя"

main( )

{

char name [50];

printf(" Как вас зовут? n" );

scanf(" %s", name);

printf(" Привет, %s %sn" , name, PRAISE);

}

     Символ %s служит указанием функции printf( ) напечатать строку. Результат выполнения программы похвала 1 может выглядeть, например, так:

Как вас зовут ?

Элмо Бланк Привет, Элмо,  Вот эта да, какое великолепное имя !

1 ... 9 10 11 12 13 14 15 16 17 ... 98
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык Си - руководство для начинающих - M. УЭИТ.
Комментарии