C语言基础试题十道(第二期)

1.turbo c环境下,下面程序运行的结果是()

1

2

3

4

5

6

7

8

9

10

11

#include <stdio.h>

int main() {

    printf("\n");

    int a[5] = {1, 2, 3, 4, 5};

    int *p, **k;

    p = a;

    k = &p;

    printf("%d", *(p++));

    printf("%d", **k);

    return (0);

}

A:11
B:21
C:22
D:12

答案:D

解析: 程序首先定义了一个一维数组a,赋其初值,并定义一个同类型的指针变量p和一个指向指针的指针变量k,然后让指针变量p指向数组的首地址,接着将指针变量p的地址值赋给指向指针的指针变量k。在第一条输出语句中,首先我们需要弄清楚*(p++)的作用,它是先调用指针变量p的值,然后使其自加,输出效果等价于*p,因此,最后输出的结果是数组中的第一个元素。在第二条输出语句中,我们需要弄明白**k的作用,指向指针的指针变量类似于指针变量,如果用**k表示一个数值,可以确定这条输出语句的输出结果是一个数值,而非地址,从表达式k=&p可以看出,k的值是指针变量p的地址值,p的值改变后,k能实时得到改变,那么在第一条输出语句对p的改变,在第二条输出语句中得到了体现。因此,**k输出的是数组中的第二个元素.

2.

使文件指针重新定位到文件读写的首地址的函数是()

正确答案:C

A:ftell( )
B:fseek( )
C:rewind ()
D:ferror ()

解析:

          A中ftell() 函数用于得到文件位置指针当前位置相对于文件首的偏移字节数;

          B中fseek()函数用于设置文件指针的位置;

          C中rewind()函数用于将文件内部的位置指针重新指向一个流(数据流/文件)的开头;

          D中ferror()函数可以用于检查调用输入输出函数时出现的错误。

3.

STL中的一级容器有:

A:vector, deque, list, set, multiset, map, multimap.
B:序列容器,关联容器,容器适配器
C:set, multiset, map, multimap.
D:vector, deque, list.

正确答案:D

解析:

STL中一级容器是指, 容器元素本身是基本类型, 非组合类型。

set, multiset中元素类型是pair<key_type, key_type>;

map, multimap中元素类型是pair<key_type, value_type>;

4.以下哪项不属于STL container()

A:stack
B:queue
C:multimap
D:string

答案:D

解析:

序列容器:动态数组vector双端队列deque(本质是动态数组加索引),链表list。

关联容器:set,map,multiset,multimap,bitset(叫bit_array更合适)。
容器适配器:stack,queue,priority_queue

5.C语言结构体类型变量在程序执行期间()

A:所有成员一直驻留在内存中
B:只有一个成员驻留在内存中
C:部分成员驻留在内存中
D:没有成员驻留在内存中

正确答案:A

解析:结构体变量不管其包含有多少个成员,都应当看成是一个整体。在 程序运行 期间,只要在变量的生存期内,所有成员一直驻留在内存中,不可能出现有的成员驻留内 存,有的成员不驻留内存的情况。

6.

以下 scanf 函数调用选项中, 错误 的是()

1

2

3

4

5

struct T {

    char name[20];

    int age;

    int sex;

} a[5], *pa=a;

scanf("%s",a[0].name);
scanf("%d", &pa[0].age);
scanf("%d",&(pa->age));
scanf("%d", pa->age);

正确答案:D

7.

下列程序段执行后,输出d的值为()

1

2

3

4

5

6

7

void main()

{

   int a=1,b=0,c=-1,d=0;

   d=++a||++b&&++c;

   cout<<d<<endl;

   return;

}

A:1
B:2
C:3
D:0

正确答案:A

解析:

运算符优先级:&&>||>=

所以先计算++b&&++c,++c为0,所以整体是false=0,再计算++a||0,++a为true,

所以整体是true=1,所以d=1

8.

以下只有在使用时才为该类型变量分配内存的存储类型的是()

A:auto和static
B:auto和register
C:register和static
D:extern和register

 正确答案:B

解析:局部变量也叫自动变量 在函数里定义int a也就是auto int a a的作用域只在这个函数里 为了节省内存空间,优化性能,编译器通常会将一次性使用的变量分配在栈上(先进后出,生命周期结束就出栈)。这样执行不同的函数的时候就会在一个栈上进行出入栈操作,更高效的利用内存。 一个变量用register来修饰,就意味着该变量会作为一个寄存器变量,让该变量的访问速度达到最快。一个程序逻辑中有一个很大的循环,循环中有几个变量要频繁进行操作,这些变量可以声明为register类型。

9.

数组a的定义语句为“float a[3][4];”,下列()是对数组元素不正确的引用方法。

A:a[i][j]
B:*(a[i]+j)
C:*(*(a+i)+j)
D:*(a+i*4+j)

正确答案:D

解析:

二维数组可以看成是指针的指针,b[][] = **b; 比如b[3][4]; 它是一个3行4列的二维数组,也可以看成是二级指针,一级存放的是行指针,然后每个行指针里面其实又是指向了4个列元素。 *(*(b+i)+j),*(b+i)是先取行指针,然后+j偏移到所要的列,然后*取值就得到i行j列的数据了。 D项是*a才对

10.

C++是不是类型安全的?

A:是
B:不是

正确答案:B

解析:可以参考:谈谈C++类型安全_btwsmile's blog-CSDN博客_c++类型安全icon-default.png?t=LA92http://blog.csdn.net/ixsea/article/details/6693178

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进步小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值