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

第一题

1、执行下面程序,正确的输出是( )

int x=5,y=7;
void swap()
{
    int z;
    z=x;
    x=y;
    y=z;
}
int main()
{
    int x=3,y=8; 
    swap();
    printf("%d,%d\n",x, y);
    return 0;
}

A: 5,7 

B: 7,5 

C: 3,8 

D: 8,3

答案及解析 C

当全局变量名和局部变量名一样的时候,优先局部变量

第二题

2、以下不正确的定义语句是( )

A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};

B: char c2[] = {'\x10', '\xa', '\8'};

C: char c1[] = {'1','2','3','4','5'};

D: int y[5+3]={0, 1, 3, 5, 7, 9};

答案及解析 B

B:我们要知道   \  直接加我们的数字,表示的是八进制数字,格式\ddd,数字可以是1到3

个,并且八进制只有0-7,所以题中是8,错了;

      而  \  加 x   再加数字是表示十六进制的;

第三题(易错

3、 test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】

#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;

A: a 

B: b 

C: c 

D: d

答案及解析 ACD

因为#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。

其实我个人认为这个题考的不好,因为没啥用

我推荐大家一个连续定义变量的习惯,防止弄错,我们要一起定义指针和整型这么定义:

这样定义就很明显谁是指针,谁是整型了

推荐写法,也就是我们的*紧跟着变量
int a, *b;
int *c, d



不推荐写法
int* a, b;
这里我们以为都是指针,但是只有a是,b是int类型
所以这种很容易误导,超级不推荐!!!!1

第四题

4、 若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ( )

A: 和(M == 0)等价 

B: 和(M == 1)等价 

C: 和(M != 0)等价 

D: 和(M != 1)等价

答案及解析 C

这是条件表达式,条件成立执行问号后面的表达式,不成立执行冒号后面的;

所以这里明显是M为真执行a++,为假执行a--;

而0为假,非0为真,所以应该和M != 0 等价

第五题(重点)

5、有如下定义语句,则正确的输入语句是【多选】( )

int b;
char c[10];

A: scanf("%d%s",&b,&c); 

B: scanf("%d%s",&b,c);

C: scanf("%d%s",b,c); 

D: scanf("%d%s",b,&c);

答案及解析 AB

&c和c两个地址值是一样的,程序的效果相同;然后输入也要把b的地址传过去

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