嵌入式全栈开发学习笔记---C语言笔试复习大全13(编程题9~16)
目录
9.查找字符数组中字符位置(输入hello e 输出2);
10、查找字符数组中字符串的位置(输入hello ll 输出3);
11、字符数组中在指定位置插入字符;(输入hello 3 a 输出heallo)
12、在字符数组中指定开始位置插入字符串;(输入hello 3 aa 输出heaallo)
13、有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?(约瑟夫环,笔试常考)
14、输入一个字符串,计算字符串中子串出现的次数。
15、编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,即将句子中的单词位置倒置,而不改变单词内部结构。
第一步:获取键盘输入的几个单词,
第二步:转置每个单词里面的每一个字母,
第三步:将每一个单词里面的字母单独装置
16、输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来。
上一篇复习了关键字,这一篇我们来做第二次的8道编程题。
说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。
这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。
注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!
vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。
我们正式开始:
建议新建一个homework目录来存放这8个编程题的程序文件。
上次我们讲过第1~8道编程题了
嵌入式全栈开发学习笔记---C语言笔试复习大全7(编程题1~8)-CSDN博客
这次我们开始讲第9~16道:
9.查找字符数组中字符位置(输入hello e 输出2);
提示:我们只要遍历数组,将数组中的每一个元素和该字符对比,直到相等,则输出字符的位置。
参考代码:
#include <stdio.h>
#include <string.h>int get_char_index(char str[],char ch)
{int i;int length=strlen(str);for(i=0;i<length;i++){if(ch==str[i]){return i+1;}} return -1;
}int main()
{char str[32]={0};char ch;printf("输入 字符串 字符\n");scanf("%s %c,str,&ch);int index=get_char_index(str,ch);if(-1==index){printf("没有该字符\n");}else{printf("该字符的地址是%d\n",index);}return 0;
}
运行结果:
10、查找字符数组中字符串的位置(输入hello ll 输出3);
提示:用strncmp()字符串处理函数比较两个字符,如果相等则输出字符串的位置。
参考代码:
#include <stdio.h>
#include <string.h>int get_sub_index(char str[],char sub[])
{int length_str=strlen(str);int length_sub=strlen(sub);int i;for(i=0;i<length_str-length_sub+1;i++){ if(strncmp(str+i,sub,length_sub)==0){return i+1;}} return -1;
}int main()
{char str[32]={0};char sub[32]={0};printf("输入 字符串 要查找的字符串\n");scanf("%s %s",str,sub);int index=get_sub_index(str,sub);if(-1==index){printf("没有要查找的字符串\n");}else{printf("该字符串的位置是%d\n",index);}return 0;
}
运行结果:
11、字符数组中在指定位置插入字符;(输入hello 3 a 输出heallo)
我们可以把后面三个字符向后移动三位,然后将a放在第三个位置,然后将那三个字符赋值给后面三个位置。
参考代码:
#include <stdio.h>
#include <string.h>int main()
{int num;int ch;char str[32]={0};int i;printf("输入 字符串 插入位置 插入字符\n");scanf("%s %d %c",str,&num,&ch);int length=strlen(str);//计算字符串长度for(i=0;i<length-num+1;i++){ str[length-i]=str[length-1-i]; //移动后三位字符} str[num-1]=ch;//插入字符printf("%s\n",str);return 0;
}
运行结果:
12、在字符数组中指定开始位置插入字符串;(输入hello 3 aa 输出heaallo)
提示:将he用strncpy拷贝到另外一个字符数组里面,然后用strcat将he和aa拼接起来,再将剩下的llo接在heaa后面,最后用strcpy将heaallo拷贝回原来的数组中去。
参考代码:
#include <stdio.h>
#include <string.h>void insert_str(char str[],char insert[],int num)
{int length_str=strlen(str);int length_insert=strlen(insert);char tmp[32]={0};strncpy(tmp,str,num-1);strcat(tmp,insert);strcat(tmp,str+num-1);strcpy(str,tmp);
}int main()
{char str[32];char insert[32];int num;printf("请输入 字符串 要插入的字符串 要插入的位置\n");scanf("%s %s %d",str,insert,&num);int length_str=strlen(str);if(num<=length_str){ insert_str(str,insert,num);} else{ printf("字符串长度不够,请重新确认要插入的位置\n");} printf("%s\n",str);return 0;
}
运行结果:
13、有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?(约瑟夫环,笔试常考)
提示:题目的意思请看图:
参考代码:
#include <stdio.h>int main()
{int num;//总人数int person;//剩余人数int flag[1024]={0};//每个人的状态位,0保持,1出局int k=1;//报数int i=1;//flag数组下标printf("请输入游戏人数\n");scanf("%d",&num);person=num;while(person>1)//当剩余人数大于1就继续报数{ //每一次报数if(flag[i]==0)//没有出局的人{k++;//报数if((k>3){flag[i]=1;//报到3的出局person--;//剩余人数减1k=1;//重新报数}}i++;//为了下一轮报数的时候先判断这个人还是不是0if(num+1==i){i=1;}//重新开始,从1号这人开始}//找出状态位为0的那个人for(i=1;i<num+1;i++){if(flag[i]==0){ printf("剩下的那个人是第%d号\n",i);break;}} return 0;
}
运行结果:
14、输入一个字符串,计算字符串中子串出现的次数。
提示:用strncmp进行比较,如果比较的结果是0,那就计数count++
参考代码:
#include <stdio.h>
#include <string.h>int get_sub_count(char str[],char sub[])
{int length_str=strlen(str);int length_sub=strlen(sub);int i;int count=0;for(i=0;i<length_str-length_sub+1;i++){ if(!strncmp(str+i,sub,length_sub)){count++;}} return count;
}int main()
{char str[32]={0};char sub[32]={0};printf("请输入 字符串 要计算的子串\n");scanf("%s %s",str, sub);int count=get_sub_count(str,sub);printf("子串的次数为%d\n",count);return 0;
}
运行结果:
15、编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,即将句子中的单词位置倒置,而不改变单词内部结构。
提示:先将整个句子倒转成”iahgnahs.....ma I.”,然后对单个单词进行倒转”shanghai....am I”。这道题使用gets()和scanf()来获取句子是不行的,我们要使用一个新的函数叫getchar()函数可以获取整个句子,空格也是字符,它遇到换行的时候结束。
第一步:获取键盘输入的几个单词,
参考代码:
#include <stdio.h>int main()
{char str[1024]={0};int i=0;char ch;printf("请输入几个单词\n");while(ch!='\n'){ ch=getchar();//从键盘中获取单个字符str[i]=ch;i++;} printf("%s\n",str);return 0;
}
运行结果:
第二步:转置每个单词里面的每一个字母,
参考代码:
#include <stdio.h>void reverse(char str[], int start,int end)
{int i;char tmp;//交换专用变量for(i=0;i<(start+end)/2;i++){int tmp=str[end-1-i];str[end-1-i]=str[start+i];str[start+i]=tmp;}
}int main()
{char str[1024]={0};int i=0;char ch;printf("请输入几个单词\n");while(ch!='\n'){ ch=getchar();//从键盘中获取单个字符str[i]=ch;i++;}reverse(str,0,i);//0是整个句子的开始位置,i是整个句子的结束位置printf("%s\n",str);return 0;
}
运行结果:
第三步:将每一个单词里面的字母单独装置
最终参考代码:
#include <stdio.h>void reverse(char str[], int start,int end)
{int i;char tmp;//交换专用变量for(i=0;i<(end-start)/2;i++){ int tmp=str[end-1-i];str[end-1-i]=str[start+i];str[start+i]=tmp;}
}int main()
{char str[1024]={0};int i=0;char ch;printf("请输入几个单词(单词)\n");while((ch=getchar())!='\n'){ str[i++]=ch;} reverse(str,0,i);//0是整个句子的开始位置,i是整个句子的结束位置i=0;int begin=0;while(str[i]!='\0')//翻转所有单词{if(str[i]==' ')//翻转一个单词{reverse(str,begin,i);begin=i+1;//下一个单词的开始}i++;//下一个字符}reverse(str,begin,i);//'\0'之前的一个单词printf("%s\n",str);return 0;
}
最终运行结果:
16、输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来。
提示:帧头和帧尾分别是head和tail,字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧。
可以先找到帧头和帧尾的位置,最后把帧头和帧尾的位置之间的字符拷贝到另一个数组中打印出来。
参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int get_index(char str[],char sub[])
{int length_str=strlen(str);int length_sub=strlen(sub);int i;for(i=0;i<length_str-length_sub+1;i++){if(strncmp(str+i,sub,length_sub)==0){return i;}} return -1;
}
int main()
{char str[32]={0};char head[32]={0};char tail[32]={0};printf("请输入 字符串 帧头 帧尾\n");scanf("%s %s %s",str, head, tail);int index_head=get_index(str,head);int index_tail=get_index(str,tail);if(-1==index_head||-1==index_tail){printf("输入有误\n");exit(1);//退出整个程序}char tmp[32]={0};int length_tail=strlen(tail);strncpy(tmp,str+index_head,index_tail-index_head+length_tail);printf("%s\n",tmp);return 0;
}
运行结果:
以上就是这篇内容,如想了解更多,欢迎订阅本专栏!
如有问题可评论区或者私信留言,如果想要进交流群请私信!
相关文章:

嵌入式全栈开发学习笔记---C语言笔试复习大全13(编程题9~16)
目录 9.查找字符数组中字符位置(输入hello e 输出2); 10、查找字符数组中字符串的位置(输入hello ll 输出3); 11、字符数组中在指定位置插入字符;(输入hello 3 a 输出heallo…...

https网站安全证书的作用与免费申请办法
HTTPS网站安全证书,也称为SSL证书,网站通过申请SSL证书将http协议升级到https协议 HTTPS网站安全证书的作用 1 增强用户信任:未使用https协议的网站,用户访问时浏览器会有“不安全”弹窗提示 2 提升SEO排名:搜索引擎…...

自动化测试再升级,大模型与软件测试相结合
近年来,软件行业一直在迅速发展,为了保证软件质量和提高效率,软件测试领域也在不断演进。如今,大模型技术的崛起为软件测试带来了前所未有的智能化浪潮。 软件测试一直是确保软件质量的关键环节,但传统的手动测试方法存…...

centos7 基础命令
一、基础信息: 查看IP地址: ip add 重启网络服务: service network restart 查看网卡配置: cat /etc/sysconfig/network-scripts/ifcfg-ens33 启动网卡: ifup ens33 查看内存: free -m 查看CPU: cat /proc/cpuin…...

【设计模式】之单例模式
系列文章目录 【设计模式】之责任链模式【设计模式】之策略模式【设计模式】之模板方法模式 文章目录 系列文章目录 前言 一、什么是单例模式 二、如何使用单例模式 1.单线程使用 2.多线程使用(一) 3.多线程使用(二) 4.多线程使用…...

3d模型实体显示有隐藏黑线?---模大狮模型网
在3D建模和设计领域,细节决定成败。然而,在处理3D模型时,可能会遇到模型实体上出现隐藏黑线的问题。这些黑线可能影响模型的视觉质量和呈现效果。因此,了解并解决这些隐藏黑线的问题至关重要。本文将探讨隐藏黑线出现的原因&#…...

共享购:全新消费模式的探索与实践
在消费模式日益创新的今天,共享购模式以其独特的消费与收益双重机制,吸引了众多消费者的目光。这一模式不仅为消费者带来了全新的购物体验,也为商家和平台带来了可观的收益。 一、会员体系:共享购的基石 在共享购模式下ÿ…...

Java集合 总结篇(全)
Java集合 集合底层框架总结 List 代表的有序,可重复的集合。 ArrayList -- 数组 -- 把他想象成C中的Vector就可以,当数组空间不够的时候,会自动扩容。 -- 线程不安全 LinkedList -- 双向链表 -- 可以将他理解成一个链表,不支持…...

Dubbo分层架构深度解析
引言 Dubbo作为一款备受欢迎的高性能、轻量级的Java RPC框架,在现代分布式系统中扮演着至关重要的角色。随着互联网行业的快速发展,服务间的通信变得越来越频繁,这也使得对于高效、可靠的远程通信方案的需求变得愈发迫切。在这样的背景下&am…...

LocalDate 数据库不兼容问题,因为LocalDate 是 long 类型的
我今天遇到一报错: SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession316f9272] was not registered for synchronization because synchronization is not active JDBC Connection [HikariProxyConnection2127597288 wrapping com.mysql.cj.jdbc…...

RVM(相关向量机)、CNN_RVM(卷积神经网络结合相关向量机)、RVM-Adaboost(相关向量机结合Adaboost)
当我们谈到RVM(Relevance Vector Machine,相关向量机)、CNN_RVM(卷积神经网络结合相关向量机)以及RVM-Adaboost(相关向量机结合AdaBoost算法)时,每种模型都有其独特的原理和结构。以…...

Java--方法的使用
1.1什么是方法 方法顾名思义就是解决问题的办法,在程序员写代码的时候,会遇到很多逻辑结构一样,解决相同问题时,每次都写一样的代码,这会使代码看起来比较绒余,代码量也比较多,为了解决这个问题…...

linux - 主次设备号自动申请
alloc_chrdev_region 原型如下,该函数向内核申请一个空闲的主设备号。 alloc_chrdev_region(&g_aputriger_dev, 0, APUTRIGER_MAX_NUM, "aputriger0"); 第四个参数是我们使用cat /proc/devices 看到的名称 /*** alloc_chrdev_region() - register a…...

我写了一套几乎无敌的参数校验组件!基于 SpEL 的参数校验组件「SpEL Validator」
前言 大家好,我是阿杆,不是阿轩。 参数校验这个东西,很多情况下都是比较简单的,用 NotNull、Size 等注解就可以解决绝大多数场景,但也有一些场景是这些基本注解解决不了的,只能用一些其他的方式处理&…...

输入序列太长 gan CGAN
transformer序列长度大导致计算复杂度高 GAN 2. 训练过程 第一阶段:固定「判别器D」,训练「生成器G」。使用一个性能不错的判别器,G不断生成“假数据”,然后给这个D去判断。开始时候,G还很弱,所以很容易被…...

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器
开端 想写个横向滚动的列表适配浏览器,主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下,原来编译到浏览…...

Java常用API之LinkedList类解读
写在开头:本文用于作者学习我将官方文档中LinkedList 1.6版本中类中绝大部分API全测了一遍并打印了结果,日拱一卒,常看常新。 自己补充了一些对该数据结构的理解,如有不对的地方,请各位指正,谢谢。 首先&…...

移动端自适应
基本实现核心思想 基本原则上是,布局更多地使用flex,然后尺寸使用rem,vw,vh为单位如果是根据不同的屏幕需要有不同的布局了,一般通过检测屏幕尺寸换不同的站点或者媒体查询使用css rem 以html字体太小为1rem的大小&…...

自动化运维工具-Ansible
一、Ansible概述 Ansible是一种基于python开发的自动化运维工具,它只需要在服务端安装ansible,无需在每个客户端安装客户端程序,通过ssh的方式来进行客户端服务器的管理,基于模块来实现批量数据配置、批量设备部署以及批量命令执…...

力扣:62. 不同路径
62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…...

store内路由跳转router.push
选择action还是mutation 选择action mutation 是用来改变state的,不应该包含路由相关操作mutation是同步执行的,不应该包含异步操作,而路由是异步操作 action中进行路由跳转 因为vuex中没有this,所以不能用this.$router&#…...

ChatGPT Web Midjourney一键集成最新版
准备工具 服务器一台 推荐使用浪浪云服务器 稳定 安全 有保障 chatgpt api 推荐好用白嫖的api 项目演示 项目部署 浏览器访问casaos 添加软件原添加 https://gitee.com/langlangy_1/CasaOS-AppStore-LangLangy/raw/master/chatmjd.zip 安装此软件 等待安装 安装后再桌面设置…...

springboot mongodb分片集群事务
前置 mongodb分片集群想要使用事务,需要对应分片没有仲裁节点 代码 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.1.0.RELEASE</version></d…...

node报错——解决Error: error:0308010C:digital envelope routines::unsupported——亲测可用
今天在打包vue2项目时,遇到一个报错: 最关键的代码如下: Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:80:19)百度后发现是node版本的问题。 在昨天我确实操作了一下node&…...

golang系统内置函数整理
go语言中有很多系统内置的函数, 为了方便学习,对系统内置函数的函数定义 入参和返回值做如下整理,以方便学习和记忆。 Go语言系统级别的内置函数不多,但是包含的知识点可不少,是学习go语言说必须要搞明白的基础知识 …...

武汉星起航:五对一服务体系,助力创业者成功进军跨境电商市场
随着全球化的深入发展和互联网的普及,跨境电商已成为越来越多国内创业者的首选。然而,跨境电商市场的复杂性和多变性使得许多新手创业者望而却步。在这样的背景下,武汉星起航电子商务有限公司以其独特的五对一服务体系,为创业者提…...

C++常用库函数——strcmp、strchr
1、strcmp:比较两个字符串的值是否相等 例如 char a1[6] "AbDeG",*s1 a1;char a2[6] "AbdEg",* s2 a2;s1 2;s2 2;printf("%d \n", strcmp(s1, s2));return(0); s1指向a1,s2指向a2,strcmp表示比较s1和s…...

vue3怎么使用vant的IndexBar 索引栏
Vant 是一个基于 Vue 的移动端 UI 组件库,它提供了许多常见的移动端组件,包括 IndexBar 索引栏。以下是如何在 Vue 3 中使用 Vant 的 IndexBar 索引栏的步骤: 安装 Vant 如果你还没有安装 Vant,你可以使用 npm 或 yarn 来安装它…...

VMware常见问题(技巧)总结
目录 问题虚拟机中windows11如何开启vt 虚拟化?虚拟机Windows 11 中的相机使用失败问题? 待续、更新中 问题 虚拟机中windows11如何开启vt 虚拟化? 编辑设置—打对钩 选对正确镜像( 可翻看以往文章,有提到) 虚拟机Windows 11 中的相机使用失败问题? 1 . 没安装合适的驱动 …...

VS Code 保存+格式化代码
在 VSCode 中,使用 Ctrl S 快捷键直接保存并格式化代码: 打开 VSCode 的设置界面:File -> Preferences -> Settings在设置界面搜索框中输入“format on save”,勾选“Editor: Format On Save”选项,表示在保存…...