首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13

作者头像
草莓熊Lotso
发布2025-10-29 14:39:59
发布2025-10-29 14:39:59
1260
举报
文章被收录于专栏:C++/LinuxC++/Linux

🔥个人主页:@草莓熊Lotso 🎬作者简介:C++研发方向学习者 📖个人专栏: 《C语言》 《数据结构与算法》《C++知识分享》《编程工具入门指南》 ⭐️人生格言:生活是默默的坚持,毅力是永久的享受。

前言:我们距离学习完C语言已经很久了,在数据结构学完后,博主准备通过这16天的强化训练和大家一起回顾C语言的知识,今天依旧是五道选择和两道编程题,希望大家能有所收获。

选择题:

1、如果 x=2014 ,下面函数的返回值是( ) A: 20 B: 21 C: 23 D 25

代码语言:javascript
复制
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;

答案解析: 正确答案:B A选项的x是指针,赋值时使用a不合适,C选项在赋值时a变量还没定义,D选项中的x不是指针。

3、下面有关空指针和未初始化指针,说法错误的是( )

A: 对0x0这个地址取值是非法的

B: 空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方

C: 空指针与任何对象或函数的指针值都不相等

D: malloc在其内存分配失败时返回的是一个未初始化的指针

答案解析: 正确答案:D malloc函数在内存分配失败时返回NULL,其余选项都正确

4、若有定义 int a[8]; ,则以下表达式中不能代表数组元素 a[1] 的地址的是( )

A: &a[0]+1 B: &a[1] C: &a[0]++ D: a+1

答案解析: 正确答案:C D选项a计算时是首元素地址,再加1,就是a[1]的地址,AB明显对,C选项a[0]先和++结合,形成一个表达式,不能对表达式取地址,会报错

5、以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )

A: + B: - C: = D: ==

答案解析: 正确答案:A A错误,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。B选项,可以求出两个数据元素储存位置之间的相隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同


编程题:

1.统计每个月兔子的总数

题目链接:统计每个月兔子的总数_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#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.数列的和

题目链接:数列的和_牛客题霸_牛客网

题目描述:

题目示例:

代码演示:

代码语言:javascript
复制
#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,只能用double
        for (int i = 0; i < m; i++)//控制m次
        {
            sum += n;
            n = sqrt(n);
        }
        printf("%.2lf\n", sum);
    }
 
    return 0;
}

题目解析:

  • 循环读取多组 n(数列首项 )和 m(项数 ),通过循环 m 次,每次累加当前 nsum,再更新 n 为其平方根,最后按格式输出保留两位小数的前 m 项和

往期回顾:

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day9

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day10

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day11

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day12

结语:本篇博客就到此结束了,C 语言的精髓在于对细节的掌控和对底层的理解,这需要持续实践。愿你带着这份训练中获得的思维与习惯,在编程路上走得更稳、更远。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 选择题:
  • 编程题:
    • 1.统计每个月兔子的总数
    • 2.数列的和
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档