Основы программирования на языке Си

Nbsp; Основы программирования на языке Си Методические указания к лабораторным работам     Министерство образования и науки Российской Федерации Балтийский государственный технический университет «Военмех» Институт систем управления и управляющих систем Кафедра информационных систем и компьютерных технологий ОсновыпрограммированиянаязыкеСи Методические указания к лабораторным работам Санкт-Петербург 2006 Составители: О.В. Арипова; О.А. Бузюкина   УДК 004.438 (075.8)   Основы программирования на языке Си: Методические указания к лабораторным работам / Сост.: О.В. Арипова, О.А. Бузюкина; Балт. гос. техн. ун-т. – СПб., 2006. – 58 с. Методические указания содержат восемь лабораторных работ, предназначенных для выполнения на компьютере. Лабораторные работы расположены в порядке возрастающей сложности. В каждой работе представлено 26 вариантов индивидуальных заданий. Предназначены для использования в лабораторных работах по курсам «Основы программирования» и «Информатика» для студентов, изучающих язык программирования Си. Рецензент – канд. техн. наук, проф. Н.Н. Смирнова Утверждено редакционно-издательским советом университета ã Составители, 2005 ã БГТУ, 2005 Предисловие При изучении курса «Основы программирования» студенты выполняют лабораторные работы, варианты которых приведены в данных методических указаниях. Каждая лабораторная работа соответствует темам лекций и содержит в себе 26 вариантов индивидуальных заданий, включающих две-три задачи, предназначенные для решения студентами. Варианты, помеченные звездочкой, содержат задачи повышенной сложности, которые могут быть рекомендованы студентам, увлекающимся программированием, а также студентам, чей уровень подготовки выше, чем у основной части группы. Варианты заданий выдаются студентам заранее с тем, чтобы они имели возможность подготовиться к выполнению лабораторной работы: просмотреть теоретический материал по теме работы и продумать алгоритмы решения задач. Каждую программу в работающем виде (после отладки и тестирования) студент должен показать преподавателю, после чего лабораторная работа подлежит защите. К защите работы студент обязан подготовить отчет, включающий в себя, как правило, титульный лист, формулировку задания, алгоритм решения задачи, листинг программы и результаты тестирования. Пример оформления отчета приведен в приложении. Защита лабораторной работы состоит из двух частей: практической и теоретической. В практической части студент должен объяснить принципы работы одной из представленных им программ, в теоретической – ответить на вопросы по теме лабораторной работы. При подготовке к защите студенту рекомендуется ответить на контрольные вопросы.   Лабораторная работа № 1. Структура программы, ввод/вывод Цель работы– изучить структуру программы, научиться использовать переменные различных типов, освоить функции форматного ввода и вывода, арифметические операции и операции присваивания. Постановка задачи Набрать текст программы, представленный листингом. Проанализировать значения переменных после каждой операции присваивания. Проверить порядок выполнения операций в одном из выражений, содержащих несколько операций присваивания, разделив этот оператор-выражение на несколько операторов, выполняемых последовательно. В функциях ввода и вывода изменить спецификаторы типов, проанализировать полученные результаты. Написать программу для вычисления следующих выражений: a=5, c=5 a=a+b-2 c=c+1, d=c-a+d a=a*c, c=c-1 a=a/10, c=c/2, b=b-1, d=d*(c+b+a) Выражения, записанные в одной строке, записывать одним оператором-выражением. Переменные c и d объявить как целые, переменные a и b – как вещественные. Значения переменных b и d вводить с клавиатуры. После вычисления каждого выражения выводить на экран значения всех переменных. Листинг #include <stdio.h> int main (void) { int a, b = 5, c; float x, y = -.5, z; printf("a="); scanf("%d", &a); x = c = a; printf("a=%d, c=%d, x=%f\n",a,c,x); a += b; printf("a=%d\n", a); x += b+a; printf("x=%f\n", x); b += a--; printf("b=%d\n", b); x -= ++c; printf("x=%f\n",x); c = a/b; printf("c=%4d\n",c); c = a%b; printf("c=%d\n",c); x = 5.3; y += ((--x-1)/x++); printf(" x = %f\ty = %.2f\n\n x = %.0f\ty = %.0f\n ", x - 1, y, x, y - 1); z = a/2; printf(" z = %f\n", z); z = (float) a/2; printf(" z = %f\n", z); y = x/2; printf(" y = %f\n", y); y = (int)x/2; printf(" y = %f\n", y); z = a%2 - (x+b)/c + (x-y)/(a-1) + 1/4*a - y++ + ++b/3.; printf(" a = %d b = %d c = %d x = %f y = %f z = %f\n", a, b, c, x, y, z); return 0; }   Контрольные вопросы   Какова структура программы на языке Си? Структуру программы на языке Си можно определить следующим образом: директивы_препроцессора

Int main (void)

{

       определения_объектов;

       исполняемые_операторы;

}

-----------------------------------------------

Зачем нужна директива #include?
Директива #include <…> предназначена для включения в текст программы текста файла из каталога заголовочных файлов, поставляемых вместе со стандартными библиотеками компилятора.

 

Что такое main()?
В программе всегда должна присутствовать функция с именем main. Именно эта функция является главной функцией программы, без которой программа не может быть выполнена. Имя этой функции для всех программ одинаково и не может выбираться произвольно.

 

1. Перечислите скалярные типы данных языка Си.


2. Что определяет тип данного?

3. Что такое void?

4. Что такое явное и неявное приведение типов? Как и когда оно используется?

5. Что такое константа? Найдите константы в набранных вами программах.

6. Что такое переменная?

7. Как проинициализировать переменную?

8. Чем отличается оператор от операции?

9. Чем отличаются унарные операции от бинарных?

10. Какие операции относятся к арифметическим? Каков приоритет каждой из них?

11. Каков порядок выполнения операций в случае их одинакового приоритета?

12. Как выполняется операция деления в случае целочисленных операндов и в случае, когда хотя бы один из операндов вещественный?

13. Что такое выражение?

14. Какое значение вычисляет операция присваивания?

15. В каком порядке выполняются присваивания в случае, если в выражении их несколько?

16. Как и зачем используются дополнительные операции присваивания?

17. Чем отличается префиксная форма операции инкремента или декремента от постфиксной?

18. Какие функции используются для ввода информации? Назовите их отличительные особенности.

19. Какие функции используются для вывода информации? Назовите их отличительные особенности.

20. Почему функции scanf() и printf() называются функциями форматного ввода и вывода? Как они работают?

21. Чем отличается управляющая строка функции scanf() от управляющей строки функции printf()?

22. Что такое спецификатор типа? Зачем он нужен?

23. Какие параметры указываются функции scanf() после управляющей строки? Сколько их должно быть?

24. Каковы последствия несоответствия типа считываемой переменной спецификатору типа?

25. Какие параметры указываются функции printf() после управляющей строки? Сколько их должно быть?

26. Каковы последствия несоответствия типа выводимого значения спецификатору типа?

27. Что такое управляющие символы? Зачем они нужны? Приведите примеры.

 

Лабораторная работа № 2.
Программирование ветвлений

Цель работы – познакомиться с функциями из математической библиотеки, освоить операции отношения, логические операции и условную операцию, изучить работу условного оператора.

Постановка задачи

Написать три программы согласно индивидуальному варианту. В первой программе вычислить значение функции по указанной формуле, использовать функции математической библиотеки. Во второй программе вычислить значение функции, используя условную операцию «?:». В третьей программе использовать условный оператор if.

Варианты заданий

Вариант 1

1. 2.

3. Вывести на экран номер четверти, которой принадлежит точка с координатами (x,y), или указать, какой оси принадлежит эта точка.

