- •1.1. Алфавит языка Си
- •1.2. Лексемы
- •1.3. Идентификаторы и ключевые слова
- •1.4. Знаки операций
- •1.5. Литералы (константы)
- •1.6. Комментарии
- •1.7. Общая структура программы на языке Си.
- •1.8. Функциональная и модульная декомпозиции
- •1.9. Этапы обработки программы.
- •1.10. Роль препроцессора.
- •1.11. Ошибки
- •2. Переменные и константы. Типы данных
- •2.1. Основные типы данных
- •2.2. Декларация (объявление) объектов
- •2.3. Константы в программах
- •2.4. Целочисленные константы
- •2.5. Константы вещественного типа
- •2.6. Символьные константы
- •2.7. Строковые константы
- •2.8. Логические константы
- •3. Обзор операций
- •3.1. Операции, выражения
- •3.2. Арифметические операции
- •3.3. Операции сравнения
- •3.4. Логические операции
- •3.5. Операция присваивания
- •Примеры недопустимых выражений:
- •3.6. Сокращенная запись операции присваивания
- •3.7. Операция «,» (запятая)
- •4. Обзор операций (продолжение)
- •4.1. Преобразование типов операндов бинарных операций
- •4.2. Преобразование типов при присваивании.
- •4.3. Операция явного приведения типа
- •4.4. Приоритеты операций
- •5. Стандартная библиотека языка Си
- •5.1. Стандартные математические функции
- •5.2. Потоковый ввод-вывод
- •5.3. Консольные функции вывода данных на экран
- •5.4. Консольные функции ввода информации
- •5.5. Ввод-вывод в оконных приложениях.
- •Советы по программированию
- •6. Операторы языка с.
- •7. Составление разветвляющихся алгоритмов
- •7.1. Условные операторы
- •If (выражение) оператор;
- •If (выражение) оператор 1 ;
- •If (выражение 1) оператор 1;
- •If (выражение 2) оператор 2;
- •If (выражение 3) оператор 3;
- •7.2. Оператор выбора альтернатив (переключатель)
- •Void main(void)
- •7.3. Условная операция «? :»
- •8. Составление циклических алгоритмов
- •8.1. Оператор с предусловием while
- •8.2. Оператор цикла с постусловием do – while
- •Void main(void)
- •8.3. Оператор цикла с предусловием и коррекцией for
- •8.4. Вложенные циклы.
- •Пример 1.
- •Void main(){
- •Пример 2.
- •9. Операторы передачи управления.
- •9.1. Оператор безусловного перехода goto
- •9.2. Операторы continue, break и return
- •10. Массивы
- •10.1. Одномерные массивы
- •10.2. Примеры алгоритмов, использующих одномерные массивы.
- •10.3. Многомерные массивы
- •10.4. Примеры алгоритмов, использующих двумерные массивы.
- •10.5. Компонента StringGrid
- •11. Размещение данных и программ в памяти пэвм
- •11.1. Общие понятия.
- •11.2. Кодирование целых чисел.
- •11.3. Кодирование вещественных чисел.
- •11.4. Кодирование символов.
- •Примеры кодов символов:
- •Стандартная часть таблицы символов (ascii)
- •Дополнительная часть таблицы символов (ascii, кириллица)
- •Дополнительная часть таблицы символов (ansi, кириллица)
- •11.5. Операция sizeof
- •11.6. Кодирование программы.
- •11.8. Регистры
- •12.1. Строки как нуль-терминированные массивы char.
- •Void main(){
- •If (!strcmp(a,b))
- •Itoa(I, s, 10);
- •If (! sscanf(s, "%d", &I))
- •If (!strnicmp(s, "song", 4)) {
- •If (!strnicmp(s, "song", 4)) {
- •12.2. Русификация консольных приложений.
- •Void main(void)
- •12.3. Строки как переменные типа AnsiString.
- •12.4. Преобразования строковых типов.
- •12.5. Тип String в консольных приложениях.
- •Void main(){
- •13. Функции пользователя.
- •13.1. Сущность и предназначение функций.
- •13.2. Определение и вызов функции.
- •Void main(){
- •14. Область видимости и классы памяти
- •14.1. Область видимости.
- •Void fun(void);
- •14.2. Классы памяти объектов в языке Cи.
- •Void f1(int);
- •Void main(void)
- •Void f1(int I)
- •Void st(void){
- •14.3. Разбиение программы на модули.
- •15. Генерация псевдослучайных чисел.
- •16. Отладка и пошаговое выполнение программы
- •17. Указатели
- •17.1. Определение указателей
- •17.2. Связь указателей и массивов.
- •17.3. Операции над указателями (косвенная адресация)
- •17.4. Сравнение указателей
- •17.5. Массивы указателей.
- •17.6. Указатели на указатели.
- •17.7 . Указатели как параметры функций.
- •Void zam(int *X, int *y)
- •Void zam(int &X, int &y)
- •Void zam (int&, int&);
- •Void main (void)
- •17.9. Указатели на функции
- •Void FunOut(double (*p_f )(char, double)){
- •18.2. Создание одномерного динамического массива.
- •18.3. Создание двуxмерного динамического массива.
- •19. Операция typedef
Void main(){
char s[50];
int i;
puts("Vvedite stroku s probelami:");
gets(s);
for(i=0; s[i]; i++) //пока s[i] != нуль-терминатору
if (s[i]==' ') s[i]='_';
puts(s);
getch();
}
г) Копирование, сцепление (конкатенация), сравнение, поиск строк - массивов char.
Описание прототипов стандартных функций работы со строками - массивами char находится в файле string.h.
Рассмотрим наиболее часто используемые функции (перед именем функции указывается тип ее результата, в скобках - количество и типы параметров).
Функция int strlen(char *S) возвращает длину строки (количество символов в строке), при этом завершающий нулевой байт не учитывается.
Пример:
char S1[]="Минск!\0", S2[90]="БГУИР-Ура!";
printf("%d, %d .", strlen(S1), strlen(S2));
Результат выполнения данного участка программы:
6 , 10 .
Функция strcpy(char *S1, char *S2) - копирует содержимое строки S2 в строку S1. Она заменяет операцию присваивания, непригодную для массивов в языке С.
Пример:
char s[50], t[30];
strcpy(t, "Hello!");
strcpy(s,t);
Функция strcat(char *S1, char *S2) - присоединяет строку S2 к концу строки S1 и помещает ее в массив, где находилась строка S1, при этом строка S2 не изменяется. Нулевой байт, который завершал строку S1, заменяется первым символом строки S2. (Такая операция называется также конкатенацией или сцеплением строк).
Пример:
char a[20], b[10];
strcpy(a, "Hello,");
strcpy(b, "world!");
strcat(a,b);
puts(a);
Результат выполнения данного участка программы:
Hello,world!
Функция int strcmp(char *S1, char *S2) сравнивает строки S1 и S2 . Результат функции - целое число, меньшее 0, если значение S1 предшествует значению S2 в "алфавитном" порядке; большее 0, если S2 предшествует S1; равное 0, если строки равны, т.е. содержат одно и то же число одинаковых символов.
Под "алфавитным порядком" здесь понимается порядок возрастания кодов символов (см. тему "Кодирование символов", кодовые таблицы). Как можно видеть из этих таблиц, этот порядок совпадает с алфавитным для латинских букв одинакового регистра, а также для русских букв одинакового регистра (кроме буквы 'ё'). Если первые символы S1 и S2 совпадают, то учитываются следующие символы и т.д., по обычным алфавитным правилам.
Функция int stricmp(char *S1, char *S2) делает то же, что и strcmp, но нечувствительна к регистру букв (например, 'D' и 'd' для нее - одинаковые символы).
Пример:
char a[20], b[10];
gets(a);
gets(b);
If (!strcmp(a,b))
puts("a==b!");
else
if (strcmp(a,b)<0)
puts("a<b!");
else puts("b<a!");
Для a="Москва", b="Могилев" результат будет:
b<a!
Функции:
strncpy(char *S1, char *S2, int max);
strncat(char *S1, char *S2, int max);
int strncmp(char *S1, char *S2, int max);
int strnicmp(char *S1, char *S2, int max);
делают то же, что и соответствующие им функции strcpy, strcat, strcmp, stricmp, но, если длина строки S2 превышает max, то они используют только первые max ее символов. В этом случае нуль-терминатор в конце полученной строки может не быть поставлен автоматически.
Существует также функция для поиска заданной подстроки в заданной строке (подстрокой называется подряд идущая часть строки):
char * strstr(char *S1, char *S2);
Здесь S1 - строка, в которой будет проводиться поиск; S2 - искомая подстрока. Результатом функции является указатель (см. тему "Указатели") на первое (считая слева направо) местоположение подстроки S2 в строке S1, либо NULL, если S2 не встречается в S1.
д) Перевод строк - массивов char в числа и наоборот.
Функции преобразования строки S в число:
целое: int atoi(char *S);
длинное целое: long atol(char *S);
действительное: double atof(char *S);
При ошибке данные функции возвращают значение 0.
Пример:
char s[]="120"; int i;
i=atoi(s); // i=120
Функции преобразования числа V в строку S:
целое: itoa(int V, char *S, int kod);
длинное целое: ltoa(long V, char *S, int kod);
Здесь kod - основание системы счисления, в которой должно быть записано полученное число: 2 kod 36, для десятичных чисел kod=10.
Пример:
char s[10]; int i=120;
