第一题
A:正确,C语言规定,数组的下标是从0开始的
B:正确,数组的空间是一段连续的内存空间
C:正确,数组名既可以表示数组的地址,也可以表示数组首元素的地址,两个在数值上是一样的,但是含义不一样。
注意:数组名只有在sizeof和&后才代表整个数组,其它都表示首元素的地址
D:错误,这个要是系统而定,一般都是下标由小到大,地址由低到高
因此,选择D
第二题
答案解析:C
第三题
答案解析:C 越界访问
第四题
答案解析:B
第五题
答案解析:B
第六题
答案解析:C
"abcd"后面默认有’\0‘
第七题
答案解析:B
对于int arr[] = {1,2,(3,4),5}数组,里面总共有4个元素,(3,4)为逗号表达式,取后者,因此数组中元素分别为:1,2,4,5
而sizeof(arr)求的是整个数组所占空间的大小,即:4*sizeof(int)=4*4=16
第八题
答案解析:A
答案解析:
str字符数组使用"hello bit"初始化,最终也会将'\0'放置到数组中,因此数组中总共有10个元素
sizeof(str):获取数组的总大小,10个元素,每个元素占1个字节,因此总共是10个字节
strlen(str): 获取字符串中有效字符的个数,不算'\0',因此总共9个有效字符
故上述printf会分别打印:10 9
第九题
答案解析:C
【百度百科解释】
变长数组( variable-length array),C语言术语,也简称VLA。是指用 整型变量或表达式声明或定义的数组 ,而不是说数组的长度会随时变化,变长数组在其生存期内的长度同样是固定的 。
代码示例:
int n;
scanf ("%d", &n);
int array[n];
注意上述语法在C99之前是不支持的。
A选项错误:编译时无法确定,编译时候编译器不知道n是什么值,n的值要等到程序运行起来后,用户输入之后n的值确定了,才能确定数组的大小
B选项:说法不严谨,一定是在运行时确定大小的,而不是可能
C选项正确
D选项错误:存储什么类型数据,看定义时候给数组名前放什么类型,比如int a[n]就是存放int类型 short a[n]就是存在short类型
第十题
解题思路:我们可以将该图形看作是二维数组,但不需要真的创建一个二维数组,可以用两层for循环来代替一个二维数组。
#include <stdio.h>
int main() {
int n;
while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
// 64 位输出请用 printf("%lld") to
for(int i = 0;i < n;i++)
{
for(int j = 0;j<n;j++)
{
if((i==0||i==n-1)||(j==0||j==n-1))
{
printf("* ");
}
else {
printf(" ");
}
}
printf("\n");
}
}
return 0;
}
第十一题
解题思路:主要难度在于n,m如何放在正确的位置来充当行数和列数,
n行m列,scanf取到n,m。初始化arr[行][列]那么外层for循环应该填行,内层填列
打印时再翻上来,外列内行
#include <stdio.h>
int main() {
int m, n;
while (scanf("%d %d", &n, &m) != EOF) { // 注意 while 处理多个 case
int arr[n][m];
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
scanf("%d",&arr[i][j]);
}
}
for(int i = 0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d ",arr[j][i]);
}
printf("\n");
}
}
return 0;
}
第十二题
#include <stdio.h>
int main() {
int arr[10]={0};
for(int i = 0;i < 10;i++){
scanf("%d",&arr[i]);
}
for(int j = 9;j >=0;j--){
printf("%d ",arr[j]);
}
return 0;
}
第十三题
【一维数组】输入10个整数,求平均值,编写一个程序,从用户输入中读取10个整数并存储在一个数组中。然后,计算并输出这些整数的平均值。
int main()
{
int sum = 0;
int arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
sum += arr[i];
}
printf("ave = %d\n", sum / 10);
return 0;
}
第十四题
【一维数组】交换数组,将数组A中的内容和数组B中的内容进行交换。(数组一样大)
不应该局限性的将数组看作一个整体不变,它们也是由一个个数字组成的,可以进行单独运算
int main()
{
int arr1[10] = {0};
int arr2[10] = {0};
for (int i = 0; i < 10; i++) {
scanf("%d", &arr1[i]);
}
for (int i = 0; i < 10; i++) {
scanf("%d", &arr1[i]);
}
for (int i = 0; i < 10; i++) {
int tmp = arr1[i];
arr2[i] = tmp;
arr1[i] = arr2[i];
}
return 0;
}