Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции для работы со строками

Поиск

 

Ввод строк

Прототип функции 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 с.)