Минимальное число последовательности, таких чисел 4



Press any key to continue

Задача 4.4. Дано натуральное число N. Определить самую большую цифру и ее позицию в числе (N=573863, наибольшей является цифра 8, ее позиция – четвертая слева).

#include <stdio.h>

#include <math.h>

int main()

{

long int N,M,kol=1;

int max,pos,i;

printf("\n Введите N>0\n");

scanf("%ld",&N);

M=N;

while(M/10>0)

{

kol++;

M/=10;

}

printf("В числе %ld %ld разрядов\n",

N,kol);

for(M=N,max=-1,pos=1,i=kol;i>1;i--)

{

if (M%10>max)

{

max=M%10;

pos=i;

}

M/=10;

}

printf("В числе %ld максимальная цифра %d, ее номер %d\n",

N,max,pos);

}

Задача 4.5. Определить количество простых чисел в интервале от N до M, где N и M – натуральные числа.

#include <stdio.h>

#include <math.h>

int main()

{

unsigned int N,M,i,j,pr,k;

do

{

printf("\n Введите N и M\n");

scanf("%u%u",&N,&M);

}while(M<N);

for(k=0,i=N;i<=M;i++)

{

for (pr=1,j=2;j<i/2;j++)

if (i%j==0)

{

pr=0;

break;

}

if (pr==1)

{

printf("\nЧисло %u - простое\n",i);

k++;

}

}

if (k)

printf("В интервале от %u до %u - %u простых чисел",

N,M,k);

else

printf("В интервале от %u до %u - нет простых чисел",

N,M);;

}

 

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

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

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

3. Что называется безусловным циклическим алгоритмом?

4. Укажите конструкцию оператора цикла for.

5. В чем состоит отличие оператора while от оператора do-while?

6. Основное назначение операторов break, continue.

 


Глава 5. Использование функций при программировании на С/С++ функциях

Структура программ

Подпрограмма – именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. В языке С/С++ подпрограммы реализованы в виде функций. Функция принимает параметры и возвращает единственное скалярное значение. Как известно, программа на С/С++ состоит из одной или нескольких функций. Функция должна быть описана перед своим использованием. Описание функции состоит из заголовка и тела функции.

Заголовок_функции

{

Тело_функции

}

Заголовок функции имеет вид

type имя_функции ([список параметров])

type – тип возвращаемого функцией значения;

список параметров – список передаваемых в функцию величин, которые отделяются запятыми, каждому параметру должен предшествовать его тип;

 

В случае, если вызываемые функции идут до функции main, структура программы будет такой.

Директивы компилятора

...

Тип_результата f1(Список_переменных)

{

Операторы

}

Тип_результата f2(Список_переменных)

{

Операторы

}

...

Тип_результата fn(Список_переменных)

{

Операторы

}

Int main(Список_переменных)

{

Операторы основной функции, среди которых могут операторы вызова функций f1, f2, ..., fn

}

В случае, если вызываемые функции идут после функции main, структура программы будет такой (заголовки функций должны быть описаны до функции main() ). Опережающие заголовки функций называют прототипами функций.

Директивы компилятора

...

Тип_результата f1(Список_переменных);

Тип_результата f2(Список_переменных);

...

Тип_результата fn(Список_переменных);

Int main(Список_переменных)

{

Операторы основной функции, среди которых могут операторы вызова функций f1, f2, ..., fn

}

Тип_результата f1(Список_переменных)

{

Операторы

}

Тип_результата f2(Список_переменных)

{

Операторы

}

...

Тип_результата fn(Список_переменных)

{

Операторы

}

Для того, чтобы функция вернула какое-либо значение, в ней должен быть оператор

return значение;

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

 

5.2. Передача параметров в С/С++

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

При обращении к функции фактические параметры передают свое значение формальным и больше не изменяются. Типы, количество и порядок следования формальных и фактических параметров должны совпадать. С помощью оператора return из функции возвращается единственное значение.

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

 

Решения практических задач.

Задача 5.1. Вводится последовательность целых чисел, 0 – конец последовательности. Найти минимальное среди простых чисел и максимальное, среди чисел, не являющихся простыми.

Целое число называется простым, если оно делится нацело только на самого себя и единицу. Алгоритм проверки, что число N является простым состоит в следующем: если разделим N без остатка хотя бы на одно число в диапазоне от 2 до N/2, то число не является простым. Если не найдем ни одного делителя числа, число N – простое. Проверку является ли число N простым оформим в виде отдельной функции с именем prostoe. Входным параметром функции будет целое число N, функция будет возвращать значение 1, если число простое и 0 – в противном случае.

 

#include "stdafx.h"

#include <iostream.h>

 

int prostoe(int N)

{

int i,pr;

if (N<1) pr=0;

else

for(pr=1,i=2;i<=N/2;i++)

if (N%i==0) {pr=0;break;}

return pr;

}

 

int main(int argc, char* argv[])

{

int kp=0,knp=0,min,max,N;

for (cout << "N=", cin>>N; N!=0; cout<<"N=", cin>>N)

if (prostoe(N))

{

kp++;

 if (kp==1) min=N;

 else if (N<min) min=N;

 }

 else

 {

knp++;

 if (knp==1) max=N;

 else if (N>max) max=N;

 }

if (kp>0) cout <<"min= "<<min<<"\t";

else cout <<"Net prostih";

if (knp>0) cout <<"max="<<max<<endl;

else cout <<"Net ne prostih";

return 0;

}

 

