【C 语言考试真题】详解(一)


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、前言

二、选择题

2.1 题目一

2.1.1 题目描述

2.1.2 真题解析

 2.2 题目二

2.2.1 题目描述

2.2.2 真题解析

2.3 题目三

2.3.1 题目描述

2.4 题目四

2.4.1 题目描述

2.4.2 解题思路

2.5 题目五

2.5.1 题目描述

2.5.2 真题解析

2.6 题目六

2.6.1 题目描述

2.6.2 真题解析

2.7 题目七

2.7.1 题目描述

2.7.2 真题解析

2.8 题目八

2.8.1 题目描述

2.8.2 真题解析

2.9 题目九

2.9.1 题目描述

2.9.2 真题解析

2.10.1 题目描述

2.10.2 真题解析


一、前言

猿哥准备甄选 1000 C 语言考试真题进行详细的讲解,适合于下面这两类小伙伴:

【1】临近考试,临阵磨枪,想快速提升的同学;

【2】日常练习,课后巩固,准备提升 C 语言的同学;


本篇文章选择 10 道C 语言考试真题进行讲解,下面来看下吧!

二、选择题

2.1 题目一

2.1.1 题目描述

执行以下程序段后,输出结果和a的值是(   )。

int a = 10; printf(“%d”, a++);

A、11 和 10

B、11 和 11

C、10 和 11

D、10 和 10


2.1.2 真题解析

答案C

解题思路本题考查对自增运算符的理解。

a++ : 表示先使用 a 的值,然后再将 a + 1 赋值给 a;本题中,printf 中先输出 a,即:先使用 a 的值,然后执行 a = a + 1操作。

【扩展知识】

++a : 表示先执行 a = a + 1,然后再使用 a 的值。

如果题目代码修改如下:

int a = 10;

printf(“%d”, ++a);

则应该选 B。

同理,a-- 和 --a 也是同样的原理。


 2.2 题目二

2.2.1 题目描述

已知字符 ‘A’ 的 ASCII 代码值是 65,字符变量 c1 的值是 ‘A’,c2 的值是 ‘D’,执行语句 printf(“%d,%d”, c1,c2-2); 后,输出结果是(   )

A、65,66

 B、A,B

 C、65,68

 D、A,68


2.2.2 真题解析

答案A

解题思路printf 输出中,输出参数使用 %d,所以输出的值一定是整数,排除 B 和 D,因为 ‘A’ 的代码值为 65,则 ‘D’ 的代码值为 68, 所以 c2 - 2 = 68 - 2 = 66,所以答案为 A。


2.3 题目三

2.3.1 题目描述

 相同结构体类型的变量之间,可以()。

A、比较大小

 B、地址相同

 C、赋值

 D、相加


答案C

解题思路首先,不同变量之间的地址是不同的,B 错误,通常情况下结构体是不可以比较大小和相加的,排除 A 和 D。

在相同类型的结构体变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量之间是可以相互赋值的。例如有结构体如下所示:

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int x;
    int y;
};

int main()
{
    struct Node a, b;
    a.x = 5;
    a.y = 10;

    b = a;
    printf("%d %d\n", b.x, b.y);
    return 0;
}

输出结果为:

5 10

2.4 题目四

2.4.1 题目描述

 int a[10]; 合法的数组元素的最小下标值为()

A、1

B、0

C、10

D、9


2.4.2 解题思路

答案B

解题思路本题考查数组下标的最小值,数组小标是从 0 开始的,所以选择 A。


2.5 题目五

2.5.1 题目描述

能正确表示逻辑关系:“a >= 10 或 a <= 0”的 C 语言表达式是(   )

A、a >= 0 | a <= 10

 B、a >= 10 or a <= 0

 C、a >= 10 && a <= 0

 D、a >= 10 || a <= 0


2.5.2 真题解析

答案D

解题思路本题考查逻辑运算符,其中 || 表示或,&& 表示与、并且的意思。


2.6 题目六

2.6.1 题目描述

int main()
{
    int x = 1, a = 0, b = 0;
    switch(x) {
        case 0: b++;
        case 1: a++;
        case 2: a++;b++;
    }
    printf("a=%d, b=%d", a, b);
    return 0;
}

该程序的输出结果是()

A、2, 2

B、2, 1

C、1, 1

D、1, 0


2.6.2 真题解析

答案B

解题思路本题考查 switch 语句,因为 x = 1,所以进入 case 1 语句中,执行 a++,此时,a = 1, b = 0,因为 case 1 没有 break 语句,所以会执行 case 2,执行 a++ 和 b++后,a = 2, b = 1,所以答案选择 B。


2.7 题目七

2.7.1 题目描述

设变量 a 是整型,f是实型,i是双精度型,则表达式 10 + ‘a’ + i * f 的值数据类型是()

 A、不确定

 B、double

 C、int

D、float


2.7.2 真题解析

答案B

解题思路本题考查C语言中的隐式类型转换,主要遵循的一个规则是,从低类型转换到高类型,如下图所示:所以本题的答案是 B。


2.8 题目八

2.8.1 题目描述

以下程序中,while 循环的循环次数是(   )

int main()
{
    int i = 0;
    while (i < 10) {
        if (i < 1) continue;
        if (i == 5) break;
        i++;
    }
    return 0;
}

 A、死循环,不能确定次数

 B、6

 C、4

 D、1


2.8.2 真题解析

答案A

解题思路本题考查对 while 循环的理解,i 的初始值为 0,进入循环后,if(i < 1) continue 不会执行后面的语句,那么 i 还是满足 i < 10,继续执行 if (i < 1) continue 这条语句,不会执行 if (i == 5) break; 和 i++;所以while 会进入死循环,A 正确。


2.9 题目九

2.9.1 题目描述

若有说明语句:char c = ‘\72’; 则变量 c (   )

 A、说明不合法, c的值不确定;

 B、包含3个字符;

 C、包含1个字符;

 D、包含2个字符;


2.9.2 真题解析

答案C

解题思路本题考查对 char 字符变量的理解,首先 char 类型的字符变量占用一个字节,只存储一个字符,排除 B、D,其中,‘\’ 表示转义字符,后面只能跟八进制的数字,72 满足条件,’\72’ 表示 ASCII 值为 58 的字符,A 错误,正确答案为 C。


2.10 题目十

2.10.1 题目描述

下列程序运行结果为(   )

#define P 3
#define S(a) P*a*a

int main()
{
    int ar;
    ar = S(3+5);
    printf("\n%d", ar);
    return 0;
}

A、192

B、25

C、29

D、27


2.10.2 真题解析

答案C

解题思路本题考查对宏定义 #define 的理解,#define 在执行的时候,是直接替换的,本题中 S(3+5),展开后是:P*3+5*3+5,因为 P是 3, 所以表达式是 3*3+5*3+5=29,答案为 C。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Linux猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值