上海电力学院实验报告课程名称高级程序设计C++(1) 实验项目实验七数组1姓名学号班级专业同组人姓名无指导教师姓名实验日期一、实验目的1、掌握一维数组的定义、赋值和输入输出的方法;2、掌握与数组有关的算法(特别是排序算法)。
二、实验内容和步骤编程序并上机调试运行。
1、按如下要求编程: 在第一个循环中给a数组的前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1;在最后一个循环中输出对称折叠以后的a数组的前10个元素。
●程序源代码(注意添加注释)#include<iostream>using namespace std;int main(){int a[10],i;for(i=0;i<10;i++) a[i]=i+1;for(i=5;i<10;i++) a[i]=a[9-i];for(i=0;i<10;i++) cout<<a[i]<<' ';return 0;}●运行结果(直接截取结果图)2、已知长度为10的数组a及其各个元素的值,对其按从大到小进行排序.●程序源代码(注意添加注释)//这里给出了另外一种排序算法.(采用课堂上讲的冒泡排序也可以实现,参见ppt)#include<iostream>using namespace std;int main(){int i,j,a[10]={3,32,6,2,67,9,21,45,23,8};for(i=0;i<10;i++){int p;p=i;for(j=i;j<10;j++)//该for循环找剩下j个元素里最大的那个元素的下标if(a[p]<a[j])p=j;if(p!=i){ //把目前的最大值a[p]放到前面来(和a[i]交换)int t;t=a[p];a[p]=a[i];a[i]=t;}}for(i=0;i<10;i++)cout<<a[i]<<' ';return 0;}●运行结果(直接截取结果图)3、有一个已经从小到大排好序的整数数组:a[30]={6,9,12,15,19,23,45,67,89,98},现输入一个整数x ,要求按原来的升序规律将它插入到数组中。
●程序源代码(注意添加注释)#include<iostream>using namespace std;int main(){int i,ps,n,a[30]={6,9,12,15,19,23,45,67,89,98};cout<<"请输入一个整数:";cin>>n;ps=10;for(i=0;i<10;i++) //该循环找应插入的位置{if(n<a[i]){ps=i;break;}}for(i=10;i>=ps;i--)//把插入位置之后(包括该位置)的元素依次往后挪一位a[i+1]=a[i];a[ps]=n; //插入输入的元素for(i=0;i<11;i++)cout<<a[i]<<' ';return 0;}●运行结果(直接截取结果图)4.请用户输入n个数(n的值不超过20,并由用户输入),每输入一个数据之后,按照由小到大顺序将其存入,然后显示当前已存储的数据的情况,直到最后一个数据。
程序源代码(注意添加注释)#include<iostream>using namespace std;int main(){int a[20],n,i,m,tmp,position;//输入在-20之间的数据个数cout<<"请输入数据的个数(最多不超过个):";cin>>n;while(n>20||n<1){cout<<"输入错误,请重新输入:";cin>>n;}//依次输入每个数据,并进行处理for(i=0;i<=n-1;i++){//输入第i+1个数据cout<<"请输入第"<<i+1<<"个数据:";cin>>tmp;position=i;//初始化插入的位置为i//查找该插入的位置for(m=i-1;m>=0;m--){if(a[m]>tmp){a[m+1]=a[m];position--;}elsebreak;}//将该数据插入到已排好序的数列中a[position]=tmp;//以下输出当前数列cout<<"目前的数据序列为:";for(m=0;m<=i;m++)cout<<a[m]<<" ";cout<<endl;}return 0;}//注:该题插入的实现和上一题插入的实现有些不同(但都可以实现同样目的),请自行比较。
● 运行结果(直接截取结果图)5. 求解一个32⨯阶矩阵与一个23⨯阶矩阵的乘积,并输出。
● 程序源代码(注意添加注释)●#include <iostream> ●using namespace std; ●int main() ●{ ●int a[2][3],b[3][2],c[2][2],i,j,m; ●//输入 ●//输入数组a ●for (i=0;i<=1;i++) ●for (j=0;j<=2;j++) ●{ ●cout<<"a["<<i<<"]["<<j<<"]="; ●cin>>a[i][j]; ●} ●//输入数组b ●for (i=0;i<=2;i++) ●for (j=0;j<=1;j++) ●{ ●cout<<"b["<<i<<"]["<<j<<"]="; ●cin>>b[i][j]; ●} ●//计算乘法 ●for (i=0;i<=1;i++) ●for (j=0;j<=1;j++) ●{ ●//计算c[i][j] ●c[i][j]=0; ●for (m=0;m<=2;m++) ●c[i][j]+=a[i][m]*b[m][j]; ●} ●//输出 ●//显示数组a ●cout<<"a="<<endl; ●for (i=0;i<=1;i++) ●{ ●for (j=0;j<=2;j++) ●cout<<a[i][j]<<'\t'; ●cout<<endl;●} ●//显示数组b ●cout<<"b="<<endl; ● for (i=0;i<=2;i++)●{●for(j=0;j<=1;j++)●cout<<b[i][j]<<'\t';●cout<<endl;●}●//显示运算结果●cout<<"运算结果为:"<<endl;●for(i=0;i<=1;i++)●{●for(j=0;j<=1;j++)●cout<<c[i][j]<<'\t';●cout<<endl;●}●return 0;●}●运行结果(直接截取结果图)6. 请用户输入一个2*2的矩阵,将其按行和按列复制的遍数,输出结果矩阵。
如矩阵1 23 4按行复制1遍,按列复制2遍后,结果矩阵为:1 2 1 2 1 23 4 3 4 3 41 2 1 2 1 23 4 3 4 3 4●程序源代码(注意添加注释)●#include<iostream>●using namespace std;●int main()●{●int a[2][2],b[20][20],i,j,repl,repr;●//输入数组a和复制的行列数●for(i=0;i<=1;i++)●for(j=0;j<=1;j++)●{●cout<<"a["<<i<<"]["<<j<<"]=";●cin>>a[i][j];●}●cout<<"请输入复制的行数和列数(不超过9):";●cin>>repl>>repr;●//实现复制●for(i=0;i<=repl;i++)●for(j=0;j<=repr;j++)●{●b[i*2+0][j*2+0]=a[0][0];●b[i*2+0][j*2+1]=a[0][1];●b[i*2+1][j*2+0]=a[1][0];●b[i*2+1][j*2+1]=a[1][1];●}●//输出●cout<<"结果为:"<<endl;●for(i=0;i<=repl*2+1;i++)●{●for(j=0;j<=repr*2+1;j++)●cout<<b[i][j]<<'\t';●cout<<endl;●}●return 0;●}●运行结果(直接截取结果图)三、实验中遇到的问题以及解决方法四、实验结论与体会1、结合上课内容,写出程序,并调试程序,要给出测试数据和实验结果。
2、添加适当注释,注意书写的层次结构。
3、整理上机步骤,总结经验和体会。