C语言刷题小记1

news2024/11/17 14:21:13

前言

本篇博客和大家分享一些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语言的知识,不断提高编程能力。最后,希望本篇博客的内容可以为大家带来帮助,谢谢!

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

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

相关文章

JS(JavaScript) 数据校验 正则表达式

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

什么?2024年只要 HTML 和 CSS 就可以实现一个自适应的瀑布流页面了?

瀑布流页面布局&#xff0c;故名思义就是页面上的元素子项像瀑布一样进行上下紧凑布局&#xff0c;一般图片类网站、电商类或者博客类的网站经常会使用这种布局&#xff0c;使得展示的元素比较紧凑和丰富&#xff0c; 类似下图 这里总结一下瀑布流布局主要有以下特征&#xff1…

java生成json格式文件(包含缩进等格式)

生成json文件的同时保留原json格式&#xff0c;拥有良好的格式&#xff08;如缩进等&#xff09;&#xff0c;提供友善阅读支持。 pom.xml依赖增加&#xff1a; <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactI…

物联网综合实验平台-物联网实验实训教学平台-物联网实验箱

物联网&#xff08;IoT&#xff09;是一种连接性技术&#xff0c;将各种设备和物品连接到互联网&#xff0c;通过数据的收集和分析实现更智能的决策和操作。在《“十四五”数字经济发展规划》中&#xff0c;物联网被明确提出&#xff0c;被视为数字经济时代的基础设施。当前&am…

基于循环神经网络的一维信号降噪方法(简单版本,Python)

代码非常简单。 import torch import torch.nn as nn from torch.autograd import Variable from scipy.io.wavfile import write #need install pydub module #pip install pydub import numpy as np import pydub from scipy import signal import IPython import matplot…

NAT地址转换实验,实验超简单

实验拓扑 实验目的 将内网区域&#xff08;灰色区域&#xff09;的地址转换为172.16.1.0 实验过程 配置静态NAT&#xff08;基于接口的静态NAT&#xff09; R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname R1 [R1]un in en I…

LoadRunner-Virtual User Generator组件学习(录制不上内容)

重点知识 LR工具是拿C写的&#xff0c;所以它的脚本默认也是C&#xff0c;但是最终生成的脚本不止是C&#xff0c;它是支持C和Java语言的&#xff0c;这个大家要清楚&#xff0c;对本身懂代码的就很友好&#xff0c;你了解java&#xff0c;那就可以把脚本改成java&#xff0c;…

第十二章 Nest中 Express 和 Fastify

Express是一个用于构建Web应用程序和API的JavaScript框架。它是基于Node.js平台的&#xff0c;并提供了一系列简化了常见Web开发任务的功能&#xff0c;如路由、中间件、模板引擎和数据库集成等。 是一个处理请求、响应的库 其可以通过use一个个中间件来处理请求和返回响应&…

随手记录: Ubuntu NVIDIA显卡驱动安装后 屏幕亮度无法调节 无法连接外显示器等问题

背景 一句话&#xff1a;简单记录帮身边人装系统发现 GPU和外接显示器的无法连接&#xff0c;同时亮度无法调节等新问题 设备型号&#xff1a; 联想笔记本&#xff1a;ThinkBook 16p Gen2CPU&#xff1a;AMD Ryzen 7 5800HGPU&#xff1a;RTX 3060 问题描述及流程&#xff…

深度学习标注文件格式转换

json转xml 原始数据集文件夹中图片格式为bmp&#xff0c;标注文件为json&#xff0c;图片和标注文件放在同一个文件夹下面&#xff0c;将json转为xml格式&#xff0c;图片和标注文件分别存放在一个文件夹下面。 headstr """\ <annotation><folder>…

【CSS in Depth 2 精译】2.4 视口的相对单位

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位 ✔️2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.4 视口的相对单位 前面介绍过的 em 和 rem 是相对于 font-size 定义的&#xff0…

React+TS前台项目实战(二十四)-- 全局常用绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件&#xff0c;是通过传入的信息&#xff0c;绘制在二维码上&#xff0c;可用于很多场景&#xff0c;如区块链项目中的区块显示交易地址时就可以用到…

DDOS攻击不懂?看完让你秒懂!

什么是DDOS攻击&#xff1f; DDoS攻击&#xff0c;全称分布式拒绝服务攻击&#xff08;Distributed Denial of Service attack&#xff09;&#xff0c;是一种常见的网络安全攻击方式。以下是对DDoS攻击的详细解释: DDoS攻击是指攻击者利用大量被控制的计算机或设备&#xff…

Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。由于时间的关系&#xff0c;宏哥这里用代码给小伙伴演示两个模块&#xff1a;注册和登录。 2.业务模块封装 因为现在各种APP的层出不群&#xff0c;各式各样的。但是其大多数都有注册、登录。为…

嵌入式Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader&#xff0c;uboot 是一个遵循 GPL 协议的开源软件&#xff0c;uboot是一个裸机代码&#xff0c;可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说&#xff0c;可以在没有系统的情况…

vue如何实现低代码

Vue.js 本身作为一个前端框架&#xff0c;并不是专门设计用来实现低代码平台的工具。然而&#xff0c;借助 Vue.js 的灵活性和组件化特性&#xff0c;可以在其基础上构建低代码平台或低代码工具。以下是一些实现低代码平台所需的关键功能和技术&#xff0c;可以在 Vue.js 中进行…

使用ChatGPT自动生成测试用例思维导图

使用ChatGPT自动生成测试用例思维导图 引言ChatGPT在测试用例编写中的应用全面覆盖测试场景边界测试避免测试用例重复 借助ChatGPT生成测试用例思维导图准备工作步骤一&#xff1a;与ChatGPT对话步骤二&#xff1a;生成思维导图代码 结语 引言 在编写测试用例时&#xff0c;测…

Openwrt路由器部分ipv6公网地址无法访问的问题

路由器是Openwrt&#xff0c;终端访问ipv6地址经常有些能访问&#xff0c;有些不能访问&#xff0c;一开始以为是运营商问题&#xff0c;后面ssh到openwrt发现所有访问都正常。 查阅资料后才知道是MTU设置问题&#xff0c;Openwrt 默认MTU是1492&#xff0c;使用IPV6应减少60个…

AI智能音箱用2×15W立体声功放芯片NTP8918

智能音箱是近年来非常受欢迎的智能家居产品之一&#xff0c;它集成了人工智能技术和音频技术&#xff0c;能够为用户提供语音助手、音乐播放、智能家居控制等多种功能。其中&#xff0c;音频输出是智能音箱的核心功能之一&#xff0c;而功放芯片则是实现音频放大的关键组成部分…

8-Bit Retro Game SFX Pack(复古游戏音效)

大量高品质、专业制作的8位复古声音。8Bit Retro SFX Pack 1将为您的游戏带来您想要的优势。将跳跃、物品拾取和武器声音添加到经典视觉效果中。伴随着爆炸声、火灾声、通电声和断电声&#xff0c;让人回到怀旧的电子游戏黄金时代。通过包含的数百个音频文件&#xff0c;找到您…