Вариант 2

1. 2.

3. Даны 3 целых числа, найти среднее из них. Средним назовем число, которое больше наименьшего и меньше наибольшего.

Вариант 3

1. 2.

3. Найти произведение двух наибольших из трех введенных с клавиатуры чисел.

Вариант 4

1. 2.

3. Определить вид треугольника (прямоугольный, остроугольный или тупоугольный) для 3 значений отрезков.

Вариант 5

1. 2.

3. Определить, могут ли три точки с координатами (x1, y1), (x2, y2), (x3, y3) являться вершинами треугольника.

Вариант 6

1. 2.

3. Вывести на экран номер четверти, которой принадлежит точка с координатами (x,y), или указать, какой оси принадлежит эта точка.

Вариант 7

1. 2.

3. Пусть d1, m1, y1 – день, месяц и год рождения Васи, а d2, m2, y2 – день, месяц и год рождения Ромы. Определить, кто из них старше.

Вариант 8

1. 2.

3. Даны 3 целых числа, найти среднее из них. Средним назовем число, которое больше наименьшего и меньше наибольшего.

Вариант 9

1. 2.

3. Найти произведение двух наибольших из трех введенных с клавиатуры чисел.

Вариант 10

1. 2.

3. Определить вид треугольника (прямоугольный, остроугольный или тупоугольный) для 3 значений отрезков.

Вариант 11

1. 2.

3. Определить, могут ли три точки с координатами (x1, y1), (x2, y2), (x3, y3) являться вершинами треугольника.

Вариант 12

1. 2.

3. Определить, площадь какой фигуры больше: круга радиуса R, равностороннего треугольника с длиной стороны а или квадрата со стороной d.

Вариант 13

1. 2.

3. Даны 3 числа. Определить отношение меньшего из них к большему.

Вариант 14  

1. 2.

3. Определить, лежат ли три точки с координатами (x1, y1), (x2, y2), (x3, y3) на одной прямой.

Вариант 15  

1. 2.

3. Три точки с координатами (x1, y1), (x2, y2), (x3, y3) являются концами трех отрезков. Определить длину большего из них.

Вариант 16  

1. 2.

3. Определить, лежат ли две точки с координатами (x1, y1) и (x2, y2) в одной четверти.

Вариант 17  

1. 2.

3. Даны три целых числа: K, M и N. Определить, есть ли среди заданных чисел хотя бы два четных.

Вариант 18  

1. 2.

3. Определить, периметр какой фигуры больше: круга площадью К, равностороннего треугольника высотой Н или квадрата с длиной диагонали D.

Вариант 19  

1. 2.

3. Даны четыре числа: a, b, c и d. Определить, есть ли среди них одинаковые по модулю.

Вариант 20  

1. 2.

3. Определить, входит ли цифра 5 в десятичную запись натурального трехзначного числа К.

Вариант 21  

1. 2.

3. Определить, может ли кирпич, имеющий форму прямоугольного параллелепипеда с ребрами a, b, c, пройти через квадратное отверстие со стороной d, и если да, то какой стороной.

Вариант 22  

1. 2.

3. Точки с координатами (x1, y1) и (x2, y2) являются центрами кругов радиусов r1 и r2 соответственно. Определить, есть ли у этих кругов общие точки.

Вариант 23  

1. Z= 2.

3. На шахматной доске стоят черный король и белые ладья и слон (ладья бьет по горизонтали и вертикали, слон - по диагоналям). Проверить, есть ли угроза королю и если есть, то от кого именно. Учесть возможность защиты (например, ладья не бьет через слона).

Вариант 24  

1. 2.

3. На шахматной доске стоят три ферзя (ферзь бьет по вертикали, горизонтали и диагоналям). Найти те пары из них, которые угрожают друг другу.

Вариант 25  

1. Z= 2.

3. В шашечном эндшпиле остались белая дамка и две черных пешки, позиции которых известны. Ход белых. Сможет ли дамка срубить хотя бы одну пешку?

Вариант 26  

1. G= 2.

3. Точки с координатами (x1, y1) и (x2, y2) являются концами отрезка. Определить, пересекает ли данный отрезок график функции
F(x)=x2-sinx.

Контрольные вопросы

1. Чем отличается условная операция от условного оператора?

2. Что такое полная и неполная форма условного оператора?

3. Может ли существовать неполная форма условной операции?

4. Нужно ли писать "else", если при выполнении условия выполняется оператор return?

5. Выражения какого типа могут определять условия в условном операторе или условной операции?

6. Какие значения выражения, определяющего условие, считаются истинными, а какие ложными?

7. Какие операции относятся к операциям отношения?

8. Чем отличается операция "= =" от операции "="?

9. Какие операции относятся к логическим? Каков их приоритет?

10. Какой операцией можно заменить операцию "&&" ?

11. Какой операцией можно заменить операцию "||" ?

12. Чему может быть равно значение выражения отношения или логического выражения?

13. Как правильно сравнить на равенство вещественные числа?

14. Как правильно проверить вхождение значения в некоторый диапазон?

15. Как проверить некоторое целочисленное значение на равенство нулю?

16. Как проверить отличие целочисленного значения от нуля?

17. Когда применяется вложение условных операторов?

18. Как правильно записать вложенные условные операторы?

19. Что такое оператор выбора? Как им пользоваться?

20. Как записать оператор выбора с помощью вложенных условных операторов?

 

Лабораторная работа № 3.
Программирование циклов

Цель работы – научиться программировать циклические алгоритмы с помощью операторов for, while и dowhile.

Постановка задачи

Написать три программы согласно индивидуальному варианту. В первой программе смоделировать арифметический цикл с помощью оператора цикла for. Во второй программе использовать циклы while или dowhile. В третьей программе вычислить бесконечную сумму с заданной точностью, используя рекуррентные зависимости.

Варианты заданий

Вариант 1

1. Составить программу для определения наименьшего среди чисел , (k=1, 2, …, n).

2. M и N – числитель и знаменатель обыкновенной дроби. Составить программу, позволяющую сократить эту дробь.

3. , e=10-5,

Вариант 2

1. Дано натуральное n. Вычислить n сомножителей произведения .

2. Представить натуральное число N в виде произведения простых сомножителей.

3. , e=0.5*10-5,

Вариант 3

1. Определить количество натуральных трехзначных чисел, сумма цифр которых равна заданному числу N.

2. Дано натуральное число N. Составить программу для сравнения цифр старшего и младшего разрядов этого числа.

3. , e=10-4,

Вариант 4

1. Среди двузначных чисел найти те, сумма квадратов цифр которых делится на 13.

2. Дано натуральное число N. Составить программу для определения количества цифр в этом числе.

3. , e=10-5,

Вариант 5

1. Составить программу поиска двузначных чисел таких, что если к сумме цифр этого числа прибавить квадрат этой суммы, то получится это число.

2. Пусть A и B - положительные вещественные числа, большие 1, причем A>B. Составить программу для поиска такого наименьшего натурального m, что Bm> m*A.

3. , e=10-6,

Вариант 6

1. Найти сумму целых положительных чисел из промежутка от А до В, кратных 4. Значения А и В вводятся с клавиатуры.

2. Составить программу для определения, является ли натуральное число k степенью числа 3.

3. , e=10-4,

Вариант 7

1. Для натурального числа N получить все его натуральные делители.

2. Дано целое m>1. Получить наибольшее целое k, при котором 4k<m.

3. , e=0.5*10-5,

Вариант 8

1. Сумма цифр трехзначного числа кратна 7, само число также делится на 7. Найти все такие числа.

2. Дано натуральное N. Составить программу для поиска первой цифры этого числа.

3. , e=10-4,

