C语言--每日五道选择题--Day19

第一题

1. 为了避免在嵌套的条件语句if-else中产生二义性,C语言规定else子句总是与( )配对。

A:缩排位置相同的if

B:之前最近的未匹配的if配对

C:其之后最近的if

D:同一行上的if

答案及解析 B

else语句是跟最近的未匹配的if语句配对

第二题

2. 若有定义语句: int year=1009 ,  *p=&year ;以下不能使变量 year 增至 1010 的语句是

A:*p+=1;

B:(*p)++;

C:++(*p)

D:*p++A

答案及解析 D

A:*p += 1 等价于 *p = *p + 1;

B:(*p)++ 先解引用获得year的值再++

C:跟B同理,只不过是前置++和后置++

D:*p++ 这里++的优先级是高于*的,所以这里p++之后,到往后跳了1个整型的距离,再解引用肯定不是year,是一未知的数字;

第三题

3. 已定义ch为字符型变量,以下赋值语句中错误的是()

A:ch='\';

B:ch=62+3;

C:ch=NULL;

D:ch='\xaa';

答案及解析 A

A:错误,\把后面的'转义了,所以错误

B:正确,由于字符型变量有ASCII值,所以62+3 = 65 也就是 A字符

C:正确,NULL是由#define定义的宏,为0,是'\0'这个字符

D:正确,\xaa是一个字符,是16进制字符的表示方法,所以正确

第四题

4. 已知:char str1[8],str2[8]={"good"};,则在程序中不能将字符数组str2赋值给str1的语句是 

A:str1=str2;

B:strcpy(str1,str2);

C:strncpy(str1,str2,6);

D:memcpy(str1,str2,5);

答案及解析 A

A:数组名是地址常量,不可以更改,所以不能做赋值运算符的左值,因为赋值运算符的左值必须是变量;

B:strcpy是拷贝函数,遇到\0停止,所以可以完成拷贝。

C:strncpy是我们让他拷贝几个字符就拷贝几个,题中给6个,完全够用。

D:memcpy是按照字节拷贝,char类型是一个字节,所以题中给5个字节完全够用

第五题(错了)

5. 以下程序的输出结果是:

#include
int  main()
{
    int x = 0, y = 5, z = 3;
    while(z-->0 && ++x<5)
    {
        y= y - 1;
    }
    printf("%d, %d, %d\n", x, y, z);
    return 0;
}

A:2,2,0

B:3,2,-1

C:4,3,-1

D:5,-2,-5

答案及解析 B

这里需要注意的一点就是

后置--/++ 返回的是变化之前的值,这个值是变量的临时拷贝,但是变量本身是变化了。

前置--/++返回的就是变化后的变量的值。

在最后一次z == 0的时候,进入循环,虽然不满足条件,但是z--已经运算了,所以是-1

C语言--每日五道选择题--Day19_第1张图片

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