【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13
🔥个人主页:@草莓熊Lotso
🎬作者简介:C++研发方向学习者
📖个人专栏: 《C语言》 《数据结构与算法》《C++知识分享》《编程工具入门指南》
⭐️人生格言:生活是默默的坚持,毅力是永久的享受。
前言:我们距离学习完C语言已经很久了,在数据结构学完后,博主准备通过这16天的强化训练和大家一起回顾C语言的知识,今天依旧是五道选择和两道编程题,希望大家能有所收获。
目录
选择题:
编程题:
1.统计每个月兔子的总数
2.数列的和
选择题:
1、如果 x=2014 ,下面函数的返回值是( )
A: 20 B: 21 C: 23 D 25
int fun(unsigned int x)
{int n = 0;while (x + 1){n++;x = x | (x + 1);} return n;
}
答案解析:
正确答案:C这个作用是对整型中0的个数进行统计,x=x|(x+1);的作用是每次循环把x的二进制中从右往左数的最后一位0变成1,直道变成全1的时候x+1就溢出为全0,循环结束。2014的二进制是0000 0000 000 0000 0000 0111 1101 1110,所以结果是23
2、下列语句定义 x 为指向 int 类型变量 a 的指针,其中哪一个是正确的( )
A: int a , *x = a; B: int a , *x = &a; C: int *x = &a , a; D: int a , x = a;
答案解析:
正确答案:BA选项的x是指针,赋值时使用a不合适,C选项在赋值时a变量还没定义,D选项中的x不是指针。
3、下面有关空指针和未初始化指针,说法错误的是( )
A: 对0x0这个地址取值是非法的
B: 空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方
C: 空指针与任何对象或函数的指针值都不相等
D: malloc在其内存分配失败时返回的是一个未初始化的指针
答案解析:
正确答案:Dmalloc函数在内存分配失败时返回NULL,其余选项都正确
4、若有定义 int a[8]; ,则以下表达式中不能代表数组元素 a[1] 的地址的是( )
A: &a[0]+1 B: &a[1] C: &a[0]++ D: a+1
答案解析:
正确答案:CD选项a计算时是首元素地址,再加1,就是a[1]的地址,AB明显对,C选项a[0]先和++结合,形成一个表达式,不能对表达式取地址,会报错
5、以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )
A: + B: - C: = D: ==
答案解析:
正确答案:AA错误,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。B选项,可以求出两个数据元素储存位置之间的相隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同
编程题:
1.统计每个月兔子的总数
题目链接:统计每个月兔子的总数_牛客题霸_牛客网
题目描述:
题目示例:
代码演示:
#include <stdio.h>int rabbit(int n)
{if(n<=2)return 1;return rabbit(n-1)+rabbit(n-2);
}int main() {int m;scanf("%d",&m);int n=rabbit(m);printf("%d",n);return 0;
}
题目解析:
- 这道题的关键在于寻找数字之间的规律,如果细心的同学会发现这其实是一个斐波那契数列。第 n 个月的兔子数量实际上就是第 n-1 个斐波那契数
2.数列的和
题目链接:数列的和_牛客题霸_牛客网
题目描述:
题目示例:
代码演示:
#include <stdio.h>
#include <math.h>int main()
{double n = 0.00;int m = 0;while (scanf("%lf %d", &n, &m)!=EOF){double sum = 0.00;//这里不能用float,只能用doublefor (int i = 0; i < m; i++)//控制m次{sum += n;n = sqrt(n);}printf("%.2lf\n", sum);}return 0;
}
题目解析:
- 循环读取多组
n
(数列首项 )和m
(项数 ),通过循环m
次,每次累加当前n
到sum
,再更新n
为其平方根,最后按格式输出保留两位小数的前m
项和
往期回顾:
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day9
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day10
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day11
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day12
结语:本篇博客就到此结束了,C 语言的精髓在于对细节的掌控和对底层的理解,这需要持续实践。愿你带着这份训练中获得的思维与习惯,在编程路上走得更稳、更远。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。