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

Задачи по программированию на СС++. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
528 Кб
Скачать

Пример 5. Аналогично, в качестве формальных параметров функций могут выступать и двумерные массивы.

Задача. В двумерном массиве вещественного типа найти максимальный элемент. Соответствующая программа содержит три функции InputMas, OutputMas и MaxMas. Их прото-

типы прописаны в программе до описания главной функции. Функции имеют по три формальных параметра. Два параметра для первой функции являются указателями.

#include <stdio.h> #define Lim 10

void InputMas(int*, int*, double [][Lim]); void OutputMas(int, int, double [][Lim]); double MaxMas(int, int, double [][Lim]);

int main()

{double a[Lim][Lim], max; int i,n=0,m=0;

InputMas(&n,&m,a);

OutputMas(n,m,a);

max=MaxMas(n,m,a); printf("\nmax = %.2lf\n",max); return 1;

}

void InputMas(int* n, int* m, double a[][Lim])

{int i,j,nn,mm; double temp; do{

printf("Введите 0<n<=%d ",Lim); scanf("%d",&nn);

}while(nn<=0 || nn>Lim); do{

printf("Введите 0<m<=%d ",Lim); scanf("%d",&mm);

}while(mm<=0 || mm>Lim); printf("\nВведите элементы массива\n"); for(i=0;i<nn;i++)

for(j=0;j<mm;j++){

51

printf("Введите элемент с индексами %d %d ", i,j);

scanf("%lf",&temp);a[i][j]=temp;

}

*n=nn;

*m=mm;

}

void OutputMas(int n, int m, double a[][Lim]) {int i,j;

for(i=0;i<n;i++)

{for(j=0;j<m;j++)

printf("%5.1f",a[i][j]);

printf("\n");

}

}

double MaxMas(int n, int m, double a[][Lim]) {int i,j;

double max; max=a[0][0]; for(i=0;i<n;i++)

for(j=0;j<m;j++) if(a[i][j]>max) max=a[i][j];

return max;

}

Пример 6. Рассмотрим задачу о вычислении биномиального коэффициента:

C m

 

n!

 

,

m!(n m)!

n

 

 

где n ≥m≥0; n, m – целые числа.

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

52

#include <iostream> long fact(int k)

{if (k<0) return 0; if (k==1) return 1; return k*fact(k-1);}

int main ()

{int n,m,nmc,nm; cout <<"n=";cin>>n; cout<<"m=";cin>>m; nm=n-m;

nmc=fact(n)/fact(m)/fact(nm);

cout<<"nmc="<<nmc; return 1;

}

Задачи

1.Определить объём и площадь боковой поверхности цилиндра с заданными радиусом основания R и высотой

H.

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

3.Найти произведение цифр заданного целого четырехзначного числа.

4.Решить квадратное уравнение ax2 bx c 0.

5.Определить значение z max(a,2b) max(2a b,b).

6.Определить значение z min(a,3b) min(2a b,2b).

7. Определить

значение

z sign x sign y ,

где

1,

при a 0,

 

 

 

0, при a 0,

 

 

signa

 

 

 

1,

при a 0.

 

 

 

 

 

8.Определить функцию для расчета периметра равнобедренной по ее основаниям и высоте.

9.Написать программу, позволяющую найти наибольший общий делитель двух натуральных чисел.

53

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

11.Написать программу, позволяющую найти количество цифр натурального числа.

12.Вводится N . Необходимо найти, на сколько нулей оканчивается N! 1 2 ... N .

13.Определить количество повторений каждой из цифр

0,1,2,...,9 в числе N N (N в степени N), N 10.

14.Натуральное число N 1 представить в виде суммы натуральных чисел так, чтобы произведение этих слагаемых было максимально.

15.Написать программу, позволяющую определить является ли натуральное число палиндромом.

16.Написать функцию, позволяющую число, представленное в системе счисления перевести (меньше или равной 16) в десятичную систему счисления.

17.Даны два положительных целых числа A , B . Напечатать слово "ДА" или "НЕТ" в соответствии с тем, можно ли получить десятичную запись числа A путем вычеркивания одной или более цифр числа B .

18.Написать программу, позволяющую число, представленное в десятеричной системе счисления перевести в данную систему счисления.

