C语言进阶考试讲解
🏀选择题1~5
🌍第1️⃣题
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
unsigned char i = 7;
int j = 0;
for (; i > 0; i -= 3)
{
++j;
}
printf("%d\n", j);
return 0;
}
//请问该程序的输出是多少 ?
A.2 B.死循环
C.172 D.173
🌍第2️⃣题
以下程序运行时,若输入1abcedf2df<回车>输出的结果是?
int main()
{
char a = 0, ch;
while ((ch = getchar()) != '\n')
{
if (a % 2 != 0 && (ch >= 'a' && ch <= 'z'))
ch = ch - 'a' + 'A';
a++;
putchar(ch);
}
printf("\n");
}
A 1abcedf2df B 1ABCEDF2DF
C 1AbCeDf2dF D 1abceDF2DF
🌍第3️⃣题
3. 以下哪个选项一定可以将 flag 的第二个 bit 置 0
A flag&=~2
B flag|=2
C flag^=2
D flag>>=2
🌍第4️⃣题
下面两个结构体
struct One {
double d;
char c;
int i;
};
struct Two {
char c;
double d;
int i;
};
在 #pragma pack(4) 和 #pragma pack(8) 的情况下,结构体的大小分别是?
A 16 24,16 24 B 16 20,16 20
C 16 16,16 24 D 16 16,24 24
🌍第5️⃣题
int x = 1;
do {
printf("%2d\n", x++);
} while (x--);
A. 1 B.无任何输出
C. 2 D.陷入死循环
🏀选择题6~10
🌍第6️⃣题
下列 C 程序执行后 c 输出结果为 ( ) ( 32 位)
void main()
{
int a = -3;
unsigned int b = 2;
long c = a + b;
printf("%ld\n", c);
}
A -1 B 4294967295
C 0x7FFFFFFF D 0xFFFFFFFF
🌍第7️⃣题
设有定义char *p[]={"Shanghai","Beijing","Honkong"};则结果为j字符的表达式是()
A *p[1] +3
B *(p[1] +3)
C *(p[3] +1)
D p[3] [1]
🌍第8️⃣题
int f(int x) {
return ((x > 2) ? x * f(x - 1) : 3);
}
int i;
i = f(f(2));
执行如上函数后. i的值为()
A 30
B 无限递归
C 9
D 2160
🌍第9️⃣题
在int p[][4] = { {1},{3,2},{4,5,6},{0} }; 中,p[1][2]的值是()
A 1
B 0
C 6
D 2
🌍第🔟题
int fun(int a) {
a ^= (1 << 5) - 1;
return a;
}
fun(21)的运行结果是()
A 10
B 5
C 3
D 8
🏀选择题11~15
🌍第1️⃣1️⃣题
下列关于C / C++的宏定义,不正确的是()
A 宏定义不检查参数正确性,会有安全隐患
B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
D 相对于函数调用,宏定义可以提高程序的运行效率
🌍第1️⃣2️⃣题
下面关于"指针"的描述不正确的是()
A 当使用free释放掉一个指针内容后, 指针变量的值被置为NULL
B 32位系统下任何类型指针的长度都是4个字节
C 指针的数据类型声明的是指针实际指向内容的数据类型
D 野指针是指向未分配或者已经释放的内存地址
🌍第1️⃣3️⃣题
设有以下宏定义:
#define N 3+1
#define Y(n) ((N+1)*n)
则执行语句 z = 2 * ( N + Y(5 + 1) )后, z 的值为
A 60
B 190
C 248
D 其他都错
🌍第1️⃣4️⃣题
由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义?
A 预处理
B 编译
C 链接
D 执行
🌍第1️⃣5️⃣题
char a ; int b ; float c ; double d ;
则表达式 a* b + d - c 值的类型为()
A float
B int
C char
D double
⚽️编程题1️⃣
💥Fibonacci数列:点这里🌠传送门
标题:Fibonacci数列 | 时间限制:1秒 | 内存限制:32768K | 语言限制: 不限
【Fibonacci数列】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数"
示例1:
> 输入:15
> 输出:2
输入为一个正整数N(1 ≤ N ≤ 1,000,000)
输出一个最小的步数变为Fibonacci数"
📜参考代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 0;
int b = 1;
int c = 0;
int n = 0;
scanf("%d", &n);
while (1)
{
if (b == n)
{
printf("0\n");
break;
}
else if (b > n)
{
if (abs(a - n) > abs(b - n))
{
printf("%d\n", abs(b - n));
}
else
{
printf("%d\n", abs(a - n));
}
break;
}
a = b;
b = c;
c = a + b;
}
return 0;
}
⚽️编程题2️⃣
🐾替换空格:点这里💥传送门
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
📜参考代码
class Solution {
public:
void replaceSpace(char* str, int length) {
//数空格
int spacecent = 0;
char* p = str;
while (*p)
{
if (*p == ' ')
spacecent++;
p++;
}
int newlength = length + 2 * spacecent;
int end1 = length - 1;
int end2 = newlength - 1;
while (end1 != end2)
{
if (str[end1] != ' ')
{
str[end2--] = str[end1--];
}
else
{
str[end2--] = '0';
str[end2--] = '2';
str[end2--] = '%';
end1--;
}
}
}
};