1. 选择题
关于数组初始化,下列说法不正确的是:
A. 二维数组初始化的时候,列数是必须给出的,行数可以由编译器来数。
B. 二维数组初始化的时候,每行⼀个{},逗号分隔。
C. 对⼀维数组初始化的时候,即使给全部元素都赋了初值,也不能省略数组长度。
D. 二维数组初始化的时候,最后的逗号可以存在。
答:D
二维数组初始化的时候,最后一个元素后面的逗号是不能存在的。
2. 选择题
不正确的赋值或赋初值的方式是____。请附上解释。
A. char str[] = "string";
B. char str[7] = {'s', 't', 'r', 'i', 'n', 'g'};
C. char str[10]; str="string";
D. char str[7] = {'s', 't', 'r', 'i', 'n', 'g', '\0’};
答:C
不能直接使用 “ = ”将字符串赋值给字符数组的时候,应使用strcpy函数。
3. 选择题
若二维数组 a 有 m 列,则在 a [ i ][ j ] 前的元素个数为( ).
A. i * m + j + 1
B. j * m + i
C. i * m + j
D. j * m + i + 1
答:C
每一行元素个数为 m,所以 i 行之前的元素个数为 i * m。再加上 j 列,所以总共的元素个数为 i * m + j。
4. 选择题
下列程序段中能完成数组中 n 个元素前后倒置的是( )。如数组元素为 3,1,8 时,完成倒置后变为 8,1,3 。
A.for(i=0, j=n-1; i<j; i++, j–){ x = a[i]; a[i] = a[j]; a[j] = x;}
B.for(i=0; i<n/2; i++) { a[i] = a[n-1-i]; a[n-1-i] = a[i];}
C.for(i=0; i<n/2; i++) { x = a[i]; a[i] = a[n-1-i]; a[n-1-i] = x;}
D.for(i=0; i<n; i++) { x = a[i]; a[i] = a[n-1-i]; a[n-1-i] = x;}
答:AC
B:没有使用中间变量来交换元素,a[i]的值会被覆盖,无法完成交换。
D:当 i 等于 n-1 时,a[n-1-i] 会变成 a[0],最后一个元素则没有被交换。
5. 填空题
题目:有以下程序,程序运行后的输出结果是( )。需附上简要解释。
#include
int main()
{
int i, j;
int a[3][2] = {1,2,3,4,5,6};
for (i=0; i<2; i++)
{
for (j=0; j<3; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
return 0;
}
答:
123
345
第一个 for 语句读取数组 a 的行,第二个 for 语句读取数组 a 的列。但因为每行只有两个数,所以当 i = 0, j = 2 时,读取到了3。
6. 编程题
参考学习通上传的PPT「第八章 数组」,仿照【例8.7】计算最高分,使用「数组 + 函数」,计算最低分。这道题重点考查如何向函数传递一位数组。
#include <stdio.h>
int findlowest(int score[], int size)
{
int lowestscore;
int i;
lowestscore = 0;
for (i = 0; i < size; i++)
{
if (score[i] < score[lowestscore])
{
lowestscore = i;
}
}
return lowestscore;
}
int main()
{
int n, lowest, i;
scanf("%d", &n);
int a[100];
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
lowest = findlowest(a, n);
printf("%d", a[lowest]);
return 0;
}
7. 编程题
参考学习通上传的PPT「第八章 数组」,仿照【例8.8】用交换法对成绩降序排序,使用 「数组 + 函数」,对10个double类型的数值进行从小到大进行排序
#include <stdio.h>
void DataSort(double score[], int n)
{
int i,j;
double temp;
for (i = 0; i < n-1; i++)
{
for (j = i+1; j < n ;j++)
{
if (score[j] < score[i])
{
temp = score[j];
score[j] = score[i];
score[i] = temp;
}
}
}
}
int main()
{
int n = 10, i;
double a[100];
for (i = 0; i < n; i++)
{
scanf("%lf", &a[i]);
}
DataSort(a, n);
for (int i = 0; i < n; i++)
{
printf("%lf ", a[i]);
}
return 0;
}
8. 附加题
题目:输入一个二维数组的行数 m(m ≤ 10),列数 n(n ≤ 0),二维数组的各元素值。输出周边元素之和。
说明:「周边元素是指首行、首列、末行、末列的数组元素」
输入示例: 3 行 4 列,后接具体的 3 行 4 列数组。
#include <stdio.h>
int main()
{
int n1, n2;
scanf("%d %d", &n1, &n2);
int a[10][10];
int i, j, sum = 0;
for (i = 0; i < n1; i++)
{
for (j = 0; j < n2; j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < n1; i++)
{
sum += a[i][0];
sum += a[i][n2 - 1];
}
for (j = 1; j < n2 - 1; j++)
{
sum += a[0][j];
sum += a[n1 - 1][j];
}
printf("%d", sum);
return 0;
}