测试答案解析

迟到的答案解析~

1,下面对于 C 语言中的随机原理的描述中,哪一项是确的?
A,C 语言中的随机是真随机,每次产生的数字,与上一次数字无关
B,C 语言中的随机是伪随机,每次产生的数字,与二一次数字无关
C,C 语言中的随机是真随机,每次产生的数字,与上一次数字有关
D,C 语言中的随机是伪随机,每次产生的数字,与上一次数字有关

答案:D

题目解析

程序语言中的随机函数,基本都是伪随机,C 语言中的随机函数就是伪随机,原理是在一个伪随机序列上,依次性的产生每一个数字,如果本次随机函数所产生的数字确定了,下一个随机出来的数字也就确定了,所以,每次产生的数字,与上一次数字有关

2,下面对于 printf 和 sprintf 函数的描述中,哪一项是正确的?
A.printf 函数的返回值,代表了输出了多少个变量的值
B.sprintf 函数和 printf 函数返回值的含义相同
C.sprintf 函数是将内容输出到字符数组中,这一点与 printf 函数一致
D.printf 函数的第一位的参数,只能是固定的字符串信息

答案:B

题目解析

A 中,printf 函数的返回值代表了输出字符的数量;B 是正确的;C 中,sprintf 函数是将内容输出到字符数组中,而 printf 函数是输出到标准输出流中;D 中,printf 函数的第一位的参数,不仅可以是一个固定的字符串信息,也可以传入一个存储可变字符串信息的字符数组

3,

 for (初始化①; 循环条件②; 循环后操作③) 一条语句④;

以上是 for 语句的基本结构,它们的执行循环顺序是 

A.①②④③

B.①②③④

C.①④②③

D.①③②④

答案:A

题目解析

本题考查的是循环结构中 for 语句的相关知识。for 语句一般由 4 部分组成,其中初始化①这部分只在循环开始时执行了一次,真正的循环,是以循环条件②,一条语句④以及循环后操作③组成。它们的执行顺序是①②④③②④③……关于这部分的详细讲解,可参见专栏《03 | 判断与循环:给你的程序加上处理逻辑》。

4,下面关于字符串相关内容的描述中,哪一项是正确的?
A.字符串信息本质上是“值”,可以存储在字符数组中
B.如果一个字符串的长度是 11,那么所占用的存储空间就是 11个字节
C.\0 是一个字符串中的一个特殊标记,本质上不占用存储空间
D.strlen 函数的作用,是计算字符串占用的存储空间大小

答案:A

题目解析

A 是正确的;B 中,如果一个字符串的长度是 11,那么所占用的存储空间就是 12 个字节,还有一个 \0 字符;C 中,参考 B 中的解析;D 中,strlen 函数的作用,是计算字符串的长度,而字符串占用的存储空间大小比字符串长度多 1,两者是两个不同的概念。

5,下列关于预处理命令的说法中,哪一项是正确的?
A.预处理命令,会作用在整个编译链接的过程中
B.宏定义是一种预处理命令,他的作用,是做简单的替换,只作用在预处理阶段
C.条件编译是在程序运行阶段才会起作用,作用是选择代码段进行执行
D.宏定义中的傻瓜表达式,本质上是一种功能比较简单的函数

答案:B

题目解析

A 中,预处理命令,只会作用在预处理阶段;B 是正确的;C 中,条件编译是在预处理阶段起作用,作用是选择哪段代码保留在待编译源码中;D 中,宏定义中的傻瓜表达式,本质上还是一种宏,作用还是做简单的代码替换,和函数的功能也好,运行阶段也好,相差甚远。

6,C 语言程序从源代码到可执行程序的过程中,涉及到三个重要的过程,下列哪个顺序是正确的?
A.链接阶段,编译阶段,预处理阶段
B.预处理阶段,链接阶段,编译阶段
C.预处理阶段,编译阶段,链接阶段
D.链接阶段,预处理阶段,编译阶段

答案:C

题目解析

总地来说,程序编译过程涉及到五个阶段:预处理阶段,编译阶段,编译优化阶段,汇编阶段,链接阶段。而对于预处理阶段、编译阶段和链接阶段相对顺序,描述正确的选项应该是 C。

7,阅读下列程序,选出对于程序输出描述正确的一项:

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    switch (n) {
        case 1: printf("one"); break;
        case 2: printf("two ");
        case 3: printf("three"); break;
        default: printf("bigger");
    }
    return 0;
}

