n组数的最小值和最大值 我应该编写一个C++程序,它将以下面的方式找到n个数的最大值和最小值:
第一个输入是一个正整数n=5个元素的数字集的数量。也就是说,我们希望有n行数字,每行5个(实数)n组数的最小值和最大值 我应该编写一个C++程序,它将以下面的方式找到n个数的最大值和最小值:,c++,C++,第一个输入是一个正整数n=5个元素的数字集的数量。也就是说,我们希望有n行数字,每行5个(实数) 每组数字由5个数字组成,用空格键分隔 因此,我们希望找到n个集合中每个集合的最大值、最小值和算术平均值 以下是我的尝试: #include<iostream> using namespace std; int n; float maxx, minn, a; int main() { cin >> n; for (int j = 0; j < n;
#include<iostream>
using namespace std;
int n;
float maxx, minn, a;
int main()
{
cin >> n;
for (int j = 0; j < n; j++)
{
float T[5];
for (int i = 0; i < 5; i++)
{
cin >> T[i];
}
if (T[0] > T[1]) {
maxx = T[0];
minn = T[1];
}
else {
maxx = T[1];
minn = T[0];
}
for (int i = 0; i < 5; i += 2) {
if (T[i + 2] > T[i + 3]) {
if (T[i + 2] > maxx) {
maxx = T[i + 2];
if (T[i + 3] < minn) {
minn = T[i + 3];
}
}
}
else {
if (T[i + 3] > maxx) {
maxx = T[i + 3];
if (T[i + 2] < minn) minn = T[i + 2];
}
}
}
a = (T[0] + T[1] + T[2] + T[3] + T[4]) / 5.0;
cout << maxx << endl;
cout << minn << endl;
cout << a << endl;
}
return 0;
}
#包括
使用名称空间std;
int n;
浮动最大值,明尼苏达州,a;
int main()
{
cin>>n;
对于(int j=0;j>T[i];
}
if(T[0]>T[1]){
maxx=T[0];
minn=T[1];
}
否则{
maxx=T[1];
minn=T[0];
}
对于(int i=0;i<5;i+=2){
if(T[i+2]>T[i+3]){
if(T[i+2]>maxx){
maxx=T[i+2];
if(T[i+3]maxx){
maxx=T[i+3];
如果(T[i+2]
for(j=1;j编写时,您的代码会导致未定义的行为,因为它会损坏堆栈内存
float T[5];
for(i = 1; i <= 5; i++)
{
cin >> T[i];
}
float T[5];
对于(i=1;i>T[i];
}
这显然会导致未定义的行为。这可能是您的实际错误,也可能不是,但在修复此错误之前(此错误在下面的代码中重复多次),您无法从程序中预期任何已定义的行为。如果您为n
输入2,则外部循环(for)(int j=0;jfloat T T T[5];
对于(i=1;i>T[i];
}
每个数组都以索引0开头。
例如,如果您声明一个整数数组,请说inta[10]
;
它的起始地址是1000。
然后内存位置如下所示:
对于第一个元素int的[0]1000+0*大小
对于第二个元素a[1]1000+1*整数大小
对于第三个元素a[2]1000+2*int的大小
……等等
在本例中,您从T[1]
开始,这是从address+1*float大小开始的,这在逻辑上是第二个元素根据您的代码,您必须在获得max、min和average之后输入另一组数字。您当前有越界访问(T[i+2]>T[i+3]
其中i==3
)
拆分子功能可能有助于:
void max_min_mean_5()
{
float values[5];
for (auto& value : values) {
std::cin >> value;
}
const auto p = std::minmax_element(std::begin(values), std::end(values));
const auto mean = std::accumulate(std::begin(values), std::end(values), 0.f) / 5.f;
std::cout << *p.second << std::endl;
std::cout << *p.first << std::endl;
std::cout << mean << std::endl;
}
int main()
{
int n;
std::cin >> n;
for (int i = 0; i != n; ++i) {
max_min_mean_5();
}
}
void max\u min\u mean\u 5()
{
浮动值[5];
用于(自动和值:值){
标准:cin>>值;
}
const auto p=std::minmax_元素(std::begin(值),std::end(值));
常量自动平均值=标准::累加(标准::开始(值),标准::结束(值),0.f)/5.f;
std::cout为什么n和i是全局变量?在哪里定义了j
?您使用的是什么swap
函数?您包括哪些头文件?请尝试创建一个,并向我们展示。数组从索引0开始,而不是1。例如:for(i=1;i还有,“仍然输入更多数字”是什么意思?你能给我们看一个示例会话吗?包括实际输入和输出,以及预期输出?@JoachimPileborg我刚刚添加了一个编译后的屏幕截图。无论如何,在这个例子中,这没有什么区别。回答错误。for
循环中的三个表达式是在不同的时间完成的,你几乎可以看到em作为三个不同且独立的子语句。@SIlverstripeNewbie这是未定义行为的问题,行为未定义且无法预测。这很可能就是问题所在。是否有方法依次输入两行数字,然后得到两行结果?是的。使用二维数组输入数据。在如果是nx5,我明白了。如果不允许我在代码中使用这些[]括号怎么办?有没有办法一行接一行地写两行?(如果你不想使用[],那么我必须将T[0],…,T[4]更改为a,…,e)然后你必须声明这么多变量。这很乏味。例如,如果你想要一个5行5列的二维数组,而不使用[]i,即数组,那么你需要声明5x5=25个不同的变量。也就是说,数组出现在图中。
float T[5];
for(i = 1; i <= 5; i++)
{
cin >> T[i];
}
float T[5];
for(i = 1; i <= 5; i++)
{
cin >> T[i];
}
void max_min_mean_5()
{
float values[5];
for (auto& value : values) {
std::cin >> value;
}
const auto p = std::minmax_element(std::begin(values), std::end(values));
const auto mean = std::accumulate(std::begin(values), std::end(values), 0.f) / 5.f;
std::cout << *p.second << std::endl;
std::cout << *p.first << std::endl;
std::cout << mean << std::endl;
}
int main()
{
int n;
std::cin >> n;
for (int i = 0; i != n; ++i) {
max_min_mean_5();
}
}