Вариант 9

1. Среди четырехзначных чисел выбрать те, у которых все 4 цифры различны.

2. Дано натуральное число N. Выяснить, является ли оно степенью пятерки.

3. , e=10-3,

Вариант 10

1. Ввести натуральное число N. Определить, является ли оно совершенным (совершенное число N равно сумме всех своих делителей, не превосходящих само N).

2. Поменять местами цифры старшего и младшего разрядов данного натурального числа (например, из числа 3879 получится 9873).

3. , e=0.5*10-5

Вариант 11

1. Ввести натуральные числа А и В. Определить все числа, кратные А и В, меньшие А*В.

2. Найти наименьший общий делитель трех натуральных чисел (1 будет считаться наименьшим общим делителем только в том случае, когда других общих делителей у заданных чисел нет).

3. , e=0.2*10-5,

Вариант 12

1. Определить, являются ли натуральные числа А и В взаимно простыми. Взаимно простые числа не имеют общих делителей, кроме единицы.

2. Найти наибольший общий делитель трех натуральных чисел (1 будет считаться наибольшим общим делителем только в том случае, когда других общих делителей у заданных чисел нет).

3. , e=10-3,

Вариант 13

1. Дано натуральное число N. Вычислить S=1+22+33+…+NN. Формулу возведения в степень не использовать.

2. Определить, сколько цифр содержит данное натуральное число N.

3. , e=10-4,

Вариант 14

1. Даны натуральные числа а, b (а<b). Получить все простые числа p, удовлетворяющие неравенству a<p<b.

2. Найти наименьшее общее кратное трех натуральных чисел.

3. , e=10-5,

Вариант 15

1. Исходное данное - натуральное число K, выражающее площадь. Написать программу для нахождения всех таких прямоугольников, площадь которых равна K и стороны выражены натуральными числами.

2. Определить, является ли данное натуральное число N палиндромом (палиндром слева направо и справа налево читается одинаково, например 32423).

3. , e=10-4,

Вариант 16

1. Даны два натуральных числа X и Y. Составить программу для вычисления суммы кубов всех четных чисел, лежащих в диапазоне [X, Y].

2. Определить, является ли данное натуральное число N факториалом какого-нибудь числа, если «да», то какого.

3. , e=10-4,

Вариант 17

1. Дано натуральное n. Составить программу для вычисления n сомножителей произведения

2. Найти число Фибоначчи, ближайшее к заданному натуральному числу N.

3.  полученное значение сравнить с arctg(x), e=10-5

Вариант 18

1. Вычислить множество значений функции y=x2+b для х, изменяющихся от - А до А с постоянным шагом, при b=5.

2. С клавиатуры вводится последовательность чисел, признак окончания ввода – ввод 0. Найти максимальное из них.

3.  полученное значение сравнить с sin(x), e=10-5

Вариант 19

1. Написать программу вычисления значения выражения при заданных х и n: .

2. С клавиатуры вводится последовательность натуральных чисел, признак окончания ввода – ввод 0. Найти все числа, оканчивающиеся на 7.

3.  полученное значение с cos(x), e=10-5

Вариант 20

1. Составить программу для вычисления значения .

2. С клавиатуры вводится число N. Определить, может ли оно быть двоичным (т.е. состоять только из 0 и 1).

3.  полученное значение сравнить с ln(x), e=10-5

Вариант 21

1. Составить программу для определения, в каких двузначных числах удвоенная сумма цифр равна их произведению.

2. С клавиатуры вводится число N. Определить, может ли оно быть восьмеричным (т.е. состоять только из цифр меньше 8).

3. , e=10-5

Вариант 22

1. Составить программу поиска двузначных чисел таких, в которых утроенное произведение цифр равно самому числу.

2. Определить, является ли сумма цифр натурального числа N четной.

3. , e=10-5

Вариант 23

1. Дано натуральное число n>10. Составить программу для вычисления значения .

2. Получить число, образованное записью цифр исходного числа N в обратном порядке.

3. , e=10-5

Вариант 24

1. У гусей и кроликов вместе 2N лап. Сколько может быть гусей и кроликов (вывести все возможные сочетания)?

2. Перевести число из десятичной системы счисления в двоичную.

3. , e=10-5

Вариант 25

1. Дано натуральное число N. Вычислить произведение .

2. Перевести число из восьмеричной системы счисления в десятичную.

3.  полученное значение сравнить с arcsin(x). Учесть, что 0,05 ≤ x ≤ 1, e=10-5

Вариант 26

1. Составить программу для вычисления значения при заданном значении n.

2. Перевести число из десятичной системы счисления в восьмеричную.

3.  Учесть, что 0,05 ≤ x ≤ 1, e=10-5

Контрольные вопросы

1. Что такое цикл?

2. Какие виды циклов вы знаете?

3. Чем отличается цикл с предусловием от цикла с постусловием?

4. Когда необходимо использовать цикл с предусловием, а когда с постусловием? Приведите примеры.

5. Какие циклы с предусловием существуют в языке Си?

6. Сколько операторов содержит в себе тело цикла с предусловием?

7. Как правильно записать цикл с постусловием на языке Си?

8. Как задать бесконечный цикл? Зачем он нужен? Как из него выйти?

9. Каким должно быть значение выражения, определяющего условие выполнения цикла, для завершения цикла?

10. Каким должно быть значение выражения, определяющего условие выполнения цикла, для выполнения тела цикла?

11. К чему приведет неправильное задание выражения, определяющего условие выполнения цикла?

12. Может ли тело цикла отсутствовать? Если может, то приведите примеры таких циклов.

13. Чем отличается оператор while от оператора if?

14. Каков порядок действий при выполнении цикла for?

15. Как организовать арифметический цикл с помощью цикла for?

16. Запишите алгоритм, определяемый циклом for, с помощью цикла while.

17. Что такое вложенный цикл?

18. Сколько раз в общей сложности выполняется тело вложенного цикла?

19. Как и когда используются операторы break и continue?

20. Что такое рекуррентные вычисления? Когда они используются? Как их программировать?

 

Лабораторная работа № 4. Указатели

Цель работы – познакомиться с адресацией памяти, научиться правильно использовать указатели различных типов.

Постановка задачи

Набрать текст программы, найти в нем синтаксические ошибки и исправить их, в начало программы добавить вывод на экран адресов всех переменных, а в конец – значений всех переменных, проанализировать полученные результаты и объяснить, почему они именно такие.

Листинг

#include<stdio.h>

#include<conio.h>

int main(void)

{

int *a, b;

float *x, y = 3.5;

double *m, n;

a = &b;

printf(" Enter b = ");

scanf("%d", a);

x = &y;

printf(" a = %p\tb = %d\n", a, b);

getch();

b -= y;

printf(" a = %p\t*a = %d\tb = %d\n", a, *a, b);

getch();

m = a;

printf(" a = %p\tm = %p\n", a, m);

getch();

m = &n;

printf(" n = %p\tm = %p\n", &n, m);

getch();

n = 5.5;

m+=2;

printf(" n = %lf\tn = %p\tm = %p\n", n, &n, m);

getch();

*m = (float) *a - n + (int) *x;

printf(" m = %p\t*m = %lf\n", m, *m);

getch();

m -= 2;

printf(" n = %lf n = %p m = %p *(m+2) = %lf\n", n, &n, m, *(m+2));

getch();

return 0;

}

Контрольные вопросы

1. Что такое указатель?

2. Какой объем памяти занимает указатель?

3. Что является значением переменной-указателя?

4. Как проинициализировать указатель?

5. Что такое NULL?

6. Что такое указатель на void? Зачем нужны такие указатели?

7. Какие операции допустимы при работе с указателями?

