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日
    浏览(10)
  • Vue课后练习题及答案解析

    Vue课后练习题及答案解析

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

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

    C#基础练习题,编程题汇总

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

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

    【技能树笔记】网络篇——练习题解析(三)

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

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

    【技能树笔记】网络篇——练习题解析(九)

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

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

    【技能树笔记】网络篇——练习题解析(四)

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

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

    【技能树笔记】网络篇——练习题解析(二)

    目录 前言 一. 数据链路层的作用 1.1 数据链路层作用 1.2 数据链路层封装 1.3 数据链路层功能 1.4 数据帧格式 二. MAC地址及分类 2.1 MAC地址 2.2 MAC地址分类 三. 交换机的作用 3.1 交换机的作用 3.2 交换机作用 四.交换机的工作原理 4.1 交换机的工作原理 4.2 交换机帧处理 五.

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

    【技能树笔记】网络篇——练习题解析(五)

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

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

    【技能树笔记】网络篇——练习题解析(八)

    目录 前言 一、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日
    浏览(13)
  • 【技能树笔记】网络篇——练习题解析(十)

    【技能树笔记】网络篇——练习题解析(十)

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

    2024年02月08日
    浏览(15)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包