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

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

  • 💓博客主页:江池俊的博客
  • ⏩收录专栏:C语言刷题专栏
  • 👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路
  • 💻代码仓库:江池俊的代码仓库
  • 🎉欢迎大家点赞👍评论📝收藏⭐
  • 🤝表情分享:🔎📷🥇🎈🐬🍁💯⭕️💮📍🚩👀🚨🧩💥📌🌴

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


🎈前言:

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

🌴选择题

  1. 执行下面程序,正确的输出是( )
int x = 5, y = 7;
void swap()
{
	int z;
	z = x;
	x = y;
	y = z;
}
int main()
{
	int x = 3, y = 8;
	swap();
	printf("%d,%d\n",x, y);
	return 0;
}

A: 5,7   B: 7,5   C: 3,8   D: 8,3

🔎正确答案:C
【解析】:
swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平行关系;输出语句这里,考虑局部优先的原则,故打印的x值为3y的值为8

  1. 以下不正确的定义语句是( )

A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};

B: char c2[] = {‘\x10’, ‘\xa’, ‘\8’};

C: char c1[] = {‘1’,‘2’,‘3’,‘4’,‘5’};

D: int y[5+3]={0, 1, 3, 5, 7, 9};

🔎正确答案:B
【解析】:
本题B选项考查转义字符,有如下格式,但八进制数字是0-7,没有8,故B选项中’\8’是错误的
\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X
\xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0

  1. test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】( )
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;

A: a   B: b   C: cD: d

🔎正确答案:ACD
【解析】:易错题
因为#define是宏定义,仅仅是直接替换; INT_PTR a, b, 进行宏替换后代码是这样的:int *a, b;这里的int *a的类型,b的类型是int,故此次b只是int类型。而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。所以 a,c,d才是指针类型。

  1. 若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ( )

A: 和 (M ==0) 等价   B: 和 (M ==1) 等价   C: 和(M !=0 )等价   D: 和(M != 1)等价

🔎正确答案:C
【解析】:易错题
给定条件表达式(M)?(a++):(a--)。 (表达式1)? (表达式2): (表达式3)为三目运算符

  • 三目运算符计算规则为:先判断表达式1是否为真,若为真,则计算表达式2,并将表达式2的结果作为整个表达式最终的结果,表达式3不计算;否则,表达式3的结果为最终结果,表达式2不计算。
  • 在此表达式中,若M=0,为假,计算a--; 若M≠0,为真,计算a++; 若要求与M等价,则要满足M0时为假,取非0数值时为真。
    C选项中:假定M0,则M表示假,当M0时,表达式M!=0不成立,为假,计算a--;当M取非0数值时,M为真,表达式M!=0成立,为真,计算a++; 符合题意,选C
  1. 有如下定义语句,则正确的输入语句是【多选】( )
int b;
char c[10];

A: scanf(“%d%s”,&b,&c);     B: scanf(“%d%s”,&b,c);

C: scanf(“%d%s”,b,c);       D: scanf(“%d%s”,b,&c);

🔎正确答案:AB
【解析】:
根据C语言中的scanf函数,正确的输入语句应该将变量的地址作为参数传递给scanf函数。
选项A和B是正确的输入语句。在选项A中,虽然在第二个参数中使用"&c" 与一般情况下使用数组名" c " (即选项B) 稍有不同,但两者地址值是一样的,程序的效果相同,因为它表示数组首元素的地址。而选项C和D均不正确,因为在读取整数时需要使用"&b"来获取变量b的地址。


🌴编程题

📌打印从1到最大的n位数

【牛客网链接:JZ17 打印从1到最大的n位数】

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

这里首先要清楚n位数中最大的数字,实际上就是 10^n - 1 。 比如:

1位数: 10^1 - 1
2位数: 10^2 - 1
3位数: 10^3 - 1
...

这个清楚后动态申请空间,将数值填入就可以了,需要注意的是数组下标从0开始,而数值从1开始

int* printNumbers(int n, int* returnSize) 
{
	*returnSize = pow(10, n) - 1; //确定最大的数字
	int* arr = (int*)malloc(sizeof(int) * (*returnSize));//申请足够大小的空间
	for (int i = 0; i < *returnSize; i++) 
	{
		arr[i] = i + 1;//下标从0开始,而数值从1开始
	} 
	return arr;
}

【知识拓展】:

(1)pow函数

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

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

这里只是简单的介绍了malloc函数的原型,具体如何使用还是需要大家多多探索,毕竟熟能生巧,大家只有多多练习才能提升自己的代码水平。


📌计算日期到天数转换

【牛客网链接:HJ73 计算日期到天数转换】

【题目信息】:

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

  • 这道题简单解法其实将每个月的天数枚举出来,然后根据当前月份向前累加满月的天数,然后再加上当前月所在的
    天数。最终考虑平闰年的 2 月份区别是否增加一天。
  • 其中需要注意的是平年和闰年的判断,而且是闰年的月份大于 2 的时候,也就是 2 月走完,总天数才能加 1 (比
    如 2000年2月18日 ,虽然是闰年,但是 2月 都没走完那是不能加上闰年多出的一天的).
#include <stdio.h>
int is_leap_year(int year) //判断是否为闰年的函数
{
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
		return 1;
	} 
	return 0;
} 
int main()
{
	int month_day[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };//下标对应月份
	int year, month, day;
	while (~scanf("%d %d %d", &year, &month, &day))//多组输入
	{
		int total_day = day;//先把当前月份天数加上
		if (is_leap_year(year) && month > 2)
		{
			total_day += 1;//若闰年,且月份大于2月,则在平年基础上+1
		}
			for (int i = month - 1; i > 0; i--) 
			{
				total_day += month_day[i];//向前累加每月的天数即可
			}
		printf("%d\n", total_day);
	}
	return 0;
}

【拓展】:注意上述代码中的 while (~scanf(“%d %d %d”, &year, &month, &day)),这条语句也可以写成 while (scanf(“%d %d %d”, &year, &month, &day)!=EOF)。

scanf是一个函数,用于从标准输入(通常是键盘)读取数据并将其存储到变量中。它的基本语法是:

scanf("%format", &variable1, variable2, ...)

其中"%format"是用于指定输入数据的格式,如整数(%d),浮点数(%f),字符(%c)等。"&variable1, variable2, …"是要存储输入的变量的地址。

然后,~是一个位运算符,表示按位取反。它对操作数的每一位进行取反,即把0变为1,把1变为0。在计算机中,数的存储是以二进制的形式进行的,所以按位取反操作可以实现对一个数的所有二进制位取反。scanf返回值是成功读取数据的个数,如果scanf遇到问题(如用户输入的不是数字,或者已经到达了文件尾),那么scanf会返回-1,-1在内存中存储的是补码,其补码是全1,所以~scanf取反后就变为全0,就会返回0,循环就会停止。


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

C语言练习题解析:挑战与突破,开启编程新篇章!(1),C语言刷题专栏,c语言,开发语言,学习,经验分享,笔记文章来源地址https://www.toymoban.com/news/detail-682956.html

到了这里,关于C语言练习题解析:挑战与突破,开启编程新篇章!(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索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

领红包