当前位置: 首页 > news >正文

C语言练习题解析(2)

  • 💓博客主页:江池俊的博客
  • ⏩收录专栏:C语言刷题专栏
  • 👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路
  • 💻代码仓库:江池俊的代码仓库
  • 🎉欢迎大家点赞👍评论📝收藏⭐

在这里插入图片描述

文章目录

  • 🌴选择题
  • 🌴编程题
    • 📌尼科彻斯定理
    • 📌等差数列


🎈前言:

  • 本专栏每篇练习将包括 5个选择题 + 2个编程题,将涵盖C语言的不同方面,包括基础语法、数据类型、控制结构、数组、指针和函数等。通过练习,你将逐步掌握C语言的基础知识和常见问题,提高你的编程技巧和解决问题的能力。
  • 我希望这个博客能够为你提供有价值的练习资源,让你在实践中不断进步。同时,我们也鼓励你在练习过程中进行思考和创新,尝试使用不同的编程方法和技巧。
  • 让我们一起挑战C语言练习题,攻克每一个难点,不断提升自己的编程技能!在评论区分享你的练习心得和问题,与我们一起交流和成长。

🌴选择题

  1. 以下程序段的输出结果是( )
#include<stdio.h>
int main()
{char s[] = "\\123456\123456\t";printf("%d\n", strlen(s));return 0;
}

A: 12   B: 13   C: 16   D: 以上都不对

在这里插入图片描述

🔎正确答案:A
【解析】:
这里考查转义字符,注意:\ \ 表示字符 ’ \ ',\123 表示字符 ‘{’,\t 表示制表符,这些都是一个字符。

  1. 若有以下程序,则运行后的输出结果是( )
#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{printf("%d\n", NUM);return 0;
}

A: 4   B: 8   C: 9   D: 6

在这里插入图片描述

🔎正确答案:B
【解析】:
宏只是替换,替换后NUM的样子是(2+1+1)*2+1/2,计算得8。

  1. 如下函数的 f(1) 的值为( )
int f(int n)
{static int i = 1;if (n >= 5)return n;n = n + i;i++;return f(n);
}

A: 5   B: 6   C: 7   D: 8
在这里插入图片描述

🔎正确答案:C
【解析】:
此题注意静态局部变量的使用,static改变了i的生命周期,第一次调用函数:i初值是1,递归第二次调用函数时,i还是第一次那个变量,值已经变成了2,再一次调用函数时i就是3,依次类推.

  1. 下面3段程序代码的效果一样吗( )
int b;
(1)const int* a = &b;
(2)int const* a = &b;
(3)int* const a = &b;

A: (2)=(3)   B: (1)=(2)   C: 都不一样   D: 都一样

🔎正确答案:B
【解析】:
const* 的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在 * 的右边,则指针的指向不可变。简记为 “左定值,右定向” ,(1)和(2)const都在 * 的左边,(3)中const* 的右边,所以应该选择B。

  1. 对于下面的说法,正确的是( )

A: 对于 struct X{short s;int i;char c;},sizeof ( X )等于sizeof ( s ) + sizeof ( i ) + sizeof ( c )

B: 对于某个double变量 a,可以使用 a == 0.0 来判断其是否为零

C: 初始化方式 char a[14] = “Hello, world!”; 和char a[14]; a = “Hello, world!”;的效果相同

D: 以上说法都不对

🔎正确答案:D
【解析】:

  • A选项,没有考虑内存对齐。
  • B选项,考察double类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常 采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。
  • C选项,a为数组首地址是常量不能改变,
  • 所以A,B,C都是错的,选择D

🌴编程题

📌尼科彻斯定理

【牛客网链接:HJ76 尼科彻斯定理】

【题目信息】:
在这里插入图片描述
【答案解析】:

  • 这道题的关键在于知道规律后,能够找到第 n 个数据立方的 起始奇数,从这个起始奇数开始,组成连续的n个奇数
    项之和的表达式即可。
  • 比如: 33 的起始奇数是 7 , 则 {7, 9, 11} 3个奇数求和表达式 7 + 9 + 11 。
    而起始奇数有个规则: m3 的起始奇数值等于 m * (m - 1) + 1
奇数起始项规律:
首先所有奇数项构成一个差值为2的等差数列, 1 3 5 7 9 ....
其次,1的起始奇数是第1个等差数列项,2的起始奇数是第2个等差数列项,3的起始奇数是第4个等差数列项...
形成规律: 
1 2 4 7....,而他们的差值分别是1 2 3 4 5...,所以第n项的起始奇数就是一个从1开始到n-1的等差数列(1 2 3 4 5....)之和+1
因此,
当需要求m的立方的起始奇数时,首先计算他的第一个奇数项是总体的第几个,然后再根据等差数列(1 3 5 7 9...)求这个起始奇数。
等差数列求和公式 Sn=n(a1+an)/2 ---> m * (m - 1) / 2    (计算奇数项是总体的第几个)
等差数列第n项公式 an=a1+(n-1)d ---> 1 + ((m * (m - 1) / 2) + 1 - 1) * 2    (计算这个起始奇数的值)
最终得到m的立方的表达式起始奇数: m * (m - 1) + 1      (最终的表达式)
//代码 1:
#include <stdio.h>
int main() {int m = 0;while (scanf("%d", &m) != EOF) {int start = m * m - m + 1;//找到起始奇数printf("%d", start);//先打印出起始奇数for (int i = 1; i < m; i++) //依次打印后面连续的m-1个奇数{printf("+%d", start + 2 * i);}printf("\n");}return 0;
}//代码 2:
#include <stdio.h>
int main()
{int m;while (~scanf("%d", &m)) {int start = m * (m - 1) + 1;//找到对应m^3的起始奇数char buf[10240] = { 0 };//sprintf(buf, format, ...) 与printf用法类似,格式化字符串但是不用于打印而是放到一个buf数组中sprintf(buf, "%d", start);//先将起始奇数转换成为字符串存入buf中for (int i = 1; i < m; i++) {//然后将紧随其后的m-1个奇数数字转换为字符串,按照指定格式放入buf中//%s+%d, 要求先有一个字符串,然后是+符号,然后是个数字的格式;buf对应原先的数据,start += 2对应紧随其后的奇数sprintf(buf, "%s+%d", buf, start += 2);}printf("%s\n", buf);} return 0;
}

【拓展】:sprintf 函数
在这里插入图片描述

下面是一些使用sprintf的例子:

  1. 基本的格式化
#include <stdio.h>int main() {char buffer[50];int a = 10;float b = 3.14;sprintf(buffer, "整数是 %d, 浮点数是 %f", a, b);printf("%s\n", buffer);  // 输出: 整数是 10, 浮点数是 3.140000return 0;
}
  1. 使用标志符
#include <stdio.h>int main() {char buffer[50];int a = 10;float b = 3.14;sprintf(buffer, "整数是 %2d, 浮点数是 %6.2f", a, b);printf("%s\n", buffer);  // 输出: 整数是 10, 浮点数是 3.1400return 0;
}

在这个例子中,%2d表示将整数输出为至少两位的数,如果不足两位则在前面补一个空格。%6.2f表示将浮点数输出为至少6位的数,其中小数点后有两位,如果不足则补0。

这只是sprintf函数的基本用法,实际上它还有许多更复杂的用法和标志符,可以用来处理各种复杂的字符串格式化需求。


📌等差数列

【牛客网链接:HJ100 等差数列】

【题目信息】:
在这里插入图片描述
【答案解析】:

  • 这道题了解了等差数列求和公式 Sn=n(a1+an)/2 就简单了 ,根据题目得知 a1=2 ,而等差数列第n项也有具体公式
    an=a1+(n-1)d ,而公差为3, 这时候只需要套入公式计算即可。
