蓝桥杯之c++入门(一)【C++入门】
目录
- 前言
- 5. 算术操作符
- 5.1 算术操作符
- 5.2 浮点数的除法
- 5.3 负数取模
- 5.4 数值溢出
- 5.5 练习
- 练习1:计算 ( a + b ) ⋆ c (a+b)^{\star}c (a+b)⋆c
- 练习2:带余除法
- 练习3:整数个位
- 练习4:整数十位
- 练习5:时间转换
- 练习6:小鱼的游泳时间
- 6. 赋值操作符
- 6.1 连续赋值
- 6.2 复合赋值符
- 6.3 练习
- 练习1:账户余额
- 练习2:交换值
- 7. 类型转换
- 7.1 混合运算时的类型转换
- 7.2 赋值时类型转换
- 7.3 强制类型转换
- 7.4 练习
- 练习1:计算成绩
- 练习2:浮点数向零舍入
- 练习3:打印字符ASCII
- 练习4:打印字符 (前面做过)
- 8. 单目操作符
- 总结
前言
这期紧接着前面的,因为之前系统的学过c++,所以蓝桥杯中的c我们就过一遍即可;系统的C++请看C++专栏
5. 算术操作符
5.1 算术操作符
在写代码时候,一定会涉及到计算。为了方便运算,提供了一系列操作符,其中有一组操作符叫:算术操作符。分别是: + − ⋆ / % +-\star/\% +−⋆/% ,这些操作符都是双目操作符。
注:操作符也被叫做:运算符,是不同的翻译,意思是一样的。
#include <iostream>
using namespace std;
int main()
{int a = 7 + 2; //加法运算int b = 7 - 2; //减法运算int c = 7 * 2; //乘法运算int d = 7 / 2; //除法运算,得到的是整除后的商int e = 7 % 2; //取余运算,得到的是整除后的余数cout << a << endl;cout << b << endl;cout << c << endl;cout << d << endl;cout << e << endl;return 0;
}
易错点:
/ 除法的操作符,除数不能为0,如果除数为0,程序会崩溃的。
% 取模操作符的计算结果是两个操作数进行除法运算后的余数。
取模操作符的操作数只能是整型,不能是浮点型,这个编译器会报语法错误的。
#include <iostream>
using namespace std;
int main()
{int a = 1;int b = 0;int c = a / b; //报错 cout << c << end;float d = 6.0;float e = d % 3; // 报错 return 0;
}
如果我们在visual studio中运行会发现有这样的报错:
5.2 浮点数的除法
int main()
{float x = 6 / 4;cout << x << endl; // 1float y = 6.0 / 4; // 6/4.0结果是?样的cout << y << endl; // 1.5return 0;
}
上面示例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,而不是1.5 。原因就在于 整数除法是整除,只会返回整数部分,丢弃小数部分。
如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时就会进行浮点数除法。
5.3 负数取模
- 负数也是支持取模的,但是负数求模结果的正负号由第一个运算数(操作数)的正负号决定。
#include <iostream>
using namespace std;
int main()
{cout << 11 % -5 << endl; // 1cout << -11 % -5 << endl; // -1cout << -11 % 5 << endl; // -1return 0;
}
5.4 数值溢出
前面我们了解到数据类型都有对应的数值范围,而在实际运算过程中可能会存在加法操作导致数据范围超过当前数据类型规定的范围,如下:
//数值溢出
int main()
{char a = 'Z';//90char b = a + 'Z';//90+90cout << b << endl; // 输出了不显?的内容//printf是格式化输出,后面章节会讲,这章暂不做讲解printf("%d", b); // -76,char的十进制进制内容return 0;
}
以 char 类型为例, char 的数值范围在 -128 ~ 127 ,当字符相加超过最大值后,打印出来的结果会变成负数,这与数据的存储有关;
char类型变量的取值范围 :
小提示:
char类型变量的取值范围的规律也可以推演到其他类型 ;
意识到数据类型的取值是有其范围的,那么我们在编程的时候就要选择合适的数据类型,才能得到正确的结果。正所谓:十年 IO 一场空,不开 long long 见祖宗。
5.5 练习
练习1:计算 ( a + b ) ⋆ c (a+b)^{\star}c (a+b)⋆c
#include <iostream>
using namespace std;
int main()
{int a,b,c;cin >> a >> b >> c;cout << (a + b)*c << endl;return 0;
}
小提示:
这个题目一定能注意,数据范围, − 1 0 4 < a , b , c < 1 0 4 -10^{4}<a,b,c<10^{4} −104<a,b,c<104 , ( a + b ) ⋆ c (a+b)^{\star}c (a+b)⋆c 的结果也不会超过有符号整型的最大值,而如果取值范围变成 − 1 0 5 < a , b , c < 1 0 5 -10^{5}<a,b,c<10^{5} −105<a,b,c<105 ,就需要使用 long long 类型了。
练习2:带余除法
#include <iostream>
using namespace std;
int a, b;int main()
{cin >> a >> b;cout << a / b << " " << a % b << endl;
}
练习3:整数个位
#include <iostream>
using namespace std;
int a;
int main()
{cin >> a;cout << a % 10 << endl;return 0;
}
练习4:整数十位
#include <iostream>
using namespace std;
int a;
int main()
{cin >> a;cout << a % 100 / 10 << endl;return 0;
}
练习5:时间转换
#include <iostream>
using namespace std;
int t;int main()
{cin >> t;cout << t / 60 / 60 << " " << t / 60 % 60 << " " << t % 60 << endl; return 0;
}
解释:
- time除以60(1分钟有60秒)先换算出分钟数,分钟数除以60(1小时有60分钟)交换算成小时。
- time除以60(1分钟有60秒)先换算出分钟数,分钟数对60取模,就是换完小时后剩余的分钟数
- time对60取模,每60秒凑1分钟,还剩多少多少秒,没办法凑够一分钟。
练习6:小鱼的游泳时间
#include <iostream>
using namespace std;
int main()
{int a,b,c,d;cin >> a >> b >> c >> d;int h = (c*60 + d) - (a*60 + b);cout << h / 60 << " " << h % 60 << endl;return 0;
}
6. 赋值操作符
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。
int a = 100; //初始化
a = 200;
赋值操作符 = = = 是一个随时可以给变量赋值的操作符,赋值运算符是把右边的值赋值给左边的,这个和数学中的书写习惯是不同的。
6.1 连续赋值
赋值操作符也可以连续赋值,如:
int a = 3;
int b = 5;
int c = 0;
c = b = a + 3; //连续赋值,从右向左依次赋值的。
虽然支持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节。
int a = 3;
int b = 5;
int c = 0;
b = a + 3;
c = b;
这样写,在调试的时候,每一次赋值的细节都是可以很方便的观察的。
6.2 复合赋值符
在写代码时,我们经常可能对一个数进行自增、自减的操作,如下代码:
int a = 10;
a = a + 3;
a = a - 2;
这样代码 C + + \mathsf{C}\mathsf{+}\mathsf{+} C++ 给提供了更加方便的写法:
int a = 10;
a += 3;
a -= 2;
C + + \mathsf{C}\substack{++} C++ 中提供了复合赋值符,方便我们编写代码,这些赋值符有:
复合赋值符 | 样例 | 一般写法 |
+= | a +=10 | a=a +10 |
二 | a-=10 | a=a-10 |
★ | a*=10 | a=a*10 |
/= | a /=10 | a=a/10 |
%= | a %= 10 | a = a % 10 |
vV= | a >>= 1 | 详见《第7章操作符》 |
a<<=1 | ||
&= | a&=10 | |
= | a|=10 | |
^= | a^=10 |
6.3 练习
练习1:账户余额
小明账户有100元,经过了下面的操作:
往里面存了10元购物花掉了20元把里面的钱全部取出
请在每次操作后输出账户余额:
#include <iostream>
using namespace std;
int main()
{ int balance = 100;balance += 10;cout << balance << endl;balance -= 20;cout << balance << endl;balance = 0;cout << balance << endl;return 0;
}
小提示:
使用复合赋值操作符能够让代码更简洁,但需要注意,不要一味地追求代码简洁,过于简洁的代码在可读性上会差一些。
练习2:交换值
#include <iostream>
using namespace std;
int main()
{int a = 0;int b = 0;cin >> a >> b;int c = a; //c是⼀个临时变量,作为中间变量实现交换的a = b;b = c;cout << a << " " << b << endl;return 0;
}
7. 类型转换
在使用 C / C + + \mathsf{C}/\mathsf{C}++ C/C++ 写代码的过程中,不同类型的数据进行混合计算的时候,或者赋值时等号两边的类型不统一的时候,都会发生类型转换,这时就需要根据类型的转换规则转换成合适的类型。
7.1 混合运算时的类型转换
字符、整数、浮点数可以混合运算,在这种情况下首先要将不一致的数据类型进行转换,类型统一后才能进行计算。
这里边一般涉及两类转换:整型提升和算术转换。
整型提升:表达式之中的 char 和 short 类型一定会先转换成 int 类型,然后参与运算。
算术转换:表达式中出现下面的任意两种类型的值进行计算的时候,要先要将较下面的类型转换成另外一种类型才能计算。
long double
double
float
unsigned long int
long int
unsigned int
int
这些转换都是隐式自动发生的,有些编译器会报警告,写程序的人并没有感知到,也不需要操心细节。
#include <iostream>
using namespace std;
int main()
{//案例1char a = 'a';int b = 10;char c = a + b; //这⾥a会发⽣整型提升,a+b的结果存放到c中,⼜发⽣截断//案例2int c = 10;double d = 3.14;double e = c + d; //c+d的时候,这⾥c会发⽣算数转换,转换为double类型return 0;
}
7.2 赋值时类型转换
当赋值操作符两端的数据类型不一致的时候,这时就需要类型转换,这种转换也是隐式自动发生的。转换规则如下:
- float 和 double 赋值给 int ,直接截断小数部分,保留整数部分。
int a = 3.14;//这⾥a得到的是3
- 较小的类型转换较大类型,直接转换,值不变。
- 较大的类型转换较小的类型,一般会发生截断,按照较小类型的长度,保留低位数据给较小的类型。
这些转换都是隐式自动发生的,有些编译器会报警告,写程序的人并没有感知到,也不需要操心细节。
7.3 强制类型转换
在 C / C + + \mathsf{C}/\mathsf{C}++ C/C++ 中也会有强制类型转换,根据实际的需要将某一数据的数据类型转换为指定的数据类型,强制类型转换是临时转换的,不影响变量本身的类型。语法形式如下:
(类型名)表达式
例如:
double d = 3.14;
int a = (int)d;
上面的代码是将 double 类型的 3.14 转换成 int 类型的值,赋值给 a 。
7.4 练习
练习1:计算成绩
#include <iostream>
using namespace std;
int a,b,c;
int ret;
int main()
{cin >> a >> b >> c;ret = (int)(a * 0.2 + b * 0.3 + c * 0.5);//这⾥进⾏了强制类型转换,如果不转换,也会⾃动转换的cout << ret << endl;return 0;
}
练习2:浮点数向零舍入
#include <iostream>
using namespace std;
double x;
int main()
{cin >> x;cout << (long long)x << endl;//题⽬给的数据较⼤,强制转换为int,存在漏洞 return 0;
}
小提示:
这里也要注意, − 1 0 ∧ 15 ≤ x ≤ 1 0 ∧ 15 -10^{\wedge}15\leq x\leq10^{\wedge}15 −10∧15≤x≤10∧15 ,这个取值范围明显超过int的取值范围。
练习3:打印字符ASCII
#include <iostream>
using namespace std;
int main()
{char c = 0;cin >> c;cout << (int)c <<endl; //如果没有强制类型转换,编译器会认为c是字符类型,打印的依然是字符return 0;
}
练习4:打印字符 (前面做过)
#include <iostream>
using namespace std;
int main()
{int n = 0;cin >> n;cout << (char)n <<endl; //利⽤强制类型转换,将ASCII码值按照字符类型打印return 0;
}
8. 单目操作符
前面介绍的操作符都是双目操作符,即有2个操作数。除此之外还有一些操作符只有一个操作数,被称为单目操作符。如 + + ^{++} ++ 、–、 + ^+ + (正)、-(负) 就是单目操作符。
8.1 + + 8.1++ 8.1++ 和–
+ + ^{++} ++ 是一种自增的操作符,又分为前置 + + ^{++} ++ 和后置 + + ^{++} ++ , – 是一种自减的操作符,也分为前置 --和后置 –
请一定要注意:
前置 + + ^{++} ++ 或者 后置 + + ^{++} ++ ,都是让操作数自增1的前置 – 或者 后置 – ,都是让操作数自减1的
8.1.1 前置 + + ^{++} ++ 和 后置 + + ^{++} ++
1 //案例1
//案例1
int x = 10;
int a = ++x; //++的操作数是x,是放在x的前⾯的,就是前置++
cout << x << " " << a << endl;
//案例2
int x = 10;
int a = x++; //++的操作数是x,是放在x的后⾯的,就是后置++
cout << x << " " << a << endl;
小技巧:
前置 + + ^{++} ++ : 先 + 1 +1 +1 ,后使用
后置 + + ^{++} ++ :先使用,后 +1
8.1.2 前置-- 和 后置–
//案例1
int y = 10;
int b = --y; //--的操作数是y,是放在y的前⾯的,就是前置--
cout << y << " " << b << endl;
//案例2
int y = 10;
int b = y--; //--的操作数是y,是放在y的后⾯的,就是后置--
cout << y << " " << b << endl;
小技巧:
前置 --: 先 - 1,后使用
后置 --:先使用,后 - 1
8.2 + 8.2+ 8.2+ 和 -
这里的 + ^+ + 是正号, - 是负号,都是单目操作符。
运算符 + ^+ + 对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。
int a = +10; //等价于 int a = 10;
运算符 - 用来改变一个值的正负号,负数的前面加上 - 就会得到正数,正数的前面加上 - 会得到负数。
int a = 10;
int b = -a;
int c = -10;
cout << b << c << endl; //这⾥的b和c都是-10
int a = -10;
int b = -a;
cout << b << endl; //这⾥的b是10
完
总结
相关文章:

