C语言刷题小记

前言

本篇博客和大家分享一些C语言的OJ题目,希望大家可以通过这些题目进一步提升自己的编程能力,如果你对本篇内容感兴趣,可以一键三连,多多关注,下面进入正文部分。

题目1 十六进制转十进制

描述
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。

输入描述:

输出描述:
十六进制整数ABCDEF对应的十进制整数,所占域宽为15。
备注:
printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。

分析:本题考察进制的转换,首先我们需要知道,不同的进制只是数字的不同表现形式,具体的关于进制的知识,如果读者存在疑问,可以看我之前发表的“C语言操作符”这篇文章,那里我介绍了关于进制详细的内容;再回到这道题,当了解了进制的知识后,本题就会变得很简单,我们知道十六进制的数字前面是需要加上0x的,所以根据题目要求,本题的代码也应运而生了,大家请看下面的代码。

#include<stdio.h>
int main()
{
	printf("%15d\n", 0xABCDEF);
	return 0;
}

大家可以看到,上面的代码可以很好地实现题目的结果,希望大家理解。

题目2 printf的返回值 

描述
KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?
输入描述:

输出描述:
包括两行:
第一行为“Hello world!”
第二行为printf(“Hello world!”)调用后的返回值。

分析:本题考察printf函数的返回值,这里大家需要知道printf的返回值是什么,printf函数返回的是打印在屏幕上的字符个数,它的返回类型是int,所以知道了这一点,本题的代码就可以写出来了。

#include<stdio.h>
int main()
{
	int ret = printf("Hello world!");
	printf("\n");
	printf("%d", ret);
	return 0;
}

这里大家还要注意一下,有的同学会在第一行打印代码的最后加上“\n”来实现换行的效果,但是这样是错误的,因为一旦加上“\n”,相当于多加了一个字符,那么返回值就会变成13,所以我们需要另起一行来实现换行的效果。

说完第二题,这里还想请大家来看这么一段代码;

#include<stdio.h>
int main()
{
	printf("%d", printf("%d", printf("%d", 43)));
	return 0;
}

大家猜猜这段代码的运行结果是什么?

这里就在考察printf函数的返回值,这段代码是从里往外进行分析的,首先最里面的printf打印43,返回值就是2,那么第二个printf就打印2,返回值就是1,那么最外层的printf就打印1,所以最终的结果就是4321。

这道题作为拓展,帮助大家更好地理解printf的返回值。 

题目3 判断字母

描述
从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。
输入描述:
多组输入,每行输入包括一个字符。
输出描述:
输出该字符是字母(YES)或不是(NO)。

示例

输入

H

9

输出

YES

NO

分析:本题要求我们判断字母,并且是需要进行多组输入的,所以我们需要用到getchar函数和while循环,大家先来看代码。

#include<stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
		{
			printf("YES\n");
		}
		
		else
		{
			printf("NO\n");
		}
		getchar();
	}
	return 0;
}

大家仔细观察代码,getchar函数的返回值是int(字符的ASCII值),所以我们需要先创建一个整型变量去接受getchar函数的返回值,下面我们写while循环,注意循环的停止条件,这是一个比较固定的写法,大家可以记住它,在循环体中我们进行判断,这里怎么判断相信大家没有问题,需要强调的是判断完成后,我们要让getchar函数再运行一次,目的是为了处理掉"\n"。

大家看到,上面的代码可以完成字母的判断;

下面关于本题,还有另一种解法,其实和第一个差不多,只是在判断字母那里,我们可以使用一个函数来进行判断,这个函数叫做“isalpha”,它是专门用来判断字母的,它需要包含在<ctype.h>这个头文件中。所以上面的代码可以改成如下代码;

#include<stdio.h>
#include<ctype.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (isalpha(ch))
		{
			printf("YES\n");
		}

		else
		{
			printf("NO\n");
		}
		getchar();
	}
	return 0;
}

 大家可以看到,改完后可以实现同样的效果,有了这个函数,我们就不需要去写出具体的判断方法了,直接交给库函数处理,就可以得到我们想要的结果。

题目4 ASCII码

描述

BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。

73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33

输入描述:

输出描述:

