- •Часть 1
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Часть 2 184
- •Пояснительная записка
- •Содержание дисциплины
- •Индивидуальные практические работы, их характеристика
- •Контрольные работы, их характеристика
- •Литература
- •Основная
- •Дополнительная
- •Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Учебно-методические пособия
- •Алфавит языка
- •Лексемы
- •Идентификаторы
- •Ключевые слова
- •Знаки операций
- •Константы
- •Комментарии
- •Тема 2. Типы данных Концепция типа данных.
- •Простые типы данных
- •Целый тип int
- •Символьный тип char
- •Типы с плавающей точкой: float, double, long double
- •Тема 3. Выражения
- •Переменные
- •Именованные константы
- •Операции
- •Операции присваивания
- •Инкремент и декремент
- •Унарный плюс и унарный минус (строка 2)
- •Явное преобразование типа
- •Операция определения размера sizeof
- •Деление и остаток от деления
- •Логические операции не, и, или (!, &&, ||)
- •Условная операция (?:)
- •Операция запятая (,)
- •Операции взятия адреса и разадресации
- •Тема 4. Операторы
- •Структура программы
- •Тема 5. Базовые конструкции структурного программирования
- •Операторы ветвления
- •1. Условный оператор if
- •2. Оператор switch
- •Операторы цикла
- •1. Цикл с предусловием while
- •2. Цикл с постусловием do-while
- •3. Цикл с параметром for
- •Тема 6. Массивы
- •Тема 7. Указатели и массивы
- •Тема 8. Строки символов
- •Тема 9. Структуры
- •Массивы структур
- •Битовые поля
- •Объединения
- •Перечисления
- •Тема 10. Функции
- •Глобальные, локальные и статические переменные
- •Параметры функции
- •Передача массивов в качестве параметров функции
- •Функция main, ее параметры
- •Функции стандартной библиотеки
- •Функции форматного вывода и ввода printf и scanf
- •Тема 11. Файлы
- •Тема 12. Работа с динамической памятью
- •Тема 13. Динамические структуры данных
- •Очереди
- •Линейные списки
- •Бинарные деревья
- •Практический раздел Общие указания Указания по выбору варианта
- •Порядок оформление итогового отчета
- •Индивидуальные практические работы Индивидуальная практическая работа 1 Методические указания
- •Варианты заданий.
- •Индивидуальная практическая работа 2 Методические указания
- •Варианты заданий
- •Контрольные работы Контрольная работа 1 Методические указания
- •Варианты заданий
- •Контрольная работа 2 Методические указания
- •Варианты заданий
Тема 8. Строки символов
Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ – это символ с кодом, равным нулю, что записывается в виде управляющей последовательности ‘\0’. По положению нуль-символа определяется фактическая длина строки. Строку можно инициализировать строковой константой:
char str[50] = “Vasia”; //первые элементы массива str: ‘V’, ‘a’, ‘s’, ‘i’, ‘a’, ‘\0’
Можно не указывать размерность массива:
char str[ ] = “Vasia”; //выделяется память под 6 элементов: 5 букв и нуль-символ
Возможна инициализация с помощью набора символьных констант:
char str[50] = {‘V’, ‘a’, ‘s’, ‘i’, ‘a’}; // первые элементы: 5 букв и нуль-символ
Если размерность не указывать, то к инициализаторам нужно обязательно добавить нуль-символ:
char str[ ] = {‘V’, ‘a’, ‘s’, ‘i’, ‘a’, ‘\0’}; //выделяется память под 6 элементов
Для ввода данных с клавиатуры в строку символов используются функции gets, scanf, getchar. Для вывода содержимого строки на экран используются функции puts, printf, putchar. Все эти функции описаны в заголовочном файле stdio.h:
#include <stdio.h>
void main()
{
const int N = 50;
char str1[N], str2[N], str3[N], str4[N];
int i;
//ввод: вариант 1
gets(str1); //в str1 вводится строка символов. Окончание ввода – по нажатию //клавиши ВВОД (Enter)
//ввод: вариант 2
scanf("%s", str2); //в str2 вводится строка в которой недопустимы пробельные
//символы. Окончание ввода – по нажатию клавиши ВВОД или клавиши ПРОБЕЛ.
fflush(stdin); //очистка потока ввода stdin
//ввод: вариант 3
scanf("%10c", str3); //в str3 вводится 10 символов (завершение ввода клавишей ВВОД)
str3[10] = ‘\0’; //с помощью операции присваивания добавляется нуль-символ
fflush(stdin); //очистка stdin, если с помощью scanf было введено > 10 символов
//ввод: вариант 4
i = 0;
while(1)
{
str4[i] = getchar();
if (str4[i] == ‘\n’) break;
i++;
}
str4[i] = ‘\0’; //последний введенный символ (‘\n’) заменяется на ‘\0’
// вывод: вариант 1
puts(str1); //вывод str1 и переход на начало новой строки
// вывод: вариант 2
printf("%s\n", str2); //вывод str2 и переход на начало новой строки
// вывод: вариант 3
i = 0;
while(str3[i] != ‘\0’) //можно записать короче: while(str3[i])
{
printf("%c", str3[i]); //можно совместить 2 строки: printf("%c", str3[i++]);
i++;
}
printf("\n");
// вывод: вариант 4
i = 0;
while(str4[i] != ‘\0’) //можно записать короче: while(str4[i])
{
putchar(str4[i]); //можно совместить 2 строки: putchar(str4[i++]);
i++;
}
}
Пример программы копирования одной строки в другую:
#include <stdio.h>
void main()
{
const int N = 50;
char str1[N], str2[N] = “\”Zubilo\” – chempion”;
char *p1 = str1, *p2 = str2;
//вариант 1
int i = 0;
do
str1[i] = str2[i];
while(str1[i++] != ‘\0’); //можно записать короче: while(str1[i++]);
//вариант 2
int i = 0;
while(1);
{
str1[i] = str2[i];
if (str1[i++] == ‘\0’) break; //можно записать короче: if (!str1[i++]) break;
}
//вариант 3
int i = 0;
while((str1[i] = str2[i]) != ‘\0’) //можно записать короче: while(str1[i] = str2[i])
i++;
//вариант 4
while((*p1 = *p2) != ‘\0’)
{
p1++;
p2++;
}
//вариант 5
while((*p1++ = *p2++) != ‘\0’);
//вариант 6
while(*p1++ = *p2++);
//вывод результата копирования на экран
puts(str1); //можно и так: p1 = str1; puts(p1);
}