8. Чем отличается унарная операция "&" от унарной "*" ?

9. Совместимость типов указателей.

10. Можно ли получить адрес указателя?

11. Можно ли указателю присвоить его же адрес?

12. Почему к указателю на void нельзя применить операцию разыменования?

13. Как работают операции инкремента и декремента, примененные к указателям?

14. Каков результат операции вычитания, примененной к указателям одного типа?

15. Какой спецификатор типа используется при выводе адреса на экран с помощью функции printf()?

16. В чем отличие записи (float *) a от (float) * a, если а – указатель на целое число?

17. В чем отличие записи *а++ от ()++, если а – некоторый указатель, отличный от void*?

18. Как описать указатель на начало массива?

19. Как описать указатель на указатель?

20. Когда и зачем может повторно использоваться операция разыменования?

 

Лабораторная работа № 5. Одномерные массивы

Цель работы – познакомиться с организацией одномерных массивов, изучить принципы работы с массивами, освоить работу с массивами через указатели.

Постановка задачи

Написать две программы согласно индивидуальному варианту. Использовать обращение к элементам матрицы с помощью операции [] и через указатель. Ввод элементов массива осуществлять с клавиатуры. Во время отладки и тестирования программы размер массива можно уменьшить.

Варианты заданий

Вариант 1

1. Сформировать новый массив из элементов массива М (25), встречающихся в этом массиве только один раз.

2. Определить, представляют ли собой элементы массива А (20) возрастающую последовательность.

Вариант 2

1. Записать элементы массива С (20) в обратном порядке {С201918;…;С21}. Вспомогательный массив не использовать.

2. Вставить число 100 после второго положительного элемента массива
А (15).

Вариант 3

1. Определить количество элементов массива М (22), больших среднего арифметического значения элементов этого массива.

2. В массиве А (45) найти локальные максимумы, определить их местоположение. Локальным максимумом назовем элемент массива, значение которого больше, чем значения двух соседних с ним элементов.

Вариант 4

1. Из массивов А (20) и С (20) образовать новый массив Х={a1,c1,a2,c2,…,a20,c20}

2. Удалить из массива М (25) все элементы, значения которых в этом массиве повторяются, оставив по одному.

Вариант 5

1. Найти 2 первых элемента в массиве С (17), значения которых не попадают в заданный с клавиатуры диапазон [A, B]. Поменять их местами.

2. В массиве А (35) найти минимум, определить его местоположение (с учетом возможного повторения).

Вариант 6

1. Вставить после каждого пятого элемента массива А (12) значение, равное сумме трех предшествующих элементов.

2. Вычислить сумму отрицательных элементов массива D (19), кратных четырем.

Вариант 7

1. Сформировать массив простых двузначных чисел.

2. Поменять местами максимальный отрицательный и первый положительный элементы массива В (18).

Вариант 8

1. Вставить число 0 в середину массива М (20), предварительно сдвинув вправо значения элементов массива, начиная с 11-го.

2. Упорядочить массив А (50) в порядке убывания.

Вариант 9

1. Вычислить сумму элементов массива М (15), значения которых лежат в введенном с клавиатуры диапазоне [X, Y].

2. Удалить из массива А (20) первый отрицательный элемент.

Вариант 10

1. Поменять местами максимальный и последний отрицательный элементы массива А (40).

2. Сформировать новый массив из элементов заданного целочисленного массива М (50), кратных 7 или содержащих в записи числа цифру 7.

Вариант 11

1. Удалить из массива В (50) все элементы, кратные 3 или 5.

2. Заменить все четные элементы массива А (19) на их квадраты, нечетные удвоить. Проверить, изменилась ли сумма элементов массива.

Вариант 12

1. Удалить из массива М (26) первый положительный элемент.

2. Определить, есть ли в массиве Q (10) заданное число Х, и если нет, то найти ближайшее к нему.

Вариант 13

1. Найти сумму элементов массива А (45), находящихся между максимальным и минимальным значениями.

2. Сформировать новый массив из положительных нечетных элементов заданного массива Р (20).

Вариант 14

1. Определить местоположение элементов массива А (30), не встречающихся в массиве В (15).

2. Найти сумму четных элементов массива М (15), имеющих четные индексы.

Вариант 15

1. Определить, есть ли в массиве М (15) пары соседних одинаковых элементов.

2. Найти наибольший отрицательный элемент массива А (23) и удалить его.

Вариант 16

1. Поменять местами первый и последний отрицательные элементы массива В (18).

2. Определить, является ли массив М (20) перестановкой последовательности натуральных чисел от 1 до 20, т. е. проверить, все ли числа из этого диапазона входят в указанный массив.

Вариант 17

1. Удалить из массива А(25) все нули.

2. Значение каждого элемента массива Р (60) является дополнением его порядкового номера до 100. Вывести этот массив на экран.

Вариант 18

1. Элементы массива D (12) – длины сторон многоугольника. Определить, является ли он равносторонним.

2. Даны целые числа x и y. Вычислить сумму элементов массива А(35) таких, что x<Аi<y.

Вариант 19

1. Определить, есть ли в массиве Q (10) заданное число Х, и если есть, то удалить его (если встречается неоднократно, то удалить все), а если нет, то добавить в конец массива.

2. Вычислить , где Sп и Sо – суммы положительных и отрицательных элементов массива А (70).

Вариант 20

1. Массив M (100) содержит целые числа. Поменять знак у элементов, значение которых оканчивается на 2, на 5 или на 9, остальные удалить.

2. Вычислить , где Sп и Kп – сумма и количество положительных элементов массива А (70), а Sо и Kо – сумма и количество отрицательных элементов того же массива.

Вариант 21

1. Вычислить сумму положительных элементов массива М (40), кратных заданному натуральному а.

2. Определить, есть ли в массиве Q (35) заданное число Х, и если есть, то удалить его (если встречается неоднократно, то удалить последнее вхождение).

Вариант 22

1. Сформировать массив Q (25), значение каждого элемента которого равно удвоенному квадрату индекса этого элемента, и поменять в нем местами второй и предпоследний элементы.

2. Вычислить , где P1 и P2 – первый и второй положительные элементы массива А (100), N1 и N2 – первый и второй отрицательные элементы того же массива.

Вариант 23

1. Сформировать новый массив из элементов заданного целочисленного массива А(50), значения которых встречаются в нем неоднократно. В новом массиве все значения должны быть уникальными.

2. Вычислить , где Kп и Kо – суммы положительных и отрицательных элементов массива Z (65).

Вариант 24

1. В массиве Х (20) каждый последующий элемент вдвое больше предыдущего. Вывести на экран этот массив, учитывая, что х1=0,55.

2. Сформировать новый массив из элементов заданного целочисленного массива М (100), кратных 8 или содержащих в записи числа цифру 5.

Вариант 25

1. Определить количество элементов массива Р (50), отличающихся от своих соседей слева как минимум вдвое.

2. Найти наибольший положительный элемент массива А (40), лежащий в диапазоне , и удалить его.

Вариант 26

1. Сформировать новый упорядоченный по убыванию массив из двух упорядоченных в том же порядке массивов А(12) и В(20).

2. Вычислить , где Kп и Kо – количество положительных и отрицательных элементов массива Z (50) соответственно.

Контрольные вопросы

1. Что такое массив?

2. Что представляет собой имя массива?

3. Что представляет собой индекс элемента массива?

4. Как можно обратиться к элементу массива?

5. Как получить адрес элемента массива?

6. Как описать указатель на начало массива?

7. Как обратиться к элементу массива через указатель?

8. Существует ли связь между индексом элемента и его значением?

9. Чему равен индекс первого элемента массива?

10. Как проинициализировать массив?

