- •Элементы языка си
- •Структура программы на языке си
- •Выражения
- •Арифметические выражения
- •Операции «инкремент, декремент»
- •Операции ввода-вывода в языке си
- •Функция вывода printf( )
- •Специальные управляющие символы
- •Символы преобразования
- •Функция ввода scanf()
- •Операторы языка си
- •Пустой оператор
- •Составной оператор
- •Оператор перехода
- •Для программирования ветвлений в языке Си используют условную операцию ?, условный оператор if и оператор выбора варианта switch. Условный оператор
- •Оператор выбора варианта
- •Оператор разрыва
- •Операторы цикла
- •Оператор продолжения
- •Оператор цикла с параметром (с шагом)
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Массивы в языке си
- •Строки (символьные массивы)
- •Ввод-вывод символьных строк
- •Обработка строк
- •Структурный тип данных (Структуры)
- •Имя структуры.Имя элемента
- •Функции в языке си
Строки (символьные массивы)
В языке Си нет специально определенного строкового типа данных (как в Паскале). Символьные строки организуются, как массивы символов, т.о. на длину строки в Си нет ограничения. В этом состоит их важное преимущество перед строками в Паскале, где размер строки не может превышать 255.
Каждый символ строки хранится в отдельном байте ОП. В конце каждой строки компилятор помещает нулевой символ \0 (null – в явном виде он не отображается), поэтому каждая строка занимает на 1 байт ОП больше, чем символы в строке. По этой же причине строка, содержащая один символ, не совпадает с символьной константой.
Строка – это последовательность символов, заключенных в кавычки. Строка может содержать любые символы алфавита, кроме кавычек, символа \ и символа конца строки \n (переход на новую строку). Для размещения в строке данных символов необходимо перед ними разместить символ \ .
Например: “Он сказал: \”Привет!\””
Каждая строковая константа, даже если она идентична другой строковой константе, сохраняется в отдельном месте памяти.
Если две строковые константы записаны одна за другой, то во время компиляции компилятор объединяет их:
“Hello, “, “Friends” => “Hello, Friends”
Такой механизм предоставляет удобное средство для записи длинных строковых констант.
Строка описывается, как символьный массив.
Синтаксис описания:
char имя строки [максимальный размер];
например: char str[20];
Одновременно с описанием строка может инициализироваться. Возможны два способа инициализации строки:
1) с помощью строковой константы (последовательности символов, заключенной в кавычки):
При таком способе инициализации в конце строки компилятор сам ставит символ \0.
char s[10] = “строка”; - начальное значение задавать необязательно
под строку s будет выделено 10 байт памяти, из них первые 7 получат значения при инициализации (седьмой – нулевой символ).
char s[] = ”строка”; - начальное значение обязательно
будет сформирована строка s из 7 символов.
2) в виде списка символов (элементов массива):
char s[10] = {‘c’,‘т’,’р’,’о’,’к’,’а’,‘\0’}; - описание равнозначно первому.
Символьный массив можно определить без нулевого символа в конце:
char s[10] = {‘c’,‘т’,’р’,’о’,’к’,’а’};
но это приведет к проблемам с обработкой такой строки, так как будет отсутствовать ориентир на ее окончание.
Отдельные символы строки идентифицируются индексированными именами, например: s[0]=’c’, s[5]=’a’
Инициализация двумерного символьного массива строками:
char b[4][30]= Тексты в кавычках эквивалентны
{ скобочной записи:
“Результаты сессии”, {{…},{…},…};
“_________________”,
“ ФИО | Оценки “,
“ ________________”
};
Ввод-вывод символьных строк
Прототипы функций находятся в библиотеке стандартного ввода-вывода stdio.h.
gets(); Аргументом функций указывается имя строки. |
чтение строки, введенной с клавиатуры Функция gets() читает строку из стандартного потока ввода stdin (высокоуровневый ввод-вывод) и помещает её по адресу, задаваемому параметром функции. Ввод строки заканчивается при обнаружении символа новой строки \n, который заменяется на нулевой символ \0. |
puts(); Аргументом функций указывается имя строки. |
вывод строки на экран Функция puts() записывает строку, адрес которой определяется значением параметра в круглых скобках, в стандартный поток вывода stdout. При выводе, завершающий \0 заменяется символом новой строки, то есть после вывода строки на экран курсор переходит в начало следующей строки. |
getchar(); getc(); |
ввод одного символа с клавиатуры Например: ch = getchar (); присваивание переменной символьного типа ch очередного символа, полученного из стандартного ввода. |
putchar(); putc(); |
вывод одного символа на экран Например: putchar (ch); выводит символ ch на экран. |
getch(); |
ввод одного символа с клавиатуры без отображения его на экране |
Пример: Ввести с клавиатуры строку символов и вывести ее на печать.
1 способ. |
2 способ. |
# include <stdio.h> void main() { char str[100]; printf("Введите строку:\n"); gets(str); printf("Введенная строка\n "); puts(str); }
|
# include <stdio.h> void main() { char str[100]; printf("Введите строку:\n"); scanf("%s", &str); printf("Введенная строка\n "); printf("%s\n", str); }
|
Ввод и вывод строки можно оформить в цикле:
3 способ. |
4 способ. |
# include <stdio.h> void main() { char str[100]; int i; printf("Введите строку:\n"); for(i=0; i<10; i++) str[i]=getchar(); printf("Введенная строка\n "); for(i=0; i<10; i++) putсhar(str[i]); }
|
# include <stdio.h> void main() { char str[100]; int i; printf("Введите строку:\n"); for(i=0; i<10; i++) scanf(“%c”, &str[i]); printf("Введенная строка\n "); for(i=0; i<10; i++) printf(“%c”, str[i]); }
|
