C语言-数组和指针练习题合集(一)
做题要求:闭卷
做题时间50分钟;
(选择题每题5分共50分,填空题每题5分共30分,编程题每题10分共20分)总分100分
数组和指针练习题
一、选择题(50分)
题目1
以下对一维数组a的正确说明是_____;
A、char a(10); B、int a[ ]; C、int k=5,a[k]; D、char a[ ]={'a' , 'b' , 'c'};
正确答案:D 选项A定义错误应采用"{}";选项B定义错误要么赋值要么确定长度;选项C定义错误数组和变量不允许这样定义;在C99之后这样定义是可以的;
题目2
若有说明语句:int a[2][4];,则对a数组元素的正确引用是_______;
A、a[0][3] B、a[0][4] C、a[2][2] D、a[2][2+1]
正确答案:A 选项B‘4’列索引越界;选项C”2“行索引越界;选项C”2“行索引越界;
题目3
以下能对二维数组y进行初始化的语句是________;
A、static int y[2][ ]={{1,0,1}, {5,2,3}}; B、static int y[ ][3]={{1,2,3}, {4,5,6}};
C、static int y[2][4]={{1,2,3}, {4,5} , {6}}; D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};
正确答案:B 选项A的列元素没有确定;选项C的行元素越界;选项D的列元素越界;
考点:
必须显式或隐式指定第二维(列数)的长度,第一维(行数)可以省略并由编译器推导。
初始化列表的行数和列数不能超过数组声明时的维度。
每行的初始化值数量可以少于列数,未指定的部分自动补0。
题目4
若有说明语句:int y[ ][4]={0,0}; 则下面叙述不正确的是________;
A、数组y的每个元素都可得初值0;
B、二维数组y的行数为1;
C、该说明等价于int y[ ][4]={0};
D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0;
正确选项:D 分析:每行的初始化值数量可以少于列数,未指定的部分自动补0。
题目5
以下各组选项中,均能正确定义二维实型数组s的选项是_________;
A、float s[3][4];float s[ ][4];float s[3][ ]={{1},{0}};
B、float s(3,4); float s[ ][ ]={{0};{0}}; float s[3][4];
C、 float s[3][4]; static float s[ ][4]={{0},{0}};auto float s[ ][4]={{0},{0},{0}};
D、float s[3][4];float s[3][ ];float s[ ][4];
正确答案:C 选项A列数没确定;选项B定义符号应是花括号;选项D列数没确定;
题目6
若二维数组y有m列,则在y[i][j]前的元素个数为_______;
A、j*m+i; B、i*m+j; C、i*m+j-1; D、i*m+j+1;
正确答案:C 分析:i*m等于i行的所有元素;加上j-1就可得出所有元素
题目7
下面程序中有错误的行是_______;
1、 main( )
2、 {
3、 int x[3]={1};
4、 int k;
5、 scanf("%d", &x);
6、 for (k=1; k<3; k++)
7、 x[0]=x[0]+x[i];
8、 printf("x[0]=%d\n", x[0]);
9、 }
A、3 B、6 C、7 D、5
正确选项:D 分析:数组不需要取地址,数组名就是首地址。要取地址应加上下标(索引)
题目8
若有以下语句,则正确的描述是________;
char x[ ]="12345";char y[ ]={'1', '2', '3', '4', '5'};
A、x数组与y数组的长度相同 B、x数组长度大于y数组长度
C、x数组长度小于y数组长度 D、x数组等价于y数组
正确答案:B 分析:第一个为字符串,在C语言中会自动加上’\0‘结束标志符,第二个为数组,时间长度就是5;
题目9
以下不正确的数组定义语句是_________;
A、double x[5]={2.0, 4.0, 6.0, 8.0, 10.0}; B、int y[5]={0, 1, 3, 5, 7, 9};
C、char ch1[ ]={'1', '2', '3', '4', '5'}; D、char ch2[ ]={'\x10', '\xa', '\x8'};
正确答案:B 分析:B定义时实际数组超过长度了
题目10
以下正确的数组定义语句是_______;
A、char a[5]={'1', '2', '3', '4', '5', '\0'}; B、int b[2][ ]={{1}, {2}};
C、float c[ ][3]={1, 2, 3, 4, 5}; D、char d[5]="CHINA";
正确答案:C 分析:第一维长度可省略,编译器会根据初始化数据自动推导为2(共5个元素,第二维长度为3,向上取整)。
二、填空题(30分)
题目1
在C语言中,二维数组元素在内存中的存放顺序是_____;
正确答案:按行顺序存储的; 分析C语言中存储二维数组元素先按第一行所有元素在依次按下面的行顺序存储的;
题目2
若有定义:double x[3][5];,则x数组中行下标的下限为____列下标的上限为____。
正确答案:2;4; 分析:下标就是索引,问的是最大填几就是总长度减1;
题目3
若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为________(设a[0][0]是数组的第一个元素)
正确答案:i*m+j; 分析:m列*i等于i行所在的第一个元素,在加上j等于a[ i ][ j ]为第几个元素;
题目4
若有定义:int a[3][4]={{1, 2}, {0}, {4, 6, 8, 10}};, 则初始化后,a[1][2]得到的初值是____;a[2][1]得到的初值是_____;
正确答案:0;6;
题目5
若有说明:char s[20];,如果想从键盘上把字符串:This is a book. 输入到数组s中,应当调用的函数是_______,函数调用语句的形式是_________。
正确答案:scanf函数;scanf("%s",s);
题目6
请写出下面各printf语句的结果。
1.printf("%s\n", strcat("school", "student"));_________;
2.printf("%d\n", strlen("CHINA")+strlen("C"));_________;
3.printf("%d\n", strcmp("The", "The"));_________;
正确答案:schoolstudent;6;0; 分析:1.为字符串拼接函数;2.为字符串求长度函数;3.为字符串比较函数相同为0,不同为非0数;
三、编程题(20分)
题目1
数组(反转数组)需求:键盘录入五个数据并存入数组,完成以下需求
1.遍历数组;2.反转数组;3.再次遍历
#include <stdio.h>
void bianli_arr(int arr[],int len);
int main()
{printf("输入五个数据\n");int arr[5];for(int i=0;i<5;i++){scanf("%d",&arr[i]);}bianli_arr(arr,5);int temp=0;for(int i=0;i<5/2;i++){temp=arr[i];arr[i]=arr[4-i];arr[4-i]=temp;}bianli_arr(arr,5);return 0;
}
void bianli_arr(int arr[],int len)
{for(int i=0;i<len;i++){printf("arr[%d]=%d ",i,arr[i]);}printf("\n");
}
题目2
数组常见算法(基本查找)需求:在一个存入1-5的数组中查找数据;找到返回对于索引,没用找到返回-1;
#include <stdio.h>
int chazhao_arr(int arr[],int len,int num);
int main()
{int arr[5]={1,2,3,4,5};int len=sizeof(arr)/sizeof(int);int num=0;printf("输入要查找的数据:\n");scanf("%d",&num);int num2=chazhao_arr(arr,len,num);if(num2==-1){printf("数据未找到\n");}else printf("找到数据在%d索引上\n",num2);return 0;
}
/*基本查找函数形参:arr[]--数组len----数组长度num----要查找的数据返回值:找到返回对于索引没用找到返回-1;
*/
int chazhao_arr(int arr[],int len,int num)
{for(int i=0;i<len;i++){if(arr[i]==num){return i;}}return -1;
}
制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!