蓝桥杯之c++入门(一)【C++入门】
目录 前言5. 算术操作符5.1 算术操作符5.2 浮点数的除法5.3 负数取模5.4 数值溢出5.5 练习练习1:计算 ( a b ) ⋆ c (ab)^{\star}c (ab)⋆c练习2:带余除法练习3:整数个位练习4:整数十位练习5:时间转换练习6ÿ…...

使用Python爬虫获取1688商品拍立淘API接口(item_search_img)的实战指南
在电商领域,通过图片搜索商品(拍立淘)已经成为一种重要的商品检索方式。1688平台的item_search_img接口允许用户通过上传图片来搜索相似商品,这为商品信息采集和市场分析提供了极大的便利。本文将详细介绍如何使用Python爬虫技术调…...

ElasticSearch-文档元数据乐观并发控制
文章目录 什么是文档?文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES,最近在检索资料的时候翻阅到了 ES 的官方文档,里面对 ES 的基础与案例进行了通俗易懂的解释,读下来也有不少收获࿰…...

使用Navicat Premium管理数据库时,如何关闭事务默认自动提交功能?
使用Navicat Premium管理数据库时,最糟心的事情莫过于事务默认自动提交,也就是你写完语句运行时,它自动执行commit提交至数据库,此时你就无法进行回滚操作。 建议您尝试取消勾选“选项”中的“自动开始事务”,点击“工…...

