C语言试题十道(第四期)

2021/12/3 6:09:02

本文主要是介绍C语言试题十道(第四期),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.代码段

#include <stdio.h>

int main() {
    int i = 1;
    sizeof(i++);
    printf("%d\n", i);
    return 0;
}的输出为()

  • 1
  • 4
  • 2
  • 8

正确答案: A

解析:
根据C99规范, sizeof是一个编译时刻就起效果的运算符,在其内的任何运算都没有意义,
sizeof(i++); 在编译的时候被翻译成 
sizeof((i++的数据类型)) 也就是 sizeof(int); 不会执行i++了。
sizeof是运算符,它在编译时起作用,而不是运行时。
也就是说,在编译时,就得到了sizeof(int),运行时,i++根本没有执行过。

2. 补充下面函数代码:

如果两段内存重叠,用 memcpy 函数可能会导致行为未定义。 而 memmove 函数能够避免这种问题,下面是一种实现方式,请补充代码。

#include <iostream>
using namespace std;

void *memmove(void *str1, const void *str2, size_t n) {
    char *pStr1 = (char *)str1;
    char *pStr2 = (char *)str2;
    if () {
        for (size_t i = 0; i != n; ++i) {
            *(pStr1++) = *(pStr2++);
        }
    } else {
        pStr1 += n - 1;
        pStr2 += n - 1;
        for (size_t i = 0; i != n; ++i) {
            *(pStr1--) = *(pStr2--);
        }
    }
    return ();
}
pStr1 < pStr2       str1
pStr1+n < pStr2       str2
pStr1+n < pStr2 || pStr2+n < pStr1       str2
pStr2+n < pStr1       str1

正确答案:A

解析:

原型:void *memmove( void* dest, const void* src, size_t count );

头文件:<string.h>

功能:由src所指内存区域复制count个字节到dest所指内存区域。

如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。 

当pStr1< pStr2时,即 pStr1的首地址小于   pStr2的首地址,正序拷贝

当pStr1> pStr2时,即 pStr1的首地址大于   pStr2的首地址,倒叙拷贝

3. 

在 C 语言中,C99除外,一维数组的定义方式为:

元素类型 数组名[E];

E 为(   )。

常量表达式
整型表达式
整型常量或整型表达式
整型常量表达式

正确答案:D

4.设有 int x=11; 则表达式 (x++ * 1/3) 的值是( )

3

4

11

12

正确答案:A

解析:

x++是在;之后执行的,相当于(x*1/3);x++;

(x*1/3)表达式算出的结果值为Int类型,自动去小数点

结果为3

5.以下正确的函数原型为()

f1( int x; int y );
void f1( x, y );
void f1( int x, y );
void f1( int, int );

正确答案;D

解析:

函数原型:指明函数的名字,返回的类型,有几个参数,这几个参数是什么类型,不需要函数体,也不需要形式参数的名字,其中用分号作为原型的结束符。

6.

执行下面代码后

1

2

int num = 7, sum = 7;

sum = num++, sum++, ++num;

后sum的值为( )

7
8
9
10

正确答案:B

解析:

sum = num ++ .到这里为止,和后面的++num. sum++完全是2段语句。

所以第一段。num++ 先赋值 7 给 sum, 再给自己加1.

此时 sum =7, num =8.

第二段:sum++,++num,  各自给自己加一。

结果 sum =8, num = 9

7.对于char *pa[7]的描述中,正确的是( )

pa是一个指向数组的指针,所指向的数组是7个char型元素
pa是一个指向某数组中第7个元素的指针,该元素是char型变量
pa[7]表示数组的第7个元素的值,是char型的值
pa是一个具有7个元素的指针数组,每个元素是一个char型指针

正确答案:D

8.在C++, 基类至少含有一个虚函数时,下列哪一个可以做为对象继承之间的转换

static_cast
dynamic_cast
const_cast
reinterpret_cast

正确答案:B

解析:

dynamic_cast : 

继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点

static_cast:

同旧式C转型,如int 到double

const_cast:

常用于去除某个对象的常量性

reinterpret_cast

不具备移植性,常见用途是转化函数指针类型

9.下列叙述正确的是:

预处理命令行必须位于源文件的开头
在源文件的一行上可以有多条预处理命令
宏名必须用大写字母表示
宏替换不占用程序运行时间

正确答案:D

解析: 预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置。源文件的每一行只能有一条预处理命令,如果指令一行放不下,可以通过反斜杠“/”进行控制。宏名通常由大写字母表示,而非必须宏是在预编译期间进行的,将代码中的指定字符转换,转换结束后,再进行编译,所以不占用程序运行时间

10.

对于代码段

1

struct sk{int a; float b;} data, *p = &data;

则对data中的a成员的正确引用是()

(*p).data.a
(*p).a
p->data.a
p.data.a

正确答案:B

解析:

1、如果是指针指向结构体,就用   ->  (“形状像个箭头,表示指向,记为指针访问结构体成员的方式”)

2、结构体类型名访问结构体成员变量 用,成员访问运算符 



这篇关于C语言试题十道(第四期)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程