C语言练习题解析:挑战与突破,开启编程新篇章!(2)

这篇具有很好参考价值的文章主要介绍了C语言练习题解析:挑战与突破,开启编程新篇章!(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

C语言练习题解析:挑战与突破,开启编程新篇章!(2),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: 以上都不对

C语言练习题解析:挑战与突破,开启编程新篇章!(2),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记

🔎正确答案: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

C语言练习题解析:挑战与突破,开启编程新篇章!(2),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记

🔎正确答案: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语言练习题解析:挑战与突破,开启编程新篇章!(2),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记

🔎正确答案: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 尼科彻斯定理】

【题目信息】:
C语言练习题解析:挑战与突破,开启编程新篇章!(2),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记
【答案解析】:

  • 这道题的关键在于知道规律后,能够找到第 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 函数
C语言练习题解析:挑战与突破,开启编程新篇章!(2),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记

下面是一些使用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.140000
    return 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.1400
    return 0;
}

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

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


📌等差数列

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

【题目信息】:
C语言练习题解析:挑战与突破,开启编程新篇章!(2),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记
【答案解析】:

  • 这道题了解了等差数列求和公式 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),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记文章来源地址https://www.toymoban.com/news/detail-685043.html

到了这里,关于C语言练习题解析:挑战与突破,开启编程新篇章!(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue练习题(带解析)

    Vue基础入门 一、 填空题 Vue是一套构建 __ 用户界面 _____ 的渐进式框架。 MVVM主要包含3个部分,分别是Model、View和____ ViewModel ___。 Vue中通过 ___ refs ____ 属性获取相应DOM元素。 在进行Vue调试时,通常使用 ___ vue-devtools ___ 工具来完成项目开发。 Vue中页面结构以 ___ 组件  ___ 形式

    2024年02月05日
    浏览(43)
  • Vue课后练习题及答案解析

    第一章 Vue.js基础入门 填空题 Vue是一套构建________的渐进式框架。 MVVM主要包含3个部分,分别是Model、View和________。 Vue中通过________属性获取相应的DOM元素。 在进行Vue调试时,通过使用________工具来完成项目开发。 Vue中页面结构以________形式存在。 判断题 Vue与Angular和React框架

    2024年02月09日
    浏览(39)
  • C#基础练习题,编程题汇总

    编程实现在一行内输入若干个整数(不超过30个),输出最大的一个整数。 样例如下: 输入(在一行内输入,空格分隔): 5 6 78 -89 0 23 100 4 6 输出: 100 C#具体设计: 1.先让用户输入一些整数, 2.再装其读入到字符串用, 3.用空格符来分割字符成,存成字符数组 4.用foreach语句

    2023年04月16日
    浏览(41)
  • 【技能树笔记】网络篇——练习题解析(五)

    目录 前言 一、应用层的作用 二、HTTP协议 三、FTP协议 四、DNS协议 五、DHCP协议 六、邮件协议 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以获得授权⚠️。 🎁欢迎大

    2024年02月08日
    浏览(31)
  • 【技能树笔记】网络篇——练习题解析(七)

    目录 前言 一、RIP 1.1 VLAN数据帧 二、OSPF 2.1 OSPF 分组类型 2.2 OSPF 区域划分 2.3 OSPF状态交互链路 2.4 OSPF特殊区域 三、ISIS 3.1 ISIS动态路由协议 3.2 ISIS路由器分类 3.3 ISIS DIS 四、BGP 4.1 BGP基本信息 4.2 BGP属性 4.3 BGP路由通告 五、路由策略 5.1 路由策略作用 5.2 路由策略应用

    2024年02月08日
    浏览(29)
  • 【技能树笔记】网络篇——练习题解析(四)

    目录 前言 一、传输层的作用 二、端口号的分类、作用 三、TCP协议的特点及应用 四、UDP协议的特点及应用 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以获得授

    2024年02月08日
    浏览(28)
  • 【技能树笔记】网络篇——练习题解析(三)

    目录 前言 一、网络层的功能 二、IP协议的特点 三、IPv4地址的分类和计算 四、常用协议和命令 五、路由表的工作原理 六、静态路由 七、动态路由 八、IPv6地址介绍 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创

    2024年02月08日
    浏览(32)
  • 【技能树笔记】网络篇——练习题解析(九)

    目录 前言 一、OSPF双栈 1.1 OSPFv3 LSA 1.2 OSPFv3 二、ISIS双栈 2.1 ISISv6 2.2 ISIS高级特性 三、BGP双栈 四、PIM双栈 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo__✍️原创,首发于CSDN📚。 📣如需转载,请事先与我联系以获得授

    2024年02月08日
    浏览(27)
  • 【技能树笔记】网络篇——练习题解析(十)

    【技能树笔记】网络篇——练习题解析(一)-CSDN博客 【技能树笔记】网络篇——练习题解析(二)-CSDN博客 【技能树笔记】网络篇——练习题解析(三)-CSDN博客 【技能树笔记】网络篇——练习题解析(四)-CSDN博客 【技能树笔记】网络篇——练习题解析(五)-CSDN博客 【

    2024年02月08日
    浏览(29)
  • 【技能树笔记】网络篇——练习题解析(八)

    目录 前言 一、LAN技术 1.1 堆叠与集群 1.2 MSTP的特点 二、WAN技术 2.1 PPP链路建立 2.2 PPPoE 2.3 组播 2.3.1 组播的IP 2.3.2 组播分发树 2.3.3 组播协议 三、IPv6基础 3.1 IPv6地址 3.2 IPv6协议 3.3 IPv6过渡技术 总结 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包