内容正文:
专题六 数组
一:单选题
1:定义了一维 int 型数组 a[10] 后,下面错误的引用是( )
A.a[0] = 1; B.a[0] = 5*2;
C.a[10] = 2; D.a[1] = a[2] * a[0];
【答案】C
【解析】a[10]超出了数组的有效索引范围,因为它尝试访问第11个元素,而数组只有10个元素(索引0到9)。
2:下列定义二维数组的语句中,正确的是( )
A.int 123go[3][4] B.float a[3][]
C.int K=4,a[K][K] D.int a[][6]
【答案】D
【解析】标识符不能以数字开头,可以省略一维数组的长度,但不能省略二维数组的长度。定义数组长度不能是变量。
3:在C语言中,引用数组元素时,其数组下标的数据类型允许是( )
A. 整型常量 B. 整型表达式
C. 整型常量或整型表达式 D. 任何类型的表达式
【答案】C
【解析】在C语言中,引用数组元素时使用的数组下标必须是整型。这包括整型常量和整型表达式。
4:假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( )
A. 3 B. 6 C. 10 D. 20
【答案】D
【解析】如果int类型变量占用两个字节,那么数组x中的每个元素也将占用两个字节。数组x定义为有10个int类型的元素,所以它在内存中占用的总字节数是:每个元素的字节数 * 元素数量,即2*10=20。
5:定义int k[][4] = {1,2,3,4,5,6,7,8,9};后,k[2][3]的值是( )
A.0 B.7 C.8 D.9
【答案】A
【解析】第1行:k[0] 被初始化为 {1, 2, 3, 4}
第2行:k[1] 被初始化为 {5, 6, 7, 8}
第3行:k[2] 被初始化为 {9, 0, 0, 0}(因为只有9个初始化值,剩余的元素被初始化为0)所以,k[2][3] 将是一个位于第3行第4列的元素,其值为0。
6:下面程序执行后输出的值是( )
#include <stdio.h>
int main()
{
int arr[] = {1,2,(3,4),5};
printf("%d
", sizeof(arr));
return 0;
}
A.4 B.16 C.20 D.5
【答案】B
【解析】sizeof是单目操作符,计算元素的大小,单位是字节。arr数组有4个元素,下标2的元素是一个逗号表达式的值,逗号表达式的结果是最后一个元素。arr数组的大小是4,并且这是int类型的数组,4字节,因此4*4为16字节。
7:以下程序的运行结果是 ( )
int main() {
int s, k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, i = 1;
for (s = 1; i < 10 - i; i++)
s += k[i];
printf("%d
", s);
}
A.12 B.14 C.15 D.20
【答案】C
【解析】当 i = 1,10 - i = 9,i < 9 满足,执行循环。当 i = 2,10 - i = 8,i < 8 满足,执行循环。这个过程一直持续到 i = 4,因为 10 - i = 6,i < 6 满足。当 i = 5 时,10 - i = 5,条件 i < 5 不满足,所以循环结束。初始 s = 1,i = 1: s += k[1] => s = 1 + 2 = 3,i = 2: s += k[2] => s = 3 + 3 = 6,i = 3: s += k[3] => s = 6 + 4 = 10
i = 4: s += k[4] => s = 10 + 5 = 15。
8:下面程序的输出结果是 ( )
int main() {
int i, j, k = 0;
int s[4][4] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
for (i = 1; i < 3; i++)
for (j = 0; j < i; j++)
k += s[i][j];
printf("%d
", k);
}
A.19 B.16
C.11 D.10
【答案】A
【解析】当i = 1,j从0开始:k += s[1][0] => k += 4。当i = 2,j从0开始:k += s[2][0] => k += 7。j增加到1,再次累加:k += s[2][1] => k += 8。现在,我们可以计算k的值:
初始值为0,累加4得到4,累加7得到11,累加8得到19,所以,程序的输出结果是19
二:分析题
1.正确声明以下各变量:
a.digits是一个内含10个int类型值的数组
b.rates是一个内含6个float类型值的数组
c.mat是一个内含3个元素的数组,每个元素都是内含5个整数的数组
【答案】a.int digits[10];
b.float rates[6];
c.int mat[3][5];
2:下面的程序输出的结果是什么?
若定义 char a[]="\3Love\3";则 strlen(a)的值为_______,sizeof(a)的值为_______
若定义 char a[]="Hello!
";则 strlen(a)的值为_______,sizeof(a)的值为_______
【答案】6,7
7,8
三:编程题
1:输入10名学生的成绩,计算总分和平均分,输出平均分
【答案】
#include <stdio.h>
int main() {
float scores[10]; // 存储10名学生的成绩
float total = 0.0; // 总分
float average; // 平均分
// 输入学生成绩
printf("请输入10名学生的成绩:
");
for (int i = 0; i < 10; i++) {
printf("学生 %d 的成绩:", i + 1);
scanf("%f", &scores[i]);
total += scores[i]; // 累加总分
}
// 计算平均分
average = total / 10;
// 输出平均分
printf("平均分是:%.2f
", average);
return 0;
}
2:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
【答案】
#include <stdio.h>
#include <string.h>
int main() {
char line[1024]; // 假设一行最多有1024个字符
int wordCount = 0; // 单词计数器
// 提示用户输入一行字符
printf("请输入一行字符:
");
fgets(line, sizeof(line), stdin); // 读取一行
// 去除可能的换行符
size_t len = strlen(line);
if(len > 0 && line[len - 1] == '
') {
line[len - 1] = '\0';
}
// 统计单词数量
char *token = strtok(line, "
"); // 使用空格和换行符作为分隔符
while (token != NULL) {
wordCount++; // 每找到一个单词,计数器加1
token = strtok(NULL, "
"); // 继续查找下一个单词
}
// 输出单词数量
printf("输入的行中有 %d 个单词。
", wordCount);
return 0;
}
3:打印杨辉三角前十行
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
【答案】
#include <stdio.h>
int main() {
int rows = 10; // 杨辉三角的行数
int triangle[rows][rows];
// 初始化杨辉三角
for (int i = 0; i < rows; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || i == j) {
triangle[i][j] = 1; // 杨辉三角的边缘元素都是1
} else {
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]; // 计算中间元素
}
}
}
// 打印杨辉三角
for (int i = 0; i < rows; i++) {
// 打印前导空格
for (int k = 0; k < rows - i; k++) {
printf(" ");
}
// 打印当前行的元素
for (int j = 0; j <= i; j++) {
printf("%d ", triangle[i][j]);
}
printf("
");
}
return 0;
}
学科网(北京)股份有限公司
$$
专题六 数组
一:单选题
1:定义了一维 int 型数组 a[10] 后,下面错误的引用是( )
A.a[0] = 1; B.a[0] = 5*2;
C.a[10] = 2; D.a[1] = a[2] * a[0];
2:下列定义二维数组的语句中,正确的是( )
A.int 123go[3][4] B.float a[3][]
C.int K=4,a[K][K] D.int a[][6]
3:在C语言中,引用数组元素时,其数组下标的数据类型允许是( )
A. 整型常量 B. 整型表达式
C. 整型常量或整型表达式 D. 任何类型的表达式
4:假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是( )
A. 3 B. 6 C. 10 D. 20
5:定义int k[][4] = {1,2,3,4,5,6,7,8,9};后,k[2][3]的值是( )
A.0 B.7 C.8 D.9
6:下面程序执行后输出的值是( )
#include <stdio.h>
int main()
{
int arr[] = {1,2,(3,4),5};
printf("%d
", sizeof(arr));
return 0;
}
A.4 B.16 C.20 D.5
7:以下程序的运行结果是 ( )
int main() {
int s, k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, i = 1;
for (s = 1; i < 10 - i; i++)
s += k[i];
printf("%d
", s);
}
A.12 B.14 C.15 D.20
8:下面程序的输出结果是 ( )
int main() {
int i, j, k = 0;
int s[4][4] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
for (i = 1; i < 3; i++)
for (j = 0; j < i; j++)
k += s[i][j];
printf("%d
", k);
}
A.19 B.16
C.11 D.10
二:分析题
1.正确声明以下各变量:
a.digits是一个内含10个int类型值的数组
b.rates是一个内含6个float类型值的数组
c.mat是一个内含3个元素的数组,每个元素都是内含5个整数的数组
2:下面的程序输出的结果是什么?
若定义 char a[]="\3Love\3";则 strlen(a)的值为_______,sizeof(a)的值为_______
若定义 char a[]="Hello!
";则 strlen(a)的值为_______,sizeof(a)的值为_______
三:编程题
1:输入10名学生的成绩,计算总分和平均分,输出平均分
2:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
3:打印杨辉三角前十行
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
学科网(北京)股份有限公司
$$