19.Задано множество точек на плоскости. Определить, принадлежит ли хотя бы одна точка множества внутренней области круга с центром в точке (a,b) и радиусом R.

20.Вычислить сумму всех чисел Фибоначчи, которые не превосходят заданного натурального числа М.

21.Дано натуральное n . Подсчитать количество решений неравенства x2 y2 n в натуральных числах.

22.Через сколько дней в зоне заражения уровень радиации упадет до безопасного значения в 100 единиц, если

54

начальное значение n и каждый день оно уменьшается на 5% по отношению к предыдущему дню.

23.Имеется ряд чисел: 2, 4, 6, 8, ... Вывести на экран номера таких двух подряд идущих элементов, произведение которых превышает N.

24.В результате применения пенициллина концентрация болезнетворных бактерий в крови больного уменьшается на 1/3 в день от содержимого предыдущего дня. Через сколько дней наступит выздоровление, если концентрация бактерий должна уменьшиться от N1 до N2? (N1 > N2).

25.Имеется убывающий ряд чисел: 1/2, 1/3, 1/4, 1/5,...

Найти сумму всех элементов ряда с точностью Z (т.е. если очередной элемент ряда стал меньше Z, то его суммировать уже не нужно).

26.Даны координаты N точек на плоскости (x1,x2),..,(xN-1,xN) N 30. Найти номера пары точек, расстояние между

которыми наибольшее (считать, что такая пара единственна)

27.Определить номера самых удаленных друг от друга точек и наименее удаленных друг от друга точек на плоскости.

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

r x2 y2 , arctg(y / x).

29.По заданным отрезкам a , b , c , d определить можно ли с их помощью построить треугольник? Если возможно, вычислить площадь полученного треугольника, если нет, выдать соответствующее сообщение.

30.Написать программу вычисления медианы треугольника по заданным длинам сторон. С ее помощью вычислить длины всех его медиан (длина медианы проведен-

55

ной к стороне a , вычисляется по формуле l 12 2b2 2c2 a2 , где a , b , c – длины сторон).

31.Написать программу для определения площади треугольника, заданного координатами вершин.

32.Описать функцию, находящую площадь кольца, заключенного между двумя окружностями с общим центром и радиусами r1 и r2 .

33.Написать программу, вычисляющую периметр равнобедренного треугольника по его основанию a и высоте

h , проведенной к основанию.

34.Написать программу вычисления площади поверхности данного цилиндра по диаметру основания и высоте.

35.Описать программу, определяющую номер координатной четверти, в которой находится точка с ненулевыми вещественными координатами x и y .

36.На плоскости заданы две точки A(x1, y1) и B(x2,y2 ). Определить, какой из отрезков – OA или OB образует больший угол с осью OX .

37.Принадлежит ли точка A отрезку с конечными точками B и C ?

38.Написать программу DegToRad(d), находящую вели-

чину угла в радианах, если дана его величина d в градусах.

39.Написать программу RadToDeg(r), находящую вели-

чину угла в градусах, если дана его величина r в радианах (0 r 2 ).

40.Написать программу Leng(xA ,yA ,xB ,yB ) вещественного типа, находящую длину отрезка AB на плоскости по

координатам его концов:

 

AB

 

 

(xA xB )2 (yA yB )2 .

 

 

56

41. Написать программу Perim(xA ,yA ,xB ,yB ,xC ,yC ), нахо-

дящую периметр треугольника ABC по координатам его вершин.

42.Написать программу, вычисляющую площадь треугольника по формуле Герона.

43.Написать программу, которая определяет можно ли построить треугольник из отрезков с длинами a , b , c и, если можно, то какой – остроугольный, прямоугольный или тупоугольный.

44.Написать программу, которая определяет можно ли построить параллелограмм из отрезков с длинами a , b , c , d .

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

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

47.Написать программу для выполнения логической операции «сложения по модулю 2» двух логических переменных.

48.Написать программу для выполнения логической операции «штрих Шеффера» для двух логических переменных.

49.Определить две функции max и min, вычисляющие, соответственно, максимум и минимум из двух величин. С их помощью при данных a, b, c вычислить величину

t

max a,a b min a,b c