【单细胞-第三节 多样本数据分析】
文件在单细胞\5_GC_py\1_single_cell\1.GSE183904.Rmd GSE183904 数据原文 1.获取临床信息 筛选样本可以参考临床信息 rm(list ls()) library(tinyarray) a geo_download("GSE183904")$pd head(a) table(a$Characteristics_ch1) #统计各样本有多少2.批量读取 学…...

(java) IO流
学习IO流之前,我们需要先认识file对象,帮助我们更好的使用IO流 1.1 file 作用:关联硬盘上的文件 写法: File(String path); (推荐)File(String parent, String child); //由父级路径,再子级路径拼接而成File(File p…...

2025年1月个人工作生活总结
本文为 2025年1月工作生活总结。 研发编码 使用sqlite3命令行查询表数据 可以直接使用sqlite3查询数据表,不需进入命令行模式。示例如下: sqlite3 database_name.db "SELECT * FROM table_name;"linux shell使用read超时一例 先前有个编译…...

线性调整器——耗能型调整器
线性调整器又称线性电压调节器,以下是关于它的介绍: 基本工作原理 线性调整器的基本电路如图1.1(a)所示,晶体管Q1(工作于线性状态,或非开关状态)构成一个连接直流源V和输出端V。的可调电气电阻,直流源V由60Hz隔离变压器(电气隔离和整流&#…...

【2025美赛D题】为更美好的城市绘制路线图建模|建模过程+完整代码论文全解全析
你是否在寻找数学建模比赛的突破点?数学建模进阶思路! 作为经验丰富的美赛O奖、国赛国一的数学建模团队,我们将为你带来本次数学建模竞赛的全面解析。这个解决方案包不仅包括完整的代码实现,还有详尽的建模过程和解析,…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.28 存储之道:跨平台数据持久化方案
好的,我将按照您的要求生成一篇高质量的Python NumPy文章。以下是第28篇《存储之道:跨平台数据持久化方案》的完整内容,包括目录、正文和参考文献。 1.28 存储之道:跨平台数据持久化方案 目录 #mermaid-svg-n1z37AP8obEgptkD {f…...

拼车(1094)
1094. 拼车 - 力扣(LeetCode) 解法: class Solution { public:bool carPooling(vector<vector<int>>& trips, int capacity) {uint32_t passenger_cnt 0;//将原数据按照from排序auto func_0 [](vector<int> & …...

基于Python的人工智能患者风险评估预测模型构建与应用研究(下)
3.3 模型选择与训练 3.3.1 常见预测模型介绍 在构建患者风险评估模型时,选择合适的预测模型至关重要。不同的模型具有各自的优缺点和适用场景,需要根据医疗数据的特点、风险评估的目标以及计算资源等因素进行综合考虑。以下详细介绍几种常见的预测模型。 逻辑回归(Logisti…...

< OS 有关 > Android 手机 SSH 客户端 app: connectBot
connectBot 开源且功能齐全的SSH客户端,界面简洁,支持证书密钥。 下载量超 500万 方便在 Android 手机上,连接 SSH 服务器,去运行命令。 Fail2ban 12小时内抓获的 IP ~ ~ ~ ~ rootjpn:~# sudo fail2ban-client status sshd Status for the jail: sshd …...

向量和矩阵算法笔记
向量和矩阵算法笔记 Ps:因为本人实力有限,有一部分可能不太详细,若有补充评论区回复,QWQ 向量 向量的定义 首先,因为我刚刚学到高中的向量,对向量的看法呢就是一条有长度和方向的线,不过这在数学上的定义其实是不对,甚至跟我看的差别其实有点大,真正的定义就是数域…...

uniapp使用uni.navigateBack返回页面时携带参数到上个页面
我们平时开发中也经常遇到这种场景,跳转一个页面会进行一些操作,操作完成后再返回上个页面同时要携带着一些参数 其实也很简单,也来记录一下吧 假设从A页面 跳转到 B页面 A页面 直接上完整代码了哈,很简单: <t…...

Python 梯度下降法(二):RMSProp Optimize
文章目录 Python 梯度下降法(二):RMSProp Optimize一、数学原理1.1 介绍1.2 公式 二、代码实现2.1 函数代码2.2 总代码 三、代码优化3.1 存在问题3.2 收敛判断3.3 函数代码3.4 总代码 四、优缺点4.1 优点4.2 缺点 Python 梯度下降法ÿ…...

Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年
Android Studio 1.0 宣发于 2014 年 12 月,而现在时间来到 2025 ,不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年,也代表着了我的职业生涯也超十年,现在回想起来依然觉得「唏嘘」ÿ…...

sem_wait的概念和使用案列
sem_wait 是 POSIX 标准中定义的一个用于同步的函数,它通常用于操作信号量(semaphore)。信号量是一个整数变量,可以用来控制对共享资源的访问。在多线程编程中,sem_wait 常用于实现线程间的同步。 概念 sem_wait 的基…...

集合的奇妙世界:Python集合的经典、避坑与实战
集合的奇妙世界:Python集合的经典、避坑与实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进&#x…...

专业视角深度解析:DeepSeek的核心优势何在?
杭州深度求索(DeepSeek)人工智能基础技术研究有限公司,是一家成立于2023年7月的中国人工智能初创企业,总部位于浙江省杭州市。该公司由量化对冲基金幻方量化(High-Flyer)的联合创始人梁文锋创立,…...

MySQL 索引存储结构
索引是优化数据库查询最重要的方式之一,它是在 MySQL 的存储引擎层中实现的,所以 每一种存储引擎对应的索引不一定相同。我们可以通过下面这张表格,看看不同的存储引擎 分别支持哪种索引类型: BTree 索引和 Hash 索引是我们比较…...

【ComfyUI专栏】如何使用Git命令行安装非Manager收录节点
当前的ComfyUI的收录的自定义节点很多,但是有些节点属于新出来,或者他的应用没有那么广泛,Manager管理节点 有可能没有收录到,这时候 如果我们需要安装需要怎么办呢?这就涉及到我们自己安装这些节点了。例如下面的内容…...

python算法和数据结构刷题[1]:数组、矩阵、字符串
一画图二伪代码三写代码 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中)-CSDN博客 算法通关手册(LeetCode) | 算法通关手册(LeetCode) (itcharge.cn) 面试经典 150 题 - 学习计…...

数据分析系列--④RapidMiner进行关联分析(案例)
一、核心概念 1.项集(Itemset) 2.规则(Rule) 3.支持度(Support) 3.1 支持度的定义 3.2 支持度的意义 3.3 支持度的应用 3.4 支持度的示例 3.5 支持度的调整 3.6 支持度与其他指标的关系 4.置信度࿰…...

1/30每日一题
从输入 URL 到页面展示到底发生了什么? 1. 输入 URL 与浏览器解析 当你在浏览器地址栏输入 URL 并按下回车,浏览器首先会解析这个 URL(统一资源定位符),比如 https://www.example.com。浏览器会解析这个 URL 中的不同…...

vim的多文件操作
[rootxxx ~]# vim aa.txt bb.txt cc.txt #多文件操作 next #下一个文件 prev #上一个文件 first #第一个文件 last #最后一个文件 快捷键: ctrlshift^ #当前和上个之间切换 说明:快捷键ctrlshift^,…...

设计转换Apache Hive的HQL语句为Snowflake SQL语句的Python程序方法
首先,根据以下各类HQL语句的基本实例和官方文档记录的这些命令语句各种参数设置,得到各种HQL语句的完整实例,然后在Snowflake的官方文档找到它们对应的Snowflake SQL语句,建立起对应的关系表。在这个过程中要注意HQL语句和Snowfla…...

CAPL与外部接口
CAPL与外部接口 目录 CAPL与外部接口1. 引言2. CAPL与C/C++交互2.1 CAPL与C/C++交互简介2.2 CAPL与C/C++交互实现3. CAPL与Python交互3.1 CAPL与Python交互简介3.2 CAPL与Python交互实现4. CAPL与MATLAB交互4.1 CAPL与MATLAB交互简介4.2 CAPL与MATLAB交互实现5. 案例说明5.1 案…...

无公网IP 外网访问 本地部署夫人 hello-algo
hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…...

实验四 XML
实验四 XML 目的: 1、安装和使用XML的开发环境 2、认识XML的不同类型 3、掌握XML文档的基本语法 4、了解DTD的作用 5、掌握DTD的语法 6、掌握Schema的语法 实验过程: 1、安装XML的编辑器,可以选择以下之一 a)XMLSpy b)VScode,Vs…...