先决条件: C / C++中的switch语句,C / C++中的函数,C和C++中的循环,带有示例的C / C++ do-while循环
编写一个菜单驱动程序,以执行以下数组中的各种基本操作:
- 打印数组中的所有偶数值。
- 打印数组中的所有奇数值。
- 数组中元素的总和和平均值。
- 在数组中找到最大和最小元素。
- 从阵列中删除重复项。
方法:
- 检查数字是奇数还是偶数:有两种方法可以实现此目的:
- 通过对1与该位进行按位与运算,如果结果为1,则该数字为奇数,否则为偶数。
- 由于其可除以2。如果不能将其除以2,则数字为奇数,否则为偶数。
- 找到总和,然后将总和除以元素总数:通过遍历整个数组并将其添加到变量总和中。将总数除以总数。元素以求平均值。
- 在数组中找到最大值和最小值:将min和max的值分别初始化为前两个元素的最小值和最大值。从3开始,将每个元素与max和min进行比较,并相应地更改max和min。如果元素小于min,则更改min,否则,否则,则更改max,否则,忽略该元素
- 从数组中删除重复项:使用内置sort()函数对数组进行排序。创建一个辅助数组temp []来存储唯一元素。遍历输入数组,然后将arr []的唯一元素一一复制到temp []。此外,还要跟踪唯一元素的数量。将此计数设为j。将j个元素从temp []复制到arr []并返回j
- 反向打印数组:反转数组或字符串
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to diplay all the menu in
// the current program
void menu()
{
cout << "\n\t\tMENU :";
cout << "\nPress 1 to print even "
<< "valued elements\n";
cout << "Press 2 to print odd valued"
<< " elements\n";
cout << "Press 3 to calculate sum "
<< "and average of elements in "
<< "the array\n";
cout << "Press 4 to print maximum"
<< " and minimum element "
"in the array\n";
cout << "Press 5 to remove the "
<< "duplicacy in array \n";
cout << "Press 6 to print array"
<< " in reverse\n";
cout << "Press 7 to exit\n";
}
// Function to print even valued
// elements in the array arr[]
void even(int arr[], int len)
{
cout << "Even numbers in the "
<< "array are - ";
for (int i = 0; i < len; i++) {
if (arr[i] % 2 == 0) {
cout << arr[i] << "\t";
}
}
}
// Function to print odd valued
// elements in the array arr[]
void odd(int arr[], int len)
{
cout << "Odd numbers in the "
<< "array are - ";
for (int i = 0; i < len; i++) {
if (arr[i] % 2 != 0) {
cout << arr[i] << "\t";
}
}
}
// Function to print sum and the
// average of elements in array
void SumAverage(int arr[], int len)
{
int sum = 0;
for (int i = 0; i < len; i++) {
sum += arr[i];
}
cout << "\n Sum =" << sum;
cout << "\n Average =" << sum / len;
}
// Function to print maximum and
// minimum elements in an array
void MaxMin(int arr[], int len)
{
int max = arr[1], min = arr[0];
// Traverse the array
for (int i = 0; i < len; i++) {
// Update the maximum
if (arr[i] > max)
max = arr[i];
// Update the minimum
if (arr[i] < min)
min = arr[i];
}
cout << "Maximum = " << max
<< "\t";
cout << "Minimum = " << min;
}
// Function to remove duplicate
// elements in an array
void RmDuplicacy(int arr[], int n)
{
if (n == 0 || n == 1)
cout << "No Duplicates";
// sorting array using inbuilt
// sort() function
sort(arr, arr + n);
int temp[n];
// Start traversing elements
int j = 0;
for (int i = 0; i < n - 1; i++)
// If current element is not
// the same as the next element
// then store the current element
if (arr[i] != arr[i + 1])
temp[j++] = arr[i];
// Store the last element as whether
// it is unique or repeated, it hasn't
// stored previously
temp[j++] = arr[n - 1];
// Modify original array
for (int i = 0; i < j; i++)
arr[i] = temp[i];
// j is now the size of the array
// without duplicates
for (int i = 0; i < j; i++) {
cout << arr[i] << " ";
}
}
// Function to print array
// in reverse order
void Reverse(int arr[], int len)
{
cout << "\nArray in reverse"
<< " order:\n ";
for (int i = len - 1; i >= 0; i--) {
cout << arr[i] << "\t";
}
}
// Driver Code
int main()
{
int arr[100], i, num, choice;
printf("Enter the size of "
"an array :\n");
cin >> num;
printf("Enter the elements of "
"the array :\n");
for (i = 0; i < num; i++) {
cin >> arr[i];
}
do {
cout << "\n";
menu();
cout << "\nEnter your "
<< "choice:\n ";
cin >> choice;
switch (choice) {
case 1:
even(arr, num);
break;
case 2:
odd(arr, num);
break;
case 3:
SumAverage(arr, num);
break;
case 4:
MaxMin(arr, num);
break;
case 5:
RmDuplicacy(arr, num);
break;
case 6:
Reverse(arr, num);
break;
case 7:
exit(0);
break;
default:
cout << "INVALID CHOICE :-(";
}
} while (choice != 7);
return 0;
}
输出: