Задачи по программированию на СС++. Учебно-методическое пособие
.pdf{float a,b,x;
printf("Введите a,b,x!\n"); //Запрос на ввод scanf("%f%f%f",&a,&b,&x);
if((a<=x)&&(x<=b)) printf("On"); else
if(x<a) printf("Left");else printf("Right"); return 1;
}
Пример 2. Программа решения квадратного уравнения, в которой применяется условный оператор в полной форме. Кроме того, показано, что если при каком-то условии надо выполнить несколько операторов, то их необходимо объединить фигурными скобками, т.е. представить их в виде составного оператора.
Алгоритм:
–вводятся значения коэффициентов квадратного уравнения;
–вычисляется дискриминант;
–если дискриминант не меньше нуля, то вычисляются и выводятся значения корней:
–если дискриминант отрицателен, то выводится сообщение об отсутствии действительных корней.
#include <stdio.h> #include <math.h> int main() {
float a,b,c,x1,x2,d; printf("Input a,b,c:\n");
printf("Input a\n"); scanf("%f" ,&a); printf("Input b\n"); scanf("%f" ,&b); printf("Input c\n"); scanf("%f" ,&c); d=pow(b,2)-4*a*c;
if (d>=0)
{x1=(-b+sqrt(d))/2/a; x2=(-b-sqrt(d))/2/a; printf("Output x1=%6.2f \n",x1); printf("Output x2=%6.2f \n",x2);}
else printf("No real roots"); return 1;
}
11
Пример 3. Программа для решения следующей задачи. Определить, равен ли остаток от деления числа a на число b одному из заданных чисел c или d ? Новшеством по сравнению с предыдущими примерами является более сложная конструкция условного выражения.
#include <stdio.h> int main(){
int a, b, c, d; printf(”Введите a и b ”); scanf(”%d%d”,&a,&b); printf(”Введите c и d”); scanf(”%d%d”,&c,&d);
if (a % b == c || a % b == d) printf(”Остаток от деления числа %d на %d
равен %d или %d”,a,b,c,d);
else
printf(”Остаток от деления числа %d на
%d не равен ни %d,ни %d”,a,b,c,d); return 1;
}
Задачи
1.Даны три целых числа. Найти количество положительных и отрицательных чисел в исходном наборе.
2.Даны три вещественных числа. Вывести вначале наименьшее, а затем наибольшее из двух оставшихся чисел.
3.Даны четыре вещественных числа. Найти произведение двух меньших из них.
4.Даны четыре целых числа. Найти сумму двух больших из них.
5.Даны три целых числа. Вывести вначале наибольшее, а затем из оставшихся – наименьшее.
6.Даны четыре вещественных числа. Найти количество отрицательных чисел в исходном наборе.
12
7.Из четырех данных чисел выбрать наибольшее.
8.Значения четырех переменных поменять местами так, чтобы они оказались упорядоченными по возрастанию.
9.Значения четырех переменных поменять местами так, чтобы они оказались упорядоченными по убыванию.
10.Даны три числа. Вывести порядковый номер большего из них.
11.Даны три числа. Вывести вначале большее, а затем меньшее из них.
12.Даны три числа. Вывести вначале меньшее, а затем меньшее из оставшихся.
13.Даны три переменные вещественного типа: A , B , C . Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в C – большее.
14.Даны три числа. Найти среднее из них (то есть число, расположенное между наименьшим и наибольшим).
15.Даны три числа. Найти сумму двух наибольших из них.
16.Даны три переменные вещественного типа: A , B , C . Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное.
17.Даны три переменные вещественного типа: A , B , C . Если их значения упорядочены по возрастанию или убыванию, то утроить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A , B , C .
18.Даны три целых числа, одно из которых отлично от двух других, равных между собой. Определить порядковый номер числа, отличного от остальных.
19.Даны четыре целых числа, одно из которых отлично от трех других, равных между собой. Определить порядковый номер числа, отличного от остальных.
13
20.На числовой оси расположены три точки: A , B , C . Определить, какая из двух точек B или C расположена ближе к A , и вывести на экран эту точку и ее расстояние от точки A .
21.Даны четыре целых числа, одно из которых отлично от трех других, равных между собой. Вывести порядковый номер первого из равных чисел.
22.Даны положительные вещественные числа A , B , C . Выяснить, можно ли построить треугольник с такими длинами сторон?
23.Известны площади круга и квадрата. Определить, уместится ли круг в квадрате?
24.Известны площади круга и квадрата. Определить, уместится ли квадрат в круге?
25.Дано двузначное число. Определить, какая из его цифр больше: первая или вторая?
26.Дано двузначное число. Определить, одинаковы ли его цифры.
27.Дано двузначное число. Определить, больше ли заданного числа a сумма его цифр.
28.Дано двузначное число. Определить, кратна ли трем сумма его цифр.
29.Дано трехзначное число. Определить, какая из его цифр больше: первая или последняя.
30.Дано трехзначное число. Определить, равен ли квадрат этого числа сумме кубов его цифр.
31.Дано трехзначное число. Определить, является ли сумма его цифр двузначным числом.
32.Дано трехзначное число. Определить, является ли произведение его цифр трехзначным числом.
33.Дано трехзначное число. Определить, больше ли числа a произведение его цифр.
34.Дано трехзначное число. Определить, кратна ли пяти сумма его цифр.
14
35.Дано трехзначное число. Верно ли, что все его цифры одинаковые?
36.Дано трехзначное число. Определить, есть ли среди его цифр одинаковые?
37.Дано четырехзначное число. Определить, равна ли сумма двух первых его цифр сумме двух его последних цифр.
38.Дано четырехзначное число. Определить, кратна ли трем сумма его цифр.
39.Дано трехзначное число. Определить, кратно ли четырем произведение его цифр.
40.Дано трехзначное число. Определить, кратно ли произведение его цифр числу a .
41.Дано натуральное число. Верно ли, что оно заканчива-
ется четной цифрой?
42. Определить, является ли треугольник со сторонами a , b , c равнобедренным.
43.Дано двузначное число. Определить, входит ли в него цифра 3.
44.Дано трехзначное число. Определить, входят ли в него цифра 6.
45.Дано четырехзначное число. Определить, входит ли в него цифра 4.
46.Даны два числа. Если квадратный корень из второго числа меньше первого числа, то увеличить второе число в пять раз.
47.Даны три вещественных числа. Возвести в квадрат те из них, значения которых отрицательны.
48.Дано натуральное число n . Определить, является ли оно палиндромом. Число-палиндром можно читать справа налево и слева направо одинаково. Например, 5; 44; 151; 542245.
49.Даны a, b. Найти решения уравнения ax=b (во всех ва-
риантах: a≠0, a=0).
15
50.Даны a, b. Найти решения неравенства ax<b (во всех вариантах).
51.Даны длины трех отрезков a, b, c. Выяснить, существует ли треугольник с такими сторонами, если существу-
ет, то вычислить его площадь по формуле Герона:
S |
p p a p b p c , где |
p |
a b c |
. Если не су- |
|
||||
|
|
2 |
|
|
ществует, то вывести сообщение «треугольник не существует».
52.Найти вещественные корни уравнения ax2 bx c 0 . Задачу сделать в двух вариантах: а) a 0; б) a может быть любым.
53.Найти корни биквадратного уравнения ax4+bx2+c=0. Если корней нет, то вывести сообщение об этом.
54.Имеется кирпич со сторонами a, b, c и проем в стене со сторонами x, y. Выяснить, пройдет ли кирпич через проем (параллельно сторонам проема).
55.Даны x, y — координаты точки на плоскости. Выяснить, принадлежит ли эта точка второй четверти кольца с центром в начале координат, малым радиусом r и большим радиусом R (r и R даны).
Тема 3. Оператор-переключатель
Пример 1. Программа демонстрирует работу операторапереключателя, который в зависимости от порядкового номера дня недели (1, 2, …, 7) выводит на экран его название (понедельник, вторник, …, воскресенье). Для вывода единственного правильного названия дня недели требуется оператор перехода break, который осуществляет выход из переключателя. В противном случае после вывода нужного названия будут выводиться все последующие названия дней недели.
16
#include <stdio.h> int main()
{int day;
printf(”Программа выводит названия дня недели по его номеру\n”);
printf(”Введите номер дня недели от 1 до 7”); scanf(”%d”,&day);
switch (day){
case 1 : printf(”Понедельник\n”); break; case 2 : printf(”Вторник\n”); break; case 3 : printf(”Среда\n”); break; case 4 : printf(”Четверг\n”); break; case 5 : printf(”Пятница\n”); break; case 6 : printf(”Суббота\n”); break; case 7 : printf(”Воскресенье\n”);
}
return 0;
}
Пример 2. Программа в этом примере показывает работу оператора-переключателя в полной форме. В зависимости от значения, вводимого с клавиатуры натурального числа n, на экран выводятся определенные сообщения. Оператор перехода break позволяет при необходимости выходить из переключателя.
При вводе с клавиатуры значения 1 переключатель выводит это значение на экран, но работу не прекращает и переходит на следующую строчку и выполняет следующий вывод. Далее следует break и завершение работы переключателя. Соответствующим образом обрабатываются и другие значения n. Ветвь default предназначена для вывода соответствующего сообщения, в случае несовпадения натурального числа ни с одной из представленных констант.
В соответствии с этими замечаниями операторпереключатель выводит на экран:
–«n=1 n=2», если вводимое с клавиатуры значение n равно 1;
–«n=2», если вводимое с клавиатуры значение n равно 2;
17
–«n=3||4», если вводимое с клавиатуры значение n равно 3 или 4;
–«n<1||n>4» во всех остальных случаях.
#include<stdio.h> int main()
{int n;
printf("Введите n:0<n<5\n"); scanf("%d",&n);
switch(n)
{case 1:printf("n=1\t");
case 2:printf("n=2\n");break;
case 3:case 4:printf("n=3||4\n");break; default:printf("n<1||n>4");
}
return 0;
}
Задачи
1.Составить программу, которая в зависимости от порядкового номера месяца (1,2,…,12) выводит на экран его название (январь, февраль, …, декабрь).
2.Составить программу, которая в зависимости от порядкового номера месяца (1,2,…,12) выводит на экран время года, к которому относится этот месяц.
3.Составить программу, которая в зависимости от порядкового номера месяца (1, 2, …, 12) выводит на экран количество дней в этом месяце. В случае, когда год не является високосным.
4.Составить программу, которая в зависимости от порядкового номера тарифной зоны (I, II, III, IV, V, VI) выводит на экран стоимость минуты разговора по телефону.
5.С начала 2015 года по некоторый день прошло n 12 месяцев и 2 дня. Определить название месяца (январь, февраль и т.п.) этого дня.
18
6.Дата некоторого дня характеризуется двумя натуральными числами m (порядковый номер месяца) и n (число). По заданным n и m определить дату предыдущего дня (принять, что n и m не характеризуют 1 января и что год не високосный).
7.Дата некоторого дня характеризуется двумя натуральными числами m (порядковый номер месяца) и n (число). По заданным n и m определить дату следующего дня (принять, что n и m не характеризуют 31 декабря и что год не високосный).
8.В старояпонском календаре был принят 60-летний цикл, состоящий из 12-летний подциклов. Подциклы обозначались названиями цвета: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла года носили названия животных: крыса, бык, тигр, заяц, дракон, змея, лошадь, овца, обезьяна, курица, собака и свинья. Например, 1984 год – год начала очередного цикла – назывался годом зеленой крысы. Составить программу, которая по заданному номеру года нашей эры n печатает его название по старояпонскому календарю, когда значение n больше или равно 1984.
9.В старояпонском календаре был принят 60-летний цикл, состоящий из 12-летний подциклов. Подциклы обозначались названиями цвета: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла года носили названия животных: крыса, бык, тигр, заяц, дракон, змея, лошадь, овца, обезьяна, курица, собака и свинья. Например, 1984 год – год начала очередного цикла – назывался годом зеленой крысы. Составить программу, которая по заданному номеру года нашей эры n печатает его название по старояпонскому календарю, когда значение n может быть любым натуральным числом.
19
10.Дано целое число n (1 n 99), определяющее возраст человека (в годах). Для этого числа напечатать фразу «мне n лет», учитывая при этом, что при некоторых значениях n слово «лет» надо заменить на слово «год» или «года».
11.Дано натуральное число n (1 n 9999), определяющее стоимость товара в копейках. Выразить (текстом) его стоимость в рублях и копейках, например, 3 рубля 21 копейка, 15 рублей 5 копеек, 1 рубль ровно и т.п.
12.Дано натуральное число n (1 n 1188), определяющее возраст человека (в месяцах). Выразить (текстом) возраст в годах и месяцах, например, 22 год 10 месяцев, 52 года 1 месяц, 46 лет ровно и т.д.
13.Составить программу, которая по введенному номеру по журналу выводит фамилию студента вашей группы (либо сообщение, что студента с таким номером нет).
14.По введенному номеру музыкальной ноты (до, ре, ми, фа, соль, ля, си) вывести ее словесное наименование, например, 3 – ми.
15.По введенному номеру дня недели вывести количество часов занятий в вашей группе в этот день.
16.Чтобы определить на какую цифру оканчивается квадрат целого числа, достаточно знать последнюю цифру самого числа. Написать программу, которая по одной из цифр 0,1,2,3,4,5,6,7,8,9, – последней цифре числа п – находит последнюю цифру квадрата этого числа.
17.Написать программу калькулятор, которая выполняет арифметические действия, задаваемые в виде: знак_операции, операнд1, операнд2, где знак_операции: 1 – сложение, 2 – вычитание, 3 – умножение, 4 – деление.
18.Написать программу, которая по заданному номеру аудитории, выводит номер этажа в учебном корпусе. Например, 108 – 1 этаж, 257 – второй этаж и т.п.
20
