一、一维数组
1.关于一维数组初始化,下面哪个定义是错误的?
A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5,6}; C.int arr[] = (1,2,3,4,5,6); D.int arr[10] = {0};
答案解析: A:正确,10个int的一段连续空间,前6个位置被初始化为1,2,3,4,5,6,其他位置为0 B:正确,数组中有6个空间,并被初始化为1,2,3,4,5,6 C:错误,数组的初始化不能使用(),只能使用{} D:正确,10个int类型的一段连续空间,每个位置都被初始化为0
因此,选择C
1.2.定义了一维 int 型数组 a[10] 后,下面错误的引用是 ?
A.a[0] = 1; B.a[0] = 5*2; C.a[10] = 2; D.a[1] = a[2] * a[0];
答案解析:
数组是相同类型的一段连续的空间,下标是从0开始的,比如:int array[N] 下标的范围为[0,N),其中N位置不能存储有效元素 A:正确,将0号位置设置为1 B:正确,将0号位置设置为10 C:错误,越界 D:正确,1号位置初始化为a[2]*a[0]之后的结果 因此,选择C
1.3下面代码的结果是?
代码语言:javascript复制#include <stdio.h>
int main()
{
int arr[] = {1,2,(3,4),5};
printf("%dn", sizeof(arr));
return 0;
}
A.4 B.16 C.20 D.5
答案解析: 对于int arr[] = {1,2,(3,4),5}数组,里面总共有4个元素,(3,4)为逗号表达式,取后者,因此数组中元素分别为:1,2,4,5 而sizeof(arr)求的是整个数组所占空间的大小,即:4sizeof(int)=44=16
因此,选择B
1.4 在C语言中,以下哪个选项描述了变长数组(Variable Length Array,VLA)的特点?
代码语言:javascript复制A.变长数组的大小在编译时确定,不能改变。 B.变长数组的大小可能在运行时确定,比如使用变量来指定数组大小,一旦确定大小后,它的大小是固定的,无法改变。 C.一旦确定大小后,它的大小是固定的,无法改变 D.变长数组只能用于存储字符类型的数据。 变长数组( 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类型
二、图案打印
2.1 牛客网–>[X形图案]
-------------------------------------------------->X形图案
代码语言:javascript复制输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。 输出描述: 针对每行输入,输出用“*”组成的X形图案。
输入: 5 输出:
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for(i=0; i<n; i )
{
for(j=0; j<n; j )
{
if(i == j)
printf("*");
else if(i j == n-1)//因为行和列是从0开始的
printf("*");
else
printf(" ");
}
printf("n");
}
}
return 0;
}
2.1 牛客网–>[空心正方形图案]
-------------------------------------------------->空心正方形图案
输入描述: 多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“”的数量。 输出描述: 针对每行输入,输出用“”组成的“空心”正方形,每个“*”后面有一个空格。
代码语言:javascript复制#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
int i = 0;
int j = 0;
for(i=0; i<n; i )
{
for(j=0; j<n; j )
{
if(i==0 || i==n-1)
printf("* ");
else if(j==0 || j==n-1)
printf("* ");
else
printf(" ");
}
printf("n");
}
}
return 0;
}