Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функции для работы со строками↑ ⇐ ПредыдущаяСтр 7 из 7 Содержание книги Похожие статьи вашей тематики
Поиск на нашем сайте
Ввод строк Прототип функции 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; просмотров: 1190; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.161.6 (0.009 с.) |