C语言经典题目(三)
C站的小伙伴们,大家好呀!😊😊✨✨这一篇是C语言之经典题目篇,除程序设计,还有一些不错的程序分析,快来和我一起进入C语言的世界吧!✨✨✨
💕C语言其他·刷题篇在这里哦:
【C语言经典题目(一)】
【C语言经典题目(二)】
【C语言字符串刷题篇】
【C语言 语言篇数组和字符串】
C语言经典题目三
- 程序分析
- 一:输出指向字符的指针
- 二:for循环和switch语句体中break和continue
- 三 :双指针完成赋值
- 求数组相邻两个数之和
- 删除值为x的数组元素
程序分析
一:输出指向字符的指针
分析一下程序执行后的输出结果:___________
#include <stdio.h>
int main (void)
{char *string="I love China!"; //(1)printf("%s\n",string); //(2)string+=7; //(3)while(*string) //(4){putchar(string[0]);string++;} return 0; //(5)
}
对于指针类题目,画图可以更加直观地帮助我们分析理解。
(1)字符型指针string指向了字符串"I love China!"的第一个元素,即C。

(2)第二条语句,printf()函数中格式控制字符%s控制输出项是指向字符的指针,输出方式是从该指针指向的字符即'C'开始输出,直到遇到'\0'输出结束。故第二条语句输出结果为 I love China!
(3)指针向下移动7位,指向了元素’C’。

(4)进入循环体,当*string (即指针指向的元素的值)为非零值时,执行循环体中的语句。此语句依次输出’C’ ‘h’ ‘i’ ‘n’ ‘a’ ‘!’
故该程序所有的输出结结果为:

二:for循环和switch语句体中break和continue
分析程序执行后的输出结果______________
#include <stdio.h>
int main(void)
{char str[]="ssswlia",c; \\(1)int k; for (k=2;(c=str[k])!='\0';k++) \\(2){switch(c) {case 'i':++k;break;case 'l':continue;default:putchar(c);continue;}putchar('*'); \\(3)}printf("\n");return 0;
}
(1)定义字符数组,将字符串存入字符数组。
注意,字符串的长度(用strlen()函数计算)为7,而字符数组的长度为8(用sizeof()函数计算,得到字符数组的字节数,再除以char型元变量所占的字节数,即1,即可得到字符数组的长度。)

(2)指针进行for循环。
循环体是个switch语句,这里要搞清楚switch和break的用法。
break只用于循环体或者switch语句体中。当用于循环体中时,它的作用是退出循环。当用于switch语句体内时,作用只是跳出该switch语句体,注意此时并不能终止循环。
continue语句只用于循环体,它的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定。
分析
对于这个题目的分析,如下图。
- 指针指向’s’,进入for循环,for循环的第一条语句是switch语句,符合switch第三条语句,输出’s’,这是遇到continue语句(注意continue语句是对于for语句而言的),不执行在for循环体中该语句之后的语句,(即 putchar()语句),进行下一次的循环,k++,指针向下移动。
- 指针指向’w’,这个情况和刚刚的指针指向’s’的情况过程一样。
- 下一步,指针指向’l’,在这种情况下,执行continue语句,即要直接进行下一次的for循环,指针向下移动。
- 下一步,指针指向’i’,在这种情况下,执行switch语句体里的两条语句。指向向下移动,指向’a’,执行break语句,退出switch语句体,(注意此时并不会退出for循环),执行putchar()语句,输出’*’。指针移动,指向’\0’。结束for循环。
- 因此最终的输出结果为 sw*

三 :双指针完成赋值
#include <stdio.h>
int main(void)
{void fun(char *); //(1)char str[]="abcdefggedcba"; //(2)fun(str); //(3)puts(str);
}
void fun(char *p) //(4)
{int i,j;for (i=0;*(p+i)!='\0';i++)if (*(p+i)>='d'){*(p+j)=*(p+i);j++;}*(p+j)=0;
}
(1)在主函数中声明被调函数。
(2)将字符串存入字符数组。
(3)调用被调函数。

(4)
分析大概思路
主函数将str传递给指针p,即将字符数组第一个元素’a’的首地址传递给了指针p,p指向a。
在被调函数体,有两个指针。它们初始状态都是指向a。
p+i不断移动,当满足for循环体中的条件时,p+j移动。
具体执行过程
指针p+i不断移动,p+0,p+1,p+2,所指向的值都小于’e’,因此p+j不移动(j=0)
当p+i(i=3时),满足if条件,*p+j(j=0)赋值为d,并向下移动……

