金陵科技学院实验报告
实验2 中级程序设计
一、实验目的和要求
(1)掌握函数的定义、调用及返回、声明的应用; (2)熟练掌握一维数组的定义、初始化及使用; (3)掌握二维数组的定义、初始化及应用; (4)熟练掌握向函数传递一维数组的方法和应用; (5)掌握向函数传递一维数组的方法和应用。
二、实验仪器和设备
奔腾以上计算机,装有windows XP以上版本操作系统和Visual C++ 6.0软件。
三、实验内容与过程
1、程序调试 #include
{int x=3,y=8,z=4,r; r=func(func(x,y),z); printf(“r=%d\\n”,r); }
2、程序改错
要求:1、改错时,只允许修改现有语句中的一部分内容,不允许添加和删除语句。 2、提示行下一行为错误行。
(1) 功能:判断m是否为素数,若是返回1,否则返回0。 #include
/**********FOUND**********/ void fun( int n) {
int i,k=1;
if(m<=1) k=0;
/**********FOUND**********/ for(i=1;i /**********FOUND**********/ if(m%i=0) k=0; /**********FOUND**********/ return m; } void main() { int m,k=0; 9 金陵科技学院实验报告 for(m=1;m<100;m++) if(fun(m)==1) { printf(\ if(k%5==0) printf(\ } } (2)功能:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。 #include { int i,number,a[N]={1,2,4,6,8,9,12,15,149,156}; printf(\ /**********FOUND**********/ scanf(\ printf(\ for(i=0;i /**********FOUND**********/ for(i=N-1;i>=0;i--) if(number<=a[i]) /**********FOUND**********/ a[i]=a[i-1]; else { a[i+1]=number; /**********FOUND**********/ exit; } if(number printf(\ printf(\} (3)找出一个二行三列二维数组中的最大值,输出该最大值及其行列下标,建议二维数组值由初始化给出。 #include \#include \main() { int i,j,max,s,t; 10 金陵科技学院实验报告 /**********FOUND**********/ int a[2][]={1,34,23,56,345,7}; clrscr(); /**********FOUND**********/ max=0; s=t=0; for(i=0;i<2;i++) /**********FOUND**********/ for(j=1;j<3;j++) if(a[i][j]>max) { max=a[i][j]; s=i; t=j; } /**********FOUND**********/ printf(\} 3、程序设计 说明,所有题目均需添加main(),在main()中调用子函数并设计完整的输入输出才可调试通过。 (1) 功能:编写函数float fun(int n),求一分数序列2/1,3/2,5/3,8/5,13/8,21/13?的前n项之和。 说明:每一分数的分母是前两项的分母之和,每一分数的分子是前两项的分子之和。 例如:求前20项之和的值为32.660259。 (2)完成子函数int fun(int n),找出一个大于给定整数且紧随这个整数的素数,并作为函数值返回。 (3)功能:编写函数void fun(int n,int a[]),按顺序将一个4位的正整数每一位上的数字存到一维数组,然后在主函数输出。例如输入5678,则输出结果为 5 6 7 8。 (4)功能:编写函数void fun(int arr[],int n)将一个数组中的值按逆序存放,并在main()函数中输出。 例如:原来存顺序为8,6,5,4,1。要求改为:1,4,5,6,8。 (5) 功能:程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),使数组a左下三角元素中的值乘以n。 例如:若n的值为3,a数组中的值为 | 1 9 7 | | 3 9 7 | a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 6 9 8 | | 4 5 6 | | 12 15 18| (6)功能:编写函数void fun(int array[3][3]),实现矩阵(3行3列)的转置(即行列互换)。 例如:输入下面的矩阵: 100 200 300 400 500 600 700 800 900 程序输出: 100 400 700 200 500 800 11 金陵科技学院实验报告 300 600 900 4、讨论、思考题 (1)功能:编写函数float fun(),利用以简单迭代方法Xn+1=cos(Xn)求方程:cos(x)-x=0的一个实根。迭代步骤如下: 1)取x1初值为0.0; 2)x0=x1,把x1的值赋给x0; 3)x1=cos(x0),求出一个新的x1; 4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2); 5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。 输出:程序将输出结果Root=0.739085。 (2)功能:编写float fun(float array[],int n),统计出若干个学生的平均成绩,最高分以及得最高分的人数。 例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出平均成绩为77.9,最高分为92,得最高分的人数为3人。 (3)编写函数 int fun(int lim,int aa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回求出素数的个数。 (4)功能:编写函数int fun(int a[M][M]),求5行5列矩阵的主、副对角线上元素之和。注意,两条对角线相交的元素只加一次。 (5)功能:请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。 程序清单及流程图: (1)#include float fun(int n); int n; scanf(\ printf(\} float fun(int n) { int i; float s=0,a=1,b=2,c; for(i=1;i<=n;i++) { s=s+b/a; c=a+b; a=b; b=c; 12 金陵科技学院实验报告 } return s; } (2) #include int fun(int n); int n; scanf(\ printf(\} int fun(int n) { int i=2,k=0,j; while(k==0) { i=i+1; for(j=2;j if(i%j==0)break; } if(i==j&&i>n)k=1; } return i; } (3)#include int b[4],i; int n; scanf(\ fun(n,b); for(i=0;i<=3;i++) printf(\} void fun(int n,int a[]) { int i; for(i=0;i<=3;i++) { a[3-i]=n; n=n/10; } } 13