选择题
1.
关于数组初始化,下列说法不正确的是:
A. ⼆维数组初始化的时候,列数是必须给出的,⾏数可以由编译器来数。
B. ⼆维数组初始化的时候,每⾏⼀个{},逗号分隔。
C. 对⼀维数组初始化的时候,即使给全部元素都赋了初值,也不能省略数组⻓度
D. ⼆维数组初始化的时候,最后的逗号可以存在
C、一维数组初始化的时候,可以省略数组长度,编译器会根据初始化值的个数自动计算数组长度。
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、数组在定义后就不能整体赋值,只能定义时进行整体赋值。
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、a[ i ][ j ]有a[ i - 1 ][ m ] i * m 个元素和a[ i ][ 0 ]到a[ i ][ j ] 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;}
A
填空题
题⽬:有以下程序,程序运⾏后的输出结果是()。需附上简要解释。
#include <stdio.h>
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;
}
1 \t 2 \t 3
3 \t 4 \t 5
\t 代表输出制表符
编程题
1.
参考学习通上传的PPT「第⼋章数组」,仿照【例8.7】计算最⾼分,使⽤「数组函数」,计算最低分。这道题重点考查:如何向函数传递⼀位数组。
#include <stdio.h>
#define INPUT 20
int max(int score[INPUT], int n);
int main()
{
int score[INPUT], input = INPUT, n;
char c = 0;
printf("请输入学生的成绩(最多%d个):\n", input);
for (n = 0; n < 20 && c != '\n'; n++)
{
scanf("%d", &score[n]);
c = getchar();
}
printf("最高分是%d\n", max(score, n));
return 0;
}
int max(int score[INPUT], int n)
{
int max = score[0];
for (int i = 1; i < n; i++)
{
if (max < score[i])
max = score[i];
}
return max;
}
7.
#include <stdio.h>
#define INPUT 20
void sort(double score[INPUT], int n);
void exchang(double *a, double *b);
int main()
{
double score[INPUT];
int begin = 1;
int input = INPUT, n;
char c = 0;
printf("请输入学生的成绩(最多%d个):\n", input);
for (n = 0; n < 20; n++)
{
scanf("%lf", &score[n]);
c = getchar();
if (c == '\n')
{
n++;
break;
}
}
sort(score, n);
printf("分数由小到大排序为:\n");
for (int i = 0; i < n; i++)
{
if (i + 1 < n)
{
printf("%.1lf,", score[i]);
}
else
{
printf("%.1lf。", score[i]);
}
}
return 0;
}
void sort(double score[INPUT], int n)
{
for (int i = 0; i < n - 1; i++)
{
int min = i;
for (int j = i + 1; j < n; j++)
{
if (score[min] > score[j])
min = j;
}
exchang(&score[min], &score[i]);
}
}
void exchang(double *a, double *b)
{
double temp = *a;
*a = *b;
*b = temp;
}
附加题
题⽬:输⼊⼀个⼆维数组的⾏数 m(m≤10),列数 n(n≤10),⼆维数组的各元素值。输出周边元素之和。
说明:「周边元素是指⾸⾏、⾸列、末⾏、末的数组元素」输⼊⽰例:3⾏4列,后接具体的3⾏4列数组。
#include <stdio.h>
int main()
{
int line, column;
scanf("%d %d", &line, &column);
int matrix[line][column];
for (int i = 0; i < line; i++)
{
for (int j = 0; j < column; j++)
{
scanf("%d", &matrix[i][j]);
getchar();
}
}
int sum = 0;
for (int i = 0; i < line; i++)
{
sum += matrix[i][0] + matrix[i][column - 1];
}
for (int i = 1; i < column - 1; i++)
{
sum += matrix[0][i] + matrix[line - 1][i];
}
printf("%d\n", sum);
return 0;
}