刷c语言练习题5(牛客网)

1、若有定义int a[8];,则以下表达式中不能代表数组元素a[1]的地址的是()

A、&a[0]+1

B、&a[1]

C、&a[0]++

D、a+1

答案:C

解析:C选项中&a[0]是一个地址常量,对地址常量的赋值操作是不合法的,错误。

2、 以下函数值的类型是:

fun ( float x )

{ float y;

y= 3*x-4;

return y;

}

A、int

B、不确定

C、void

D、float

答案:A

解析:在C语言中,返回类型不写默认为int类型,如果return的类型与函数类型不符,以函数类型为准,所以选择选项A。

3、执行以下语句后b的值为:

  int a=5,b=6,w=1,x=2,y=3,z=4;

  (a=w>x)&&(b=y>z);

A、16

B、0

C、1

D、6

答案:D

解析:根据运算符的优先级,首先计算第一个括号中的内容,又 > 的优先级大于 = ,故先判断 w > x ,为假则 a = 0,第一个式子返回值为零。根据短路法则,第二个式子不会执行,所以 b = 6 不变,选择选项D。 

4、有函数定义:

1

2

void test(int a){} 

void test(float a){} 

则以下调用错误的是:

A、test(1);

B、test(‘c’);

C、test(2+’d’);

D、test(0.5);

答案:D

解析:D选项中,test(0.5)参数默认为double类型,调用函数时既可以匹配int类型也可以匹配float类型,造成类型模糊,改为test(0.5f)可以解决问题,选择选项D。

5、 下面代码的输出结果是?

1

2

3

4

5

6

7

#include <stdio.h>

int main() {

    int z, x = 5, y = -10, a = 4, b = 2;

    z = x++ - --y * b / a;

    printf("%d\n", z);

    return 0;

}

A、5

B、6

C、10

D、11

E、12

答案:C

解析:本题考查运算符的优先级。自增自减的优先级最高,首先进行x++和--y,++为后++,先取x的值为5,然后x自加为6,进行--y,y变为-11。式子可以化为 z = 5 - -11 * 2 / 4,现在式子中*和/的优先级最高,结合顺序从左往右,得到结果为-5.5,舍去小数位得-5。所以最终z = 5 - (- 5) = 10,选择选项C。

6、 若变量a是int类型,并执行了语句a=’A'+1.6;,则正确的叙述是()

A、a的值是字符C

B、a的值是浮点型

C、不允许字符型和浮点型相加

D、a的值是字符’A’的ASCⅡ值加上1

答案:D

解析:等式右边'A'转为对应的ASCII码与1.6进行运算,运算后得到的结果为double类型,将这个值赋给一个int型的变量,相当于进行一次强制转换,会丢失精度变为98。所以选择选项D。

7、 在上下文和头文件正常的情况下,以下C语言指令:

1

2

3

int a[5] = {1,3,5,7,9};

int *p = (int *)(&a+1);

printf("%d,%d",*(a+1),*(p-1));

运行结果是什么?

A、2,1

B、3,1

C、3,9

D、运行时崩溃

答案:C

解析:代码的第二行中,对&a相当于升维度,变成一个行指针,加一之后指向下一行的首地址。所以指针*(p-1)实际上是指向数组a最后一个元素的,*(a+1)等价于a[1],故选择选项C。

8、有以下一段代码

1

2

3

4

5

6

7

8

9

#include <stdio.h>

char* fun() {

    char a[] = "hello world";

    return a + 6;

}

int main() {

    printf("%s", fun());

    return 0;

}

请问程序最后输出结果是()

A、world

B、hello world

C、结果未知或者程序崩溃

D、程序崩溃

答案:C

解析:被调函数中定义的数组存放在栈区,当函数结束后,空间会被释放,因此返回的地址是一个无效地址,所以会导致结果未知或者程序崩溃,选择选项C。

9、 下列C程序执行后c输出结果为( )(32位)

1

2

3

4

5

6

7

8

9

#include<stdio.h>

#include<stdlib.h>

void main()

{

  int a = -3;

  unsigned int b = 2;

  long c = a + b;

  printf("%ld\n", c);

}

A、-1

B、4294967295

C、0x7FFFFFFF

D、0xFFFFFFFF

答案:A

解析:无符号整数与有符号整数进行运算结果为无符号整数,-1在计算机中以补码的形式存储,为0xFFFFFFFF。输出时是以十进制数形式输出,那么就还要进行取反加一的操作,找到0xFFFFFFFF是哪个数的补码,所以最后的输出结果为-1,选择选项A。

10、已有如下定义和输入语句,若要求a1、a2,c1、c2的值分别为10、20、A和B,

当从第一列开始输入数据时,正确的数据输入方式是()

1

2

int a1,a2;char c1,c2;

scanf("%d%c%d%c",&a1,&c1,&a2,&c2);

A、10A□20□B↙

B、10□A□20□B↙

C、10A20B↙

D、10A20□B↙

答案:C

解析:考查scanf输入的结束条件:空格、tab、回车、非法字符,当输入整数后,按空格会结束整数的输入,但空格会留在缓冲区中。当继续读入字符时,会直接将空格读入,造成错误,所以输入这四个数时不要在中间输入空格,选择选项C。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值