11. Когда можно не указывать количество элементов массива при описании?

12. Какого типа могут быть элементы массива?

13. Какие операции можно производить над целым массивом?

14. Почему при обработке массивов используют циклы?

15. Как поменять местами два элемента массива?

16. Чему равен индекс последнего элемента массива?

17. Возникнет ли ошибка при обращении к элементу массива, индекс которого больше индекса последнего элемента этого массива?

18. Может ли существовать массив из одного элемента? Если может, то как его описать?

19. Является ли р указателем на массив а[], если они объявлены следующим образом: int a[10], *p=a; ?

20. Что такое сортировка массива?

 

Лабораторная работа № 6. Двумерные массивы

Цель работы – освоить работу с матрицами, научиться правильно организовывать циклы для обработки многомерных массивов.

Постановка задачи

Написать две программы согласно индивидуальному варианту. Использовать обращение к элементам матрицы с помощью операции [] и через указатель. Ввод элементов матрицы осуществлять с клавиатуры. Во время отладки и тестирования программы размер матрицы можно уменьшить. При выводе матрицы следить за тем, чтобы ширина всех столбцов матрицы была одинаковой.

Варианты заданий

Вариант 1

1. Заполнить матрицу А (7х8) нулями и единицами по следующему правилу: если сумма индексов элемента четная, элемент будет нулевым, если нечетная – единичным.

2. Вычислить , где Xmin и Xmax – минимальный положительный и максимальный элементы матрицы
X (6х8).

Вариант 2

1. Вычислить , где  и  – индексы строки и столбца минимального положительного элемента, а  и – индексы строки и столбца первого положительного элемента матрицы Y (5х7).

2. Определить, является ли данная квадратная матрица симметричной относительно своей побочной диагонали.

Вариант 3

1. Заполнить матрицу А (7х8) следующим образом: на главной диагонали – «0», над диагональю – «1», под диагональю – «-1».

2. Поменять местами минимальный элемент матрицы Р (9х11) и элемент, значение которого совпадает с заданным X. Если указанный элемент в матрице отсутствует, вывести сообщение об этом.

Вариант 4

1. Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы В (8х8). Заменить этим значением все элементы матрицы, не лежащие на диагоналях.

2. Подсчитать число элементов матрицы Q (9х11), остаток от деления которых на пять равен единице.

Вариант 5

1. Вычислить , где Sn – сумма положительных элементов в нечетных строках матрицы Y(9х12), а So – сумма отрицательных элементов в четных строках той же матрицы.

2. Дана матрица А(10х10). Отсортировать элементы, лежащие на главной диагонали, в порядке возрастания.

Вариант 6

1. Вычислить среднее арифметическое значение элементов, лежащих на диагоналях матрицы С (6х6). Заменить этим значением все диагональные элементы матрицы.

2. Дана матрица размером 7х7. Поменять местами k-й столбец с k-ой строкой (k вводится с клавиатуры).

Вариант 7

1. Отсортировать строки матрицы М (8х5) в порядке возрастания.

2. Вычислить сумму всех элементов матрицы В (10х10), лежащих слева от главной диагонали.

Вариант 8

1. Вычислить сумму элементов матрицы М (9х9), лежащих справа от главной диагонали.

2. Подсчитать число элементов матрицы Q (5х7), кратных трем.

Вариант 9

1. Заполнить матрицу произведениями соответствующих порядковых номеров ее элементов.

2. Найти разность между суммами элементов, лежащих на главной и побочной диагоналях матрицы М (7х7).

Вариант 10

1. Из матрицы Q (6х8) сформировать одномерный массив отрицательных чисел (просмотр по строкам).

2. Определить среднее арифметическое значение элементов матрицы А (8х8), лежащих на главной диагонали.

Вариант 11

1. Дана вещественная матрица М (9х8). Преобразовать матрицу: поэлементно вычесть последнюю строку из всех строк, кроме последней.

2. Дана целочисленная матрица В (7х7). Найти номера столбцов, элементы каждого из которых образуют возрастающую последовательность (b1j<b2j<…<b7j). 

Вариант 12

1. Дана вещественная матрица А (8х8). Преобразовать матрицу: поэлементно вычесть последнюю строку из всех столбцов, кроме последнего.

2. В заданной целочисленной матрице размера mxn (m и n – некоторые константы) указать индексы всех элементов, имеющих наибольшее значение.

Вариант 13

1. Транспонированием квадратной матрицы называется такое ее преобразование, при котором строки и столбцы меняются ролями: i-й столбец становится i-й строкой. Дана квадратная матрица размера nxn. Получить транспонированную матрицу.

2. Вычислить сумму элементов матрицы М (9х9), лежащих справа от побочной диагонали.

Вариант 14

1. Дана вещественная матрица D (7х9). Упорядочить (переставить) строки матрицы по возрастанию сумм элементов строк.

2. Сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов соответствующего столбца заданной целочисленной матрицы.

Вариант 15

1. Дана вещественная матрица D (7х9). Упорядочить (переставить) строки матрицы по не убыванию наименьших элементов строк.

2. Найти сумму всех элементов матрицы М (9х7) в строках с к1-ой по к2-ую.

Вариант 16

1. Определить, является ли данная квадратная матрица симметричной относительно своей главной диагонали.

2. Найти номера первых отрицательных элементов каждого столбца матрицы D (9х11).

Вариант 17

1. Найти количество элементов в каждой строке матрицы С (8х8), больших среднего арифметического элементов данной строки.

2. Последний отрицательный элемент каждого столбца прямоугольной матрицы заменить нулем.

Вариант 18

1. В каждой строке матрицы В (9х8) сменить знак максимального по модулю элемента на противоположный.

2. В матрице Р (8х9) к элементам столбца к1 прибавить элементы столбца к2. Значения переменных к1 и к2 вводятся с клавиатуры.

Вариант 19

1. В каждой строке матрицы А (7х9) поменять местами первый элемент и максимальный по модулю.

2. Вычислить сумму элементов матрицы Q (10х10), лежащих слева от побочной диагонали.

Вариант 20

1. Поменять местами максимальный и минимальный элементы матрицы А (8х12).

2. Определить, есть ли в матрице Х (8х6) нулевые элементы.

Вариант 21

1. Удалить из матрицы А (12х8) все строки, содержащие единицы.

2. Вычислить среднее арифметическое значение элементов матрицы Р (9х9), лежащих слева от главной диагонали.

Вариант 22

1. Отсортировать строки матрицы А(6х7) в порядке убывания.

2. Подсчитать число элементов матрицы Q (9х6), кратных четырем.

Вариант 23

1. Отсортировать столбцы матрицы А(5х7) в порядке возрастания.

2. Поменять местами максимальный элемент матрицы А (10х12) и элемент, индексы которого вводятся с клавиатуры.

Вариант 24

1. Дана матрица А(9х10). Расставить столбцы таким образом, чтобы элементы в первой строке были упорядочены по возрастанию.

2. Преобразовать матрицу Р (7х7) таким образом, чтобы минимальные элементы строк оказались на побочной диагонали.

Вариант 25

1. Определить седловые точки матрицы М (9х10). Седловая точка – элемент, являющийся одновременно максимальным в своей строке и минимальным в своем столбце.

2. Преобразовать матрицу В (9х9) таким образом, чтобы максимальные элементы строк оказались на главной диагонали.

Вариант 26

1. Дан целочисленный массив В (7х11). Определить, сколько в нем пар соседних одинаковых элементов. Элементы считаются соседними, если их индексы в столбцах и/или в строках различаются не более чем на единицу.

2. Дана матрица А(10х10). Расставить строки таким образом, чтобы элементы в первом столбце были упорядочены по убыванию.

