Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по программированию на языке СС++. Учебно-методическое пособие

.pdf
Скачиваний:
2
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
9 Массив D [30] целых
элементов задать датчиком случайных чисел.
Найти минимальный и максимальный элемент, среди четных элементов массива D и поменять их местами.
10
Массив B [30] целых элементов задать датчиком случайных чисел.
Переписать подряд в массив А те элементы массива В, для которых справедливо: Bi>
2/)(
11
iiBB
.Вычислить сумму элементов массива А и количество элементов, удовлетворяющих условию 1< Аi< 5.
11
Массив А[15] сформировать по правилу
1
)1(
sin
1
1
2
i
i
i
i
A
i
Найти минимальный элемент и сумму отрицательных элементов. Заменив в массиве А минимальный элемент найденной суммой.
12
Массив А[22] нецелых элементов задать датчиком случайных чисел.
Записать в массив Х номера тех элементов массива А, для которых справедливо А
i -1
< Аi<
А
i +1
. Вычислить среднее арифметическое
элементов массива А.
13
Массив B[20] сформировать по
правилу
||
2
aib
i
a=25.8
Найти сумму элементов с номерами с 5-го по 10-ый, упорядочить эти элементы по убыванию
и найти произведение элементов Bi< 8.5
14
y=cos (nx + e) 1<= n<= 30 e =0.5
x вводить с клавиатуры.
Записать в массив А те значения n, при которых у<0, в массив В записать те значения n, при которых у>0.
15
Массив Х[20] нецелых элементов вводят с клавиатуры.
Вычислить сумму и количество элементов, удовлетворяющих условию -3<=Xi<=7 и заменить в массиве Х элементы Xi<2 на 0.
16
Массив A[40] cформировать по
правилу
i
i
a
i
cos
Найти максимальный элемент и заменить его суммой элементов, предшествующих ему. Найти минимальный элемент и заменить его суммой элементов, стоящих после него.
17
Массив Y[25] cформировать по
Переписать в массив Х элементы массива Y в обратном порядке и найти среднее арифметическое максимального и
51
правилу
2
1
41 n
x
y
n
n
X=2.3
минимального элемента в массиве Y.
18
Массив Z[15] cформировать по
правилу
i
x
z
i
i
2
2
x=1.2
Найти сумму элементов с нечетными номерами и минимальный элемент среди элементов с четными номерами.
19
Массив Х [40] cформировать по
правилу
8 aix
i
a=pi/6
Найти минимальный элемент среди элементов, удовлетворяющих условию 2<=Xi<=4 и заменить его произведением элементов, предшествующих ему.
20
Массив Y[25] cформировать по правилу
)12)(12(
2cos
ii
ix
y
i
x вводить с клавиатуры.
Определить количество элементов у i<1.2 среди элементов с нечетными номерами и сумму элементов с четными порядковыми номерами.
21
Массив Z[20] cформировать по
правилу
i
x
z
i
i
2
2
x=1.2
Определить сумму первых восьми элементов и количеств элементов, удовлетворяющих условию zi>3.6
22
Массив B [20] целых элементов задать датчиком случайных чисел..
Переписать в массив Х нечетные элементы массива В, уменьшенные на 2.5 и найти сумму элементов массива В.
23
Массив А[30] нецелых элементов задать датчиком случайных чисел.
Вычислить сумму тех элементов, для которых справедливо i+1<Ai<i+2 и произведение отрицательных.
24
Массив С[20] целых элементов вводят с клавиатуры.
Определить количество элементов кратных 5 и количество элементов, кратных 7 и сумму этих элементов.
25
Массив Х[30] нецелых элементов задать датчиком случайных чисел.
Переписать в массив Y подряд элементы массива Х ,удовлетворяющие условию 1.5<
i
x
<
5 и найти их среднее арифметическое.
52
26
Массив С[15] нецелых элементов вводят с клавиатуры.
Определить минимальный элемент массива С и его порядковый номер. Заменить минимальный элемент на 0.
27
Массив Х [16] целых элементов вводят с клавиатуры.
Переписать подряд в массив Y положительные элементы массива Х и массив Z­отрицательные элементы массива Х и определить, сколько в массиве Y четных элементов.
28
Массив А[30] нецелых элементов задать датчиком случайных чисел.
Определить среднее арифметическое элементов массива и подсчитать, сколько элементов находится в пределах от -2.8 до 3.8.
29
Массив Z [30] нецелых элементов задать датчиком случайных чисел.
Расположить в массиве R сначала положительные, а затем отрицательные элементы массива Z.
Содержание отчета
1.Номер и тема лабораторной работы.
2.Вариант задания.
3.Результаты подготовки:
- схема алгоритма обработки элементов массива,
- программа на заданном алгоритмическом языке.
4.Итоги работы:
- результаты расчета с текстовыми комментариями.
Показать отчет преподавателю.
Контрольные вопросы
1.Какие ограничения накладываются на индексы элементов массивов?
2.Способы описания массивов на языке Си. Понятия размерности массивов, описание размерности массивов.
3.Задание типов элементов массива. Могут ли элементы массива иметь разный тип?
4.Как располагаются элементы массива в памяти?
5.Чем отличаются алгоритмы поиска максимального и минимального элемента массива.
6.Что является общим во всех алгоритмах формирования и обработки массивов?
53
7. Чем отличаются алгоритмы расчета суммы и подсчета числа элементов массива.
Лабораторная работа №7.
ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ
Цель работы: Приобрести навыки разработки программ для обработки
символьной информации.
Подготовка к лабораторной работе
1. Подготовить текст исходного предложения в соответствии с вариантом
задачи, указанным в таблице (предложение должно заканчиваться точкой, разделитель слов в предложении - пробел).
2. Составить программу обработки предложения согласно варианту задания
и выполнить ее на ПК
Работа со строками
В языке Си символьная строка-это одномерный массив типа char, заканчивающийся нулевым байтом. Для нулевого байта определена специальная символьная константа \0. Это необходимо учитывать при описании соответствующего символьного массива. То есть, если строка должна содержать N символов, то в описании массива необходимо указать N+1 элемент. Например, описание int str[12], предполагает, что строка содержит 11 символов, а последний байт зарезервирован под \0.
Строковая константа - это последовательность литер, заключенных в двойные кавычки. Например, "Изучаем программирование". В конец строковой константы не надо ставить символ \0. Это сделает сам
компилятор, и строка “Изучаем программирование”в памяти будет выглядеть так:
И з у ч а е м п р о г р…. \0
Есть два простых способа ввести строку с клавиатуры. Первый способ воспользоваться функцией scanf()с форматом ввода %s. Надо
помнить, что функция scanf() вводит символы до первого пробельного символа.
54
Второй способ воспользоваться функцией gets(), объявленной в файле stdio.h. Функция gets() позволяет вводить строки, содержащие пробелы. Ввод заканчивается нажатием клавиши Enter. Обе функции автоматически добавляют в конце строки нулевой байт. В качестве параметра в этих функциях
используется имя массива.
Вывод строк производится с помощью функций printf() и puts(). Обе функции выводят содержимое массива до первого нулевого байта. Функция puts() добавляет в конце выводимой строки символ перехода на новую строку экрана. В функции printf() переход на новую строку нужно предусматривать в строке формата самим. Рассмотрим пример:
Ввод строки с клавиатуры и вывод ее на экран
# include <stdio.h> int main(void) { charstr[80]; printf("Введите строку длиной не более 80 символов"); gets(str); printf(" Выввелистроку %s\n",str); printf("Введите еще одну строку "); scanf("%s",str); printf(" Выввелистроку "); puts(str); }
Для работы со строками существует специальная библиотека, заголовочный файл которой называется string.h. Перечислим некоторые функции этой библиотеки.
strcmp(str1,str2) – сравнивает две строки str1 и str2 и возвращает 0, если они одинаковы; результат отрицателен, если str1<str2 и положителен, если str1>str2.
strncmp(str1, str2, kol) – сравниваются части строк str1 и str2 из kol символов. Результат равен 0, если они одинаковы.
Сравнение двух строк выполняется последовательно слева неправо с учетом кодировки символов. Например, сравнивая стоки st1 и st2
char st1[10]="Пример"; char st2[10]="ПPимер"; int a; if (strcmp(st1,st2)>0) a=1; else a=2;
55
переменной а будет присвоено значение 1, так как сравниваемые строки не одинаковы, а код символа 'р' больше кода символа 'Р'.
strcat(str1,str2) - сцепление строк в порядке их перечисления. strncat(str1,str2,kol) – приписывает kol символов строки str2 к строке str1.
Функция служит для объединения двух строк в одну. Например, в результате выполнения операторов:
char fam[] = "Андреева С.В. "; char pr[7]= " "; //7 пробелов strcat(fam ,pr); printf(“|%20s|”, fam);
на экран выведется строка: |Андреева С.В. | Заметим, что строка вывода занимает поле в 20 позиций, а переменная fam
располагается в левой части поля. strlen(str) – определяет длину строки str.
Пример. Определить длину строки
char fam[] = "Андреева С.В."; printf("%d",strlen(fam));
функция strlen() вернёт значение равное 13 (символов).
strcpy(str1,str2) – копирует строку str2 в строку str1. strncpy(str1, str2, kol) – копирует kol символов строки str2 в строку str1.
Пример. Скопировать фамилию сотрудника в переменную fam и вывести на экран.
#include "stdafx.h" #include<string.h> int main() { char fam[15]; char *str = " АндрееваС.В."; strcpy(fam, str); printf("|%s|\n", fam); return 0; }
В результате выполнения данных операторов на экран будет выведена строка: |Андреева С.В.|
56
strchr(st, ch) - функция поиска адреса символа ch в строке st. Результатом выполнения поиска является адрес найденного символа в строке st, иначе возвращается нулевой адрес. Чтобы вычислить порядковый номер символа ch в строке, можно из адреса P вычесть адрес начала строки.
Пример. В заданной фамилии определить порядковый номер символа ‘n’.
#include "stdafx.h" #include<string.h> int main() { char fam[] = "Ivanov"; char a='n'; char *p; p=strchr(fam,a); if(p) printf("|%s|%d\n", fam, p-fam); else printf("нет такого символа в фамилии!\n"); return 0; }
Пример программы для задачи с текстовыми данными
Исходным текстом является предложение, заканчивающееся точкой. Слова в предложении отделяются друг от друга одним пробелом. Определить самое длинное слово в предложении.
#include "stdafx.h" #include<string.h> intmain() { charslovo[12],x[120] //описание массивов для текстов inti,m=0,n,k=0; gets(x); // ввод текста в массив х for(i=0; i<strlen(x); i++) //цикл до конца строки х if(x[i]!=' ') k++; // считаем символы не пробелы else { if (k>m){ m=k;n=i;} //поиск мах значения счетчика k k=0; }
k=0; //выбор из строки х самого длинного слова for(i=n-m;i<n;i++) slovo[k++]=x[i]; slovo[k]=0;
57
printf("%s \n",slovo); //вывод найденного слова
Вариант
Условие задачи
1
Из заданного предложения, начиная с первой встретившейся буквы 'а', переписать в новый массив все символы до первой встретившейся буквы ' к'.
2
В исходном предложении удалить все символы пробела, создав из оставшихся символов новый массив. Вывести преобразованный текст и количество удаленных пробелов.
3
Определить, сколько раз в заданном предложении встречается сочетание двух первых символов.
4
В качестве исходного предложения задать арифметическое выражение, записанное на языке С. Проверить, соблюдается ли баланс открывающихся и закрывающихся скобок. Если равенство соблюдается, то вывести соответствующее сообщение, в противном случае вывести количество открывающихся и закрывающихся скобок.
5 Создать новое предложение из гласных букв исходного.
printf("%s\n",x); //вывод строки printf("%d d\n",strlen(slovo),strlen(x));/*вывод их длин
*/ return 0;}
Порядок выполнения работы.
1. Получить допуск к работе у преподавателя(показать домашние
заготовки).
2. Загрузить среду Visual Studio.
3. Ввести текст программы.
4. Провести отладку программы.
5. Выполнить программу, провести анализ результатов и убедившись в
правильности решения, предъявить их преподавателю для проверки.
6. Занести результаты расчета в отчет.
7. Выйти из среды.
Варианты заданий:
Таблица 5
58
6
В заданном предложении найти слово, в котором максимальное количество буквы 'а'. Вывести сколько раз буква 'а' встречается в этом слове.
7
Сформировать числовой массив N, элементы которого указывают длину каждого слова в исходном предложении.
8
Сформировав новый массив В из исходного предложения, поставив перед каждым словом знак '?’,
9
Составить новое предложение, содержащее первые буквы каждого слова исходного предложения.
10
В каждом слове заданного предложения поменять местами первую букву и последнюю.
11
Указать, сколько раз первый символ первого слова встречается в заданном предложении.
12
В заданном предложении найти самое короткое слово.
13
В заданном предложении заменить все запятые на «!», не создавая нового массива. Вывести преобразованный текст, а также количество удаленных запятых.
14
В заданном предложении заменить все строчные латинские буквы прописными.
15
Определить, есть ли в заданном предложении цифры, посчитать сколько их.
16
Создать новое предложение из исходного, поставив в новом предложении в конце каждого слова точку и каждое слово записать с большой буквы.
17
Собрать новое предложение из последних символов слов исходного текста.
18
В заданном предложении поменять местами последнюю букву предыдущего слова с первой буквой следующего слова.
19
Сформировать числовой массив N, элементы которого указывают количество гласных букв в каждом слове исходного предложения.
20
Сформировать числовой массив N, элементы которого указывают количество букв ‘o’в каждом слове исходного предложения.
Содержание отчета
59
1. Номер и тема лабораторной работы.
2. Вариант задания.
3. Результаты подготовки:
- схема алгоритма обработки предложения,
- программа на заданном алгоритмическом языке.
4. Итоги работы программы:
- результаты расчета с текстовыми комментариями.
Показать отчет преподавателю.
Контрольные вопросы
1. Описание символьных данных и строк на языке Си.
2. Встроенные функции языка Си, используемые для обработки строк.
3. Кодирование символьной информации.
Лабораторная работа № 8.
ОБРАБОТКА СТРУКТУР
Цель работы: Получить навыки использования алгоритмов обработки
структурированных типов данных.
Подготовка к лабораторной работе:
1. Повторить следующие вопросы:
правила сравнения арифметических и символьных переменных; алгоритмы упорядочивания данных по возрастанию и
убыванию;
описание структур; оператор присоединения.
2. В соответствии с индивидуальным заданием составить схему алгоритма
и программу на языке Си.
Структуры
Структуры являются развитием понятия массив. Массивы представляют собой объединения однотипных переменных. Однако зачастую логика программы требует объединения разнотипных переменных. Можно
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]