admin 管理员组文章数量: 1086019
2024年4月22日发(作者:网页开发的新趋势)
实验七-1 数组程序设计
班级: 学号: 姓名: 评分:
一.【实验目的】
1、熟练掌握使用一维数组编程的方法。
2、熟练掌握排序算术。
3、熟练掌握使用二维数组编程的方法。
4、进一步掌握C程序的调试方法和技巧。
二.【实验内容和步骤】
1、程序调试题
A.目标:进一步学习掌握程序调试的方法和技巧。
B.内容:从键盘输入一个正整数n(0 数组中,使该组数据仍然有序。改正程序中的错误,使其实现程序的功能。(注:程序文件保存在“调试 示例”文件夹中,文件名为error07_) ① 调试正确的源程序清单 #include int main( ) { int i, j, n, x, a[10]; printf("输入数据的个数n:"); scanf("%d", &n); printf("输入%d个整数:", n); for(i = 0; i < n; i++) scanf("%d", &a[i]); printf("输入要插入的整数:"); scanf("%d", &x); for(i = 0; i < n; i++){ if(x > a[i]) continue; j = n - 1; while(j >= i){ /* 调试时设置断点 */ a[j+1] = a[j]; j--; } /* 调试时设置断点 */ a[i] = x; break; } if(i == n) a[n]=x; for(i = 0; i < n + 1; i++) printf("%d ", a[i]); putchar('n'); return 0; } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 2、完善程序,并调试运行程序 题目(1)求平均值。程序功能:从键盘上输入一个正整数repeat(0 个正整数n(1 件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入一个正整数n(1 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include int main( ) { int ri, repeat; int i, n, sum; float aver; int a[10]; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++) { scanf("%d", &n); for(i=0; i //请在两条星线之间填入相应的代码, 求数组a的平均值(使用循环结构) /**************************************************************/ sum=0; for(i=0;i sum=sum+a[i]; aver=1.0*sum/n; /**************************************************************/ printf("aver=%.2fn", aver); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(2)求最大值及其下标。程序功能:从键盘上输入一个正整数repeat(0 输入一个正整数n(1 一,下标从0开始)。(注:程序文件保存在“第2题”文件夹中)打开文件,在两条星线之间填入 相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入一个正整数n(1 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include int main( ) { int ri, repeat; int i, index1, index2, n; int a[10]; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++) { scanf("%d", &n); for(i=0; i //请在两条星线之间填入相应的代码, 求数组a中的最大值、最小值及对应下标值(使用循环 结构) /************************************************************************************/ index1=index2=0; for(i=1;i if(a[i]>a[index1]) index1=i; if(a[i] index2=i; } /************************************************************************************/ printf("max=%d,index=%dn", a[index1],index1); printf("min=%d,index=%dn", a[index2],index2); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(3)逆序输出。程序功能:从键盘上输入一个正整数repeat(0 个正整数n(1 程序文件保存在“第3题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该 功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入一个正整数n(1 // 例如:输入4 10 8,则输出8 10 4。 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include int main( ) { int ri, repeat; int i, n, temp; int a[10]; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++) { scanf("%d", &n); for(i=0; i //请在两条星线之间填入相应的代码, 首尾交换数组a中各元素值(使用循环结构) /**********************************************************************/ for(i=0;i temp=a[i]; a[i]=a[n-i-1]; a[n-i-1]=temp; } /**********************************************************************/ for(i=0; i printf("n"); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(4)交换最小值和最大值。程序功能:从键盘上输入一个正整数repeat(0 算:输入一个正整数n(1 然后输出交换后的n个数。(例如:输入4 10 8 1 6,则输出1 6 8 4 10)(注:程序文件保存在“第4题”文 件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入一个正整数n(1 后一个数交换,然后输出交换后的n个数。 // 例如:输入4 10 8 1 6,则输出1 6 8 4 10 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include int main( ) { int ri, repeat; int i, index, n, t; int a[10]; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++) { scanf("%d", &n); for(i=0; i //请在两条星线之间填入相应的代码, 将最小值与第一个数交换,最大值与最后一个数交换。 //使用循环结构 /**********************************************************************/ index=0; for(i=1;i if(a[i] index=i; t=a[0]; a[0]=a[index]; a[index]=t; index=0; for(i=1;i if(a[i]>a[index]) index=i; t=a[n-1]; a[n-1]=a[index]; a[index]=t; /**********************************************************************/ for(i=0; i printf("n"); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(5)排序。程序功能:从键盘上输入一个正整数repeat(0 整数n(1 (注:程序文件保存在“第5题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完 成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入一个正整数n(1 // 例如:输入4 5 1 7 6,则输出7 6 5 4 1 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include int main( ) { int ri, repeat; int i, index, k, n, temp; int a[10]; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++) { scanf("%d", &n); for(i=0; i //请在两条星线之间填入相应的代码, 将数组a按从大到小排序。 //使用循环结构 /******************************************************/ for(i=0;i index=i; for(k=i+1;k if(a[k]>a[index]) index=k; temp=a[i]; a[i]=a[index]; a[index]=temp; } /******************************************************/ for(i=0; i printf("n"); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(6)矩阵运算。程序功能:从键盘上输入一个正整数repeat(0 个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之 和.(副对角线为从矩阵的右上角至左下角的连线)。例如,当n=4时,4阶方阵如下: (注:程序文件保存在“第6题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完 成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入一个正整数n(1≤n≤6),再读入n阶方阵a,计算该矩阵除副对角线、最后一列 // 和最后一行以外的所有元素之和。 // 副对角线:从矩阵的右上角至左下角的连线。 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include "stdio.h" int main( ) { int ri,repeat; int a[6][6],i,j,n,sum; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++) { scanf("%d",&n); for (i=0;i for(j=0;j //请在两条星线之间填入相应的代码, 计算A矩阵中除副对角线、最后一列和最后一行以外的 //所有元素之和。 //副对角线:从矩阵的右上角至左下角的连线。 //使用循环结构 /*******************************************************************************/ sum=0; for(i=0;i for(j=0;j if(i+j!=n-1) sum=sum+a[i][j]; /*******************************************************************************/ printf("sum=%dn",sum); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 2 3 4 1 5 6 1 1 7 1 8 1 1 1 1 1 sum=35 (2+3+4+5+6+7+8=35) 题目(7)矩阵运算。程序功能:从键盘上输入一个正整数repeat(0 个正整数n(1≤n≤10),输出一张20以内的加法口诀表。加数与被加数都不大于n,分列第一行和第一列(将 加数、被加数、和放入一个二维数组中,再输出该数组)。例如,当n=4时,输出结果如下: (注:程序文件保存在“第7题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完 成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入一个正整数n(1≤n≤10),输出一张20以内的加法口诀表。 // 加数与被加数都不大于n,分列第一行和第一列 // (将加数、被加数、和放入一个二维数组中,再输出该数组)。 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include "stdio.h" int main( ) { int ri,repeat; int i,j,n,a[10][10]; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++) { scanf("%d",&n); //请在两条星线之间填入相应的代码,将加数、被加数、和放入二维数组A中,其中: //加数放在二维数组A的第1行,被加数放在二维数组A的第1列,和放在对应的交叉位置上。 //使用循环结构 /*****************************************************************************/ for(i=1;i<=n;i++) a[i][0]=i; for(j=1;j<=n;j++) a[0][j]=j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=a[i][0]+a[0][j]; /*****************************************************************************/ for( i=0; i<=n; i++ ) { for( j=0; j<=n; j++ ) if(i==0&&j==0) printf( "%-4c", '+'); //输出左上角的“+”号 else if(i==0||j<=i) printf( "%-4d", a[i][j]);//输出二维数组A的下三角元素 printf("n"); } } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(8)矩阵运算。程序功能:从键盘上输入一个正整数repeat(0 个正整数n(1≤n≤6)和n阶方阵a中的元素,如果a是上三角矩阵,输出"YES",否则,输出"NO"。(上三角 矩阵:即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线)。(注:程序文件保存在 “第8题”文件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果a是上三角矩阵,输出"YES", // 否则,输出"NO"。 // 上三角矩阵:即主对角线以下的元素都为0,主对角线为从矩阵的左上角至右下角的连线。 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include "stdio.h" #include "math.h" int main( ) { int ri,repeat; int a[6][6],flag,i,j,n; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++) { scanf("%d",&n); for (i=0;i for (j=0;j //请在两条星线之间填入相应的代码,判断二维数组A是否为上三角矩阵 //使用循环结构 /*************************************************************/ flag=1; for(i=0;i for(j=0;j<=i;j++) if(a[i][j]!=0){ flag=0; break; } /*************************************************************/ if(flag) printf("YESn"); else printf("NOn"); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(9)求矩阵每行元素之和。程序功能:从键盘上输入一个正整数repeat(0 算:输入2个正整数m和n(1≤m,n≤6),然后输入该m行n列矩阵a中的元素,分别求出各行元素之和,并 存入一维数组row中,再输出row。(注:程序文件保存在“第9题”文件夹中)打开文件,在两条 星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入2个正整数m和n(1≤m,n≤6),然后输入该m行n列矩阵a中的元素,分别求出 // 各行元素之和,并存入一维数组row中,再输出row。 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include "stdio.h" #include "math.h" int main( ) { int ri,repeat; int flag,i,j,m,n,sum; int a[6][6], row[6]; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++) { scanf("%d%d",&m,&n); for(i=0;i for(j=0;j //请在两条星线之间填入相应的代码,求出二维数组A中各行元素之和,并存入一维数组row 中。 //使用循环结构 /*********************************************************************************/ for(i=0;i sum=0; for(j=0;j sum=sum+a[i][j]; row[i]=sum; } /*********************************************************************************/ for(i=0;i printf("sum of row %d is %dn",i,row[i]); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(10)找鞍点(选作)。程序功能:从键盘上输入一个正整数repeat(0 入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上 最小),就输出它的下标,否则,输出"NO"(设a最多有1个鞍点)。(注:程序文件保存在“第10题”文 件夹中)打开文件,在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:从键盘上输入一个正整数 repeat (0 // 输入1个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点,就输出它的下 标, // 否则,输出"NO"。(设a最多有1个鞍点) // 鞍点:元素值在该行上最大,在该列上最小。 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include "stdio.h" int main( ) { int ri,repeat; int flag,i,j,k,row,col,n,a[6][6]; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++) { scanf("%d",&n); for(i=0; i for(j=0; j //请在两条星线之间填入相应的代码,查找二维数组A中的鞍点,并设置标志变量flag的值。 //使用循环结构 /*****************************************************************************/ flag=1; for(row=0;row col=0; for(j=1;j if(a[row][col] col=j; for(i=0;i if(a[row][col]>a[i][col]){ flag=0; break; } if(flag==1) break; } /*****************************************************************************/ if(flag) printf("a[%d][%d]=%dn", row, col,a[row][col]); else printf("NOn"); } } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(11)【水平考试题】程序文件保存在“第11题(水平考试题)”文件夹中),打开文件,该程序把一 个十进制整数转换成二进制数,并把此二进制数的每一位放在一维数组b中,然后输出b数组,(二进制数 的最低位放在数组的第一个元素中)。在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:把一个十进制整数转换成二进制数,并把此二进制数的每一位放在一维数组b中,然后输 出b数组,(二进制数的最低位放在数组的第一个元素中) //注意:请在提示处填上正确的代码,补充语句为一句 //提示:利用2辗转相除至结果为0,将余数从下向上倒序读出,就是结果 //如:十进制数10 //10/2=5 余0 //5/2=2 余1 //2/2=1 余0 //1/2=0 余1 //结果为1010 #include void main() { //变量的定义,其中b[16]为数组,x为十进制数,r为余数,i为循环变量 int b[16],x,k,r,i; //输入一个十进制数 cout<<"请输入一个十进制数:"; cin>>x; //k为数组下标,初值为-1 k=-1; do { r=x%2; k++; //请在两条星线之间填入相应的代码,完成二进制数的每一位放在一维数组b中 /**************************************************/ b[k]=r; /***************************************************/ x/=2; } //请在两条星线之间填入相应的代码,完成循环条件的判断 /**********************************/ while(x!=0); /**********************************/ for(i=k;i>=0;i--) ///请在两条星线之间填入相应的代码,完成存放二进制数组b的输出 /*******************************************/ cout< /*******************************************/ cout< } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(12)【水平考试题】程序文件保存在“第12题(水平考试题)”文件夹中),打开文件,编写一个函 数,统计出具有n个元素的一维数组中,大于等于所有元素平均值的元素个数并返回它。在两条星线之间填 入相应的内容,使程序完成该功能。(注:要求使用for循环语句) ① 调试正确的源程序清单 //编写代码完成Count函数功能:统计出具有n个元素的一维数组中,大于等于所有元素平均值的元素 个数,并使用return语句把结果返回主函数。 //注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。补充语句不限一句,可多句。 #include int Count(double a[], int n) { //请在两条星线之间填入相应的代码(注:要使用for循环语句) /***********************************************/ int i,result=0; float sum=0,avg; for(i=0;i sum=sum+a[i]; avg=sum/n; for(i=0;i if(a[i]>=avg) result++; return result; /************************************************/ } void main() { double a[10]={13.3,45.7,6,84.6,90.8,23,63.5,15,33,76}; int result; result=Count(a,10); cout<<"大于平均值的元素个数为:"< } ② 运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 题目(13)【水平考试题】程序文件保存在“第13题(水平考试题)”文件夹中),打开文件,从键盘上输 入10个数据并保存到一个一维数组里,用一个函数求出该数组中最大值和最小值,并在主函数中输入与输 出。在两条星线之间填入相应的代码,使程序完成该功能。 ① 调试正确的源程序清单 //程序功能:有一个一维数组,存放10个数据,用一个函数求出最大值和最小值,并在主函数中输入 与输出 //提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。要求:补充语句处只写一条语句 #include #define N 10 //定义符号常量N,表示数组元素的个数 void max_min(int a[],int *max,int *min); void main( ) { int i; int array[10]; int m,n; cout<<"input 10 data:"; for(i=0;i<10;i++) { cin>>array[i]; } //请在两条星线之间填入相应的代码,完成函数调用,此函数功能为求最大值和最小值 /**************************************************/ max_min(array,&m,&n); /***************************************************/ cout<<"max is :"<
版权声明:本文标题:实验07-1参考答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713738092a649260.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论