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

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏:************************************************************************************************************************************************************************************************************************************************************《C语言》《数据结构与算法》《C++知识分享》《编程工具入门指南》****************************************************************************************************************************************************************************************************************************************************************

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。

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


目录

选择题:

编程题:

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

2.数列的和


选择题:

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

cpp 复制代码
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.统计每个月兔子的总数

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

题目描述:

题目示例:

代码演示:

cpp 复制代码
#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.数列的和

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

题目描述:

题目示例:

代码演示:

cpp 复制代码
#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 语言的精髓在于对细节的掌控和对底层的理解,这需要持续实践。愿你带着这份训练中获得的思维与习惯,在编程路上走得更稳、更远。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

相关推荐
小xin过拟合25 分钟前
day20 二叉树part7
开发语言·数据结构·c++·笔记·算法
啟明起鸣1 小时前
【数据结构】B 树——高度近似可”独木成林“的榕树——详细解说与其 C 代码实现
c语言·开发语言·数据结构
十八旬2 小时前
苍穹外卖项目实战(日记十)-记录实战教程及问题的解决方法-(day3-2)新增菜品功能完整版
java·开发语言·spring boot·mysql·idea·苍穹外卖
这周也會开心2 小时前
Java-多态
java·开发语言
Forward♞2 小时前
Qt——网络通信(UDP/TCP/HTTP)
开发语言·c++·qt
XH华2 小时前
C语言第十三章自定义类型:联合和枚举
c语言·开发语言
2401_858286113 小时前
OS26.【Linux】进程程序替换(下)
linux·运维·服务器·开发语言·算法·exec·进程
一尘之中4 小时前
在Python 2.7中安装SQLAlchemy的完整指南
开发语言·python·ai写作
刃神太酷啦4 小时前
Linux 常用指令全解析:从基础操作到系统管理(1w字精简版)----《Hello Linux!》(2)
linux·运维·服务器·c语言·c++·算法·leetcode