实验(实训)报告项目名称实验五数组所属课程名称 C 语言程序设计项目类型验证性实验(实训)日期2011/11.16/11.23/11.30班级10统计2学号100112100236姓名裴晓晓指导教师刘亚楠浙江财经学院教务处制一、实验(实训)概述:【实验目的】1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法。
2. 掌握字符数组和字符串函数的使用。
3. 掌握与数组有关的算法(特别是排序算法)。
【实验要求】1.选择合适的数据类型表达应用要求;2.正确运用循环结构处理数组问题;3.输入和输出格式清晰,有提示信息。
能对输入数据进行基本的合理性判断。
【基本原理】见第五章课件和课本内容【实施环境】(使用的材料、设备、软件)Visual C++ 6.0二、实验(实训)内容:第1题【项目内容】完成课后第3题。
求一个3×3矩阵对角线元素之和。
【方案设计】提示:请在此粘贴你的完整程序。
□#include <iostream>using namespace std;int main(){int a[3][3];int i,j,sum;sum=0;for(i=0;i<3;i++)for(j=0;j<3;j++){cin>>a[i][j];if(i==j)sum=sum+a[i][j];}cout<<"sum="<<sum<<endl;return 0;}【实验(实训)过程】(步骤、记录、数据、程序等)【结论】(结果、分析)提示:请记录该程序的运行过程:输入输出。
比如:123 456↙(↙表示输入,如果没有输入,则没有这一行)a+b=579 (输出)并尽可能对程序的执行结果进行分析。
□4 55 62 34 723 5 66sum=104第2题【项目内容】完成课后第4题。
提示:自定义数组a的大小和内容。
插入一个数number到已排好的数组中,可以有以下两种方法:(1)先从数组前面开始比较number和数组元素a[i]的大小,直到找到待插入的正确位置(即a[i-1]<number<a[i]),接着把这个位置上和以后位置上的数组元素向后移动,空出待插入元素的位置,然后插入。
(2)或者先把待插入的数放在数组的最后,然后再对数组元素的次序逐步调整以到达有序的状态。
【方案设计】提示:请在此粘贴你的完整程序。
□#include <iostream>using namespace std;int main(){int a[11]={2,5,8,17,28,39,58,89,100,298},n,i,j;cout<<"a[i]="<<endl;for (i=0;i<10;i++)cout<<a[i]<<" ";cout<<endl;cout<<"n="<<endl;cin>>n;if(n>a[9])a[10]=n;else{for(i=0;i<10;i++){if(n<a[i]){for (j=9;j>=i;j--)a[j+1]=a[j];a[i]=n;break;}}}cout<<"the new order:"<<endl;for(i=0;i<11;i++)cout<<a[i]<<" ";cout<<endl;return 0;}【实验(实训)过程】(步骤、记录、数据、程序等)【结论】(结果、分析)提示:请记录该程序的运行过程:输入输出。
比如:123 456↙(↙表示输入,如果没有输入,则没有这一行)a+b=579 (输出)并尽可能对程序的执行结果进行分析。
□a[i]=2 5 8 17 28 39 58 89 100 298n=56the new order:2 5 8 17 28 39 56 58 89 100 298第3题【项目内容】完成课后第5题。
提示:注意程序的通用性,即考虑数组元素个数为奇数或偶数两种情况下,都可以实现。
【方案设计】提示:请在此粘贴你的完整程序。
□#include <iostream>using namespace std;int main(){const int n=6;int m,i,j,a[n];cout<<"the origial array:";cout<<endl;for(i=0;i<n;i++)cin>>a[i];cout<<endl;for(i=0;i<n/2;i++)for(j=7;j>n/2;j--)if(i+j==n-1){m=a[i];a[i]=a[j];a[j]=m;}cout<<endl<<"the sorted array:"<<endl;for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;return 0;}【实验(实训)过程】(步骤、记录、数据、程序等)提示:请如实记录你在实验过程中出现的错误(如发现错误无法解决,请举手)。
□回答:【结论】(结果、分析)提示:请记录该程序的运行过程:输入输出。
比如:123 456↙(↙表示输入,如果没有输入,则没有这一行)a+b=579 (输出)并尽可能对程序的执行结果进行分析。
□the origial array:14 8 9 78 4 2the sorted array:2 4 9 78 8 14第4题【项目内容】完成课后第6题。
提示:杨辉三角形是(a+b)n展开后各项的系数。
例如:(a+b)0展开后为 1 系数为1(a+b)1展开后为a+b 系数为1,1(a+b)2展开后为a2+2ab+b2系数为1,2,1(a+b)3展开后为a3+3a2b+3ab2+b3系数为1,3,3,1(a+b)4展开后为a4+4a3b+6a2b2+4ab3+b4系数为1,4,6,4,1以上就是杨辉三角形的前5行。
第n行的系数个数为n,各行的系数有以下规律:(1) 各行第一个数都是1。
(2) 各行最后一个数都是1。
(3) 从第三行起,除上面指出的第一个数和最后一个数外,其余各数是上一行中的同列和前一列两个数之和。
算法如下:(1) 使二维数组a第1列和对角线元素的值为1。
(2) 数组其它各元素的值为a[i][j]=a[i-1][j-1]+a[i-1][j]。
(3) 输出数组各元素的值。
【方案设计】提示:请在此粘贴你的完整程序。
□#include <iostream>#include <iomanip>using namespace std;int main(){int i,j,a[11][11];for(i=1;i<11;i++){for(j=1;j<=i;j++)if(j==1)a[i][j]=1;elseif(j==i)a[i][j]=1;elsea[i][j]=a[i-1][j-1]+a[i-1][j];}cout<<"杨辉三角:"<<endl;for(i=1;i<11;i++){for(j=1;j<=i;j++)cout<<a[i][j]<<" ";cout<<('\n')<<endl;}return 0;}【实验(实训)过程】(步骤、记录、数据、程序等)提示:请如实记录你在实验过程中出现的错误(如发现错误无法解决,请举手)。
□回答:【结论】(结果、分析)提示:请记录该程序的运行过程:输入输出。
比如:123 456↙(↙表示输入,如果没有输入,则没有这一行)a+b=579 (输出)并尽可能对程序的执行结果进行分析。
□杨辉三角:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 11 7 21 35 35 21 7 11 8 28 56 70 56 28 8 11 9 36 84 126 126 84 36 9 1Press any key to continue第5题【项目内容】完成课后第8题。
提示:假定有n个不同的整数n>=1,且它们已经排序并且存放在数组list中,即list[0]<=list[1]<=……<=list[n-1]。
要求判定某个整数searchnum是否在数组list中,如果在数组中,则返回下标i,使list[i]=searchnum。
如果不在数组list中,就返回-1。
如果此数组已经被排序,则可以采用如下折半查找法(binary search)来查找。
设两个变量left和right分别表示被查找表的左边界和右边界,初始化时,left=0,right=n-1。
令middle=(left+right)/2为list的中间位置。
如果将list[middle]与searchnum进行比较,则会出现下列三种情况:(1)searchnum<list[middle]。
此时,如果searchnum在数组中,则其一定在0到middle-1之间。
因此,把查找右边界right设置为middle-1。
(2)searchnum=list[middle]。
此时,返回middle。
(3)searchmun>list[middle]。
此时,如果searchnum在数组中,则其一定在middle+1到n-1之间,因此,把查找左边界left设定为middle+1。
如果没有找到searchnum,且数组中还有没检查过的数,那么就重新计算middle 值,并继续查找。
【方案设计】提示:请在此粘贴你的完整程序。
□【实验(实训)过程】(步骤、记录、数据、程序等)提示:请如实记录你在实验过程中出现的错误(如发现错误无法解决,请举手)。
□回答:【结论】(结果、分析)提示:请记录该程序的运行过程:输入输出。
比如:123 456↙(↙表示输入,如果没有输入,则没有这一行)a+b=579 (输出)并尽可能对程序的执行结果进行分析。
□第6题【项目内容】完成课后第10题。
【方案设计】提示:请在此粘贴你的完整程序。