![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функции для работы со строкамиСодержание книги Похожие статьи вашей тематики
Поиск на нашем сайте
Ввод строк Прототип функции gets(); gets(char *); Аргументом функции является указатель на строку, читает строку до тех пор, пока не встретит символ ввода ‘\n’. После считывания символа ‘\n’ превращает его в символ конца строки ‘\0’ и добавляет его в конец строки, поэтому в строке необходимо оставить место для символа’\0’. Функция scanf() по формату %s читает до первого пустого символа в строке. char str[10]; scanf(“%s”,str); снег_снег // будет прочитано все снег снег // будет прочитано только слово снег Вывод строк Функция puts(). Аргументом функции является указатель на строку. Функция puts() прекращает работу, когда встречает признак конца строки ‘\0’. char str[10]=”Зима”; puts(str);
Приведем прототипы некоторых, часто используемых, функций для работы со строками. Прототипы этих функций находятся в файле <string.h> unsigned strlen(char *str); // вычисляет длину строки не включая признак конца // строки ’\0’. int strcmp(char *str1, char *str2); Сравнивает строки str1 и str2. Результат отрицательный, если str1 < str2, равен нулю, если str1==str2, и положителен, если str1 > str2. Функция возвращает разницу между кодами ASCII первой пары несовпадающих символов. char * strcpy(char *str1, char *str2); // копирует строку str2 в место памяти, на которое указывает str1; char * strcat(char *srt1, char *str2); // присоединяет строку str2 в конец строки str1; char * strstr(char *str1,const char *str2); // отыскивает первое вхождение строки str2 в строку str1. Порядок выполнения работы 1. Изучить краткие теоретические сведения. 2. Составить блок-схему алгоритма. 3. По разработанной блок-схеме алгоритма написать программу. Память под строки выделять динамически. 4. Отладить и выполнить программу.
Варианты заданий 1. Даны натуральное число n, символы s1,…,sn. Преобразовать последовательность s1,…,sn, удалив каждый символ * и повторив каждый символ, отличный от *. 2. Даны натуральное число n и символы s1,…,sn среди которых есть двоеточие. Получить все символы, расположенные между первым и вторым двоеточием. Если второго двоеточия нет, то получить все символы, расположенные после единственного имеющегося двоеточия. 3. Даны натуральное число n и символы s1,…,sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти длину самого короткого слова.
4. Даны натуральное число n и группы символов s1,…,sn и a1,…,an. Удалить из строки s1,…,sn все символы, которые принадлежат строке a1,…,an. 5. Даны натуральное число n и символы s1,…,sn. Известно, что среди данных символов есть хотя бы один, отличный от пробела. Требуется преобразовать последовательность s1,…,sn следующим образом. Удалить группы пробелов, которыми начинается и которыми заканчивается последовательность, а также заменить каждую внутреннюю группу пробелов одним пробелом. Если указанных групп нет в данной последовательности, то оставить последовательность без изменения. 6. Преобразовать текст, состоящий только из прописных букв, в текст, состоящий из прописных и строчных букв. Первая буква после точки – прописная, остальные – строчные. 7. Даны натуральное число n и символы s1,…,sn. Удалить из каждой группы идущих подряд цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (например, ab+0.1973-1.1 преобразуется в ab+0.10-1.1). 8. Даны натуральное число n и символы s1,…,sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащими пробелов внутри себя, будем называть словами: а) подсчитать количество слов в данной последовательности; б) преобразовать данную последовательность, заменяя всякое вхождение слова str1 длинной n, на слова str2 длинной m. 9. Даны натуральное число n и символы s1,…,sn. Строку s1,…,sn обработать так, чтобы все слова, состоящие только из цифр, были удалены, их сумма стояла последним словом в строке. 10. Даны натуральное число n и символы s1,…,sn. Среди символов этой строки особую роль играет знак #, появление которого означает отмену предыдущего символа строки; k знаков # отменяет k предыдущих символов. Преобразовать строку с учетом роли знака #. Например, строка «VR#Y##HELO#LO» должна быть «HELLO». Результирующую строку вывести на экран.
Лабораторная работа №9 Массивы символьных строк Цель работы: Научиться объявлять и использовать массивы строк и функции для работы со строками. Теоретические сведения Массив символьных строк можно объявить следующим образом: char **str; // массив указателей int n; // количество строк int m; // количество символов в строке
// Выделить память под массив строк printf(“\n Введите количество строк”); scanf(“%d”,&n); str=(char **)calloc(n,sizeof(char *)); // выделить память под массив указателей printf(“\n Введите количество символов в строке”); scanf(“%d”,&m); for(i=0; i<n; i++) str[i]=(char *)calloc(m+1,sizeof(char));//выделить память под строку // инициализировать массив строк printf(“\n Введите %3d строк длинной не более %3d символов”,n,m); for(i=0; i<n; i++) gets(str[i]);
Порядок выполнения работы 1. Изучить краткие теоретические сведения. 2. Составить блок-схему алгоритма. 3. По разработанной блок-схеме алгоритма написать программу. Память под строки выделять динамически. 4. Отладить и выполнить программу. Варианты заданий 1. Дан текст, состоящий из n предложений. Предложение представляет собой арифметическое выражение. Создать массив, включающий в себя идентификаторы из всех предложений. 2. Дан текст. Слова в тексте разделены пробелами и знаками препинания. Получить n наиболее часто встречающихся слов и число их появлений. 3. Дан текст. Строки текста содержат символьную и цифровую информацию. Слова могут состоять только из букв или только из цифр. Выполнить конкатенацию нецифровых слов, причем слова меньше четырех символов удалить. Найти сумму всех чисел в строке и записать ее в конец новой строки. 4. Дан массив строк. Строки являются изображением целых чисел. Рассортировать строки в порядке убывания их числовых значений. 5. Дан массив строк. Выделить слова из строк и записать их в массив. Необходимо рассортировать массив слов по их длинам. 6. Дан текст. Текст состоит из предложений, которые содержат символьную и цифровую информацию. В предложении записана фамилия, имя, отчество и зарплата по месяцам (не более двенадцати). Необходимо: а) рассортировать строки в алфавитном порядке; б) рассортировать строки по возрастанию общей суммы зарплаты. 7. Дан текст. Выделить все слова в предложениях, состоящих только из цифр. Определить сумму чисел во всех предложениях. 8. Дан массив строк. На месте исходного массива создать новый массив, такой, чтобы в конце была расположена четвертая часть первых по алфавиту строк. Последовательность расположения остальных строк в массиве сохранить. 9. Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +, -, *. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков. Выяснить, верно ли что, в данном тексте больше групп букв, чем групп знаков. 10. Дано n1 матриц. Размер матрицы n*m. Каждый элемент матрицы – строка знаков длинной k. Слова в предложении разделены одним или несколькими пробелами. Определить в каждом предложении количество слов, которые справа и слева читаются одинаково и записать их в массив.
Лабораторная работа №10 Функции Цель работы: Научиться создавать и использовать новые функции пользователя
Теоретические сведения Программа на С составляется из одной или более функций, одна из которых main(), она называется головной функцией. Выполнение программы всегда начинается с функции main(). Функция – самостоятельная единица программы, спроектированная для реализации конкретной задачи. Что нам требуется знать о функции? Необходимо знать, как функцию необходимо определить, т.е. написать код функции, как к функции обращаться, т.е. вызвать функцию на выполнение и как устанавливать связи между функцией и программой ее вызывающей. Чтобы установить связь между функцией и программой ее вызывающей, необходимо знать прототип функции. Прототип функции – это объявление функции. Прототип функции имеет следующую форму:
Например: float s_z(int a, int b); Список аргументов может быть пустым, содержать один аргумент или несколько аргументов, разделенных запятыми. Если функция не имеет аргументов, допускается использования ключевого слова void. Если функция не имеет аргументов и она ничего не возвращает, то ее прототип можно записать в следующем виде: void prim(void); Вызов функции Вызов функции осуществляется по ее имени. Для вышеописанной функции s_z(), ее надо вызвать на выполнение так: int a=10, b=20; // объявление и инициализация переменных float rez; rez=s_z(a,b); // вызов функции на выполнение Определение функции В С код, описывающий, что делает функция, называется определением функции. Формально это выглядит так: тип_возв_рез имя_ф(тип имя_n1, тип имя_n2, …) { тело функции } Синтаксически аргументы – это идентификаторы, они могут использоваться внутри тела функции. Иногда параметры в определении функции называют формальными параметрами. Формальные параметры – это то, вместо чего будут подставлены фактические значения, передаваемые функции в момент ее вызова. После вызова функции значение аргумента, соответствующее формальному параметру, используется в теле выполняемой функции. В С такие параметры являются передаваемыми по значению. Когда применяется вызов по значению, переменные передаются функции как аргументы, их значения копируются в соответствующие параметры функции, а сами переменные не изменяются в вызывающем окружении. Инструкция return Инструкция return используется для двух целей. Когда она выполняется, управление программой немедленно передается обратно в вызывающее окружение. Кроме того, если за ключевым словом return следует какое-либо выражение, то его значение также передается в вызывающее окружение. Инструкция return имеет следующие формы записи: return; return выражение; return (выражение); Структура программы, содержащей несколько функций пользователя: #include <stdio.h> void main(void) { объявление прототипов функций объявление переменных ввод данных вызов функций на выполнение } Например: написать функцию, которая вычисляет среднее значение двух целых чисел
#include <stdio.h> void main(void) { float s_z(int a, int b); // прототип функции int a,b; // переменные float rez; // результат printf(“\nВведите два целых числа\n”; scanf(“%d%d”,&a,&b); rez=s_z(a,b); // вызов функции на выполнение printf(“\nСреднее значение равно %3d”,rez); } float s_z(int a, int b) { float r; r=((float)a+b)/2; // или return (((float)a+b)/2); return r; } Порядок выполнения работы 1. Изучить краткие теоретические сведения. 2. Программу разбить на функции. Составить блок-схему алгоритма каждой функции. 3. По разработанной блок-схеме алгоритма написать программу. Память под данные выделять динамически. 4. Отладить и выполнить программу.
Варианты заданий
1. Составить функцию, позволяющую определить позицию первого вхождения в заданную строку какого-либо символа из второй заданной строки. Результатом работы функции должна быть -1, если первая строка не содержит ни одного символа, принадлежащего и второй строке. 2. В головной функции ввести текст. В первой функции подсчитать количество слов в тексте. Во второй – подсчитать количество слов, у которых первый и последний символы совпадают. 3. Дан текст. Слова в предложениях разделены одним или несколькими пробелами. В головной функции ввести текст. Во второй функции определить в каждом предложении количество слов, которые слева и справа читаются одинаково. 4. Дан текст, состоящих из n предложений. Слова в предложениях разделены одним или несколькими пробелами. В головной функции ввести текст. Во второй функции записать без повторения в новый массив слова, встречающиеся в тексте более одного раза. 5. Даны действительная матрица размером n*(n+1), действительные числа a1,…an+1, b1,…bn+1, натуральные числа p, q (p<=n, q<=n+1). Образовать новую матрицу размером (n+1)*(n+2) вставкой после строки с номером p данной матрицы новой строки с элементами a1,…an+1, и последующей вставкой после столбца с номером q нового столбца с элементами b1,…bn+1. Память под массивы отводить динамически. Программу разбить на функции. 6. Дана действительная квадратная матрица порядка n. Построить последовательность действительных чисел a1,…an по правилу: если в i-ой строке матрицы элемент, принадлежащий главной диагонали, отрицателен, то ai равно сумме элементов i-ой строки, предшествующих первому отрицательному элементу, иначе ai равно сумме последних элементов i-ой строки, начиная по порядку неотрицательного элемента. Память под массивы отводить динамически. Программу разбить на функции. 7. Даны две квадратные матрицы порядка n. Получить новую матрицу: а) умножением элементов каждой строки первой матрицы на наибольшее из значений элементов соответствующей строки второй матрицы; б) прибавлением к элементам каждого столбца новой матрицы, произведения элементов соответствующих строк второй матрицы. Память под матрицы отводить динамически. Программу разбить на функции. 8. Назовем допустимым преобразованием матрицы перестановку двух строк и двух столбцов. Дана действительная квадратная матрица порядка n. С помощью допустимых преобразований добиться того, чтобы один из элементов матрицы, обладающий наименьшим значением, располагался в левом нижнем углу матрицы. Память под матрицу выделять динамически. Программу разбить на функции.
9. Обработать n1 матриц. Размеры матрицы n*m. Элементы матрицы – строка символов. В строке есть слово, состоящее только из цифр. Найти это слово, преобразовать в число и сохранить в массиве. Полученный массив вывести на экран. Ввод матриц, поиск слова, преобразование слова в число реализовывать в отдельных функциях. Память под матрицы отводить динамически. 10. В головном модуле объявить n матриц. Элементами матрицы являются строки знаков. Все строки и столбцы матрицы, в которых хотя бы один из ее элементов совпадают со строкой введенной из клавиатуры, удалить. Полученную матрицу уплотнить. Память под матрицы выделять динамически. Программу разбить на функции.
Лабораторная работа №11
|
|||||||||
Последнее изменение этой страницы: 2016-08-10; просмотров: 1202; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.198.56 (0.011 с.) |