【C语言的完结】:最后的测试题

看到这句话的时候证明:    此刻你我都在努力~

                               

个人主页:  Gu Gu Study                                             ​

专栏:语言的起点-----C语言

喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。

如果喜欢能否点个赞支持一下,谢谢啦!

                                                                                                                作者:小闭

目录

一、对无符号数的理解

二、从第一字符串中删除第二个字符串中所有的字符

三、给整数加上”,“


 

一、对无符号数的理解

#include<stdio.h>
int main() 
{
	unsigned char i = 7;
	int j = 0;
	for (; i > 0; i -= 3) {
		++j;
	}
	printf("%d\n", j);
	return 0;
}

 如上题目,大家伙觉得输出的答案是多少呢?

这道题只要考察的就是我们对C语言无符号数的理解了。那么下面我们一边讲解这道题目,一边来讲一下有关的知识点。


1.1 unsigned char的最小值和最大值

首先,我们审题 i是无符号数即(unsigned char),那么它的范围就是0-255,可能有些初学的小伙伴就会问为什么范围是0-255,这就要关联起char类型的8个比特位,因为unsigned char 无符号也就不需要用最高位来做符号位,那么这时unsigned char 就可以用上8个比特位来进行储存数据当8个比特位全为0时,为最小即0为最小值,当8个比特位全为1时,为最大值即2^8-1=255


1.2 无符号数的循环

无符号数和很多数都是一样的道理,在自己的范围内一直循环,当到了最大值在加1就会变成最小值,当自己最小值时在减就会变成最大值。就以unsigned char做个例子运行给大家看吧。

int main()
{

	unsigned char a = 0;
	unsigned char b = 255;
	a = a - 1;
	b = b + 1;
	printf("a=%u",a);
	printf("b=%u",b);

		 

	return 0;
}

看运行结果,确实如我上面所说。


1.3 开始解题


int main() 
{
	unsigned char i = 7;
	int j = 0;
	for (; i > 0; i -= 3) {
		++j;
	}
	printf("%d\n", j);
	return 0;
}

再看一遍题目。 

这里我们需要判断for循环的结束条件为 i<=0,但由于此时代的 i 为unsigned char类型,那么只有i==0;时for循环才会结束。这时我们只需要知道i-=3多少次到0,才能得出j的值为多少。

因为i每次循环-=3,那么当for 循环经过3次后,i就变成了254,则254/3=84,余数为2再-=3一次,得到255,255/3=85,所以总的次数为3+84+1+85=173。所以此时 j,++了173次,故打印出来的结果为173.


二、从第一字符串中删除第二个字符串中所有的字符

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。 例如:第一个字符串是"They are students.",第二个字符串是”aeiou"。删除之后的第一个字符串变成"Thy r stdnts."。 保证两个字符串的长度均不超过100。 输入描述:输入两行,每行一个字符串。 输出描述:输出删除后的字符串。

2.1 带空格的字符串的获取

一经审题我们发现,这道题要获取两个字符串,相信有的小伙伴可能回想用scanf来进行获取,但是我们要知道,scanf获取字符串,如果遇到空格是会直接结束读取的,故在这道题上是不能用scanf来进行读取的,这里我们就需要用到gets这个函数,这个函数是专门读取字符串的函数。不需要担心我们上面所说的空格问题。下面给大家演示一下。

2.2 scanf的读取:

int main()
{

    char a[20];
    scanf("%s", a);
    printf("scanf: %s\n", a);

  

    return 0;
}

2.3 gets的读取: 

int main()
{

    char a[20];
    gets(a);
    printf("gets: %s\n", a);
  

    return 0;
}

2.4 开始解题

先给参考答案再解析:


#include <stdio.h>
int main() {
    char a[100], b[100];
    int i = 0, j = 0;
    gets(a);
   
    gets(b);
    while (b[j])
    {        for (i = 0; a[i]; i++)
        {
            if (b[j] == a[i])
            {
                a[i] = -1;
            }
        }
        j++;
    }

    for (i = 0; a[i]; i++)
    {
        while(a[i]==-1)
        {
            i++;
        }
        if (!a[i])
        {
            break;
        }
            printf("%c", a[i]);
        
    }
    return 0;
}

