第1题
🎗设有定义 char *p[ ] = {“Shanghai”, Beijing", “Hongkong”}; 则结果为 j 字符的表达式是 ( )
A. *p[1] + 3
B. *(p[1] + 3)
C. *(p[3] + 1)
D. p[3][1]
📝 分析:
此题是对指针数组的考察,对于上面的定义我们可以画出如下关系图
对于这段代码必须得理解这张图,否则你对这个代码的理解是有问题的,此外还需要了解运算符之间的优先级
所以选择 B 选项
第2题
🎗执行以下函数后, i 的值是 ( )
int f(int x) { return ((x > 2) ? x * f(x - 1) : 3); } int i; i = f(f(2));
A. 30
B. 无限递归
C. 9
D. 2160
📝 分析:
所以选择 C 选项
第3题
🎗在 int p[ ][4] = { {1}, {3, 2}, {4, 5, 6}, {0} }; 中,p[1][2] 的值是 ( )
A. 1
B. 0
C. 6
D. 2
📝 分析:
此题是对二维数组的考查
对于二维数组的不完全初始化会主动赋值 0
所以选择 B 选项
第4题
🎗设有以下宏定义,则执行语句 z = 2 * (N + Y( 5 + 1))后,z 的值是 ( )
#define N 3+1 #define Y(n) ((N+1)*n)
A. 60
B. 190
C. 248
D. 以上全错
📝 分析:
❗ define替换规则 ❕
在程序扩展 #define 定义符号和宏时,需要涉及以下几个步骤
1️⃣ 在调用宏时,首先对参数进行检查,看看是否包含任何由 #define 定义的符号。如果是,它们优先被替换
2️⃣ 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被它们的值替换
3️⃣ 最后,再次对结果文件进行扫描,看看它是否包含任何由 #define 定义的符号。如果是,就要重复上述过程
⚠ 注意:
▶ 宏参数和 #define 定义中可以出现其它 #define 定义的常量。
但是对于宏,不能出现递归,因为宏只做简单的文本替换,且只替换一次
▶ 当预处理器搜索 #define 定义的符号时,字符串常量的内容并不被搜索
❗ 代码步骤如下 ❕
所以选择 A 选项
第5题
🎗char a; int b; float c; double d; 则表达式 a * b + d - c 值的类型是 ( )
A. float
B. int
C. char
D. double
📝 分析:
❗ 算术转换 ❕
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另一个操作数的类型,否则操作就无法进行。
下面的层次体系称为寻常算术转换
long double
double
float
unsigned long int
long int
unsigned int
int
如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算
低字节 -> 高字节 (如果是相同字节的就向精度更高的转换)
所以选择 D 选项
第6题
🎗编程题<难度系数⭐>
📝 题述:
Fibonacci 数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci 数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在 Fibonacci 数列中的数我们称为 Fibonacci 数。
给你一个 N,你想让其变为一个 Fibonacci 数,每一步你可以把当前数字 X 变为 X - 1 或者 X + 1 ,现在给
你一个数 N 求最少需要多少步可以变为 Fibonacci 数。
🍳 输入描述:
输入为一个正整数 N(1 ≤ N ≤ 1,000,000)
🍳 输出描述:
输出一个最小的步数变为 Fibonacci 数
💨 示例:
输入,15
输入,2
🧷 平台:Visual studio 2017 && windows
🔑 核心思想:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<math.h> int main() { int n = 0; scanf("%d", &n); int f1 = 0; int f2 = 1; int f3 = 0; while(1) { if(n == f2) { printf("%d\n", 0); break; } else if(n < f2) { if(abs(f1-n) < abs(f2-n)) { printf("%d\n", abs(f1-n)); break; } else { printf("%d\n", abs(f2-n)); break; } } //说明n不在f1和f2的那个区间内,还需要迭代Fib数 f3 = f1 + f2; f1 = f2; f2 = f3; } return 0; }
第7题
🎗编程题 <难度系数⭐⭐>
📝 题述:
请实现一个函数,将一个字符串中的每个空格替换成 “%20” 。
例如,当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy。
🧷 平台:Visual studio 2017 && windows
🔑 核心思想:
❓ 无厘头 ❔
相信肯定会有人觉得这道题很奇怪,但其实这道题并不奇怪。
当我们去百度搜索关键字 “无 厘 头” 时
发现上面的链接使用 “%20” 替换了空格
❓ 为什么会空格会替换成 %20 ❔
豌豆在网上查询了下,大多数是这样说的:
W3C标准规定,URL查询参数中空格都会被编成加号+;而在 RFC 2396 中 URI 里的保留字符都需转义成 %HH 格式
当然也可以理解空格的 ASCII 码是 32,对应的十六进制是 20
行哒!这里就不扯远了
#include<stdio.h> #include<string.h> void ReplaceSpace(char* str, int length) { //1.计算空格的个数 int i = 0; int spcount = 0; for (i = 0; i < length; i++) { if (str[i] == ' ') spcount++; } //2.计算替换空格后新的长度和最后的位置 int newlengh = length + spcount * 2; int pos = newlengh - 1; //3.从后往前填充 for (i = length - 1; i >= 0; i--) { //空格 if (str[i] == ' ') { str[pos--] = '0'; str[pos--] = '2'; str[pos--] = '%'; } //非空格 else { str[pos--] = str[i]; } } } int main() { char arr[20] = "We Are Happy."; ReplaceSpace(arr, strlen(arr)); printf("%s\n", arr); return 0; }