Минимальное число последовательности, таких чисел 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!