1. 选择题
关于数组初始化,下列说法不正确的是:
A. ⼆维数组初始化的时候,列数是必须给出的,⾏数可以由编译器来数。B. ⼆维数组初始化的时候,每⾏⼀个{},逗号分隔。
C. 对⼀维数组初始化的时候,即使给全部元素都赋了初值,也不能省略数组⻓度
D. ⼆维数组初始化的时候,最后的逗号可以存在
1.C
2.C str是数组,不能这样整体赋值。
3.若⼆维数组 a 有 m 列,则在 a[i][j] 前的元素个数为( ).
3.C
4.下列程序段中能完成数组中n个元素前后倒置的是( )。如数组元素为 3,1,8 时,完成倒置后变为 8,1,3 。
4.A C
5. 填空题
题⽬:有以下程序,程序运⾏后的输出结果是( )。需附上简要解释。
5.1 2 3
3 4 5
列数3>2,a[0][2]储存原a[1][1]数据,新a[1][1]仍储存原a[1][1]数据
6. 编程题
参考学习通上传的PPT「第⼋章 数组」,仿照【例8.7】计算最⾼分,使⽤「数组 + 函数」,计算最低分。这道题重点考查如何向函数传递⼀位数组。
#include <stdio.h>
int ReadScore(int score[]);
int Findlow(int score[], int n);
int main()
{
int score[40],low,n;
n = ReadScore(score);
low=Findlow (score, n);
printf ("The lowest score is %d\n", low);
return 0;
}
int ReadScore(int score[])
{
int i,N;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&score[i]);
}
return i;
}
int Findlow(int score[],int n)
{
int low,i;
low = score[0];
for (i=1;i<n;i++)
{
if (score[i]< low)
{
low= score[i];
}
}
return low;
}
7. 编程题
参考学习通上传的PPT「第⼋章 数组」,仿照【例8.8】⽤交换法对成绩降序排序,使⽤「数组 + 函数」,对10个double 类型的数值进⾏从⼩到⼤进⾏排序。
#include <stdio.h>
void DataSort(double score[],int n);
int main()
{
int i,n;
double score[10]={6.3,2.6,5.3,9.5,3.5,3.9,5.5,1.7,7.4,7.2};
DataSort(score,10);
for (i=0;i<10;i++)
{
printf("%f ", score[i]);
}
return 0;
}
void DataSort(double score[],int n)
{
int i, j;
double temp1;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-i-1;j++)
{
if (score[j]>score[j+1])
{
temp1 =score[j];
score[j] =score[j+1];
score[j+1] =temp1;
}
}
}
}
8. 附加题
题⽬:输⼊⼀个⼆维数组的⾏数 m(m≤10),列数 n(n≤10),⼆维数组的各元素值。输出周边元素之和。
说明:「周边元素是指⾸⾏、⾸列、末⾏、末列的数组元素」输⼊⽰例:3⾏4列,后接具体的3⾏4列数组。
#include<stdio.h>
#include<math.h>
#define M 10
#define N 10
int main()
{
int a[M] [N];
int i,j,k,b,n,m,sum1 = 0,sum2 = 0,sum;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
sum1+=a[i][j];
}
}
if(n==2||m==2)
{
printf("%d",sum1);
}
else
{
for(k=1;k<m-1;k++)
{
for(b=1;b<n-1;b++)
{
sum2+=a[k][b];
}
}
sum = sum1-sum2;
printf("%d",sum);
}
}