C语言--每日五道练习题--Day17

第一题

1.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为( )语句。

A:for

B:while

C:do

D:if

答案及解析 D

如果每个case块后面都跟着break,这就说明了,执行到每一个case之后,都会退出switch语句,就相当于只要条件成立就结束,这跟if是类似的。

第二题

2. C 语言中的文件包含是不可以嵌套的

A:true

B:false

答案及解析 B

比如我们头文件的包含,在多文件写代码的时候,我们通常会用到头文件包含,比如我们会建立.h文件,命名为test.h,之后里面会用到stdio.h,stdilb.h,string.h等,这个时候在我们的.c文件中直接用#include "test.h"一个,就可以把stdio.h,stdilb.h,string.h都调用到了;

第三题(难点)

5.已知数组D的定义是int D[4][8];现在需要把这个数组作为实参传递给一个函数进行处理。下列可以作为对应的形参变量说明的是()【多选】

A:int D[4][ ]

B:int *s[8]

C:int(*s)[8]

D:int D[ ][8]

答案及解析  CD

A D:我们知道定义二维数组的时候,可以省略行,但是不可以省略列,所以传参也一样,故A错误,D正确;

B C:这里面我们要知道指针数组和数组指针的区别

先看B:B选项中int *s[8],因为我们的[]优先级是比*高的,所以会优先结合形成数组,然后每个数组元素类型是int*,所以这个数组有8个元素,元素类型都是int*的,是指针数组

再看C:int (*s)[8]首先我们是一个指针,指向的是int[8]这个一维数组,所以我们传实参的时候是数组名D,二维数组的数组名代表的是第一行的地址,所以我们用这个int (*s)[8]是可以接收的,那我们如何使用呢?

在一维数组的时候,int *a,*a等价于a[]

所以二维数组也一样,int (*s)[8] 可以等价于 int s[][8]

第四题

4. 字符串“BeiJing”存储在计算机中,需要的字节数是(  )

A:7

B:14

C:8

D:16

答案及解析 C

一个英文字母占一个字节,题中一共八个,所以是8字节

第五题

5. 若已定义: int a[9] ,*p = a; 并在以后的语句中未改变 p 的值,不能表示 a[1] 地址的是()

A:++p

B:a+1

C:p+1

D:a++

答案及解析 D

这里考察的是前置++和后置++的区别

前置++,int a = 1; int b = ++a; 这个时候b = 2,a = 2;

后置++:int a = 1; int b = a+=; 这个时候b = 1,a = 2;

所以后置++返回的是++之前的值;

你可能感兴趣的:(C语言选择题,c语言,开发语言)