Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
17.04.2015
Размер:
26.5 Кб
Скачать

Функции

Приступая к решению задач этого раздела, следует вспомнить, что:

для передачи данных в функцию надо использовать только параметры. Глобальные переменные, т. е. переменные, объявленные вне функции, использовать не рекомендуется;

• тип каждого фактического параметра (константы или переменной) типом соответствующего формального параметра, указанного в объявлении функции;

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

параметра должен быть указан адрес переменной.

Задачи

1. Написать функцию, которая вычисляет объем цилиндра.

Параметрами функции должны быть радиус и высота цилиндра.

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

  1. Написать функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде одного из знаков: >, < или =,

  1. Написать функцию, которая вычисляет сопротивление цепи,состоящей из двух резисторов. Параметрами функции являются величины сопротивлений и тип соединения (последователь-ное или параллельное). Функция должна проверять корректность параметров: если неверно указан тип соединения, то функция должна возвращать - 1.

  1. Написать функцию, которая вычисляет значение а^b. Числа а и b могут быть любыми дробными положительными числами.

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

  1. Написать функцию "Факториал" и программу, использующую эту функцию для вывода таблицы факториалов.

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

Исходными данными для функции являются: величина вклада, процентная ставка (годовых) и срок вклада (количество дней).

9. Написать функцию glasn, которая возвращает 1, если символ, полученный функцией в ка-честве аргумента, является гласной буквой русского алфавита, и ноль — в противном случае.

  1. Написать функцию sogl, которая возвращает 1, если символ, полученный функцией в ка-честве аргумента, является согласной буквой русского алфавита, и О — в противном случае.

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

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

уравнения корней: 2 — два разных корня, 1 — корни одинаковые, О — уравнение не имеет решения. Кроме того, функция должна проверять корректность исходных данных. Если исходные данные неверные, то функция должна возвращать - 1.

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

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

  1. Написать функцию, которая вычисляет объем и площадь поверхности параллелепипеда.

16. Написать функцию frame, которая выводит на экран рамку.В качестве параметров функции должны передаваться координатылевого верхнего угла и размер рамки.

Факультатив

  1. Написать функцию, обеспечивающую ввод с клавиатуры целого положительного числа. При нажатии клавиши соответствующий символ должен появляться на экране только в том случае, если этот символ является цифрой. Функция должна позволять редактировать введенное число при помощи клавиши <Backspace>. При нажатии клавиши <Enter> функция должна завершать работу и возвращать введенное число.

18. Написать функцию, обеспечивающую ввод с клавиатуры дробного числа. При нажатии клавиши соответствующий символ должен появляться на экране только в том случае, если этот символ является допустимым в данной позиции. Например, функция не должна допускать ввод более чем одной точки и знака минус не в первой позиции. Функция должна позволять редактировать введенное число при помощи клавиши <Backspace>.

При нажатии клавиши <Enter> функция должна завершать работу и возвращать введенное число.

  1. Написать программу, реализующую игру "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();

}