一行输出转换题目中给出的所有ASCII码对应的字符,无需以空格隔开。

分析:本题考察的内容比较简单,要求我们打印出ASCII值对应的字符,我们可以直接去打印,如下代码;

#include<stdio.h>
int main()
{
	printf("%c%c%c%c%c%c%c%c%c%c%c%c", 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33);
	return 0;
}

大家可以看到,我们成功地打印出了一句话;那么这个代码就是可行的,就是看起来有点奇怪和麻烦,尤其是有12个%c,这里相信有人不想一个一个敲,那么我们就可以通过循环来解决这个问题,大家再来看下面的代码;

#include<stdio.h>
int main()
{
	char arr[12] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116, 33 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%c", arr[i]);
	}
	return 0;
}

大家可以看到,这样写也可以完成任务,而且代码看起来更高级一些;当然,第一种方法也是正确的,两种方法希望大家都可以掌握。

题目5 出生日期输入输出

描述

输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。

数据范围:年份满足 1990≤�≤2015 1990≤y≤2015 ,月份满足 1≤y≤12 1≤m≤12  ,日满足1≤d≤30

输入描述:

输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。

输出描述:

三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0

分析: 本题让我们去输入输出出生年月日,重点在于对格式的控制;

#include<stdio.h>
int main()
{
	int year = 0;
	int month = 0;
	int date = 0;
	scanf("%4d%2d%2d", &year, &month, &date);
	printf("year=%4d\n", year);
	printf("month=%02d\n", month);
	printf("date=%02d\n", date);
	return 0;
}

题目6 2的n次方计算

描述

不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

数据范围: 0≤n≤31 

输入描述:

一行输入整数n(0 <= n < 31)。

输出描述:

输出对应的2的n次方的结果。

分析:本题要求我们实现2的n次方的运算,并且不能使用累乘;题目提示我们用移位操作符来进行处理,那么我们需要知道移位操作符的功能,移位操作符可以按照2的次幂改变数据,那么我们就可以写出代码了。

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	int b = 1 << a;
	printf("%d", b);
	return 0;
}

大家来看代码,因为我们计算的2的n次方,所以我们要从1开始计算,这样就可以得到想要的结果。

这道题还可以拓展一下,如果我们想实现多组输入 ,那么代码该怎么写呢?大家可以参考下面的代码;

#include<stdio.h>
int main()
{
	int a = 0;
	while (scanf("%d", &a) != EOF)
	{
		int b = 1 << a;
		printf("%d", b);
	}
	return 0;
}

大家可以发现,这与前面那道多组输入的写法很相似,使用了while循环,大家要注意循环的终止条件的写法,可以类比前面那道题,当我们想要终止循环时,我们要在控制面板上输入CTRL+Z。

题目7 计算三角形的周长和面积

描述

根据给出的三角形3条边a, b, c,计算三角形的周长和面积。

数据范围:0<a,b,c≤100000 

输入描述:

一行,三角形3条边(能构成三角形),中间用一个空格隔开。

输出描述:

一行,三角形周长和面积(保留两位小数),中间用一个空格隔开,输出具体格式详见输出样例。

分析:本题要求我们来计算给定三边的三角形的周长和面积,那么我们需要注意,这里输入输出都有可能出现浮点数,所以我们统一用double类型的变量进行定义,求面积的时候需要用到海伦公式,这个公式大家应该都学过,如果不了解,可以自己去查一下,下面我们来看具体代码。

#include<stdio.h>
#include<math.h>
int main()
{
	double a = 0.0;
	double b = 0.0;
	double c = 0.0;
	scanf("%lf %lf %lf", &a, &b, &c);
	double circumference = 0.0;
	double area = 0.0;
	circumference = a + b + c;
	double p = circumference / 2;
	area = sqrt(p * (p - a) * (p - b) * (p - c));
	printf("circumference=%.2lf area=%.2lf", circumference, area);
	return 0;
}

大家观察上面的代码,我统一使用了double类型去定义了每个变量,在输入输出的时候要用到%lf,这个点大家要注意;其次,大家知道海伦公式中有开平方的操作,这里为大家介绍一个函数——sqrt函数,它是专门用来计算开方的,它需要接受一个double类型的参数,要使用这个函数,我们需要引入<math.h>这个头文件。最后,我们要注意题目要求,保留两位小数,所以我们打印的格式为“%.2lf“,大家在做这道题的时候一定要注意细节。

