当前位置: 首页 > news >正文

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站的小伙伴们&#xff0c;大家好呀&#xff01;&#x1f60a;&#x1f60a;✨✨这一篇是C语言之经典题目篇&#xff0c;除程序设计&#xff0c;还有一些不错的程序分析&#xff0c;快来和我一起进入C语言的世界吧&#xff01;✨✨✨ &#x1f495;C语言其他刷题篇在这里哦&…...

九、(补充文章四)Arcgis实现深度学习训练样本数据的批量制作——只靠原图+shp如何批量制作样本图片

之前写了一些个深度学习系列文 其中先是单张样本的制作方法 最后通过构造模型批量处理 大大提高了生成样本的速度 四、Arcgis实现深度学习河流训练样本数据的制作(使用软件批量获取样本图片)——对已经获取到的完整面状样本数据进行处理 但是这个方法不仅仅需要shp和原图 还需要…...

MKS SERVO4257D 闭环步进电机_系列8 CAN通讯示例

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口&#xff0c;支持MODBUS-RTU通讯协议&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&a…...

UnityVR--组件9--视频组件VideoPlayer

目录 前言 参数解释 RenderMode渲染方式 VideoPlayer类中的API 前言 在之前的VR场景中已经使用过VideoPlayer播放视频&#xff08;Unity.UI的交互&#xff08;6&#xff09;-播放视频&#xff09;&#xff0c;不过在VR中设置是有些不同的&#xff0c;这里更详细地说明一下V…...

Java 深拷贝和浅拷贝

Java 中的深拷贝和浅拷贝是针对对象复制而言的。 浅拷贝&#xff08;Shallow Copy&#xff09; 当对象进行浅拷贝时&#xff0c;只会复制对象本身和其中的基本数据类型属性&#xff0c;而不会复制引用对象的实际内容。具体而言&#xff0c;浅拷贝只会创建一个新的对象&#x…...

[ruby on rails] docker

docker安装 ubuntu14.04后自带docker安装包&#xff0c;可以直接安装 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协议是什么?是如何实现的?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、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三大智能指针的区别 前言 参考答案&#xff1a;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作为配置文件的特点

说明&#xff1a;在软件开发中&#xff0c;经常需要把一些配置写在文件中&#xff0c;如数据库配置、MyBatis配置等。这样&#xff0c;后续如果数据库参数有改动&#xff0c;就可以避免直接对代码做修改&#xff0c;只要修改配置文件中关于数据库的配置。关于配置文件的选择&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是怎么保护安全的?

随着攻防技术的不断演进&#xff0c;像BIOS攻击、高级网络代码攻击等手段层出不穷&#xff0c;“受害者”也不仅限于企业级服务器、存储&#xff0c;很多魔爪也开始伸向了拥有商业机密数据的PC。 BIOS是Basic Input/Output System&#xff08;基本输入/输出系统&#xff09;的…...

Xubuntu之将rm删除内容移至回收站(一百七十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

STM32F407实现1588v2(ptpd)

硬件&#xff1a; STM32F407ZGT6开发板 软件&#xff1a; VSCode arm-none-eabi-gcc openOCD st-link 在github搜到一个在NUCLEO-F429ZI开发板上移植ptpd的example&#xff0c;因为和F407差别很小&#xff0c;所以就打算用这个demo移植到手头的开发板上。因为目前只需要…...

架构师如何找到自己的商业模式

作为一个架构师&#xff0c;必须要在有限的资源下最大化架构活动所带来的商业价值。对于任何一个架构活动而言&#xff0c;架构师的可用资源&#xff0c;包括商业成本、研发成本、时间成本、迁移成本等等&#xff0c;都是非常有限的。但架构活动就是要在这些限制条件之下&#…...

SQLServer2022安装(Windows),已验证

一、SQLServer2022下载 1、官网下载地址 SQL Server 下载 | Microsoft 2、下载安装包 2.1、选择Developer版本&#xff0c;立即下载。 2.2、打开下载文件夹&#xff0c;双击运行SQL2022-SSEI-Dev.exe 尝试运行SQL2022-SSEI-Dev.exe&#xff0c;会收到以下信息&#xff1a;“…...

facenet, dlib人脸识别,人体检测,云数据库mysql,QQ邮箱,手机验证码,语音播报

目录 部分代码展示&#xff1a; 录入部分 识别部分​编辑 活体检测部分​编辑 同步到云数据库MySQL 其他操作 部分图片展示&#xff1a; 完整代码加ui链接&#xff1a; 涉及到的一些知识点的文章 部分代码展示&#xff1a; 录入部分 识别部分 活体检测部分 同步到云数…...

Spring Boot 面试题——定时任务

目录 1.什么是 cron 表达式&#xff1f;如何使用&#xff1f;2.Scheduled 注解有什么作用&#xff1f;3.介绍一下 spring-boot-starter-quartz。4.在 Spring Boot 中如何实现定时任务&#xff1f;4.1.使用 Schedule 注解4.2.Quartz 框架 1.什么是 cron 表达式&#xff1f;如何使…...

总建面64万平,配3所幼儿园+54班九年制学校,坪山江岭竹元规划

近日&#xff0c;坪山区城市更新和土地整备局发布&#xff0c;关于《坪山区马峦街道江岭竹元片区城市更新单元规划》已通过深圳市城市规划委员会法定图则委员会审批。现予以公告。 项目位于坪山区马峦街道&#xff0c;南邻南坪快速路&#xff0c;北邻比亚迪路&#xff0c;东西两…...

python3 爬虫相关学习7:使用 BeautifulSoup下载网页图片到本地文件夹

目录 1 一个爬图片pic的代码的例子 1.1 学习的原文章 1.2 原始代码的问题总结 问题1 问题2 问题3 其他问题 1.3 原始代码 2 直接在cmd里 python运行报错 和 处理 2.1 运行报错 2.2 报错原因&#xff1a; 没有提前安装这个bs4 模块 2.3 如何提前知道我的python环境…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...