Поменять местами последний элемент с первым отрицательным - C (СИ)
Формулировка задачи:
Помогите поменять местами последний элемент с первым отрицательным,ибо у самого не получается
#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std;
char bufRus[256];
void main(void);
void rand_massiv(int*,int);
void klava_massiv(int*,int);
void vybor_massiva(void);
void vychislenia(int*,int);
char* Rus(const char*);
void main(void)
{
cout<<(Rus("Ввести в память машины с клавиатуры одномерный целочисленный массив, размером не менее 10 и не более 50 элементов\n"));
cout<<(Rus("Произвести манипуляции с массивом данных согласно условию, предложенному в варианте задания\n"));
cout<<(Rus("Вывести на экран исходный массив и данные, полученные согласно заданию в варианте\n"));
cout<<(Rus("Задача 1,вариант 7\n"));
vybor_massiva();
}
void vybor_massiva(void)
{
int p1, n;
int massiv[50];
int* ptmas;
ptmas= &massiv[0];
cout<<(Rus("Вы сами заполните числами одномерный целочисленный массив или заполнить за Вас\n"));
cout<<(Rus("случайными числами?\n1 - заполнить случайными числами, любое другое целое число - ввод с клавиатуры: "));
cin>>p1;
cout<<(Rus("\nУкажите размерность одномерного целочисленного массива,не менее 10 элементов: "));
cout<<(Rus("\nи не более 50\n"));
cin>>n;
while(n<10 ||n>50)
{
cout<<(Rus("\nОшибка: количество чисел должно не менее 10 и не более 500\n"));
cout<<(Rus("Укажите размерность одномерного целочисленного массива: "));
cin>>n;
}
if(p1==1)
{
rand_massiv(ptmas, n);
}
else
{
klava_massiv(ptmas, n);
}
vychislenia(ptmas, n);
}
void rand_massiv(int* ptmas_fun,int n)
{
int i;
srand(time(NULL));
for(i=0;i<n;i++)
{
*(ptmas_fun+i)=rand()%1998-999;
}
cout<<(Rus("\nИсходный массив:\n"));
for(i=0;i<n;i++)
{
cout<<*(ptmas_fun+i)<<" ";
if((i+1)%10==0)
cout<<"\n";
}
cout<<"\n\n";
}
void klava_massiv(int* ptmas_fun, int n)
{
int i;
cout<<"\n";
for(i=0;i<n;i++)
{
cout<<Rus("Введите ");
cout<<i;
cout<<Rus(" элемент массива : ");
cin>>*(ptmas_fun+i);
}
cout<<(Rus("\nИсходный массив:\n"));
for(i=0;i<n;i++)
{
cout<<*(ptmas_fun+i)<<" ";
if((i+1)%10==0)
cout<<"\n";
}
cout<<"\n\n";
}
void vychislenia(int* ptmas_fun, int n)
{
int i;
int r,r1,count=0;
for(i=0;i<n;i++)
{
if (*(ptmas_fun+i)<0)
{
r=*(ptmas_fun+i);
*(ptmas_fun+i)=r1;
count++;
cout<<endl<<endl;
}
}
if(i==n-1)
{
r1=*(ptmas_fun+i);
*(ptmas_fun+i)=r;
}
if(count==0)
{
cout<<(Rus("\nВ данном массиве нет отрицательных элементов элементов\n\n\n"));
}
else
{
cout<<(Rus("\nИтоговый массив:\n"));
for(i=0;i<n;i++)
{
cout<<*(ptmas_fun+i)<<" ";
if((i+1)%10==0)
cout<<"\n";
}
}
}
char* Rus(const char* text)
{
CharToOemA(text, bufRus);
return bufRus;
}Решение задачи: «Поменять местами последний элемент с первым отрицательным»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5
int
main()
{
int i;
int a[N];
srand(time(NULL));
for (i = 0; i < N; ++i)
{
a[i] = rand() % 21 - 10;
printf("%7d", a[i]);
}
puts("");
i = 0;
while (i < N && a[i] >= 0) ++i;
if (i < N)
{
int t = a[N-1];
a[N-1] = a[i];
a[i] = t;
}
for (i = 0; i < N; ++i)
printf("%7d", a[i]);
puts("");
return 0;
}
Объяснение кода листинга программы
Вывод программы: 1 2 3 4 5 7 -13 18 15 12 Объяснение:
- 1 — В начале программы объявляется массив
aтипаintразмеромN(5) и инициализируется случайными значениями от -10 до 10 с помощью функцииrand(). - 2 — Затем выводится первый набор значений массива
aв формате 7-ильного столбца с помощью функцииprintf(). - 3 — Во втором цикле программы, происходит поиск первого отрицательного числа в массиве
a. Для этого используется циклwhile, который выполняется до тех пор, покаiменьшеNи значениеa[i]больше или равно нулю. - 4 — Если такое число найдено, оно меняет местами с последним элементом массива
aс помощью временной переменнойt. - 5 — Затем второй набор значений массива
aвыводится с помощью функцииprintf(). - Возвращается 0, что означает успешное завершение программы.