给出一个整数数组,计算其元素的正数,负数和零的分数。在新行上打印每个分数的十进制值。
我写的代码:
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int main()
{
int n;
int a[n];
float sum1=0,sum2=0,sum3=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
if(a[i]<0)
{
sum1++ ;
}
else if(a[i]>0)
{
sum2++ ;
}
else
{
sum3++ ;
}
}
cout<<(sum2/n)<<endl;
cout<<(sum1/n)<<endl;
cout<<(sum3/n)<<endl;
}
答案 0 :(得分:2)
当我给n = 8时,该程序仅接受5个输入,请帮助我找出错误
int n;
(在函数main()中)使用automatic storage class声明了一个变量,并且具有垃圾值(除非您将其初始化为int n = 100;
)。因此,尚不确定什么值变量n
将被保存,并且由于使用它来声明一个大小为n
的int数组,因此该数组可能具有随机大小。因此,运行这样的程序可能会给您带来一些不确定的行为,可能因计算机而异,或者如果您在同一台计算机上多次运行同一程序,则可能会得到不同的行为。
从崩溃到召唤demons through your nasal passages,编译器可以自由地做任何事情。
正确的方法是:
#define MAX_ARRAY_SIZE 100
int n = 0;
int arr[MAX_ARRAY_SIZE];
或
int n = 0;
std::cin >> n;
int arr[n];
或使用std::vector
#include <iostream>
#include <vector>
#include <algorithm>
int main(void)
{
int n;
std::vector<int> arr;
std::cin >> n;
for(int i = 0; i < n; i++)
{
int e;
std::cin >> e;
arr.push_back(e);
}
int sum1 = std::count_if(std::begin(arr), std::end(arr), [] (int num) { return num < 0; });
int sum2 = std::count_if(std::begin(arr), std::end(arr), [] (int num) { return num > 0; });
int sum3 = n - (sum1 + sum2);
std::cout << (float(sum2) / n) << std::endl;
std::cout << (float(sum1) / n) << std::endl;
std::cout << (float(sum3) / n) << std::endl;
return 0;
}