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

2024-05-03 22:04
文章标签 语言 完结 测试题

本文主要是介绍【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个数就再往后一个元素储存一个”,“,这样等到循环结束我们就可以得到一个数组,但是这个数组的数是倒过来的,我们只需打印的时候,将数组反过来打印即可。


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

这篇关于【C语言的完结】:最后的测试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957751

相关文章

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态: