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

news/2024/9/25 19:14:07/

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

                               

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


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


http://www.ppmy.cn/news/1450879.html

相关文章

python使用opencv对图像的基本操作(2)

13.对多个像素点进行操作&#xff0c;使用数组切片方式访问 img[i,:] img[j,:] #将第j行的数值赋值给第i行 img[-2,:]或img[-2] #倒数第二行 img[:,-1] #最后一列 img[50:100,50:100] #50-100行&#xff0c;50-100列&#xff08;不包括第100行和第100列&#xff09; img[:100…

使用Gradio搭建聊天UI实现质谱AI智能问答

使用Gradio搭建聊天UI实现质谱AI智能问答 一、调用智谱 AI API二、使用Gradio搭建聊天UI三、将流式处理添加到交互式聊天机器人 一、调用智谱 AI API 1、获取api_key 智谱AI开放平台网址&#xff1a; https://open.bigmodel.cn/overview 2、安装库pip install zhipuai 3、执…

vue中如何正确使用异步async和await

async 是异步的意思&#xff0c;而 await 是等待的意思&#xff0c;await 用于等待一个异步任务执行完成的结果。 1.async/await 是一种编写异步代码的新方法&#xff08;以前是采用回调和 promise&#xff09;。 2. async/await 是建立在 promise 的基础上。 3. async/await 像…

Python中如何调用其他文件的类或函数

Python中如何调用其他文件的类或函数 在Python编程中&#xff0c;随着项目的扩大&#xff0c;代码通常会被分解为多个模块&#xff0c;以提高可读性和可维护性。模块通常是包含Python定义和声明的文件。了解如何从一个文件调用另一个文件中的类或函数是非常重要的&#xff0c;…

Electron打包流程

安装 先安装依赖 apt-get update apt-get install -y wine dpkg fakeroot rpm mono-complete dpkg -add-architecture i386 && apt-get update apt-get install -y win32 rm -rf /var/lib/apt/lists/* 安装electron npm install --save-dev electron --registry ht…

Vue Canvas图片水印的绘制 图片加水印

效果 定义画布 <canvas width"800" height"800" ref"cn" ></canvas>绘制水印 draw(){const img new Image()img.srchttps://img1.baidu.com/it/u3035183739,1826404114&fm253&fmtauto&app138&fJPEGimg.onload(()…

CSS 伪类、伪元素的应用实例:电池充电、高能进度条

一、目的 本文通过 CSS 伪类、伪元素&#xff0c;结合动画 animation 和 Vue 动态样式属性&#xff08;通过 CSS 变量&#xff09;的写法&#xff0c;来实现电池充电、高能进度条的效果&#xff0c;如下图所示。 二、基础知识 1、CSS 伪类、伪元素 简单概括成以下 4 点&#x…

ZooKeeper知识点总结及分布式锁实现

最初接触ZooKeeper是之前的一个公司的微服务项目中&#xff0c;涉及到Dubbo和ZooKeeper&#xff0c;ZooKeeper作为微服务的注册和配置中心。好了&#xff0c;开始介绍ZooKeeper了。 目录 1.ZooKeeper的基本概念 2.ZooKeeper的节点&#xff08;ZNode&#xff09; 3. ZooKeep…