Контрольные вопросы

1. Что такое матрица?

2. Как располагается матрица в памяти компьютера?

3. Как проинициализировать матрицу?

4. Почему при объявлении матрицы с одновременной инициализацией первые скобки можно оставить пустыми, а вторые нет?

5. При обращении к элементу матрицы сначала указывается индекс строки или индекс столбца?

6. Как вывести матрицу таблицей с колонками одинаковой ширины?

7. Что представляет собой имя матрицы?

8. Что представляет собой индекс строки матрицы?

9. Что представляет собой индекс столбца матрицы?

10. Что представляет собой имя строки матрицы?

11. Как получить адрес элемента матрицы?

12. Как получить адрес начала матрицы?

13. Как получить адрес строки матрицы?

14. Чем отличается просмотр элементов матрицы по столбцам от просмотра по строкам?

15. Какова связь между индексами строки и столбца у элементов, лежащих на главной диагонали квадратной матрицы?

16. Какова связь между индексами строки и столбца у элементов, лежащих на побочной диагонали квадратной матрицы?

17. Можно ли просмотреть все элементы матрицы в одном цикле?

18. Как обратиться к некоторому элементу матрицы через указатель на первый элемент матрицы?

19. Как обратиться к элементу матрицы через указатель на начало матрицы?

20. Как описать трехмерный массив и как с ним работать?

 

Лабораторная работа № 7. Функции

Цель работы – научиться использовать функции для выполнения однотипных действий над различными данными, правильно задавать параметры функций, передавать указатели на функции в качестве параметров.

Постановка задачи

Написать три программы согласно индивидуальному варианту задания. Для первой и второй программ функции ввода и вывода массивов описывать отдельно, не объединяя с обработкой данных. Можно сохранить эти функции в отдельном файле и использовать в обеих программах, подключив этот файл с помощью директивы #include.

В третьей программе определить функцию Integral() для приближенного вычисления определенного интеграла вида  указанным методом. Использовать эту функцию для вычисления значений двух интегралов, передавая подынтегральную функцию в функцию Integral() в качестве параметра.

Формулы численного интегрирования

Пусть на отрезке [a,b] задана непрерывная функция y= f(x). Требуется вычислить определенный интеграл . Разделим отрезок [a,b] точками  на n равных частей длины Dx: . Обозначим далее через  значения функции f(x) в точках , т. е. . Значение интеграла определяется по одной из формул:

     – формула прямоугольников

– формула трапеций

 – формула парабол

 – формула Ньютона

Варианты заданий

Вариант 1

1. В массивах А (57) и В (7х5) найти максимумы, затем поменять их местами.

2. Вычислить , где S1 – сумма положительных элементов массива А (70), а S2 – сумма отрицательных элементов матрицы В (7х9). Суммы вычислять в одной подпрограмме.

3. , , , метод трапеций

Вариант 2

1. Поменять местами минимальные элементы массива А (57) и матрицы
В (7х5).

2. Удалить из матрицы А (7х5) все строки, содержащие единицы, а из матрицы В (6х7) – строки, содержащие нули.

3. , , , метод парабол

Вариант 3

1. В матрицах А (7х6) и В (6х7) заменить все отрицательные числа их квадратами.

2. Удалить из матрицы А (5х7) все столбцы, содержащие не менее 2 отрицательных элементов, а из матрицы В (7х7) – столбцы, содержащие не менее 3 отрицательных элементов.

3. , , , метод прямоугольников

Вариант 4

1. Отсортировать массив М(50) и строки матрицы А(6х7) в порядке убывания

2. Удалить из матрицы А (7х5) все строки, сумма элементов которых четна, а из матрицы В (6х8) – строки, сумма элементов которых нечетна.

3. , , , метод трапеций

Вариант 5

1. Вычислить , где S1, K1, S2, K2 – сумма и количество положительных элементов массива А (75) и В (60) соответственно.

2. Заменить минимальный элемент массива А (5х8) максимальным элементом массива В (7х6), а минимум массива В - максимальным элементом массива А.

3. , , , метод парабол

Вариант 6

1. Подсчитать общее количество отрицательных элементов в массивах X (50) и Y (70).

2. В массивах А (8х6) и В (7х9) к элементам четных столбцов прибавить элемент первого столбца соответствующей строки.

3. , , , метод Ньютона

Вариант 7

1. В матрицах А (7х6) и В (5х6) заменить все числа, кратные 3, единицами.

2. Вычислить , где S1 – сумма положительных элементов массива X (50), а S2 – сумма отрицательных элементов массива А (60). Суммы вычислять в одной подпрограмме.

3. , , , метод прямоугольников

Вариант 8

1. В матрицах Р (7х8) и Q (8х6) поменять местами первую строку и строчку, в которой находится первый нулевой элемент.

2. Поменять местами наименьшие из положительных элементов массивов А (55) и В (8х7).

3. , , , метод прямоугольников

Вариант 9

1. В матрицах А (10х15) и В (15х10) заменить все совершенные числа нулями.

2. . Вычислить , где S1 – сумма положительных элементов массива X (9х6), а S2 – сумма отрицательных элементов массива А (60). Суммы вычислять в одной функции.

3. , , , метод парабол

Вариант 10

1. Найти сумму наибольших из отрицательных элементов матрицы
А (7х8) и массива В (76).

2. Подсчитать количество элементов массива Р (60), отличающихся от среднего арифметического значения элементов массива М (70) не более чем вдвое, и количество элементов массива М, отличающихся от среднего арифметического значения массива Р не более, чем втрое.

3. , , , метод Ньютона

Вариант 11

1. Поменять местами первый максимальный элемент массива А (60) и последний минимальный элемент массива В (85). Поиск максимального и минимального элементов проводить в одной подпрограмме.

2. Задан массив, состоящий из n неотрицательных элементов. Найти в нем индекс элемента, для которого сумма элементов, стоящих до него, наименее отличается от суммы элементов, стоящих после него.

3. , , , метод Ньютона

Вариант 12

1. В матрице A(m,n), состоящей из нулей и единиц, найти квадрат заданного размера (квадратную подматрицу), состоящий целиком из нулей.

2. Даны матрицы В (m,n) и С (n,m), заполненные случайным образом. Определить, есть ли в заданных матрицах столбцы, содержащие по два отрицательных элемента. Вывести номера столбцов.

3. , , , метод трапеций

Вариант 13

1. Отсортировать нечетные строки матрицы А(6х7) в порядке убывания, а четные – в порядке возрастания.

2. Найти , где Zminи Smin – сумма минимальных элементов матриц Y(9х12) и Q(5х10), а Zmахи Smах – разница максимальных элементов заданных матриц.

3. , , , метод Ньютона

Вариант 14

1.  Поменять местами наибольшие по модулю элементы матрицы А (7х8) и массива В (76).

2. Даны матрицы В (m,n) и С (n,m), заполненные случайным образом. Определить, есть ли в заданных матрицах строки, содержащие по два положительных элемента. Вывести номера строк.

3. , , , метод прямоугольников

Вариант 15

1. Даны матрицы Q (12x9) и С (7x8), заполненные случайным образом. Вставить после столбцов с максимальными элементами столбцы из нулей.

2. Отсортировать нечетные столбцы матрицы А(6х7) в порядке убывания, а четные – в порядке возрастания.

3. , , , метод парабол

Вариант 16

1. Подсчитать общее количество простых чисел среди элементов массивов X (50) и Y (12х5).

2. Удалить из матриц G (6х8) и D (5х7) столбцы, содержащие нулевой элемент.

3. , , , метод трапеций

Вариант 17

1. Найти среднее арифметическое всех элементов между минимальным и максимальным элементами в массивах X (7х8) и Y (34).

