Курс ПЯВУ 2 сем / Задачник тысячи / 9. Функции / Функции
.odtФункции
Приступая к решению задач этого раздела, следует вспомнить, что:
для передачи данных в функцию надо использовать только параметры. Глобальные переменные, т. е. переменные, объявленные вне функции, использовать не рекомендуется;
• тип каждого фактического параметра (константы или переменной) типом соответствующего формального параметра, указанного в объявлении функции;
• если параметр функции используется для возврата результата,то в объявлении функции этот параметр должен быть ссылкой, а в инструкции вызова функции в качестве фактического
параметра должен быть указан адрес переменной.
Задачи
1. Написать функцию, которая вычисляет объем цилиндра.
Параметрами функции должны быть радиус и высота цилиндра.
2. Написать функцию, которая возвращает максимальное из двух целых чисел, полученных в качестве аргумента.
-
Написать функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде одного из знаков: >, < или =,
-
Написать функцию, которая вычисляет сопротивление цепи,состоящей из двух резисторов. Параметрами функции являются величины сопротивлений и тип соединения (последователь-ное или параллельное). Функция должна проверять корректность параметров: если неверно указан тип соединения, то функция должна возвращать - 1.
-
Написать функцию, которая вычисляет значение а^b. Числа а и b могут быть любыми дробными положительными числами.
6. Написать функцию Procent, которая возвращает процент от полученного в качестве аргумента числа.
-
Написать функцию "Факториал" и программу, использующую эту функцию для вывода таблицы факториалов.
8. Написать функцию Dohod, которая вычисляет доход по вкладу.
Исходными данными для функции являются: величина вклада, процентная ставка (годовых) и срок вклада (количество дней).
9. Написать функцию glasn, которая возвращает 1, если символ, полученный функцией в ка-честве аргумента, является гласной буквой русского алфавита, и ноль — в противном случае.
-
Написать функцию sogl, которая возвращает 1, если символ, полученный функцией в ка-честве аргумента, является согласной буквой русского алфавита, и О — в противном случае.
-
Написать функцию, которая возвращает преобразованную кверхнему регистру строку, полученную в качестве аргумента.
12. Написать функцию, обеспечивающую решение квадратного уравнения. Параметрами функции должны быть коэффициенты и корни уравнения. Значение, возвращаемое функцией, должно передавать в вызывающую программу информацию о наличии у
уравнения корней: 2 — два разных корня, 1 — корни одинаковые, О — уравнение не имеет решения. Кроме того, функция должна проверять корректность исходных данных. Если исходные данные неверные, то функция должна возвращать - 1.
-
Написать функцию, которая выводит на экран строку, состоящую из звездочек. Длина строки (количество звездочек) является параметром функции.
-
Написать функцию, которая выводит строку, состоящую из одинаковых символов. Длина строки и символ являются параметрами процедуры.
-
Написать функцию, которая вычисляет объем и площадь поверхности параллелепипеда.
16. Написать функцию frame, которая выводит на экран рамку.В качестве параметров функции должны передаваться координатылевого верхнего угла и размер рамки.
Факультатив
-
Написать функцию, обеспечивающую ввод с клавиатуры целого положительного числа. При нажатии клавиши соответствующий символ должен появляться на экране только в том случае, если этот символ является цифрой. Функция должна позволять редактировать введенное число при помощи клавиши <Backspace>. При нажатии клавиши <Enter> функция должна завершать работу и возвращать введенное число.
18. Написать функцию, обеспечивающую ввод с клавиатуры дробного числа. При нажатии клавиши соответствующий символ должен появляться на экране только в том случае, если этот символ является допустимым в данной позиции. Например, функция не должна допускать ввод более чем одной точки и знака минус не в первой позиции. Функция должна позволять редактировать введенное число при помощи клавиши <Backspace>.
При нажатии клавиши <Enter> функция должна завершать работу и возвращать введенное число.
-
Написать программу, реализующую игру "21". Действия по выдаче очередной карты игроку и компьютеру реализуйте в виде функции.
РЕШЕНИЯ
Задача 1
#include <stdio.h>
#include <conio.h>
#include <math.h> // для доступа к M_PI
// объем цилиндра
float veil(float h, float r)
{
return(M_PI*r*r*h);
}
void mainO
{
float r,h; // высота и радиус основания цилиндра
float v; // объем цилиндра
puts("Вычисление объема цилиндра");
printf("Введите высоту и радиус основания ->");
scanf("%f%f", &h, &r)/
V = veil (h, r) ;
printf("Объем цилиндра %3.2f\n", v);
printf("Для завершения нажмите <Enter>");
getch();
}
Задача 2
// Функция max возвращает максимальное из двух чисел
int max(int а, int b)
{
if (a > b)
return(a);
else
return (b) ;
}
Задача 3
// Функция compare возвращает результат сравнения чисел
//в виде символа отношения
tinclude "stdio.h"
#include "conio.h"
char compare(int a, int b)
{
char res;
if (a > b) res = '>';
else if (a < b) res = *<';
else res = *=';
return(res);
}
void mainO
{
int xl,x2; // сравниваемые числа
cheu: res; // результат сравнения
puts("Введите два целых числа и нажмите <Enter>");
printf("->");
scanf("%i%i", &xl, &x2);
res = compare(xl,x2); // вызов функции программиста
printf("%i %c %i\n", xl, res, x2);
puts("\nДля завершения работы программы \
нажмите <Enter>");
getch();
Задача 4
// Вычисляет сопротивление электрической цепи
float sopr( float rl, float г2, int t)
(
// rl,r2 - величины сопротивлений
// t - тип соединения:
// 1 - последовательное;
// 2 - параллельное.
// если тип соединения указан неверно,
//то функция возвращает -1
float г;
i f ( t==l) г = rl + г2;
e l s e i f (t== 2) г = г1*г2/(г1+г2);
else г = - 1;
return(г);
}
Задача 5
// Функция "факториал"
#include "stdio.h"
#include "conio.h"
unsigned int factor(int x)
{
unsigned int f = 1;
for (int i = 2; i <= x; i++)
f *= i;
return(f);
}
void main()
{
unsigned int f;
puts("ХпТаблица факториалов");
for (int n = 1; n <= 8; n++)
{
f = factor(n);
printf("%2i %u\n", n, f);
}
puts("\nДля завершения работы нажмите <Enter>");
getch();
}
Задача 6
// Функция вычисляет доход по вкладу
float dohod(float sum, // сумма вклада
float stavka, // процентная ставка (годовых)
int srok) // срок вклада (дней)
{
return(sum*(stavka/100/365)*srok); // 365 кол-во дней в
/ / году
}
Задача7
// Функция проверяет, является ли символ гласной буквой
int glasn(char ch)
{
static char gl[] ="АаЕеИиОоУуЫыЭэЮюЯя\0";
int i = 0;
while (gl[i] && gl[i] != ch)
i++;
if ( gl[i] )
return(1);
else return(0);
Задача 8
// Функция upcase
#include "stdio.h"
#include "conio.h"
// функция преобразования строчных букв в прописные
char* upcase (chau: *st)
{
int i = 0;
while ( st[i] )
164 C/C-i-f- в задачах и примерах
{
if (st[i] >= 'а' && st[i] <= 'z' || // латинские
st[i] >= *а' && st[i] <= 'п') // русские
st[i] -= 32;
else if (st[i] >= 'p' && st[i] <= 'яМ
st[i] -= 80;
i++;
}
return St;
}
// пример использования функции upcase
void main()
{
char St [80];
puts("Введите строку текста и нажмите <Enter>");
printf("->");
gets(St);
puts(upcase(st));
puts("\nДля завершения нажмите <Enter>");
getch();
}
Задача 9
// Функция решения квадратного уравнения
#include "stdio.h"
tinclude "conio.h"
#include "math.h"
int kvadur(float a, float b, float c, // коэф-ты уравнения
float *xl, float *x2) // корни уравнения
// значение функции - количество корней
// или -1, если неверные исходные данные
{
float d; // дискриминант
if (а == 0) retum(-l);
d = b*b-4*a*c;
if (d < 0)
return(0); // уравнение не имеет решения
*х1 = (-b+sqrt(d))/(2*а);
*х2 = (-b-sqrt(d))/(2*a);
i f (*х1 !- *х2) retum(2);
e l s e retxim (1) ;
}
// проверка работоспособности функции
void main О
{
float a,b,с; // коэффициенты уравнения
float х1,х2; // корни уравнения
int п; // кол-во корней
puts("\пРешение квадратного уравнения");
puts("Введите в одной строке коэффициенты и нажмите\
<Enter>");
printf("->");
scanf("%f%f%f", &a, &b, &c);
switch (kvadur(a,b,c,&xl, &x2))
{
case -1: puts("Ошибка исходных данных.");break;
case 0: puts("Уравнение не имеет решения.");break;
case 1: printf("Корни одинаковые: x=%3.2f", xl);break;
case 2: printf("xl=%3.2f x2=%3.2f", xl, x2);
}
puts("\nДля завершения работы нажмите <Enter>");
getch();
}
Задача 10
// Функция starline выводит строку из звездочек
#include "stdio.h"
#include "conio.h"
// выводит строку из звездочек
void starline{int len)
{
for (int i = 0; i < len; i++)
putch('* M;
}
void main()
(
starline(10);
puts("\nДля завершения работы нажмите <Enter>");
getch();
}