实验6 数组一、一维数组实验2. 编程:输入长度为10的整型数组并输出;然后将其逆序存放后再输出。
例如:0 1 2 3 4 5 6 7 8 9#include<>void main(){int i, j, a[10], t;printf("Input 10 number: ");for(i=0; i<10; i++) /*读入数据*/scanf("%d", &a[i]);printf("origin data: ");for(i=0; i<10; i++) /*输出原始数据*/printf("%d ", a[i]);printf("\n");for(i=0,j=9; i<j ; i++,j--) /*逆序存放*/{t=a[i];a[i]=a[j];a[j]= t;}printf("After reversed: "); /*输出逆序存放后的数据*/for(i=0; i<10; i++)printf("%d ", a[i]);printf("\n");}3. 编程:输入n个(1<n<=10)正整数并保存到数组中,求出最大值、最小值、平均值,以及最大值、最小值在数组中的下标分别是多少。
例如:5#include <>void main(){int i, n , max, min, a[10], sum;float average;printf("Input n (1<n<=10): ");scanf("%d", &n);if(1<n && n<=10){printf("Input %d integer:", n); /*输入数据并求累加和*/for(i=0, sum=0; i<n; i++){scanf("%d", &a[i]);sum+=a[i];}average=(float)sum/n; /*求出平均值*/for(i=0, max=0, min=0; i<n; i++) /*求最大、最小值的下标*/{if(a[i] > a[max])max= i;if(a[i] < a[min])min= i;}printf("max=%-5d index=%d\n", a[max], max);printf("min=%-5d index=%d\n", a[min], min);printf("average=%.2f\n", average);}elseprintf("数据超出范围");}4. 编程:青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分)。
#include <>void main(){int i, max, min;float a[10], ave;printf("请输入10个评委的打分:");for(i=0, ave=0; i<10; i++) /*输入分数并求累加和*/{ave+=a[i];}for(i=0, max=0 , min=0; i<10; i++) /*求最大、最小值的下标*/{if(a[i]>a[max])max=i;if(a[i]<a[min])min=i;}ave=ave-a[max]-a[min];ave=ave/8;printf("该选手的评委打分是:");for(i=0; i<10; i++)printf("%.2f ", a[i]);printf("\n");printf("去掉最高分%.2f,去掉最低分%.2f,该选手的平均得分是%.2f\n", a[max], a[min], ave); }5. 编程:用两种方法输出斐波那切数列的前40项(参考例6-4)。
要求:(1)方法1:不使用数组;#include <>void main(){int f1=1, f2=1, f3, i;printf("%12d%12d", f1, f2);for(i=3; i<=40; i++){f3=f1+f2;printf("%12d", f3);if(i%5==0)printf("\n");f1= f2;f2= f3;}}(2)方法2:使用一维数组。
#include <>{int i;int fib[40];fib[0]=fib[1]=1;for(i=2; i<40; i++) /*计算其余的38个数*/fib[i]= fib[i-1] + fib[i-2];for(i=0; i<40; i++){printf("%12d",fib[i]);if((i+1)%5==0)printf("\n");}}6. 编程:输入n个(1<n<=10)float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出。
例如:5#include <>void main(){int i, j, n;float a[10], t;printf("Input n: ");scanf("%d",&n);if(n>1 && n<=10){printf("Input %d number:", n);for(i=0;i<n;i++)scanf("%f",&a[i]);printf("Before sorted:"); /*输出排序前的数据*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");for(i=0; i<n-1; i++) /*冒泡排序*/for(j=0; j<n-i-1; j++)if( a[j] < a[j+1] )t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("After sorted:"); /*输出排序结果*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");}elseprintf("数据超出范围");}7. 在上题基础上(输入n个float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出)完成:在已经排好序的数组(长度不足10)中插入一个数m(键盘输入)后输出,保持数组的降序排列。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
#include <>void main(){int i, j, n, p;float a[10], t, m;printf("Input n: ");scanf("%d", &n);if(n>1 && n<=10){printf("Input %d number:", n);for(i=0; i<n; i++)scanf("%f", &a[i]);printf("Before sorted: "); /*输出排序前的数据*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");for(i=0; i<n-1; i++) /*冒泡排序*/for(j=0; j<n-i-1; j++)if( a[j] < a[j+1] ){t=a[j];a[j]=a[j+1];a[j+1]=t;printf("After sorted:"); /*输出排序结果*/for(i=0; i<n; i++)printf("%.2f ", a[i]);printf("\n");printf("请输入要插入的数据m: ");scanf("%f", &m);/*找到插入位置*/if(m < a[n-1]) /*如果m比最后一个元素小,则直接插入到最后的位置*/p = n;else{for(i=0; i<n; i++) /*否则,插入到中间的某个位置*/if( m > a[i]){p=i;break;}for(i=n; i>=p+1; i--) /*将插入位置之后的元素后移*/a[i]=a[i-1];}/*插入*/a[p]=m;printf("插入%.2f 后:", m); /*输出插入后结果*/for(i=0; i<n+1; i++)printf("%.2f ", a[i]);printf("\n");}elseprintf("数据超出范围");}二、二维数组实验1. 以下程序功能为:将下列矩阵中的元素向右移动一列,最后一列移至第一列。
找出并改正以下源程序中错误,通过调试得出正确的运行结果。
1 4 68 10 12源程序(有错误的程序)#include <>#define ROW 2#define COL 3int main(){int a[ROW][COL]={1,4,6,8,10,12};int i,j,temp;for(i=0;i<ROW;i++){temp=a[i][COL-1];for(j=COL-2;j>=0;j--){a[i][j]=a[i][j+1]; /*调试时设置断点*/ COL 编程:利用二维数组计算并打印一个n 行的杨辉三角。