通过审题我们知道,两个字符串的最大长度不超过100,那么我这里直接创建两个char [100]的数组 然后用gets依次读取字符串,然后在用两个循环,将第一个字符串中再第二个字符串出现的字符全部改为-1(其它整数也行),然后我们再打印的时候直接跳过数组元素为-1的元素即可。可能有小伙伴会疑惑,万一我输入的字符串也有-1呢?其实这是不矛盾的,这里的-1是整形,当我们输入成字符串时就会变成‘-’,‘1’,两个字符放到数组里的。所以这里我们把将第一个字符串中再第二个字符串出现的字符全部改为-1或其它整数是不冲突的。以上就是这道题的解题思路了 。


三、给整数加上”,“

对于一个较大的整数 N(1<=N<=2,000,000,000) 比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这 个数字每三位加一个逗号,它会变得更加易于朗读。 因此,这个数字加上逗号成如下的模样:980,364,535请写一个程序帮她完成这件事情

3.1 直接审题解答

还是老样子先给答案再进行解析:

#include <stdio.h>
int main() {
    int a, b;
    int i = 0,count=0;
    char arr[14] = {0};
    scanf("%d", &a);
    while (a)
    {
        if (count == 3)
        {
            arr[i++] = ',';
            count = 0;
        }
        else
        {
            b = a % 10;
            a /= 10;
            arr[i] = b + '0';
            if (a == 0)
                break;
            i++;
            count++;
        }
    }

    for (int j = i; j >= 0; j--)
    {

        printf("%c", arr[j]);
   }
    return 0;
}

 首先我们知道这里最大的数算上”,“也就13位,但是字符串末尾会有个’\0‘,所以我们创建一个长度为14的数组arr,然后我们采用我们模10,除10的组合技(%10,/10),不断从右到左放到数组里,然后创建一个count来进行计数,每储存3个数就再往后一个元素储存一个”,“,这样等到循环结束我们就可以得到一个数组,但是这个数组的数是倒过来的,我们只需打印的时候,将数组反过来打印即可。


好了今天的文章就结束了。好了这篇文章就到此结束了。点个赞我们下次再见。  

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

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

相关文章

Delta lake with Java--数据增删改查

之前写的关于spark sql 操作delta lake表的&#xff0c;总觉得有点混乱&#xff0c;今天用Java以真实的数据来进行一次数据的CRUD操作&#xff0c;所涉及的数据来源于Delta lake up and running配套的 GitGitHub - benniehaelen/delta-lake-up-and-running: Companion reposito…

软件无线电系列——信道编译码

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、信道编译码 1、数字…

开源的贴吧数据查询工具

贴吧数据查询工具 这是一个贴吧数据查询工具&#xff0c;目前仍处于开发阶段。 本地运行 要本地部署这个项目&#xff0c;请 克隆这个仓库并前往项目目录 git clone https://github.com/Dilettante258/tieba-tools.git cd tieba-tools安装依赖 pnpm install运行项目 np…

服务器数据恢复—异常断电导致RAID模块故障的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌ProLiant DL380系列服务器&#xff0c;服务器中有一组由6块SAS硬盘组建的RAID5阵列&#xff0c;WINDOWS SERVER操作系统&#xff0c;作为企业内部文件服务器使用。 服务器故障&#xff1a; 机房供电几次意外中断&#xff0c;服务器出现故…

RMQ从入门到精通

一.概述与安装 //RabbitMQ //1.核心部分-高级部分-集群部分 //2.什么是MQ 消息队列message queue 先入先出原则;消息通信服务 //3.MQ的大三功能 流量消峰 应用解耦 消息中间件 //&#xff08;1&#xff09;人-订单系统(1万次/S)—> 人 - MQ(流量消峰,对访问人员进行排队) -…

Java 【数据结构】常见排序算法实用详解(上) 插入排序/希尔排序/选择排序/堆排序【贤者的庇护】