最后,将p+j所指向的元素的值赋值为0。

求数组相邻两个数之和
求数组a中相邻两个元素之和,并将这些和存在数组b中,按每行3个元素的形式输出。
#include <stdio.h>
int main (void)
{int a[10],b[10],i; //初始化数组afor (i=0;i<10;i++)scanf("%d",&a[i]);//将相邻两个数之和依次赋值给数组bfor (i=1;i<10;i++)b[i]=a[i]+a[i-1];//输出数组bfor (i=1;i<10;i++){printf("3d",b[i]);if (i%3==0) printf("\n");//控制格式}return 0;
}
删除值为x的数组元素
主要思路
对数组中的元素进行遍历,检验每一个元素是否等于目标元素x,若是相等,则删除?
怎样实现删除呢?就是自这个元素起,将其后面的每一个元素向前移动一位。
在这个过程我们使用指针实现,要注意指针越界行为。
#include <stdio.h>
int main(void)
{int a[10]={1,3,5,2,2,6,8,10,0,2};int x,*p,count=0,i;x=2;for (p=a;p<a+10-count;p++) //(1){if (*p=x) //(2){count++;for (i=p-a;i<10-count;i++) //(3)a[i]=a[i+1];p--; //(4) //注意这里的p--防止漏掉某个元素的检验}}for (p=a;p<a+10-count;p++)printf("5d",*p);printf("\n");return 0;
}
(1)指针p初识指向数组a的第一个元素,即指向1。
这里设置的循环条件是为了防止指针越界。
1,3,5都不等于目标元素2,所以指针的指向不变。

(2)当指针移动到下一个元素即2时,count++,这时会使得指针的下界向左移动。
(3)在里层的for循环中,将p指针所指的位置开始,把后面的元素的值赋值给前一个元素。这样就实现了删除。