Задача 5.2. Вводится последовательность из N целых чисел, найти среднее арифметическое совершенных чисел и среднее геометрическое простых чисел.

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

При решении этой задачи понадобятся две функции:

-функция prostoe,

-функция soversh, которая определяет является ли число совершенным; входным параметром функции будет целое число N, функция будет возвращать значение 1, если число совершенным и 0 – в противном случае.

#include "stdafx.h"

#include <iostream.h>

#include <math.h>

int prostoe(int N)

{

int i,pr;

if (N<1) pr=0;

else

for(pr=1,i=2;i<=N/2;i++)

if (N%i==0) {pr=0;break;}

return pr;

}

int soversh(int N)

{

int i,S;

if (N<1) return 0;

else

for(S=0,i=1;i<=N/2;i++)

if (N%i==0) S+=i;

if (S==N) return 1;

else return 0;

}

int main(int argc, char* argv[])

{

int i,N,X,S,kp,ks;

long int P;

cout <<"N=";

cin>>N;

for(kp=ks=S=0,P=1,i=1;i<=N;i++)

{

cout <<"X=";

cin >> X;

if (prostoe(X))

{

kp++;P*=X;

}

if (soversh(X))

{

ks++;S+=X;

}

}

if (kp>0)

cout<<"SG="<<pow(P,(float)1/kp) <<endl;

else

cout<<"Net prostih";

if (ks>0)

cout <<"SA="<<(float)S/ks<<endl;

else cout<<"Net soversh";

}

 

 

Задача 5.3. Дано натуральное число N. Определить самую большую цифру и ее позицию в числе (N=573863, наибольшей является цифра 8, ее позиция – четвертая слева).

 

 

#include "stdafx.h"

#include <stdio.h>

#include <math.h>

int kol_raz(int M)

{

int k=0;

while(M/10>0)

{

k++;

M/=10;

}

return k;

}

int main()

{

long int N,M,kol=1;

int max,pos,i;

printf("\n N=");

// Ввод числа N.

scanf("%ld",&N);

// Вычисление количества позиций

// в числе (kol).

kol=kol_raz(N);

printf("V chisle %ld - %ld razryadov\n",

N,kol);

// Вычисление максимальной цифры в

// числе, и ее номера.

for(M=N, max=-1, pos=1, i=kol;i>1;i--)

{

if (M%10>max)

{

max=M%10;

pos=i;

}

M/=10;

}

// Вывод на экран максимальной цифры

// в числе, и ее номера.

printf("V chisle %ld maximalnaya tsifra %d,

ee nomer %d\n",N,max,pos);

}

 

5.4. Рекурсивные функции в С/С++

Под рекурсией в программировании понимается вызов функции из тела ее самой. В рекурсивных алгоритмах функция вызывает саму себя до выполнения какого-то условия.

long int factoial(int n) предназначена для вычисления факториала числа n.

 

 

#include "stdafx.h"

#include <iostream.h>

long int factorial(int n)

{

if (n<=1) return(n);

else

return(n*factorial(n-1));

}

int main()

{

int i;

long int f;

cout<<"i=";

cin>>i;

f=factorial(i);

cout<<i<<"!="<<f<<endl;

return 0;

}

2. float stepen(float a, int n) предназначена для возведения числа a в степень n.

#include "stdafx.h"

#include <iostream.h>

float stepen(float a, int n)

{

if (n==0) return(1);

else

if (n<0) return(1/stepen(a,-n));

else

return(a*stepen(a,n-1));

}

int main()

{

int i;

float s,b;

long int f;

cout<<"b=";

cin>>b;

cout<<"i=";

cin>>i;

s=stepen(b,i);

cout<<"s="<<s<<endl;

return 0;

}

3. long int fibonachi(int n) предназначена для вычисления n-го числа Фибоначчи.

Если нулевой элемент последовательности равен 0, первый – 1, а каждый последующий равен сумме двух предыдущих, то это последовательность чисел Фибоначчи (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... ).

#include "stdafx.h"

#include <iostream.h>

long int fibonachi(unsigned int n)

{

if ((n==0)||(n==1)) return(n);

else

return(fibonachi(n-1)+fibonachi(n-2));

}

int main(int argc, char* argv[])

{

int i;

long int f;

cout<<"i=";

cin>>i;

f=fibonachi(i);

cout<<"f="<<f<<endl;

return 0;

}

 

5.5. Область видимости переменных в функциях С/С++

По месту объявления переменные в языке Си можно разделить на три класса:

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

Например:

int main()

{

float s;

s=4.5;

}

int f1()

{

int s;

s=6;

}

int f2()

{

long int s;

s=25;

}

В функции main определена вещественная переменная s (типа float), ей присвоено значение 4.5, в функции f1 есть другая переменная s (типа int), ей присвоено значение 6, а в функции f2 есть еще одна переменная s (типа long int), ей присвоено значение 25.

 

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

Например:

#include <stdio.h>

float s;

int main()

{

s=4.5;

}

int f1()

{

s=6;

}

int f2()

{

s=25;

}

Определена глобальная переменная s (типа float), в функции main ей присваивается значение 4.5, в функции f1 – присваивается значение 6, а в функции f2 – присваивается значение 25.


Дата добавления: 2019-09-13; просмотров: 433; Мы поможем в написании вашей работы!

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






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