登神长阶 上古神器-常见排序算法 插入排序/选择排序/堆排序 &#x1f4d4; 一.排序算法 &#x1f4d5;1.排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&a…

【Python】函数设计

1.联系函数的设计 2.找质数 3.找因子 4.判断水仙花数 5.斐波拉契数列递归调用&#xff0c;并用数组存储已计算过的数&#xff0c;减少重复计算 1、计算利息和本息 编写两个函数分别按单利和复利计算利息,根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1…

学习Rust的第22天:mini_grep第2部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

【linux-汇编-点灯之思路-程序】

目录 1. ARM汇编中的一些注意事项2. IMXULL汇编点灯的前序&#xff1a;3. IMXULL汇编点灯之确定引脚&#xff1a;4. IMXULL汇编点灯之引脚功能编写&#xff1a;4.1 第一步&#xff0c;开时钟4.2 第二步&#xff0c;定功能&#xff08;MUX&#xff09;4.3 第三步&#xff0c;定电…

【笔试训练】day17

1.小乐乐该数字 遇到按位处理的情况可以考虑用字符串去读 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;int main() {string str;cin >> str;int ans 0;for (int i 0; i < str.siz…

JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Junit 单元测试框架概述 1.1 使用 Junit 框架进行测试业务代码 1.2 Junit 单元测试框架的常用注解&#xff08;Junit 4.xxx 版本&#xff09; 2.0 反射概述 2.1 获…

神经网络中的优化方法

一、引入 在传统的梯度下降优化算法中&#xff0c;如果碰到平缓区域&#xff0c;梯度值较小&#xff0c;参数优化变慢 &#xff0c;遇到鞍点&#xff08;是指在某些方向上梯度为零而在其他方向上梯度非零的点。&#xff09;&#xff0c;梯度为 0&#xff0c;参数无法优化&…

机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(70)

1. 题目解析 题目链接&#xff1a;740. 删除并获得点数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 问题分析 本题是「打家劫舍」问题的变种&#xff0c;但核心逻辑依然保持一致。题目要求从给定的数组nums中选择…

C++ stack和queue的使用方法与模拟实现

文章目录 一、 stack的使用方法二、 queue的使用方法三、 容器适配器四、 stack的模拟实现五、 queue的模拟实现 一、 stack的使用方法 stack介绍文档 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的…

Windows如何通过wsl2迅速启动Docker desktop的PHP的Hyperf项目容器?

一、安装WSL 什么是WSL&#xff1f; 官网&#xff1a;什么是WSL&#xff1f; Windows Subsystem for Linux (WSL) 是一个在Windows 10和Windows 11上运行原生Linux二进制可执行文件的兼容性层。 换句话说&#xff0c;WSL让你可以在Windows系统上运行Linux环境&#xff0c;而无需…

【linux】unzip解压乱码或者报错处理办法

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

2023-2024年数字化转型报告/方案合集(精选198份)

数字化转型报告/方案&#xff08;精选198份&#xff09; 2023-2024年 来源&#xff1a;2023-2024年数字化转型报告/方案合集&#xff08;精选198份&#xff09; 【以下是资料目录】 2023-2024年度医药健康行业数字化调研报告 2023-2024中国财务数字化报告 2023⻝品饮料行业…

Redis运维篇-快速面试笔记(速成版)

文章目录 1. Redis的持久化1.1 RDB&#xff08;快照模式&#xff09;1.2 AOF 模式 2. Redis主从模型&#xff08;高可用&#xff09;2.1 Redis的主从复制2.2 Redis拓扑结构 3. Redis集群模式&#xff08;高并发&#xff09;3.1 Redis的Slots3.2 集群模式的常用命令3.3 多主多从…

使用 MediaMTX 和 FFmpeg 推拉 RTSP 流媒体

实时流传输协议 RTSP&#xff08;Real-Time Streaming Protocol&#xff09;是 TCP/IP 协议体系中的一个应用层协议&#xff0c;由哥伦比亚大学、网景和 RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP 在体系…