2. Отсортировать в порядке возрастания строки матриц N (11х5) и
M (9х7), номера которых задаются пользователем (не менее трех строк).

3. , , , метод трапеций

Вариант 18

1. Отсортировать в порядке убывания столбцы матриц В (9х5) и
А (7х9), номера которых задаются пользователем (не менее трех столбцов).

2. Составить программу вычисления произведения двух квадратных целочисленных матриц А и В размером 15х15.

3. , , , метод Ньютона

Вариант 19

1. Отсортировать в порядке убывания строки матриц N (10х7) и
M (12х11), номера которых задаются пользователем (не менее трех строк).

2. Подсчитать количество элементов матрицы Р (10х12), отличающихся от среднего арифметического значения элементов массива М (100) более чем вдвое, и количество элементов массива М, отличающихся от среднего арифметического значения матрицы Р более, чем втрое.

3. , , , метод трапеций

Вариант 20

1. Подсчитать количество элементов массива Р (40), отличающихся от среднего арифметического значения элементов матрицы М (6х9) не более чем на два, и количество элементов матрицы М, отличающихся от среднего арифметического значения массива Р не более, чем на три.

2. Составить программу печати в возрастающем порядке всех элементов массива S (100), входящих в него не менее двух раз.

3. , , , метод прямоугольников

Вариант 21

1. Удалить из матриц G (10х11) и D (11х10) строки, содержащие нулевой элемент.

2. Отсортировать четные столбцы матрицы А(8х10) в порядке убывания, а нечетные – в порядке возрастания.

3. , , , метод прямоугольников

Вариант 22

1. Отсортировать четные строки матрицы Q(10х10) в порядке убывания, а нечетные – в порядке возрастания.

2. Даны матрицы В (m,n) и С (n,m), заполненные случайным образом. Определить, есть ли в заданных матрицах строки, содержащие равное число положительных и отрицательных элементов. Вывести номера строк.

3. , , , метод Ньютона

Вариант 23

1.  Даны матрицы Q (12x9) и С (7x8), заполненные случайным образом. Заменить все элементы первых трех столбцов матрицы Q (12x9) и последних трех столбцов матрицы С (7x8) на их квадраты.

2. Дан целочисленный массив H (50). Вставить в него два элемента: первый – после всех элементов, больших данного числа р, а второй – перед всеми элементами, большими данного числа. Значение р вводится с клавиатуры.

3. , , , метод парабол

Вариант 24 *

1. Описать рекурсивную логическую функцию, которая проверяет, является ли симметричной часть заданного массива F (40), начинающаяся i-м и кончающаяся j-м элементами.

2. Даны два вектора Y и X размерности n = 30. Вычислить ,
где k – порядковый номер максимального элемента вектора X, а p – порядковый номер максимального элемента вектора Y.

3. , , , метод трапеций

Вариант 25 *

1. Описать рекурсивную функцию для определения максимального элемента массива W (23), введя вспомогательную рекурсивную функцию, зависящую от k, находящую минимум среди k-последних элементов массива.

2. Даны два вектора Y и X размерности n = 30. Вычислить

3. , , , метод прямоугольников

Вариант 26 *

1. В матрице A(m,n), состоящей из нулей и единиц, найти квадрат наибольшего размера (квадратную подматрицу), состоящий целиком из нулей.

2. Клеточное поле размером m*n есть результат игры в крестики-нолики на "бесконечном" поле. Проверить, не закончена ли игра выигрышем "крестиков"? Считается, что "крестики" выиграли, если на поле найдется по горизонтали, вертикали или диагонали цепочка, состоящая подряд из 5 крестиков.

3. , , , метод парабол

Контрольные вопросы

1. Что такое функция?

2. Что такое функция типа void?

3. Что такое прототип функции?

4. Чем отличается прототип функции от вызова функции?

5. Чем отличается описание функции от определения функции?

6. Критерии соответствия формальных и фактических параметров.

7. Соответствие типов формальных и фактических параметров.

8. Зачем нужен оператор return?

9. Может ли в функции быть несколько операторов return?

10. Когда необходимо писать оператор return в функции типа void?

11. Что такое побочный эффект функции?

12. Когда используются формальные параметры-указатели? Какими в этом случае должны быть фактические параметры?

13. Как передать массив в функцию? Как передать в функцию матрицу?

14. Как описать функцию, позволяющую работать и с одномерными массивами, и с матрицами?

15. Что такое параметр-константа? Когда используются такие параметры?

16. Что такое указатель на функцию? Как его описать?

17. Как передать функцию в функцию? Что будет являться формальным параметром, что фактическим? Как обратиться к функции, переданной через параметры?

18. Что такое рекурсия? Когда она применяется? Что такое глубина рекурсии?

19. Как описать функцию с переменным числом параметров? Как использовать такую функцию?

20. Какие параметры могут быть у функции main()? Как отлаживать и тестировать программу, содержащую функцию main() с параметрами?

 

Лабораторная работа №8. Строки

Цель работы – знакомство с организацией строк в языке Си, изучение библиотечных функций обработки строк и символов.

Постановка задачи

Написать две программы согласно индивидуальному варианту. В случае, когда указано, что задается строка до точки, обрезать строку, отбросив все символы после точки, если точки нет, то считать, что строка ограничена точкой. Словом считать любую последовательность символов, ограниченную пробелами. Использовать функции библиотеки string.

Варианты заданий

Вариант 1

1. Дана строка символов. Удалить из нее все кратные рядом стоящие одинаковые символы, оставив по одному (АААВВССàАВС)

2. Дана строка символов до точки. Подсчитать, сколько слов она содержит.

Вариант 2

1. Дана символьная строка. Определить длину самой длинной подстроки из подряд стоящих букв «а».

2. Дана строка символов до точки. Подсчитать в ней число латинских букв.

Вариант 3

1. Дана строка символов. Удалить из нее все слова нечетной длины. Слова отделяются друг от друга одним пробелом.

2. Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными.

Вариант 4

1. Дана строка символов до точки. Определить, является ли она палиндромом. (Палиндром слева направо и справа налево читается одинаково, например "Леша на полке клопа нашел.") Пробелы и знаки препинания, а также регистр букв не учитываются.

2. Дана строка символов. Подсчитать, сколько раз в ней встречается подслово «АВВА».

Вариант 5

1. Дана строка символов (введена с клавиатуры), состоящая из цифр от 0 до 9. Составить новую строку из букв от А (соответствует цифре 0) до J (соответствует цифре 9).

2. Дана строка символов до точки. В каждом слове поменять местами первый и последний символы.

Вариант 6

1. Дана строка символов до точки. Определить, входят ли в состав заданной строки цифры. Сформировать из них новую строку.

2. Дана строка символов до точки. Вывести ее на экран задом наперед без пробелов.

Вариант 7

1. Дана строка символов до точки. Записать слова этой строки в обратном порядке (мама мыла раму à раму мыла мама).

2. Дана символьная строка. Зашифровать в ней все латинские буквы с помощью циклической подстановки AàBàCà…àYàZàA

Вариант 8

1. Дана строка символов. Определить, является ли она правильным скобочным выражением.

2. Дана символьная строка. Определить длину самой длинной подстроки из подряд стоящих букв «е».

Вариант 9

1. Даны две строки. Составить третью строку из слов, имеющихся в обеих данных строках.

2. Дана строка символов до точки. Записать новую строку из слов заданной, содержащих букву «М».

Вариант 10

1. Дана строка символов. Изменить строку – во всех словах, имеющих нечетное количество символов, средний символ удалить.

2. Дана строка символов. Группы символов между группами пробелов считаются словами. Определить число вхождений в последовательность слов группы букв «abc».