总结

本篇博客为大家介绍了几道C语言的OJ题目,希望大家可以通过这些题目巩固C语言的知识,不断提高编程能力。最后,希望本篇博客的内容可以为大家带来帮助,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】机器学习的重要技术——生成对抗网络:理论、算法与实践

引言 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;由Ian Goodfellow等人在2014年提出&#xff0c;通过生成器和判别器两个神经网络的对抗训练&#xff0c;成功实现了高质量数据的生成。GANs在图像生成、数据增强、风格迁移等领域取得了显著成果…

qt文件如何打包成一个独立的exe文件

QT官方给我们安装好了打包软件&#xff0c;就在你QT安装的位置 把这个在cmd打开C:\Qt\6.7.1\mingw_64\bin\windeployqt6.exe&#xff08;或复制地址&#xff09; 然后把要打包项目的exe复制到新的空文件夹&#xff0c;再复制他的地址 按回车后生成新文件 再下载打包软件&#…

使用pyqt5编写一个七彩时钟

使用pyqt5编写一个七彩时钟 效果代码解析定义 RainbowClockWindow 类初始化用户界面显示时间方法 完整代码 在这篇博客中&#xff0c;我们将使用 PyQt5 创建一个简单的七彩数字时钟。 效果 代码解析 定义 RainbowClockWindow 类 class RainbowClockWindow(QMainWindow):def _…

【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练

一、介绍 乐器识别系统。使用Python为主要编程语言&#xff0c;基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对30种乐器&#xff08;‘迪吉里杜管’, ‘铃鼓’, ‘木琴’, ‘手风琴’, ‘阿尔卑斯号角’, ‘风笛’, ‘班卓琴’, ‘邦戈鼓’, ‘…

Lumos学习王佩丰Excel第三讲:查找替换定位

一、查找和替换 1、按值查找 2、按格式查找 将红色的单元格替换成黄色的单元格&#xff0c;其他格式同理处理。 3、是否开启单元格匹配 若不打开选项卡直接全部替换&#xff0c;会出现“苏州市市”的情况&#xff1b;加入单元格匹配的规则&#xff0c;检索时会以整个单元格内…

【车载开发系列】S32 Design Studio工具安装步骤

【车载开发系列】S32 Design Studio工具安装步骤 S32 Design Studio工具安装步骤 【车载开发系列】S32 Design Studio工具安装步骤※关键字提炼※一. 准备工作二. 下载安装包三. 获取License许可四. 开始预安装五. 开始正式安装六. 启动软件七. 安装插件八. 卸载插件九. 确认安…

系留无人机+自组网+单兵图传:低空集群组网指挥系统技术详解

低空无人机集群的控制、调度、信息回传需要有高度可靠和稳定的无线通信链路来保障。我国发达的公网基础设施为上述应用创造了良好的条件&#xff0c;但低空应用必须要考虑到在极端情况下公网瘫痪造成的通信链路中断带来的影响&#xff0c;因此有必要在公网之外&#xff0c;寻求…

【机器学习】机器学习重要方法——迁移学习:理论、方法与实践

文章目录 迁移学习&#xff1a;理论、方法与实践引言第一章 迁移学习的基本概念1.1 什么是迁移学习1.2 迁移学习的类型1.3 迁移学习的优势 第二章 迁移学习的核心方法2.1 特征重用&#xff08;Feature Reuse&#xff09;2.2 微调&#xff08;Fine-Tuning&#xff09;2.3 领域适…

线性代数|机器学习-P18快速下降奇异值

文章目录 1. 为什么要低秩矩阵1.1 矩阵A的秩定义1.2 矩阵压缩PCA 2. 低秩矩阵图像处理3. 秩的相关性质3.1 秩的公差轴表示3.2 Eckart-Young 定理 4. 低秩矩阵4.1 低秩矩阵描述4.2 函数低秩矩阵形式4.3通项小结4.4 函数采样拟合 5. 西尔维斯特方程5.1 希尔伯特矩阵举例5.2 范德蒙…

