1.第一版本程序Prog1:
+ 给定一个数组,实现数组元素求和;具体要求:实现对一维数组(a[100])的所有元素相加运算。
+ 数据准备:a)数组长度:100;b)数组数据来源:实验数据A列:1~100,CSV 格式则填充 前100个数据。
①源程序:
#include <iostream>
#include <fstream> //fstream头文件,ifstream读取
using namespace std;
int main (void)
{
int a[100];
int sum=0;
ifstream in("D:\数据.txt");
for(int i=0;in>>a[i],i<100;i++)
sum=sum+a[i];
cout<<sum<<endl;
in.close(); //关闭文件
return 0;
}
②出现的问题及解决:
*由于C++也没学好,所以我写完数组求和之后就去百度了如何导入excel数据,发现可以用fstream头文件来输入输出文件,我觉得这个博主说的很有道理。
但是加了头文件以及ifstream输入文件和in.close()关闭文件之后发现无论怎么改我的运行结果都是-80,在这个上面耗到了晚上简直要疯……
*后来在引用文件前加了存储盘的地址,我以为可以愉快的运行……然而我发现是我想多了,我发现之前一直忽略了警告,说我没定义i的初始值。
于是就加了个初始值,我又以为这就可以了,然而……所以说学渣就不要太想当然……
③测试结果:
*到了这里……已经不想说什么了。。一个下午都卡在这个问题上TAT,真是欲哭无泪……
最后不停地改啊改,发现把i定义在for循环里面是可以运行的……不过我实在是看不出来这俩有啥区别心累o(︶︿︶)o
④数据验证:
*在excel中选择A列前100个复制出来做求和运算,所得结果和运行结果一致。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.第二版本程序Prog2:
+ 改写成一个函数(函数名称为ArraySum),能实现任意长度数组所有元素求和;
+ 数据准备:a)数组长度:任意; b)数组数据来源:实验数据A列.
①源程序:
#include <iostream>
#include <fstream> //fstream头文件,ifstream读取
using namespace std;
void ArraySum(int n)
{
int sum=0;
int *a=new int[n]; //数组元素初始化
ifstream in("D:\数据.txt");
for(int i=0;in>>a[i],i<n;i++)
sum=sum+a[i];
cout<<sum;
in.close();
}
int main(void)
{
int a;
cout<<"数组长度:";
cin>>a;
cout<<"数组元素和:";
ArraySum(a); //调用函数
return 0;
}
②出现的问题及解决:
*数组长度未知要用动态内存分配,其格式如图。
在问题1的代码基础改编并调用函数要比之前顺利的多了,虽然还是没能运行成功……但是总算让我没那么焦虑了。。
③测试结果:
*百度了那个错误……知道了是指int()函数要有返回值,而void函数不需要返回值
我觉得这回应该对了,我要去excel验证一下。。
④数据验证:
*终于对了,虽然还是花了接近一个钟头才弄好这个,比起别人肯定慢很多,但是比我一个下午还没弄好问题1我觉得已经进步很多了……
基础没打好的结果就是做作业等于一边写一边学,虽然进行的很慢但是好像还是挺容易加深印象的啊。。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.第三版本程序Prog3:
+ 将Prog2改写成能从文件中读取数据,实现任意长度数组,指定范围内元素相加。
+ 数据准备:a)数组长度:任意; b)数组数据来源:从文件中读取(A列). c)指定范围: (bottom, top)
①源程序:
#include <iostream>
#include <fstream> //fstream头文件,ifstream读取
using namespace std;
void ArraySum(int n,int bottom,int top)
{
int sum=0;
int *a=new int[n]; //数组元素初始化
ifstream in("D:\数据.txt");
for(int i=0;in>>a[i],i<n;i++)
{
if(a[i]>=bottom&&a[i]<=top) //数组在bottom和top之间
sum=sum+a[i];
}
cout<<sum;
in.close();
}
int main(void)
{
int a,bottom,top;
cout<<"数组长度:";
cin>>a;
cout<<"bottom:";
cin>>bottom;
cout<<"top:";
cin>>top; //输入bottom和top
cout<<"数组元素和:";
ArraySum(a,bottom,top); //调用函数
return 0;
}
②出现的问题及解决:
*指定范围bottom和top,多定义两个参数,对求和加一个在bottom和top之间的条件
但是还是错的,好吧我都错习惯了。说我没定义,那就补个定义吧,不过百度说int a,b和int a,int b是一样的啊,也是搞不清了……
③测试结果:
*终于快要结束这次作业了……
④数据验证:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
• 终于写完了……开始看到这次作业的时候根本没觉得自己能做出来这个,一直拖到昨天不能再拖了,下午一直到晚上十二点除了上课和吃饭的时间就都在研究怎么做出来。坐在电脑前的时间越久脑子就越清明,直到今天下午写完了这个,我自己都觉得不可思议,虽然花了很久,虽然参考了很多资料,但是不可否认的是打破了我脑中根深蒂固的觉得自己做不到的观点。
• 通过对这次作业的完成,我对数组,函数有了一些认识,明确了以前并不清楚的int和void函数的用法和区别,还知道了fstream头文件和ifstream,ofstream的基本用法,虽然这都是一些很小的点,但是不可否认的是这些细微的知识让我对C++,对编程的只可远观不可亵玩的看法有所改变。
• 不过这次作业也让我深刻认识到了自己在计算机专业的不足,本来以为大一过了C++就万事大吉了,但是这门课以及这学期的其他课程都让我发现它们是跟之前的课程有所关联的,想要简单地过了这学期的所有科目并不像之前那么简单了,我想我该改变一下原来的学习态度了,至少不能毕业的时候作为计算机专业的学生连一个简单的程序都不会写……
• 要趁空闲时间把C++的书看一遍……没兴趣并不是学习差的理由。
• GitHub:https://github.com/cchenhui