1.C
在初始化一维数组时,如果给定了所有元素的初始值,可以省略数组长度,编译器会根据提供的初始值自动确定数组的长度。
2.C
字符串是以字符数组的形式表示的,而字符数组不能使用赋值运算符直接给整个数组赋值。在选项 C 中,先声明了一个大小为 10 的字符数组 str,然后尝试用字符串常量 "string" 来赋值给 str,这是不允许的。正确的做法应该是使用 strcpy 函数或者逐个赋值字符来初始化字符数组。
3.D
在二维数组中,如果有m列,那么在a[i][j]之前的元素个数可以通过行数和列数来计算。每一行有m个元素,所以前面i行共有im个元素。对于第i行中的第j列元素a[i][j],还需要加上j个元素。因此,总共的元素个数为im+j。(在数组中,元素的位置是从0开始计数的,也就是说第一个元素的下标是0,第二个元素的下标是1,以此类推。但是题目中要求计算的是在a[i][j]之前的元素个数,这个计数不包括a[i][j]本身,所以需要将最后的结果加1才能得到正确的答案。)
4.C
选项 A 中的循环有两个索引变量 i 和 j,通过不断交换 a[i] 和 a[j] 的值来实现倒置。这种方法也是有效的,但是循环条件中的 i<j 可能会导致在数组长度为奇数时出现问题,因为中间的元素不需要进行交换。所以A在这道题看上去是对的但其实是不对的。
5.
这段代码存在数组越界的问题,因为 a
数组的定义是 int a[3][2]
,即3行2列的二维数组,但是在打印的循环中使用了 a[i][j]
,其中 i
的取值范围是0到1, j
的取值范围是0到2,因此在第二次循环时会访问到数组 a
之外的内存地址,导致输出结果不确定,可能会出现错误。
6.
#include <stdio.h>
#define N 40
int ReadScore(int score[]);
int FindMin(int score[],int n);
int main()
{
int score[N], min, n;
n = ReadScore(score);
printf("Total:%d\n",n);
min = FindMin(score,n);
printf("Lowest:%d\n",min);
return 0;
}
int ReadScore(int score[])
{
int i = -1;
printf("Input a positive array, end input when a negative value is entered.");
do{
i++;
scanf("%d",&score[i]);
}while (score[i]>=0);
return i;
}
int FindMin(int score[],int n)
{
int min,i;
min = score[0];
for(i=1;i<n;i++)
{
if(score[i]<min)
{
min = score[i];
}
}
return min;
}
7.
#include <stdio.h>
#define N 10
void ReadScore(double score[], int n);
void DataSort(double score[], int n);
int main() {
double score[N];
int n=10, i;
ReadScore(score, n);
DataSort(score, n);
return 0;
}
void ReadScore(double score[], int n) {
int i;
for (i=0; i<10; i++) {
scanf ("%lf",&score[i]);
}
}
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;
}
}
}
for (i=0; i<n; i++) {
printf ("%lf ",score[i]);
}
}
8.
#include <stdio.h>
int main() {
int m, n;
scanf("%d %d", &m, &n);
int a[10][10];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
int sum = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 || i == m-1 || j == 0 || j == n-1) {
sum += a[i][j];
}
}
}
printf("%d\n", sum);
return 0;
}