#include <iostream> using namespace std; int getMaxIndex(int a[], int size = 10); int getMaxIndex(double a[], int size = 10); int getMaxIndex(char a[], int size = 10); int main() { int choice; cout << "请选择输入数据的类型:" << endl; cout << "1. 整数" << endl; cout << "2. 小数" << endl; cout << "3. 字符" << endl; cin >> choice; if (choice == 1) { int intArray[10]; cout << "请输入10个整数:" << endl; for (int i = 0; i < 10; i++) { cin >> intArray[i]; } int max_idx = getMaxIndex(intArray); cout << "最大值为:" << "a[" << max_idx <<"] = " << intArray[max_idx] << endl; } else if (choice == 2) { double doubleArray[10]; cout << "请输入10个小数:" << endl; for (int i = 0; i < 10; i++) { cin >> doubleArray[i]; } int max_idx = getMaxIndex(doubleArray); cout << "最大值为:" << "a[" << max_idx <<"] = " << doubleArray[max_idx] << endl; } else if (choice == 3) { char charArray[10]; cout << "请输入10个字符:" << endl; for (int i = 0; i < 10; i++) { cin >> charArray[i]; } int max_idx = getMaxIndex(charArray); cout << "最大值为:" << "a[" << max_idx <<"] = " << charArray[max_idx] << endl; } else { cout << "输入有误,请重新运行程序!" << endl; } return 0; } int getMaxIndex(int a[], int size) { int max_idx = 0; for (int i = 1; i < size; ++i) { if (a[i] > a[max_idx]) { max_idx = i; } } return max_idx; } int getMaxIndex(double a[], int size) { int max_idx = 0; for (int i = 1; i < size; ++i) { if (a[i] > a[max_idx]) { max_idx = i; } } return max_idx; } int getMaxIndex(char a[], int size) { int max_idx = 0; for (int i = 1; i < size; ++i) { if (a[i] > a[max_idx]) { max_idx = i; } } return max_idx; }
时间: 2024-04-03 16:32:20 浏览: 45
这段代码实现了一个函数重载的例子,用于返回数组中的最大值在数组中的下标。
首先,代码定义了三个函数,分别用于处理整数型数组、浮点型数组和字符型数组。每个函数都有两个参数:数组和数组的大小。这些函数的实现都非常相似,都是使用一个 for 循环遍历数组中的所有元素,并将最大值的下标存储在变量 `max_idx` 中,最终返回该变量。
在主函数中,根据用户输入的选择,分别定义对应类型的数组,并使用 for 循环和 cin 语句从控制台输入数组元素。然后,调用对应类型的 getMaxIndex 函数,获取最大值在数组中的下标,最终输出该最大值及其下标。
总之,这段代码通过函数重载实现了对不同类型的数组求最大值的功能,可以方便地处理不同类型的数据。此外,代码通过简单的选择结构,实现了交互式的用户输入和输出,使得代码更加灵活。
相关问题
功能:有若干个数放入数组中,计算其中正数的平均值aver. C++函数。 #include <iostream> #include <fstream>using namespace std;double fun(int a[10]);void mainO) int a[10]; double av; for(int i=0;i<10;i++) cin>>a[i]; av=fun(a); cout<<av<<endl; double fun(int a[10])
代码如下:
```c++
#include <iostream>
using namespace std;
double fun(int a[10])
{
int count = 0; // 统计正数个数
int sum = 0; // 正数和
for (int i = 0; i < 10; i++) {
if (a[i] > 0) {
count++;
sum += a[i];
}
}
return (double)sum / count;
}
int main()
{
int a[10];
double av;
for(int i=0;i<10;i++)
cin>>a[i];
av = fun(a);
cout<<av<<endl;
return 0;
}
```
函数 `fun` 的作用是计算数组中正数的平均值。首先定义变量 `count` 和 `sum` 分别用于统计正数个数和正数和。然后遍历数组,如果当前元素是正数,就将 `count` 加 1,将 `sum` 加上当前元素的值。最后返回 `sum` 除以 `count` 的结果即可得到正数的平均值。
在主函数中,先读入数组的值,然后调用 `fun` 函数计算平均值,并将结果输出。
(1) #include<iostream> using namespace std; #include<cmath> int Factorial(int k) { int result = 1; for (int i = 1; i <= k; i++) { result *= i; } return result; } (2) #include<iostream> #include<cmath> using namespace std; int Factorial(int k) { int res = 1; for (int i = 1; i <= k; i++) { res *= 1; } return res; } int main(){ double c = 1.0; const int kmax = 30; double P[kmax + 1]; for (int k = 0; k <= kmax; k++) { double cpow = pow(c, k); int kfac = Factorial(k); P[k] = exp(-c) * cpow * kfac; cout << "k=" << k << ",c^k=" << cpow << ",k!=" << kfac << ",p(k)=" << P[k] << endl; } return 0; } (3) #include<iostream> #include<cmath> using namespace std; int Factorial(int k) { int res = 1; for (int i = 1; i <= k; i++) { res *= i; } return res; } int main() { double c = 1.0; const int kmax = 30; double P[kmax + 1]; for (int k = 0; k <= kmax; k++) { double lnP0 = -c + k * log(c) - log(Factorial(k)); P[k] = exp(lnP0); cout << "k = " << k << ", P(k) = " << P[k] << endl; } return 0; } 请分别解释这三段代码运行的过程谢谢
(1)这段代码定义了一个函数Factorial,用于计算一个整数的阶乘。在主函数中,定义了一个数组P,用于存储Poisson分布的概率密度函数的值。通过循环遍历k=0到kmax,依次计算每个k对应的概率密度函数值,并输出结果。
(2)这段代码与第一段代码相比,将计算阶乘的方式改为了错误的方式,导致输出结果不正确。其余部分与第一段代码相同,计算Poisson分布的概率密度函数的值,并输出结果。
(3)这段代码与前两段代码相比,使用了对数运算来计算Poisson分布的概率密度函数的值,避免了计算阶乘时可能出现的数值溢出问题。通过循环遍历k=0到kmax,依次计算每个k对应的概率密度函数值,并输出结果。
阅读全文