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

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

在这里插入图片描述

文章目录

  • 🌴选择题
  • 🌴编程题
    • 📌打印从1到最大的n位数
    • 📌计算日期到天数转换

🎈前言:

  • 本专栏每篇练习将包括 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位数】

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

这里首先要清楚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函数

在这里插入图片描述
(2)malloc函数

在这里插入图片描述

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

📌计算日期到天数转换

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

【题目信息】:

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

  • 这道题简单解法其实将每个月的天数枚举出来,然后根据当前月份向前累加满月的天数,然后再加上当前月所在的
    天数。最终考虑平闰年的 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,循环就会停止。


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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式 之 断言详解

正则表达式的先行断言和后行断言一共有 4 种形式&#xff1a; (?pattern) 零宽正向先行断言(zero-width positive lookahead assertion)(?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)(?<pattern) 零宽正向后行断言(zero-width positive lookb…

QML Book 学习基础5(An Image Viewer)

目录 桌面版&#xff08;win端&#xff09; 移动端 下面我们用更有挑战性例子来使用Qt控件&#xff0c;将创建一个简单的图像查看器。 桌面版&#xff08;win端&#xff09; 程序主要由四个主要区域组成&#xff0c;如下所示。菜单栏、工具栏和状态栏&#xff0c;通常由控件…

ApiPost软件会对数据进行预处理,有可能会导致数据报错

文章目录 测试数据正确的请求方式当URL有数据被修改之后&#xff08;数据就不一致了&#xff09; 测试数据 %257B%2522pageNum%2522:1,%2522pageSize%2522:10,%2522param%2522:%257B%2522flowType%2522:1,%2522workcardType%2522:%2522作者的请求方便大家一键复制 localhost:…

记录windows7无权安装

项目场景&#xff1a; electron 安装程序 windows上的C盘 progrom files 、 问题描述 安装过程中出现 不能打开写入文件 提示如上。 { "name": "intergeOM-goldwind","version": "1.0.0","author": "weile",&q…

事业单位D类 — — 理论攻坚-主题班会

一、书写模版 &#xff08;一&#xff09;活动主题 1.书写模板 &#xff08;1&#xff09;&#xff08;主动学习&#xff09;&#xff0c;从我做起/我能行&#xff1b;做&#xff08;环保、诚信&#xff09;卫士/标兵&#xff1b;&#xff08;网络安全、诚信&#xff09;伴…

RealVNC配置自定义分辨率(AlmaLinux 8)

RealVNC 配置自定义分辨率&#xff08;AlmaLinux8&#xff09; 参考RealVNC官网 how to set up resolution https://help.realvnc.com/hc/en-us/articles/360016058212-How-do-I-adjust-the-screen-resolution-of-a-virtual-desktop-under-Linux-#standard-dummy-driver-0-2 …

Linux操作系统的基本配置操作

Linux操作系统的基本操作 一、和网络有关的Linux操作二、网络如果修改完成&#xff0c;需要重启Linux的网卡服务三、在Linux上还有一个网络服务NetworkManagaer四、Linux上还有一个服务叫做firewalld&#xff08;防火墙的服务&#xff09;五、Linux安装的节点服务器我们一般都是…

数据结构体--5.0图

目录 一、定义 二、图的顶点与边之间的关系 三、图的顶点与边之间的关系 四、连通图 五、连通图的生成树定义 一、定义 图&#xff08;Graph&#xff09;是由顶点的又穷非空集合合顶点之间边的集合组成&#xff0c;通常表示为&#xff1a;G&#xff08;V&#xff0c;E&…

中国知网账号包月多少钱?怎样知网包月最划算

中国知网是我们在查找下载论文资料时常用的中文数据库&#xff0c;也是全球最大的中文数据库之一。那么&#xff0c;中国知网是否可以包月使用呢&#xff1f;包月费用又是多少呢&#xff1f;如何包月最划算呢&#xff1f;下面本文将为您一一解答。 一、中国知网可包月使用吗&a…

C 语言不同类型变量之间的大小比较

1. 示例代码&#xff1a; #include <stdio.h>int main(void) {int a -1;unsigned int b 1;if (a b) {printf("a b\n");} else if (a < b) {printf("a < b\n");} else {printf("a > b\n");}return 0; } 2. 输出结果&#xff…

用变压器实现德-英语言翻译【01/8】:嵌入层

一、说明 本文是“用变压器实现德-英语言翻译”系列的第一篇文章。它引入了小规模的嵌入来建立感知系统。接下来是嵌入层的变压器使用。下面简要概述了每种方法&#xff0c;然后是德语到英语的翻译。 二、技术背景 嵌入层的目标是使模型能够详细了解单词、标记或其他输入之间的…

简易虚拟培训系统-UI控件的应用2

目录 Text组件-文字显示 Text组件-文字动态显示 ScrollView组件 使用文件流动态读取硬盘文件 本篇介绍Text和ScrollView的简单应用&#xff0c;以及读取硬盘中.txt文本的内容 Text组件-文字显示 1. 加入Text&#xff1a;在mainCanvas上点右键->UI->选择Text和TextMe…

CocosCreator组件上的schedule

目录 1.首先看component.ts中schedule 函数&#xff0c;核心代码就是获取director.getScheduler()&#xff0c;并调用schedule方法&#xff0c;把callback等参数传递进去。 2.再看到scheduler.ts类中的schedule方法&#xff0c;只取一些主要代码&#xff0c;下面会分段详细拆…

dockerfile 例子(二)

Dockerfile由一行一行的命令语句组成&#xff0c;#开头的为注释行。Dockerfile文件内容分为四个部分&#xff1a;基础镜像信息、维护者信息、镜像操作指令以及容器启动执行指令。 接下来给大家列出Dockerfile中主要命令的说明。 FROM&#xff0c;指定所创建镜像的基础镜像。 …

Verilog基础:块语句

相关阅读 Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 1、块语句 块语句(block statements)是一种把语句组织在一起&#xff0c;这样他们在语法上就像单个语句一样工作。Verilog HDL中有两种类型的块&#xff1a; …

“惠医通-医院挂号订单平台”

结合已学习过的vue3和TS完成的项目&#xff0c;便于患者对自己想要就诊的科室进行挂号&#xff0c;付款 一&#xff1a;项目简介 前端技术栈 Vue3 TS vue-router Element-ui Axios Pinia 项目架构 二&#xff1a;主要模块 1. axios二次封装 1.1 创建实例 //利用axios.creat…

如何调整DOSBOX软件的运行窗口大小

前言 小编最近正在学习微机原理&#xff0c;碰到一些问题&#xff0c;在安装DOSBOX后&#xff0c;打开应用&#xff0c;会出现运行窗口特别小&#xff0c;字体也很小的情况&#xff0c;使用时会感觉特别费劲&#xff0c;看着特别的不舒服&#xff0c;那么这个时候就需要调整一…

【LeetCode题目详解】第八章 贪心算法 part01 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和 day31补

贪心算法理论基础 关于贪心算法&#xff0c;你该了解这些&#xff01; 题目分类大纲如下&#xff1a; # 什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 这么说有点抽象&#xff0c;来举一个例子&#xff1a; 例如&#xff0c;有一堆钞票&…

【C#】C#:“指派给常量数组的必须是常量”

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 记录一个有意思的代码片段。 首先&#xff0c;复习一下常量。…

安防监控/磁盘阵列存储/视频汇聚平台EasyCVR调用rtsp地址返回的IP不正确是什么原因?

安防监控/云存储/磁盘阵列存储/视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RT…