数组求和
目标
- 使用开发工具
- 使用源代码管理工具
要求
- 对数组指定范围内的元素求和。PS:数组存放的是实数。
- 开发语言:C++
- 开发工具:Visual C++
源程序及结果如下:
1.第一版本程序Prog1:
+ 给定一个数组,实现数组元素求和;,具体要求:实现对一维数组(a[100])的所有元素相加运算。
+ 数据准备:a)数组长度:100;b)数组数据来源:实验数据A列:1~100,CSV 格式则填充 前100个数据.
源程序:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int a[100];//定义一个数组
int sum=0;//总和变量初始化
ifstream Data("D:\data.txt");
if(!Data)
{cout<<"不能打开文件";exit(1);}//判断文件是否能被打开
for(int i=0;Data>>a[i],i<100;i++)
{
sum+=a[i];//做加法
}
cout<<sum;
return 0;
}
实验结果:
这是后面几个实验的基础,运用了fstream库函数,我先把文件里的A组导出到D盘保存成一个txt文件,方便ifstream导出。再逐个求和。
2.第二版本程序Prog2:
+ 改写成一个函数(函数名称为ArraySum),能实现任意长度数组所有元素求和;
+ 数据准备:a)数组长度:任意; b)数组数据来源:实验数据A列.
源程序如下:
#include<iostream>
#include<fstream>
using namespace std;
void ArraySum(int n)
{
int *a=new int[n];
int sum=0;
if(a==0)
{
cout<<"没有申请到动态内存";exit(3);}
ifstream Data("D:\data.txt");
if(!Data)
{
cout<<"不能打开文件";exit(1);
}
for(int i=0;Data>>a[i],i<n;i++)
{
sum+=a[i];
}
cout<<sum;
delete []a;
}
int main()
{
int n;
cout<<"请输入数组长度:";
cin>>n;
cout<<"所求和为:";
ArraySum(n);
return 0;
}
实验结果:
在prog1的基础上,在主函数中输入数组长度,函数ArraySum中以参数n代替,在主函数中调用函数即可。这里因为n是任意值,所以要为其申请动态内存。
3.第三版本程序Prog3:
+ 将Prog2改写成能从文件中读取数据,实现任意长度数组,指定范围内元素相加。
+ 数据准备:a)数组长度:任意; b)数组数据来源:从文件中读取.
源程序如下:
#include<iostream>
#include<fstream>
using namespace std;
void ArraySum(int n,int min,int max)
{
int *a=new int[n];
int sum=0;
if(a==0)
{
cout<<"没有申请到动态内存";exit(3);}
ifstream Data("D:\data.txt");
if(!Data)
{
cout<<"不能打开文件";exit(1);
}
for(int i=0;Data>>a[i],i<n;i++)
{
if(min<a[i]&&a[i]<max)
sum+=a[i];
}
cout<<sum;
delete []a;
}
int main()
{
int n,min,max;
cout<<"请依次输入数组长度,最小值和最大值:";
cin>>n>>min>>max;
cout<<"所求和为:";
ArraySum(n,min,max);
return 0;
}
实验结果
在prog2的基础上,给Data取值时加了范围,在函数ArraySum中实现,再到主函数中输入范围以及数组长度即可。
遇到的问题
未注意到无返回值函数不用return,调试时发现错误改正过来了。