Вариант 11

1. Дана строка символов до точки. Оставить в ней только слова, начинающиеся на буквы «A», «D», «K», «P».

2. Дана символьная строка. Выделить в ней цветом все прописные буквы.

Вариант 12

1. Дана символьная строка. Оставить в ней только слова, содержащие хотя бы одну букву «А».

2. Дана строка символов до точки. Изменить ее таким образом, чтобы все символы отделялись друг от друга одним пробелом.

Вариант 13

1. Дана строка символов, состоящая из букв и цифр. Найти количество букв в данной строке.

2. Дана символьная строка. Заменить в ней все буквы «О» на «Ъ», а буквы «Е» – на случайные символы.

Вариант 14

1. Дана строка символов до точки. Определить, сколько слов, состоящих из 5 и более символов, содержит данная строка.

2. Дана строка символов. Удалить из нее все гласные буквы.

Вариант 15

1. Дана строка символов до точки. Удалить из нее все слова, начинающиеся с буквы «а».

2. Дана символьная строка. Проверить, все ли слова после точки начинаются с заглавной буквы. Если нет – исправить.

Вариант 16

1. Дана символьная строка. Удалить из нее все символы, не являющиеся буквами.

2. Дана строка символов до точки. Подсчитать, сколько каких знаков препинания она содержит.

Вариант 17

1. Дана строка символов. Поменять местами N первых и N последних символов заданной строки.

2. Дана строка символов. Выделить и вывести слова, ограниченные пробелом или знаками препинания: запятая, точка, двоеточие, точка с запятой.

Вариант 18

1. Дана строка символов до точки. Инвертировать каждое слово в заданной строке.

2. Дана строка символов. Найти в строке самое длинное слово и вывести его на экран.

Вариант 19

1. Дана строка символов. Найти длину каждого слова в заданной строке.

2. Дана строка символов до точки. Удалить из нее все сочетания “ас”.

Вариант 20

1. Дана строка символов. Инвертировать все слова в этой строке, последовательность слов сохранить.

2. Дана строка символов до точки. Удалить из нее все повторные вхождения букв.

Вариант 21

1. Дана строка символов. Во всех словах с четным номером поменять местами первый и последний символы.

2. Дана строка символов. Заменить все пробелы в заданной строке точками и запятыми поочередно.

Вариант 22

1. Дана символьная строка. Поменять местами первый символ ‘d’ и последний символ ‘f’ в заданной строке.

2. Дана строка, состоящая из букв и цифр. Преобразовать ее так, чтобы сначала шли буквы, а потом – все цифры исходной строки.

Вариант 23

1. Дана строка символов до точки. Заменить в строке все слоги “we” на специальный символ “&”.

2. Дана строка символов. Поменять местами первое и последнее слова.

Вариант 24

1. Дана строка символов до точки. Удалить из строки первые буквы каждого слова.

2. Дана строка, состоящая из букв от А до J. Составить новую строку из цифр от 0 (соответствует цифре А) до 9 (соответствует цифре J).

Вариант 25

1. Дана строка символов до точки. Заменить в строке первую букву каждого слова со строчной на заглавную.

2. Дана строка, состоящая из букв и цифр. Проверить, является ли данная строка представлением числа в шестнадцатеричной системе счисления.

Вариант 26 *

1. В БГТУ принято, что старшая цифра номера студенческой группы означает номер кафедры, средняя – последнюю цифру года поступления, младшая – порядковый номер группы на курсе. Продолжительность обучения не более 6 лет. Дан номер группы студента и текущий год. Определить, к какой кафедре прикреплен студент, в каком году он поступил и на каком сейчас курсе.

2. Дана строка символов до точки. Определить, сколько каких латинских букв в ней содержится.

Контрольные вопросы

1. Способы организации строк.

2. Что такое Си-строка? Чем она отличается от массива символов?

3. Что такое нуль-терминатор?

4. Чем отличается описание char *st от char st[N], где N – некоторая константа?

5. Как инициализировать строку?

6. Чем отличается ввод строки с помощью функции scanf() от ввода с помощью функции gets()?

7. Можно ли использовать операцию присваивания для задания значения строки?

8. Как изменить строку?

9. Что такое конкатенация строк?

10. Какие функции для работы со строками Вы можете назвать?

 

Библиографический список

1. Арсеньев Б.П., Решетова О.А., Рыкова И.И., Шеляпин Ю.П. Основы языков программирования С и С++: Учеб. пособие/ Балт. гос. техн. ун-т. СПб., 2001. - 132 с.

2. Подбельский В. В. Основы программирования на языке Си

3. Березин Б. И. Начальный курс С и С++: учеб. пос./ Б. И. Березин,
С. Б. Березин; ДИАЛОГ-МИФИ. М., 2004. 288 с.

4. Павловская Т.А. С/С++. Программирование на языке высокого уровня/ Т.А. Павловская; Питер, СПб., 2003. – 461 с.

5. Культин Н. Б. С/С++ в задачах и примерах: сб. задач/ Н. Б. Культин; БХВ-Петербург. СПб., 2004. 288 с.


                                                                              Приложение
Образец оформления отчета по лабораторной работе

Балтийский государственный технический университет «Военмех» им. Д. Ф. Устинова

 

Кафедра И5

«Информационные системы и компьютерные технологии»

 

 

Лабораторная работа № 3

«ЦИКЛЫ»

Вариант 5

 

Выполнил:

Студент Иванов И. И.

Группа И353

 

Преподаватель:

Арипова О. В.

 

 

Санкт-Петербург

2005


Задача 5.1

Дано натуральное число N (вводится с клавиатуры), найти и вывести на экран монитора все делители этого числа.

 

Блок-схема:


Листинг программы:

 

#include <stdio.h>

#include <conio.h>

#include <math.h>

 

int main(void)

{

long int N, x;   //N – заданное число,

//х – возможные делители

clrscr ();

printf (“Enter N = ”);

scanf ("%ld",&N);

if (N>0)

{

for (x=1; x<=N/2; x++)

if ( N % x = = 0 ) // проверка на делимость

printf ("%ld  ", x);

printf("%ld ", N);

}

else

printf(“Error!\n”); // N – не натуральное число

getch ();

return 0;

}


Тестирование

N

Делители

Должно быть Получено
18 1 2 3 6 9 18 1 2 3 6 9 18
-10 Error Error
125 1 5 25 125 1 5 25 125

Вывод: программа работает правильно.

 

Оглавление

Предисловие. 3

Лабораторная работа № 1. Структура программы, ввод/вывод. 3

Лабораторная работа № 2. Программирование ветвлений. 7

Лабораторная работа № 3. Программирование циклов. 14

Лабораторная работа № 4. Указатели. 22

Лабораторная работа № 5. Одномерные массивы.. 24

Лабораторная работа № 6. Двумерные массивы.. 30

Лабораторная работа № 7. Функции. 36

Лабораторная работа №8. Строки. 45

Библиографический список. 51

Приложение Образец оформления отчета по лабораторной работе. 52

 


 

 

Основы программирования на языке Си

 

Составители: Арипова Ольга Владимировна, Бузюкина Ольга Александровна

 

Редактор Г. М. Звягина

Подписано в печать __.__.2006. Формат 60х84/16.

Бумага документная. Печать трафаретная. Усл. печ. л. ___ .

Уч.-изд. л. 1,5. Тираж 250 экз. Заказ №

Балтийский государственный технический университет

Типография БГТУ

190005, С.-Петербург, 1-я Красноармейская ул., д.1

 


Дата добавления: 2018-06-01; просмотров: 3623; Мы поможем в написании вашей работы!

Поделиться с друзьями:




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