(4)假设这里没有p–,那么执行完for循环循环体中的语句,会p++(for循环(1)中),注意这时可以已经删掉一个目标元素后的数组,那么移动后p所指向的元素检验了吗?还没有,就又移动到了下一个元素。所以没有 p–这条语句,会使得漏掉一些元素,最终没法达到目的。
相关文章:
C语言经典题目(三)
C站的小伙伴们,大家好呀!😊😊✨✨这一篇是C语言之经典题目篇,除程序设计,还有一些不错的程序分析,快来和我一起进入C语言的世界吧!✨✨✨ 💕C语言其他刷题篇在这里哦&…...
九、(补充文章四)Arcgis实现深度学习训练样本数据的批量制作——只靠原图+shp如何批量制作样本图片
之前写了一些个深度学习系列文 其中先是单张样本的制作方法 最后通过构造模型批量处理 大大提高了生成样本的速度 四、Arcgis实现深度学习河流训练样本数据的制作(使用软件批量获取样本图片)——对已经获取到的完整面状样本数据进行处理 但是这个方法不仅仅需要shp和原图 还需要…...
MKS SERVO4257D 闭环步进电机_系列8 CAN通讯示例
第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口,支持MODBUS-RTU通讯协议,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈&a…...
UnityVR--组件9--视频组件VideoPlayer
目录 前言 参数解释 RenderMode渲染方式 VideoPlayer类中的API 前言 在之前的VR场景中已经使用过VideoPlayer播放视频(Unity.UI的交互(6)-播放视频),不过在VR中设置是有些不同的,这里更详细地说明一下V…...
Java 深拷贝和浅拷贝
Java 中的深拷贝和浅拷贝是针对对象复制而言的。 浅拷贝(Shallow Copy) 当对象进行浅拷贝时,只会复制对象本身和其中的基本数据类型属性,而不会复制引用对象的实际内容。具体而言,浅拷贝只会创建一个新的对象&#x…...
[ruby on rails] docker
docker安装 ubuntu14.04后自带docker安装包,可以直接安装 sudo apt-get updatesudo apt-get install -y docker.io# 安装后启动sudo service docker start查看docker信息 docker infodocker命令 sudo service docker start sudo service docker stop sudo servic…...
网络协议——STP协议是什么?是如何实现的?
作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、STP协议是什么 二、为什么需要STP协议 三、STP的实现过程 编辑 1、选举跟桥 2、给非跟桥交换机选举跟端口 3、给每个网段选…...
【C++】智能指针 学习总结 |std::shared_ptr |std::unique_ptr | std::weak_ptr
文章目录 前言一、智能指针介绍二、普通指针和智能指针的比较案例三、std::shared_ptr四、std::unique_ptr五、std::weak_ptr六、std::shared_ptr |std::unique_ptr | std::weak_ptr三大智能指针的区别 前言 参考答案:chatgpt 一、智能指针介绍 智能指针是C的一种…...
iptables防火墙
文章目录 一.linux防火墙基础1.linux 包过滤防火墙概述1.1netfilter1.2 iptables 2.包过滤的工作层次2.1 通信的五元素和四元素 3.iptables 的表、链结构3.1 规则链3.2 默认包括5种规则链3.3 规则表3.4 默认包括4个规则表 二.数据包过滤的匹配流程1.规则表之间的顺序2.规则链之…...
properties、yaml作为配置文件的特点
说明:在软件开发中,经常需要把一些配置写在文件中,如数据库配置、MyBatis配置等。这样,后续如果数据库参数有改动,就可以避免直接对代码做修改,只要修改配置文件中关于数据库的配置。关于配置文件的选择&am…...
JavaSE-03 【流程控制语句】
文章目录 JavaSE-03 【流程控制语句】第一章 流程控制1.1 流程概述1.2 顺序结构 第二章 判断语句2.1 判断语句---if2.2 判断语句---if...else2.3 判断语句---if...else if ... else 第三章 选择语句3.1 选择语句--switch3.2 case的穿透性 第四章 循环语句4.1 循环概述4.2 循环语…...
笔记本电脑的BIOS是怎么保护安全的?
随着攻防技术的不断演进,像BIOS攻击、高级网络代码攻击等手段层出不穷,“受害者”也不仅限于企业级服务器、存储,很多魔爪也开始伸向了拥有商业机密数据的PC。 BIOS是Basic Input/Output System(基本输入/输出系统)的…...
Xubuntu之将rm删除内容移至回收站(一百七十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
STM32F407实现1588v2(ptpd)
硬件: STM32F407ZGT6开发板 软件: VSCode arm-none-eabi-gcc openOCD st-link 在github搜到一个在NUCLEO-F429ZI开发板上移植ptpd的example,因为和F407差别很小,所以就打算用这个demo移植到手头的开发板上。因为目前只需要…...
架构师如何找到自己的商业模式
作为一个架构师,必须要在有限的资源下最大化架构活动所带来的商业价值。对于任何一个架构活动而言,架构师的可用资源,包括商业成本、研发成本、时间成本、迁移成本等等,都是非常有限的。但架构活动就是要在这些限制条件之下&#…...
SQLServer2022安装(Windows),已验证
一、SQLServer2022下载 1、官网下载地址 SQL Server 下载 | Microsoft 2、下载安装包 2.1、选择Developer版本,立即下载。 2.2、打开下载文件夹,双击运行SQL2022-SSEI-Dev.exe 尝试运行SQL2022-SSEI-Dev.exe,会收到以下信息:“…...
facenet, dlib人脸识别,人体检测,云数据库mysql,QQ邮箱,手机验证码,语音播报
目录 部分代码展示: 录入部分 识别部分编辑 活体检测部分编辑 同步到云数据库MySQL 其他操作 部分图片展示: 完整代码加ui链接: 涉及到的一些知识点的文章 部分代码展示: 录入部分 识别部分 活体检测部分 同步到云数…...
Spring Boot 面试题——定时任务
目录 1.什么是 cron 表达式?如何使用?2.Scheduled 注解有什么作用?3.介绍一下 spring-boot-starter-quartz。4.在 Spring Boot 中如何实现定时任务?4.1.使用 Schedule 注解4.2.Quartz 框架 1.什么是 cron 表达式?如何使…...
总建面64万平,配3所幼儿园+54班九年制学校,坪山江岭竹元规划
近日,坪山区城市更新和土地整备局发布,关于《坪山区马峦街道江岭竹元片区城市更新单元规划》已通过深圳市城市规划委员会法定图则委员会审批。现予以公告。 项目位于坪山区马峦街道,南邻南坪快速路,北邻比亚迪路,东西两…...
python3 爬虫相关学习7:使用 BeautifulSoup下载网页图片到本地文件夹
目录 1 一个爬图片pic的代码的例子 1.1 学习的原文章 1.2 原始代码的问题总结 问题1 问题2 问题3 其他问题 1.3 原始代码 2 直接在cmd里 python运行报错 和 处理 2.1 运行报错 2.2 报错原因: 没有提前安装这个bs4 模块 2.3 如何提前知道我的python环境…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
