C语言(笔试自查)

1、以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )

A

char s[10]="abcdefg";

B

char t[]="abcdefg",*s=t;

C

char s[10];s="abcdefg";

D

char s[10];strcpy(s,"abcdefg");

数组名是一个指针常量,char *const s,指针的指向是不可以修改的,指针指向的内容是可以修改的。字符串"abcdefg"代表一个地址,不能改变一个指针的指向,所以c选项错误。

2、对于代码段

1

2

3

char c = 48;//直接赋值运算

int i = 1, j = 10;

j = !(c > j)&&i++;

则i和j的值分别是1和0。请问这句话是正确的吗?

A

正确

B

错误

3、sizeof函数无法访问静态区。sizeof函数是在编译时计算数据类型或变量占用的内存空间大小,它只对数据类型和变量进行静态分析,在编译阶段就已经确定了。静态区是在程序运行时分配的存储区域,sizeof函数无法获取动态分配的内存空间大小。

4、

int a=4,则对于表达式++(a++)的结果说法正确的是()

A

结果为5

B

结果为6

C

结果为7 

D

以上不都是

a++的结果是4,然后进行++4是不对的,++运算只是针对于变量的,不能对常量来进行++运算。

5、

有以下程序

1

2

3

4

5

6

main() {

    int a, b, d = 25;

    a = d/10%9;

    b = a && (-1);

    printf("%d,%d\n", a, b);

}

程序运行后的输出结果是()

A

6,1

B

2,1

C

6,0

D

2,0

逻辑与&&运算认为0为假,非0为真

6、

阅读以下程序,当输入数据的形式为25,13,10↙,正确的输出结果为()

1

2

3

4

5

int main() {

    int x, y, z;

    scanf("%d%d%d", &x, &y, &z);//%d,%d,%d就对了

    printf ("x+y+z=%d\n", x+y+z);

}

A

x+y+z=48

B

x+y+z=38

C

x+y+z=35

D

无法确定

7、

"++"运算符的优先级比"+"运算符的优先低。请问这句话的说法是正确的吗?

A

正确

B

错误

++分为前置和后置,前置++比+运算优先级高,后置比+运算符优先级低。

8、

strcpy()过程能够防止字符串被拷贝到较小的内存区域中去。

A

B

strcpy 函数由于不对数组边界进行检查,而非常容易造成各种
缓冲区溢出的漏洞。这些漏洞很容易被利用,而造成严重的系统问题。在使用 strcpy 函数时,要小心谨慎。

9、

C库函数中malloc依赖下面哪个系统调用增长堆空间()

A

open

B

ioctl

C

sbrk

D

write

10.

对于 32 位机器,则下面代码输出结果为()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#include<iostream>

#include<string>

using namespace std;

typedef struct data_ {

    int a[10];

} data_t;

typedef struct descriptor_ {

    data_t* ptr;

    char data[0];

} desc_t;

int main() {

    cout << sizeof(desc_t) << endl;

    return 0;

}

A

40

B

4

C

8

D

0

data[0] 是一个柔性数组,柔性数组默认是不占用内存的,因此 desc_t 的大小即为指针大小,32 位机器上为 4 字节,无需额外对齐

11、

共同体变量所占的内存长度一定等于最长的成员的长度。请问这句话的说法是正确的吗?

A

正确

B

错误

union(共用体)的各个成员是以同一个地址开始存放的,每一个时刻只可以存储一个成员,这样就要求它在分配内存单元时候要满足两点:  1.一般而言,共用体类型实际占用存储空间为其最长的成员所占的存储空间;  2.若是该最长的存储空间对其他成员的元类型(如果是数组,取其类型的数据长度,例int a[5]为4)不满足整除关系,该最大空间自动延伸; 

12、

下列main()函数执行后的结果为()

1

2

3

4

5

6

7

8

9

10

11

int func(){ 

    int i, j, k = 0;

    for(i = 0, j =- 1;j = 0;i++, j++){ //j=0,是逻辑运算,0假

        k++;

    }

    return k;

}

int main(){

   cout << (func());

   return 0;

}


 

A

-1

B

0

C

1

D

2

13、

C 语言中的文件类型只有( )

A

索引文件和文本文件两种

B

文本文件一种

C

二进制文件一种

D

ASCII码文件和二进制文件两种

从文件编码的方式来看,文件可分为ASCII码文件(文本文件)和二进制文件两种。ASCII码文件可在屏幕上按字符显示的,例如源程序文件就是ASCII码文件,由于按字符显示,可以识别;二进制文件是按二进制的编码方式来存放文件的,二进制文件虽然也可以在屏幕上显示,显示为乱码。

14、

有如下一段程序:

1

2

3

4

5

int f1(float);

int f2(char);

int f3(float);

int f4(float);

int (*pf)(float);

则以下不合法的是()

A

int (*p)(float) = &f1;

B

pf = &f4;

C

pf = &f2;

D

pf = f3;

函数指针变量的声明方法为:

返回值类型 ( * 指针变量名) ([形参列表]);

函数指针所指向的函数,返回值类型,形参列表必须完全匹配,对函数指针赋值可以采用以下方式pf=&p1或者pf=p1

15、

9.

以下正确的说法是(   )。

A

用户调用标准库函数前,必须重新定义

B

若已包含标准库头文件及相关命名空间,用户也可以重新定义标准库函数,但是该函数将失去原有含义

C

若已包含标准库头文件及相关命名空间,则系统不允许用户重新定义标准库函数

D

用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值