#include <stdio.h>
int main()
{int n, a1 = 2;while (~scanf("%d", &n)) {int an = a1 + (n - 1) * 3;//等差数列第n项计算printf("%d\n", n * (a1 + an) / 2); //等差数列求和打印} return 0;
}
  • 这题也可以遍历一遍等差数列,依次求和。
#include<stdio.h>
int main() {int n;while (EOF != scanf("%d", &n)) {int sum = 0;for (int i = 2; i <3* n+2; i+=3) //等差数列第n项的值为3*(n-1)+2{sum += i;//计算前n项和}printf("%d\n", sum);}return 0;
}

🔥今天的内容就到这里了,有什么问题的话欢迎大家在评论区讨论,也可以私信博主为你解答,如果觉得博主的文章还不错的话, 请👍三连支持一下博主哦🤞

在这里插入图片描述

相关文章:

C语言练习题解析(2)

&#x1f493;博客主页&#xff1a;江池俊的博客⏩收录专栏&#xff1a;C语言刷题专栏&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅C语言进阶之路&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文…...

Element UI 表单验证规则动态失效问题

Element 版本&#xff1a;v2.15.3 问题背景 如下代码所示&#xff1a;有一个上传文件的 input 组件&#xff0c;在更新的时候&#xff0c;如果不上传文件表示不更新&#xff0c;如果要更新则点击 「重新上传」按钮将上传组件显示出来 <el-form ref"form" :mode…...

多线程并发篇

目录 1、线程生命周期 2、线程创建方式 3、Callable 与 Future 4、如何停止一个正在运行的线程 5、notify() 和 notifyAll() 的区别 6、sleep() 和 wait() 的区别 7、start() 和 run() 的区别 8、interrupted 和 isInterruptedd 的区别 9、CyclicBarrier 和 Count…...

pycharm-2023.1 closing project window stuck

pycharm-2023.1 closing project window stuck 问题描述 pycharm 切换项目/重启&#xff0c;一直卡在 closing project 原因分析 PyCharm 2023.1 issue - closing project window stuck (PyPIPackageUtil.lambda$parsePyPIListFromWeb) 解决方案 升级 pycharm 到 2023.3py…...

tkinter编写的打开csdn程序

目录 鬼畜tkinter简介程序代码解析现成总结鬼畜 看看你每次打开CSDN: 1.开机 2.打开浏览器 3.打开CSDN 4.等待 5.完成 我: 1.开机 2.点击%%%按钮 3.等待 4.完成 简单了不知道多少倍 上面的纯属鬼畜,下面正文!!! tkinter tkinter是一个用于创建图形用户界面(GUI)的Py…...

Vue3.2组件如何封装,以弹窗组件的封装为例

以前一直想&#xff0c;每次封装一个弹窗组件的时候&#xff0c;一直特别复杂&#xff0c;父传子&#xff0c;子传父&#xff0c;各种来回绕&#xff0c;来回修改。 一直想如何才能更加简化&#xff0c;但是一直没时间&#xff0c;今天终于抽时间出来封装了一下 本次封装简化…...

Vue知识系列(5)每天10个小知识点

目录 系列文章目录Vue知识系列&#xff08;1&#xff09;每天10个小知识点Vue知识系列&#xff08;2&#xff09;每天10个小知识点Vue知识系列&#xff08;3&#xff09;每天10个小知识点Vue知识系列&#xff08;4&#xff09;每天10个小知识点 知识点41.vue常用基本指令有哪些…...

Java基础题08——数组(查找下标所对应的值)

给定一个整数数组&#xff0c;输入一个值 n &#xff0c;输出 n *在数组中的下标 **(*如果不存在输出 -1 ) 如&#xff1a;int[] arr {3, 2, 1, 4, 5}; 1 输入&#xff1a; 3 输出&#xff1a; 0 2. 输入&#xff1a; 6 输出&#xff1a; -1 int[] arr new int[]{3, 2, 1, 4,…...

LinkedList 源码分析

LinkedList 是一个基于双向链表实现的集合类。 LinkedList 插入和删除元素的时间复杂度 头部插入/删除&#xff1a;只需要修改头结点的指针即可完成插入/删除操作&#xff0c;因此时间复杂度为 O(1)。尾部插入/删除&#xff1a;只需要修改尾结点的指针即可完成插入/删除操作…...

跑步锻炼(蓝桥杯)

跑步锻练 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝每天都锻炼身体。 正常情况下&#xff0c;小蓝每天跑 1 千米。如果某天是周一或者月初&#xff08;1 日&#xff09;&#xff0c;为了激励自己&#x…...

【SLAM】视觉SLAM简介

【SLAM】视觉SLAM简介 task04 主要了解了SLAM的主流框架&#xff0c;清楚VSALM中间接法与直接法的主要区别在什么地方&#xff0c;其各自的优势是什么&#xff0c;了解前端与后端的关系是什么 1.什么是SLAM 2.VSALM中间接法与直接法的主要区别在什么地方&#xff0c;其各自的…...

Visual Studio2019报错

1- Visual Studio2019报错 错误 MSB8036 找不到 Windows SDK 版本 10.0.19041.0的解决方法 小伙伴们在更新到Visual Studio2019后编译项目时可能遇到过这个错误&#xff1a;“ 错误 MSB8036 找不到 Windows SDK 版本 10.0.19041.0的解决方法”&#xff0c;但是我们明明安装了该…...

ffplay源码解析-PacketQueue队列

包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …...

Flowable主要API介绍

1. ProcessEngine 负责与各个服务进行交互和管理流程的整个生命周期。 方法描述getName()close()startExecutors()启动所有流程引擎中的执行器。执行器用于处理流程实例的执行&#xff0c;在引擎启动时&#xff0c;执行器会自动运行并处理待办任务和定时任务。getRepositorySe…...

TensorFlow与pytorch特定版本虚拟环境的安装

TensorFlow与Python的版本对应&#xff0c;注意&#xff0c;一定要选择对应的版本&#xff0c;否则会让你非常痛苦&#xff0c;折腾很久搞不清楚原因。 建议使用国内镜像源安装 没有GPU后缀的就表示是CPU版本的&#xff0c;不加版本就是最新 pip install tensorflow -i https:…...

【SpringMVC】拦截器JSR303的使用

【SpringMVC】拦截器&JSR303的使用 1.1 什么是JSR3031.2 为什么使用JSR3031.3 常用注解1.4 Validated与Valid区别1.5 JSR快速入门1.5.2 配置校验规则# 1.5.3 入门案例二、拦截器2.1 什么是拦截器2.2 拦截器与过滤器2.3 应用场景2.4 拦截器快速入门2.5.拦截器链2.6登录案列权…...

Java - LambdaQueryWrapper 的常用方法

1、查看项目中是否导入mybatisPlus的jar包 2、servie 层和实现类要集成mybatisPlus service 继承IService<> 实现类中要继承IService的实现类ServiceImpl<mapper,实体类> 3、如果想要mapper中的一些方法&#xff0c;mapper 要继承BaseMapper<实体类> 4、在实…...

Selenium常见问题解析

1、元素定位失败&#xff1a; 在使用Selenium自动化测试时&#xff0c;最常见的问题之一是无法正确地定位元素&#xff0c;这可能导致后续操作失败。解决方法包括使用不同的定位方式&#xff08;如xpath、CSS selector、id等&#xff09;&#xff0c;等待页面加载完全后再进行…...

【npm】npm私有库的使用-绑定

注册npm账户 输入基本信息 验证 收一次性验证码 登录 本地绑定 全局绑定了其他的私有库 若要在专门发包的项目中&#xff0c;发包到自己的私有库&#xff0c;需要在项目文件夹中创建一个.npmrc文件 创建文件 可以直接在项目目录下输入touch .npmrc创建文件 文件内容 regi…...

spring seccurity OAuth 2.0授权服务器工作流程

一、客户端配置&#xff1a;在configure(ClientDetailsServiceConfigurer clients)方法中&#xff0c;配置了一个客户端&#xff0c;包括客户端标识符、客户端秘密、授权类型、授权范围和令牌有效期等信息。这个客户端表示某个应用程序或服务&#xff0c;它将向授权服务器请求访…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...