
- •1. Лабораторная работа №1
- •1.1. Методическая часть Оператор if
- •Конструкция if-else
- •If (условное выражение)
- •Множественный выбор
- •If (условное выражение)
- •Множественный выбор - оператор switch
- •Операторы цикла
- •1.2. Порядок выполнения работы.
- •1.3. Варианты заданий
- •1.4. Контрольные вопросы
- •2.1. Методическая часть Функции. Аргументы функции.
- •2.2. Порядок выполнения работы.
- •2.3. Варианты заданий
- •2.4. Контрольные вопросы
- •3.1. Методическая часть Массивы как аргументы функции
- •Функции и многомерные массивы
- •3.2. Порядок выполнения работы.
- •3.3. Варианты заданий
- •3.4. Контрольные вопросы
- •4.1. Методическая часть Символьные строки
- •Строковые константы
- •Массивы типа char и их инициализация
- •Явное задание размера памяти
- •Массивы символьных строк
- •Указатели и строки
- •Ввод строк
- •Функция gets()
- •Функция scanf()
- •Функция puts()
- •Функции, работающие со строками Функция strcat() - string catenation
- •Функция strcmp() - string comparison
- •Функция strcmpi()
- •Функция strncmp()
- •Функция strcpy()
- •Функция strncpy()
- •Пример реальной программы сортировки строк
- •4.2. Порядок выполнения работы.
- •4.3. Варианты заданий
- •4.4. Контрольные вопросы
Функция gets()
Эта функция удобна для диалоговых систем. Функция gets() обеспечивает ввод строки со стандартного устройства ввода, которым обычно является клавиатура. Она читает символы до тех пор, пока не будет введен символ новой строки ('\n'), который создается в результате нажатия клавиши "ВВОД". Функция берет все символы до символа новой строки, присоединяет к ним нуль-символ и передает вызывающей программе.
main()
{ char name[81]; /*выделение памяти*/
printf("ВВедите имя \n");
gets(name);
printf("Ваше имя - %s\n", name);
}
В качестве аргумента функция gets() использует указатель на массив. Функция примет любое имя, включая пробелы, длиной до 80 символов + нуль-символ.
Функция scanf()
Основное различие между scanf() u gets() заключается в том, как они определяют, что достигли конца строки. Функция scanf() предназначена скорее для получения слова, а не строки. Она имеет два варианта, для любого из которых строка начинается с первого встретившегося непустого символа. Если используется формат %s, строка продолжается до следующего пустого символа (пробел, табуляция, новая строка). Если размер поля определен как %10s, то функция scanf() считает 10 символов или менее 10 символов, если ранее будет встречен пустой символ.
Функция scanf() возвращает целое значение, равное числу считанных символов, если ввод прошел успешно, или символ EOF, если он встретился при вводе. Вот пример использования этой функции:
main()
{ static char name1[40], name2[7];
int count;
printf("Введите два имени\n");
count=scanf("%s %7s", name1,name2);
printf(" Введено имен %d. Первое имя %s, второе имя %s\n", соunt,name1,name2);
}
Если ввести два имени Иван и Владислав, то программа выдаст:
Введено имен 2. Первое Иван, второе Владисл.
Функция puts()
Функция имеет один аргумент, являющийся указателем строки.
#include <stdio.h>
#define DEF " Строка"
main()
{ static char str1[]="Массив инициализирован";
static char *str2="Указатель массива инициализирован";
puts("Аргумент функции puts().");
puts(DEF);
puts(str1);
puts(str2);
puts(&str1[4]);
puts(str2+4);
}
РЕЗУЛЬТАТ: Аргумент функции puts().
Строка
Массив инициализирован
Указатель массива инициализирован
ив инициализирован
атель массива инициализирован
Фразы в кавычках и имена символьных массивов являются указателями.
Указатель &str1[4] ссылается на 5 элемент массива. Этот элемент содержит символ 'и' и функция puts() использует его в качестве начальной точки. Аналогично str2+4 ссылается на ячейку памяти, содержащую символ 'а' в указателе и с нее начинается вывод строки.
Если функция puts() встречает завершающий символ \0, она заменяет его символом новая строка. Поэтому каждая фраза нашей программы начинается с новой строки.
Функции, работающие со строками Функция strcat() - string catenation
Данная функция служит для объединения двух строк. Ее работу иллюстрирует пример:
#include <stdio.h>
#include <string.h>
#define SIZE 80
main()
{ static char student[]=" Я студент";
static char vuz[10];
printf("В каком ВУЗе вы учитесь?\n");
gets(vuz);
strcat(student,vuz);
puts(student);
}
Копия второй строки присоединяется к концу первой и это объединение становится новой первой строкой. Вторая строка не изменяется.
В каком ВУЗе вы учитесь?
МАТИ.
Я студент МАТИ.
При использовании этой функции следует помнить, что она не проверяет, умещается ли вторая строка в первом массиве. Если вы ошиблись при выделении памяти, то при работе программы могут возникнуть проблемы. Избежать этого можно в частности, если вставить проверочное условие.
gets(vuz);
if(strlen(student)+strlen(vuz)+1)< SIZE
strcat(student,vuz);
puts(student);