Еще раз о типах данных в языке Си.
Целые числа со знаком
Могут быть положительными и отрицательными.
int - базовый
целочисленный тип. Си гарантирует для int не
менее 16 битов.
short или short int - максимальное
число типа short. Си
гарантирует для short не
менее 16 битов.
long или long int - может
хранить число, которое как минимум, не меньше наибольшего числа типа int или больше его. Си гарантирует
для long не менее 32 битов.
long long или long long int - этот тип может быть целым
числом. Си гарантирует для long long int не менее 64 битов.
Символы
Ими являются типографские символы, такие как А, &, + и
т.д. По определению char для
представления использует 1 байт памяти. 1 байт = 8 битам. Но char может быть длиной 16 бит и
больше.
char - ключевое слово для типа
символы.
signed char и
unsigned char.
Булевские значения
Булевский тип представляет собой значения true(истина) и false(ложь).
_Bool
Вещественные числа с плавающей запятой
Могут быть положительными и отрицательными.
float - базовый
тип данных с плавающей запятой. Может представлять шесть значащих цифр с
заданной точностью.
double - базовый
тип данных с плавающей запятой. Может представлять десять и более значащих цифр
с заданной точностью.
long double - базовый тип данных с
плавающей запятой. Может представлять более 10 значащих цифр с заданной
точностью.
Комплексные и мнимые числа с плавающей запятой
float_Complex
double_Complex
long double_Complex
float_Imaginary
double_Imaginary
long double_Imaginary
В языке Си имеется встроенная операция sizeof,
которая возвращает размер типа в байтах.
Символьная строка - это
последовательность из одного или большего количества символов, например:
"Это длинная строка символов"
Строки
символов: введение
Символьная строка представляет собой последовательность
из одного или большего числа символов, например :
" Это длинная строка символов."
Двойные кавычки не являются частью строки. Они
сообщают компилятору, что охватывают строку, в то время как одиночные кавычки
идентифицируют конкретный символ.
Массив
значений типа char и нулевой символ
В языке С нет никакого специального типа для
представления строк. Вместо этого строки хранятся в массивах значений типа char. Символы, образующие
строки, хранятся в смежных ячейках памяти, по одному символу в ячейке, массив состоит из смежных ячеек памяти, так
что строка размещается в массиве естественным образом.
Обратите внимание, что на рис. 4.1 в последней позиции
массива показан символ \ 0 . Это нулевой (nиll) символ, и
язык Си использует его для того, чтобы отметить конец строки. Нулевой символ -
это не цифра нуль; это непечатаемый символ, значение которого в кодировке ASCII (или эквивалентной) равно 0. Все строки языка С
всегда сохраняются с этим символом в конце. То , что в конце массива всегда
проставляется нулевой символ, означает, что массив должен иметь, по крайней
мере, на одну ячейку больше, чем количество символов, которое вы хотите сохранить.
Что же представляет собой массив? Вы можете рассматривать массив как несколько ячеек памяти,
расположенных в ряд. Если вы предпочитаете более формальную и точную
формулировку, то массив - это упорядоченная последовательность элементов данных
одного типа. В рассматриваемом примере создается массив из 40 ячеек памяти, или
элементов, каждый из которых может хранить одно значение типа char . При этом используется следующее
объявление:
char name [ 40 ] ;
Квадратные скобки после name говорят о том, что это
массив. Число 40 внутри скобок показывает число элементов в массиве.
Ключевое слово char идентифицирует
тип каждого элемента ( рис. 4.2) .
Пример использования строк
//ПРИМЕР 1
//Программа запрашивает мое имя и фамилию и выводит ее
#include <stdio.h> //Команда препроцессора. Подключение
стандартной библиотеки Си ввод-вывод.
#include <string.h> // Команда препроцессора. Подключить
файл обработки строк.
int main(void) {
char name[20]; //Объявление
переменной типа char строка, ей выделяется 20 байтов - ячейки памяти
char surname
[20]; //Объявление переменной типа char строка, ей выделяется 20 байтов
printf("Как ваше имя\n");
/*Функция ввода имени. /*получить входные
данные от пользователя*/ */
scanf("%s", name); //функция ввода данных, %s - спецификатор
для ввода символьных данных
printf("Как
ваше фамилия \n");
/*Функция ввода фамилии. /*получить
входные данные от пользователя*/ */
scanf("%s", surname);
printf("Вас зовут %s %s\n", name,
surname);
return
0;
}
//СПЕЦИФИКАЦИЯ
int main(void)
/*int - указывает на
то, что функция main()
возвращает целое число,
void - говорит о том, что функция main() не принимает никаких аргументов.*/
%s //интерпретирует введенные
данные как строку
printf("Как ваше имя\n"); //функция вывода, применяется для вывода фраз и значений
переменных
printf("Вас зовут %s %s\n", name, surname); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем printf() имеет три аргумента управляющая строка
и СПИСОК ПЕРЕМЕННЫХ -> name, surname
ВЫВОД НА ЭКРАНЕ
Как ваше имя
Olga
Как ваше фамилия
Orlova
Вас зовут Olga Orlova
//ПРИМЕР 3
#include "stdio.h" //Команда
препроцессора. Подключение стандартной
библиотеки Си ввод-вывод.
#include "string.h" // Команда препроцессора. Подключить
файл обработки строк.
int main() {
float num; //Объявление переменной типа float - число
с плавающей точкой
printf("Введите число\n"); //функция вывода, применяется для вывода
фраз и значений переменных
/*Функция ввода. Получить входные данные от пользователя */
scanf("%f", &num);
printf("Число в десятичной форме %f\n", num);
printf("Число
в экспоненциальной форме %e\n", num);
return 0;
}
ВЫВОД НА ЭКРАНЕ
Введите число
5
Число в десятичной форме 5.000000
Число в экспоненциальной форме 5.000000e+00
ПОЯСНЕНИЯ
printf("Число в десятичной форме %f\n",
num); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем printf() имеет два аргумента управляющая строка
и СПИСОК ПЕРЕМЕННЫХ -> num
/*СПЕЦИФИКАТОР ПРЕОБРАЗОВАНИЯ определяет каким образом
данные преобразуются в отображаемую форму*/
%d //СПЕЦИФИКАТОР ПРЕОБРАЗОВАНИЯ десятичное число со
знаком
%f //число
с плавающей запятой, десятичное представление
%c //одиночный
символ
%s //интерпретирует
введенные данные как строку
%e // экспоненциальная
форма
%a //Двоично-
экспоненциальное представление
& //амперсанд
- спецификатор где можно найти переменную
Функция strlen()
В
языке Си имеется встроенная операция sizeof, которая возвращает
размеры типов в байтах. Функция strlen() определяет длину
строки в символах.
Поскольку
для размещения одного символа требуется один байт, можно предположить, что применительно
к строке обе операции дадут одинаковый результат, но это не так.
/*Прототипом функции в языке Си или C++ называется
объявление функции, не содержащее тела функции, но указывающее имя функции,
арность, типы аргументов и возвращаемый тип данных. В то время как определение
функции описывает, что именно делает функция, прототип функции может
восприниматься как описание её интерфейса.*/
//sizeof - это унарный оператор, возвращающий длину в байтах переменной или
типа, помещенных в скобки.
//strlen() - определяет длину строки в символах
//%zd
- спецификатор для определения размера байтов
#include <stdio.h>
#include <string.h> //предоставляет прототип функции для
обработки строк strlen()
#define PRAISE "Cool!" //объявление константы
int main(void)
{
char name[40]; //Объявление переменной типа char строка,
ей выделяется 40 байтов - ячейки памяти
printf("What
is your name\n");
/*получить входные данные от пользователя*/
scanf("%s",
name);
printf("Hello
%s. %s \n", name, PRAISE); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем printf() имеет три аргумента
-> управляющая строка и СПИСОК ПЕРЕМЕННЫХ
printf("Your
name consist of %zd symbols and located %zd cell of memory.\ n",
strlen(name), sizeof name);
printf("The praise consist of %zd
symbol\n", strlen(PRAISE));
printf("And located %zd cell of
memory\n", sizeof PRAISE);
getchar(); //для того чтобы не закрывалось окно
программы после исполнения
getchar();
return 0;
}
//ВЫВОД НА ЭКРН
What is your name
Tanya
Hello Tanya. Cool!
Your name consist
of 5 symbols and located 40 cell of memory. The
praise consist of 5 symbol
And located 6 cell
of memory.
Вариант с использование спецификатора %u
//sizeof - это унарный оператор, возвращающий длину в байтах переменной или
типа, помещенных в скобки.
//strlen() - определяет длину строки в символах
//%zd
- спецификатор для определения размера байтов
//%u
- спецификатор десятичное целое число без знака
#include <stdio.h>
#include <string.h> //предоставляет
прототип функции для обработки строк strlenf()
#define PRAISE "Cool!" //объявление константы
int main(void)
{
char
name[40]; //Объявление переменной типа char строка,
ей выделяется 40 байтов - ячейки памяти
printf("What
is your name\n");
/*получить входные данные от пользователя*/
scanf("%s",
name);
printf("Hello
%s. %s \n", name, PRAISE); //ОПЕРАТОР ВЫЗОВА ФУНКЦИИ с именем printf() имеет три аргумента
-> управляющая строка и СПИСОК ПЕРЕМЕННЫХ
printf("Your
name consist of %u symbols and located %u cell of memory.\ n", strlen(name),
sizeof name);
printf("The praise consist of
%u symbol\n", strlen(PRAISE));
printf("And located %u cell of
memory. \n", sizeof PRAISE);
getchar(); //для того чтобы не закрывалось окно
программы после исполнения
getchar();
return 0;
}
//ВЫВОД НА ЭКРАН
What is your name
Inessa
Hello Inessa. Cool!
Your name consist
of 6 symbols and located 40 cell of memory. The
praise consist of 5 symbol
And located 6 cell
of memory.
В языке Си имеется встроенная операция
sizeof, которая возвращает размеры типов в байтах.
//%zd - спецификатор для определения размера байтов
//%u - спецификатор десятичное целое число без знака
int main(void)
/*int - указывает на то, что функция main() возвращает
целое число,
void - говорит о том, что функция main() не принимает
никаких аргументов.*/
#include <stdio.h> //КОМАНДА
ПРЕПРОЦЕССОРА. Начало программы.
Включить другой файл, подключение стандартной библиотеки С.
int main(void)
{
printf("Type int have size %zd
byte.\n", sizeof(int));
printf("Type char have size %zd
byte.\n", sizeof(char));
printf("Type long have size %zd
byte.\n", sizeof(long));
printf("Type long long have
size %zd byte.\n", sizeof(long long));
printf("Type double have size
%zd byte.\n", sizeof(double));
printf("Type long double have
size %zd byte.\n", sizeof(long double));
getchar(); //для того чтобы не закрывалось окно
программы после исполнения
getchar();
return 0;
}
//ВЫВОД НА ЭКРАН
Type int have size
4 byte.
Type char have size
1 byte.
Type long have size
4 byte.
Type long long have
size 8 byte.
Type double have
size 8 byte.
Type long double
have size 8 byte.
Сброс буфера вывода
Когда
функция printf() отправляет вывод на экран?
Первоначально
операторы printf() пересылают выходные данные
в промежуточную область хранения,
называемую буфером. Время от времени
данные, находящиеся в буфере, отправляются на экран. Стандартные правила Си -
когда пересылать вывод из буфера на экран - вывод из буфера передается на
экран:
-
когда буфер заполнен,
-
когда встречается символ новой строки,
-
когда наступает время ввода данных.
Отправка
вывода из буфера на экран или в файл называется сбросом буфера.
Функции printf() и scanf()
Функции
printf() и scanf() позволяют
организовать взаимодействие с программой и называются функциями ввода-вывода.
Инструкции,
которые вы даете функция printf(),
запрашивая у нее вывод переменной, зависят от типа этой переменной.
Например:
%d - при выводе целого числа
%с -
при выводе символа
%s - при выводе символьной строки
Это
спецификаторы преобразования.
Формат
использования функции printf ()
имеет вид :
printf
( управляющая - строка , элементl , элемент2 , . . . ) ;
Где
элементl , элемент2 и так далее - это элементы, которые нужно напечатать. Они
могут быть переменными либо константами, либо даже выражениями, значение
которых вычисляется при выводе на печать, а управляющая - строка - это строка
символов, описывающая, каким образом необходимо выполнить печать элементов. Как
уже говорилось управляющая строка должна содержать спецификатор преобразования
для каждого выводимого элемента.
printf
( "%d администраторов выпили % f чашек кофе эспрессо . \ n ", number, espresso);
Здесь
управляющая строка представляет
собой фразу, заключенную в двойные кавычки.
Она
содержит два спецификатора
преобразования, соответственно, для переменных
number и espresso - двух выводимых на
печать элементов.
Резюме
Строка - это последовательность
символов, рассматриваемая как единый блок. В языке С строки представлены
последовательностями символов, завершающимися нулевым символом, АSСII-код которого равен 0.
Строки могут сохраняться в символьных массивах. Массив представляет собой последовательность элементов, имеющих
ОДИН и тот же тип.
Чтобы
объявить массив с именем name,
содержащий 30 элементов типа char, воспользуйтесь следующей конструкцией:
char
name [30];
Функцию strlen() можно использовать для
определения длины строки (без нулевого символа в конце ) . Функция scanf() , будучи вызванной вместе со
спецификатором % s , может
применяться для чтения строк, состоящих из одного слова.
Директива
#include заставляет процессор
добавлять с одержимое другого файла в ваш файл в то место, где расположена эта
директива. Директива #define
позволяет определять явные константы, то есть задавать символические
представления констант. Заголовочные файлы limits.h
и float.h используют директиву #define , чтобы определить набор
констант, представляющих различные свойства цело численных типов и чисел с
плавающей запятой. Для создания символических констант вы также можете
использовать модификатор const.
Функции printf() и scanf ()
обеспечивают универсальную поддержку ввода и вывода. Каждая из них использует
управляющую строку, содержащую вложенные спецификаторы преобразования, которые
указывают количество и типы элементов данных для чтения или вывода на печать.
Комментариев нет:
Отправить комментарий