实验6 一维数组
参考答案
[DIY]
1、调试下列程序(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)
[1.1]以下程序输入整数n和n个整数,将n个整数向前移动一个位置,第一个数字移到最后,并输出移动位置后的结果。该程序有3行错误,请改正。 [代码] #include #include { int a[100],n,i,t; printf(\ scanf( \ printf(\ for (i=0; i for(i=0;i for ( i=0; i printf( \ } [1.2] 本题用来统计某数组中值大于0和小于0的元素个数(等于0的元素个数不统计)。并求数组中所有元素的平均值。,请纠正程序中的错。 # include { int i,x[ ]={0,12,33,-9,-5,27,80,0,54,-63},c1,c2; double av; for(i=0;i av=sum/n; printf(”\\nc1=%d,c2=%d,aver=%f”,c1,c2,av); } 参考答案: # include { int i,x[ ]={0,12,33,-9,-5,27,80,0,54,-63},c1=0,c2=0,sum=0,n=10; double av; for(i=0;i av=sum/n; printf(\} 2.程序填空(请填写适当的符号,使程序实现其功能) [2.1] 下面的程序是利用插入排序法对输入的N个整数按从小到大排序。插入排序的基本思想:将数组元素分为已排序和未排序部分;从第二个元素起,与前面已排好序的元素进行比较(第一次将a[1]与a[0]比较);若当前为i元素,则与前面已排好序的i-1个元素进行比较,若比j元素大,则插在j元素的后面。 [代码] #include { int i, j, temp, a[N]; for( i=0; i temp= ; /* 保留要插入的元素*/ for(j=i-1; && j>=0; j-- ) a[j+1]=a[j]; /* 找要插入的位置,同时将大于a[i]的元素往后移*/ j++; a[j]= ; } for( i=0; i 参考答案: #include temp=a[i]; /* 保留要插入的元素*/ for(j=i-1; temp=0; j-- ) a[j+1]=a[j]; /* 找要插入的位置,同时将大于a[i]的元素往后移*/ j++; a[j]=temp; } for( i=0; i [2.2] 本程序输入 n (0 < n < 100 ) 个整数,找出其中出现频率最高的元素(当有多个不同的元素有相同的最高出现频率时,选择更大的元素)。 [代码] # define N 100 #include void main ( ) { int a [N], i, j, n, ind=0, c1, c2; do { printf (“Enter n (0 < n < 100 ).\\n”); scanf (“%d”, &n); } while ( n <= 0 | | n >= 100 ); printf (“Enter data.\\n”); for (i = 0; i < n,; i ++ ) scanf (“%d”,&a [ i ]); for ( c2 = i = 0; i < n; i ++ ) { for ( c1 = 0, ; (3) ; j ++ ) if ( (4) ) c1 ++; if ( (5) ) { c2 = c1; ind = i; } } printf (“%d appears %d times.\\n”, a[ind], c2 ); } 参考答案: # define N 100 #include void main ( ) { int a [N], i, j, n, ind=0, c1, c2; do { printf (\ scanf (\ } while ( n <= 0 || n >= 100 ); printf (\ for ( i = 0; i < n; i ++ ) scanf (\ for ( c2 = i = 0; i < n; i ++ ) { for ( c1=0,j=0;j 3.编程 [3.1] 编程分别输入两个按从小到大排序的数组a和b,将这两个有序数组合并,使合并后的数组仍有序 (从小到大)(要求不用排序算法) #include \#define N 10 #define M 5 main() { int a[N], b[M], c[N+M], i, j, k ; printf(\ for(i=0; i c[k++] =a[i++]; else c[k++] = b[j++]; while(i for ( i=0; i [3.2]输入10名学生的学号(学号为整数)和四门课的成绩,计算出每位学生的平均分,然后按平均成绩由高到低的顺序输出这10名学生四门课的成绩表。 #define N 10 #include \main() { int no[10],s1[10],s2[10],s3[10],s4[10],i,j,k1,k2,k3,k4,k5;float av[10],temp; for(i=0;i scanf(\ av[i]=(s1[i]+s2[i]+s3[i]+s4[i])/4.0; } printf(\ s1 s2 s3 s4 aver\\n\ for(i=0;i printf(\ } for(i=0;i [本章测试] 一、 单选题(10分) 1、以下程序段给数组所有的元素输入数据,空白处的正确答案是___ A____。 main() { int a[10],i=0; while(i<10)scanf(\ …… } A)&a[i++] B)&a[i+1] C)a+i D)&a[++i] 2、若有说明:int a[10];,则对数组元素的正确引用的是__ D __。 A) a[10] B) a[3,5] C) a(5) D) a[10-10] 3、定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是__D __。