1 min c,c 4a max a bc,b 1,a b 15

50. Даны x, y, n. Вычислить величину

57

w f x,n f y

2

,n 1 , где

f x,n coskx .

 

 

 

 

 

n

 

1 f x y 1,n 2

 

k 1

1 k2

 

51. Даны n, массивы x, y – по n элементов. Определить функцию, вычисляющую их скалярное произведение

n1

xi yi . С помощью этой функции вычислить величину

i0

 

 

 

 

n

 

 

n

0;

xi2,

если xi yi

u i1

 

 

i1

 

n

2

,

иначе

 

yi

 

i1

 

 

 

 

52.

Логической переменной t присвоить значение true, ес-

 

ли уравнения x2+6,2x+a2=0 и x2+ax+b–1=0 имеют веще-

 

ственные корни, и при этом оба корня первого уравне-

 

ния лежат между корнями второго. И присвоить t зна-

 

чение false во всех остальных случаях. Вычисление

 

дискриминанта «абстрактного» квадратного уравнения

 

ax2+bx+c=0 оформить как функцию, нахождение веще-

 

ственных корней – как другую функцию.

 

53.

Написать программу поиска наибольшего из четырёх

 

чисел с использованием подпрограммы поиска больше-

 

го из двух чисел.

 

 

 

54.

Написать

программу

вычисления

суммы

 

1!+2!+3!+…+n! с использованием функции вычисления

 

факториала числа k.

 

 

 

55.

Даны

координаты

вершин

многоугольника:

(x1, y1), (x2, y2), … , (x10, y10). Написать программу для вычисления его периметра. Вычисление расстояния между вершинами оформить как функцию.

56.Написать процедуру, проверяющую проверку натурального числа на простоту (отсутствие нетривиальных делителей). Выписать все простые числа от 2 до 500.

58

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

58.Определить функцию, вычисляющую сумму k-й строки матрицы a(m n). С ее помощью вычислить сумму строки с номером 3 заданной матрицы размера 5 7.

59.Определить функцию, вычисляющую наименьший элемент k-й строки матрицы a(m n). С ее помощью вычислить наименьший элемент последней строки заданной матрицы размера 6 5.

60.Определить функцию, вычисляющую наибольший элемент k-го столбца матрицы a(m n). С ее помощью вычислить наибольший элемент предпоследнего столбца заданной матрицы размера 5 5.

Тема 10. Структуры данных

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

Пример 1. Составить программу с вводом и выводом данных для структуры, содержащей поля: название направления; количество групп; общее число студентов; количество преуспевающих студентов.

#include <stdio.h> #define LimS 100 #define LimG 10

struct Tutor //Объявляется структурный тип //данных под именем Tutor

{char name_f[];

//название направления

int n_group;

//число групп

int n_stud;

//общее число студентов

int n_estud; //число преуспевающих студентов

59

};

int main(){

struct Tutor T;//Объявление переменной типа //структура

printf("Введите название направления\n"); scanf("%s",T.name_f);

do{

printf("Введите количество групп 0<g<=%d ",LimG);

scanf("%d",&T.n_group); }while(T.n_group<=0 || T.n_group>LimG);

do{

printf("Введите общее количество студентов

0<n<=%d ",LimS); scanf("%d",&T.n_stud); }while(T.n_stud<=0 || T.n_stud>LimS);

do{

printf("Введите количество преуспевающих сту-

дентов 0<=ne<=%d ",LimS); scanf("%d",&T.n_estud); }while(T.n_estud<0 || T.n_estud>LimS);

printf("Направление: %s\n",T.name_f); printf("Число групп: %d\n",T.n_group); printf("Число студентов: %d\n",T.n_stud); printf("Число преуспевающих студентов:

%d\n",T.n_estud);

return 1;

}

Пример 2. В данном примере рассматривается целый массив из элементов типа структуры Tutor из предыдущего примера. Для обработки данных массива структур определены три функции InputS, OutputS и ProzentS, каждая с двумя формальными параметрами. В качестве первого параметра фигурируют массивы структур. Первые две функции предназначены, соответственно, для ввода и вывода данных массива. С помощью третьей функции вычисляется процент преуспевающих студентов относительно общего количества студентов.

60

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]