【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 a8; ,则以下表达式中不能代表数组元素 a1 的地址的是( )

A: &a0+1 B: &a1 C: &a0++ D: a+1

答案解析:
正确答案:C

D选项a计算时是首元素地址,再加1,就是a1的地址,AB明显对,C选项a0先和++结合,形成一个表达式,不能对表达式取地址,会报错

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

相关推荐
小玮看世界6 分钟前
[Python]动态规划三步走:从爬楼梯到打家劫舍,再到最大子数组和
开发语言·python·动态规划
AI视觉网奇11 分钟前
3d子部件高亮选中
开发语言·javascript·3d
zzzll111120 分钟前
深入理解 Java HashMap:从原理到实战
java·开发语言·哈希算法
猫猫不是喵喵.28 分钟前
Java开发高频面试题汇总(通俗易懂版)
java·开发语言·java高频面试
k4m7v2pz34 分钟前
用 rust-verb-shell 重写进程管理:从 game.sh 到 .rvs 的迁移实录
开发语言·后端·rust
2603_9658966237 分钟前
JavaScript 对象零基础详解|属性、方法、遍历、增删改查
开发语言·javascript·ecmascript
dear_bi_MyOnly42 分钟前
数组字符串深度解析:从入门到卡牌实战
开发语言·c++·学习
Navigator_Z1 小时前
LeetCode //C - 1223. Dice Roll Simulation
c语言·算法·leetcode
正在走向自律1 小时前
从 Python 基础到大模型落地:读《深入浅出 Python 人工智能》,吃透 AI 工程化 CRUD 实战
开发语言·人工智能·python·机器学习·知识脉络
被摘下的星星1 小时前
Java 中 .length、.length() 以及 .size() 的区分
java·开发语言