c++(三)

1. STL 1.1. 迭代器 迭代器是访问容器中元素的通用方法。如果使用迭代器&#xff0c;不同的容器&#xff0c;访问元素的方法是相同的&#xff1b;迭代器支持的基本操作&#xff1a;赋值&#xff08;&#xff09;、解引用&#xff08;*&#xff09;、比较&#xff08;和!&…

ros笔记01--初次体验ros2

ros笔记01--初次体验ros2 介绍安装ros2测试验证ros2说明 介绍 机器人操作系统(ROS)是一组用于构建机器人应用程序的软件库和工具。从驱动程序和最先进的算法到强大的开发者工具&#xff0c;ROS拥有我们下一个机器人项目所需的开源工具。 当前ros已经应用到各类机器人项目开发中…

【IVI】CarService启动-Android13

【IVI】CarService启动-Android13 1、CarServiceImpl启动概述2、简要时序图 1、CarServiceImpl启动概述 【IVI】CarService启动&#xff1a; CarServiceHelperService中绑定CarServiceICarImpl初始化各种服务 packages/services/Car/README.md 2、简要时序图

Linux——passwd文件,grep,cut

/etc/passwd文件含义 作用 - 记录用户账户信息&#xff1a;共分为7段&#xff0c;使用冒号分割 含义 - 文件内容意义&#xff1a;账户名&#xff1a;密码代号x&#xff1a;UID&#xff1a;GID&#xff1a;注释&#xff1a;家目录&#xff1a;SHELL - 第7列/sbin/nologin&#x…

昇思25天学习打卡营第7天之二 | 模型保存与加载

1. 保存与加载 在训练网络模型的过程中&#xff0c;实际上我们希望保存中间和最后的结果&#xff0c;用于微调&#xff08;fine-tune&#xff09;和后续的模型推理与部署&#xff0c;本章节我们将介绍如何保存与加载模型。 1.1 导入依赖 # 导入numpy库&#xff0c;并将其重命…

【C语言】--分支和循环(1)

&#x1f37f;个人主页: 起名字真南 &#x1f9c7;个人专栏:【数据结构初阶】 【C语言】 目录 前言1 if 语句1.1 if1.2 else1.3 嵌套if1.4 悬空else 前言 C语言是结构化的程序设计语言&#xff0c;这里的结构指的是顺序结构、选择结构、循环结构。 我们可以用if、switch实现分支…

51单片机第6步_stdlib.h库函数

本章重点学习stdlib.h库函数。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <stdlib.h> //float atof (char *s1); //参数s1字符串可包含正负号,小数点或E(e)来表示指数部分,如123.456或123e-2; //若首字符是非数据字符,或为正负号…

力扣每日一题 6/30 记忆化搜索/动态规划

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 494.目标和【中等】 题目&#xff1a; 给你一个非负整数数组 nums 和一个…

VMware中的三种虚拟网络模式

虚拟机网络模式 1 主机网络环境2 VMware中的三种虚拟网络模式2.1 桥接模式NAT模式仅主机模式网络模式选择1 VMware虚拟网络配置2 虚拟机选择网络模式3 Windows主机网络配置 配置静态IP 虚拟机联网方式为桥接模式&#xff0c;这种模式下&#xff0c;虚拟机通过主机的物理网卡&am…

mysql8.0-学习

文章目录 mysql8.0基础知识-学习安装mysql_8.0登录mysql8.0的体系结构与管理体系结构图连接mysqlmysql8.0的 “新姿势” mysql的日常管理用户安全权限练习查看用户的权限回收:revoke角色 mysql的多种连接方式socket显示系统中当前运行的所有线程 tcp/ip客户端工具基于SSL的安全…

2024最新boss直聘岗位数据爬虫,并进行可视化分析

前言 近年来,随着互联网的发展和就业市场的变化,数据科学与爬虫技术在招聘信息分析中的应用变得越来越重要。通过对招聘信息的爬取和可视化分析,我们可以更好地了解当前的就业市场动态、职位需求和薪资水平,从而为求职者和招聘企业提供有价值的数据支持。本文将介绍如何使…