A.当输入 1 时,程序的输出是"one two'
B.当输入 2 时,程序的输出是"two three'
C.当输入 3 时,程序的输出是"three bigger
D.当输入 4 时,程序的输出是 “biger”

答案:B

题目解析

本题主要考察的是对于 switch…case 结构的理解,case 作为结构的入口,会依次执行入口及以下的代码,直到碰到 break 语句停止。A 中,当输入 1 时,程序的输出是 “one”;B 是正确的;C 中,当输入 3 时,程序的输出是 “three”;D 中,当输入 4 时,程序的输出是 “bigger”,注意选项中少写了一个 g。

8,阅读下列程序,选出对于程序输出描述正确的一项:

#include <stdio.h>
#define S(a, b) a * b
int main() {
    S(int, p);
    printf("%d\n", S(3, 6));
    printf("%d\n", S(3 + 4, 6));
    return 0;
}

A.程序无法通过编译,S(int, p) 这行代码将会报错
B.程序可以通过编译,会输出两行,分别为 18 和42
C.程序可以通过编译,会输出两行,分别为 18 和27
D.程序无法通过编译,原因是 S(a, b) 的宏定义出错

答案:C

题目解析

本题主要考察的是对于宏定义的掌握,宏定义做的就是简单替换操作,程序能否通过编译,在宏定义没有错误的情况下,重点分析替换以后的源代码是否合法即可。首先,宏定义 S(a, b) 无错误,其次主函数中的 S(int, p) 将被替换为代码 int * p; 这是定义整型指针变量的 p 的代码语句,故正确。最后,分析程序输出,S(3, 6) 被替换成为 3 * 6,输出结果是 18,故第一行输出是 18;S(3 + 4, 6) 的替换结果是 3 + 4 * 6,故输出结果是 27。最后选择答案 C。

9,下列关于指针相关的描述中,哪些是正确的?(多选)
A.指针变量也是变量,占据一定的存储空间,当中存储地址
B.不同类型的指针变量,占用的存储空间不同,很容易理解,因为类型不同
C.不同类型的指针变量,真用的存储空间相同,因为地址信息的长度都相同
D.一个指针可以进行取值操作取值操作涉及到几个字节,与指针的类型有关

答案:ACD

题目解析

本题主要考察你对于指针相关知识的掌握程度。指针变量也是变量,指针是一种存储地址的变量,因为地址是用来标记每一个字节的,所以所有地址的长度都相同,也就是说,不管是什么类型的指针,占用存储空间大小都一样。指针变量的类型决定了取值操作时,取几个字节中数据作为值有关。

10,阅读下列程序,选出对于程序描述正确的几项:(多选)

#include <stdio.h>
void func(int *a, int *b, int c) {
    a[3] = 6;
    b[0] = 2;
    c = 7;
}

int main() {
    int a[10] = {0}, b = 45, c = 67;
    func(a + 1, &b, c);
    printf("%d %d %d\n", a[3], b, c);
    return 0;
}

A.程序编译时会报错,主要原因是主函数中传入了个普通变量的地址,而 func 函数中却当成了一个数组使用
B.程序会正常编译通过,不会有报错
C.程序的输出结果是: 6 45 67
D.程序的输出结果是: 0 2 67

答案:BD

题目解析

本题主要考察指针知识和函数传值的相关知识。func 函数有三个参数,前两个参数是指针,接收两个整型地址,第三个参数是一个整型参数,关于第三个参数 c 就不做果多说明了,就是一个普通的形参,任何操作,影响不到实参。

函数内部,对 a,b 两个指针变量使用了方括号运算符,a[3] 相当于 *(a + 3),只要是涉及到取值运算符,实际上改变的是原存储区中的内容,也就是说,无论是 a[3] 还是 b[0],都会改变原存储区中的内容。

这里面特别需要注意的是 b[0] 的用法,虽然主函数中传入的是一个整型变量的地址,可实际上,一个整型变量可以看成是拥有一个整型元素的特殊数组,所以函数内部对 b[0] 的修改,实际上等价于对于主函数中相关变量存储区中内容的修改。所以,最后主函数中变量 b 的值应该被修改成了 2。

最后来看主函数中 a 数组中情况,a 数组一开始所有元素初始化成为 0,而传给 func 函数的时候,传入的地址是 a + 1,也就是说,在 func 函数里面,修改的 a[3],实际上是主函数中 a 数组的 a[4] 元素,所以,当我们在主函数中输出 a[3] 值的时候,依然是没有被修改的 0 值。

寄语:执着于理想,纯粹于当下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值