ЗАМЕЧАНИЕ
Понятие структуры является предком более сложного понятия, используемого
в объектно-ориентированных языках программирования (например, С++), —
понятия класса.
Контрольные вопросы
1.
В чем заключается использование массива в программе на Си?
Приведите пример.
2.
В чем заключается обработка массива с помощью оператора for языка
программирования Си? Приведите пример.
3.
Как инициировать массивы при объявлении на языке Си? Приведите
примеры для различных типов данных.
4.
Опишите условный оператор языка программирования Си. В чем
разница между полной и сокращенной формами условного оператора?
5.
Опишите оператор выбора в языке Си. Зачем он нужен, если есть
условный оператор?
6.
Приведите пример использования структур (записей) в Си. Как создать
новый тип данных в программе на Си с помощью записей?
7.
Опишите, как с помощью оператора for языка программирования Си
представлять бесконечный цикл, цикл ПОКА и цикл ДО. Как прервать
бесконечный цикл в языке программирования Си?
Обработка текстовых строк
Текстовая информация представляет собой наиболее часто встречающуюся
разновидность
информации,
обрабатываемой
на
современных
компьютерах. Ушли в прошлое времена, когда компьютер был в основном
вычислительным устройством. Сегодня зачастую компьютер — просто
пишущая машинка в конторе!
В языке программирования Си текстовые строки рассматриваются как
одномерные массивы символов, при этом ограничителем строки при
выводе, например, на экран или в файл считается нулевой символ (символ
с кодом, равным нулю). В связи с этим для объявления строки с
максимальным числом хранимых символов 19 возможно следующее
описание:
char x[20];
100
Стандартная библиотека функций для работы с текстовыми строками,
описанная в заголовочном файле string.h, имеет следующие наиболее
употребительные функции для работы со строками:
strcpy(<
строка1>,<строка2>) — для копирования строк;
strcmp(<
строка1>,<строка2>) —
для
лексикографического
сравнения строк (возвращает ноль, если строки одинаковые,
положительное значение, если первая строка «больше», и
отрицательное — если «меньше»);
strcat(<
строка1>,<строка2>) — для приписывания второй строки
в конец первой (конкатенации строк);
strstr(<
строка1>,<строка2>) — для проверки вхождения
подстроки в строку (если не найдет, возвращает NULL, в противном
случае возвращает указатель на начало первого вхождения искомой
подстроки в исходную строку);
strlen(<
строка>) — для нахождения длины строки (не считает
завершающий строку символ \0).
Рассмотрим семантику некоторых из перечисленных функций библиотеки
обработки строк. Интересно передать ее по аналогии с обработкой
числовых данных с помощью стандартных операций языка
программирования Си:
strcpy(s1,s2); /*
аналог s1=s2 */;
strcat(s1,s2); /*
аналог s1+=s2 */;
if
(!strcmp(s1,s2)) /*
аналог if (s1==s2) */.
Примеры возможного использования строковых функций:
char s1,s2="
дядя ",s3="Ваня";
strcpy(s1,s2); /* s1= "
дядя " */
if (!strcmp(s1,s2))
{
strcpy(s2,s3); /* s2= "
Ваня" */
strcat(s1,s2); /* s1="
дядя Ваня" */
}
char *str1 = "
коля", *str2="оля";
*ptr = strstr(str1, str2);
if (ptr!=NULL) printf("
Подстрока: %s\n", ptr);
Контрольные вопросы
1.
Как представляются строки в «чистом» Си? Что означает символ с
кодом ноль (\0)?
101
2.
Какой заголовочный файл подключается для использования библиотеки
работы со строками в программах на Си? Какие основные функции
содержит библиотека?
Использование параметров функции main()
Как уже упоминалось, в Си имеется возможность получения программой
некоторых параметров при ее запуске операционной системой ЭВМ.
Поскольку исполнение программы на Си начинается с функции main, это
организовано через ее аргументы. Чтобы указать, что программа
использует параметры, вместо имени main() с пустыми круглыми
скобками необходимо указать набор предопределенных параметров, как
показано в примере далее. Фактически, параметры могут задаваться либо в
командной строке оболочки операционной системы, либо другими
средствами.
/* Передача параметров в функцию main*/
#include
int main (int argc, char *argv[])
{
int i=0;
printf ("\n
Имя программы %s", argv[0]);
for (i=1; i>=argc; i++)
printf ("\n
аргумент %d равен %s", argv[i]);
return 0;
}
Итак, первым предопределенным параметром является целочисленная
переменная argc. Она задает количество аргументов, фактически
переданных при запуске программы. Данное обстоятельство позволяет
гибко обрабатывать, например, последовательности чисел произвольной
длины — подсчет количеств берет на себя операционная система
(используется при написании одного из вариантов программы подсчета
суммы нечетных в лабораторном практикуме).
Далее идет массив строк char *argv[]. Аргументы передаются в
программу в виде строк текста, таким образом на программу возлагается
обязанность в случае необходимости превратить их в числа (можно
использовать, например, функцию ввода из текстовой строки sscanf()
или atoi()). Важным является то обстоятельство, что в качестве первого
элемента массива строк по умолчанию передается имя самой программы
(путь к исполняемому файлу) argv[0]. Соответственно, argc всегда как
минимум будет равен единице, а фактически набранные пользователем
параметры доступны через argv[1], argv[2], argv[3]...
102
Достарыңызбен бөлісу: |