200
任务描述
本关任务:化简有理数。
相关知识
有理数的精确表示一般采用分数形式。分数的分子和分母都是整数,如果有理数为负数,则分子为负数,分母始终为正数。有理数的化简其实就是使分数成为最简分数,即通过化简使分子和分母互质。当分子为0时,分母应为1。
我们可以用两个整型变量来表示一个分数,但由于没有表示两个变量之间的逻辑关系,程序的可读性会很差。更好的方法是使用 C 和 C++ 的结构来表示。
结构
结构定义的一般形式为:
struct <结构名>{
<成员列表>
};
struct 是关键字,表示结构定义;
<结构名>
是一个标识符,是结构的名字;
<成员列表>
由若干个成员的声明组成,每个成员都是该结构的一个组成部分。
例如,分数包含两个成员:分子和分母,可以定义为一个结构。分数结构名可以取名为 rationalNumber ,两个成员都是整型变量,可以分别取名为 fenzi 和 fenmu,则分数结构可以定义为:
struct rationalNumber{
int fenzi; // 分子
int fenmu; // 分母
};
结构的定义是定义一个新的数据类型(新类型名就是结构名),这样不会有内存分配。之后就可以像使用预定义类型(如 int )那样来使用结构类型。
例如:
rationalNumber x,y;
该语句声明了两个 rationalNumber 类型的变量 x 和 y,每个变量中都包含了两个成员:整型的 fenzi 和 fenmu。变量的声明会有内存分配,可以使用 x 和 y 的两个整型变量成员来存储数据,这样就可以把同一个分数的分子和分母存入 rationalNumber 类型的相应变量中,该变量就可以表示一个分数了。
结构的定义是可以嵌套使用的。例如 person 结构中包含生日成员,而生日中又包含年、月、日三个成员,代码如下:
// 定义结构date
struct date
{
int year, month, day;
};
// 定义结构person
struct person
{
int IDNumber; // 身份证号
char name[20]; // 姓名
char sex; // 性别
date birthday; // 生日,嵌套定义
};
结构的初始化及使用
结构变量的初始化和数组变量的初始化一样,采用花括号括起来的初始值列表的形式。
例如:
rationalNumber x={12,46};
该语句中,其初始化值按序赋值给各个成员,即12和46分别赋值给了 x 的 fenzi 和 fenmu 成员。
结构变量的使用有两种方式:一种是把结构变量当做一个整体使用;另一种是拆开了用,单独操作其中的某个成员:
例如:
rationalNumber x = {12,46}, y ;
y = x ; // 结构变量中的每个成员分别赋值
rationalNumber *p = &x; // 声明结构指针,并初始化为 x 的地址
其中:拆开结构的方式有两种,一种是使用结构名 + 圆点运算符(.
);另一种是使用指向结构变量的指针 + 箭头运算符(->
)。
例如:
rationalNumber x= {12,46}, y ;
y = x ; // 结构变量中的每个成员分别赋值
rationalNumber *p = &x; // 声明结构指针 p,并让 p 指向 x
x.fenzi = 18; // 使用圆点操作符访问并修改 x 的成员 fenzi
p->fenmu = 108; // 使用箭头操作符并修改 x 的成员 fenmu
编程要求
在右侧编辑器中的Begin-End
之间补充代码,对输入的有理数(数据由平台提供,已在主函数中获取)进行化简。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:-18/52
预期输出:-9/26
测试输入:128/4
预期输出:32
开始你的任务吧,祝你成功!
#include <iostream>
using namespace std;
struct rationalNumber{
int fenzi; // 分子
int fenmu; // 分母
};
// 函数reduction:有理数化简,对传入的有理数n进行化简
// 参数:n-有理数
// 返回值:无化简后的有理数
rationalNumber reduction(rationalNumber n);
int main()
{
char c;
rationalNumber x, y;
cin >> x.fenzi >> c >> x.fenmu; // 输入有理数,首先读入分子,然后是/,最后是分母
y = reduction(x); // 有理数化简
// 输出化简的结果
if(y.fenmu == 1)
cout << y.fenzi << endl;
else
cout << y.fenzi << "/" << y.fenmu << endl;
return 0;
}
rationalNumber reduction(rationalNumber n)
{
// 请在这里补充代码,实现函数reduction
/********** Begin *********/
int t;
rationalNumber m=n;
do{
t=m.fenzi%m.fenmu;
m.fenzi=m.fenmu;
m.fenmu=t;
}while(m.fenmu!=0);
if(m.fenzi>0)
m.fenzi=m.fenzi;
else
m.fenzi=-m.fenzi;
n.fenzi/=m.fenzi;
n.fenmu/=m.fenzi;
return n;
/********** End **********/
}
200
任务描述
本关任务:实现两个有理数的相加并返回结果且返回的结果必须是最简分数。
相关知识
函数不仅能通过参数传入结构变量,也可以通过返回值返回结构变量。
例如:下面的 add 函数将分数 x 的分子和分母分别加1后返回:
#include <iostream>
using namespace std;
struct rationalNumber{
int fenzi; // 分子
int fenmu; // 分母
};
rationalNumber add(rationalNumber x)
{
x.fenzi++; // 分子加 1
x.fenmu++; // 分母加 1
return x; // 返回结果
}
int main()
{
rationalNumber a ={23,56}, b ;
b=add(a); // 调用add 函数
cout << b.fenzi << "/" << b.fenmu << endl; // 输出返回值
return 0;
}
输出结果为:24/57
。
温馨提示:结构变量作为一种新的数据类型,可以和预定义类型一样使用。
编程要求
在右侧编辑器中的Begin-End
之间补充代码,实现两个有理数(数据由平台提供,已在主函数中获取)的相加并返回结果且返回的结果必须是最简分数。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:-1/2 5/6
预期输出:1/3
测试输入:-3/6 12/24
预期输出:0
开始你的任务吧,祝你成功!
#include <iostream>
using namespace std;
struct rationalNumber{
int fenzi; // 分子
int fenmu; // 分母
};
// 函数rnAdd:两个有理数相加
// 参数:x,y-两个有理数
// 返回值:x+y的最简分数形式
rationalNumber rnAdd(rationalNumber x, rationalNumber y);
int main()
{
char c;
rationalNumber x, y, z;
// 输入两个有理数
cin >> x.fenzi >> c >> x.fenmu;
cin >> y.fenzi >> c >> y.fenmu;
z = rnAdd(x,y); // 有理数相加
// 输出相加的结果
if(z.fenmu == 1)
cout << z.fenzi << endl;
else
cout << z.fenzi << "/" << z.fenmu << endl;
return 0;
}
// 请在此添加代码,实现函数rnAdd
/********** Begin *********/
rationalNumber rnAdd(rationalNumber x, rationalNumber y)
{
int t,k,common1,common2;
rationalNumber n=x;
rationalNumber m=y;
while(m.fenmu!=0){
t=n.fenmu%m.fenmu;
n.fenmu=m.fenmu;
m.fenmu=t;
}
k=x.fenmu*y.fenmu/n.fenmu;
common1=k/x.fenmu;
common2=k/y.fenmu;
m.fenzi=x.fenzi*common1+y.fenzi*common2;
m.fenmu=k;
int a=m.fenzi,b=m.fenmu;
t=0;
while(b!=0){
t=a%b;
a=b;
b=t;
}
m.fenzi/=a;
m.fenmu/=a;
return m;
}
/********** End **********/
300
任务描述
本关任务:计算n(n<100)个有理数的平均数并返回,要求输出结果为最简分数形式。
相关知识
结构数组
结构的定义是定义一个新的数据类型,所以可以使用结构名(类型)来声明结构数组。结构数组的每一个数组元素都是一个结构变量。
使用结构数组时,首先像使用数组那样,用数组名加下标的方式访问数组元素,数组元素即结构变量,然后再访问结构变量的成员(使用圆点运算符或者箭头运算符),结构变量的成员则可以当普通变量使用。
下面的程序定义了结构 student,声明了 student 类型的数组 cs( cs 包含5个元素,分别是 cs[0] 、cs[1] 、cs[2] 、cs[3] 、cs[4] ),并同时对数组 cs 进行了初始化:
struct student {
int num;
char name[20];
float score;
}cs[5]={
{110, ″Zhang Ping″, 45},
{102, ″Li Xiaoming″, 92},
{153, ″Wang Ming″, 52.5},
{134, ″Cheng Ling″, 87},
{105, ″Wang Xiaofang″, 95},
};
由于 cs 是数组,所以初始化语法为花括号括起来的逗号分开的5个数据,由于 cs 数组的每个元素都是结构变量,所以对结构变量的初始化语法为花括号括起来的各个成员的值。
第一个花括号部分{110, ″Zhang Ping″, 45}
初始化给 cs[0] ,其中110给了cs[0].num
,“Zhang Ping”给了cs[0].name
(其实cs[0].name
也是一个数组,也是逐个数组元素初始化,‘Z’给了cs[0].name[0]
,…… ),45则给了cs[0].score
。
访问结构数组成员
要使用结构数组,也需要拆开了使用,数组使用循环遍历,用[]
加下标访问其数组元素,结构变量则使用圆点运算符拆开即可。
如下面的程序输出了数组 cs 的所有信息:
for(int i = 0; i < 4; i++)
{
cout<<cs[i].num<<", "<<cs[i].name<<": "<<cs[i].score<<endl;
}
编程要求
在右侧编辑器中的Begin-End
之间补充代码,计算n(n<100)个有理数(数据由平台提供,已在主函数中获取)的平均数并返回,结果为最简分数形式;
评测说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
3
1/2 3/4 5/6
预期输出:25/36
测试输入:
5
-1/2 2/3 -3/4 4/5 -5/6
预期输出:-37/300
开始你的任务吧,祝你成功!
#include <stdlib.h>
#include <stdio.h>
struct rationalNumber
{
int fenzi; // 分子
int fenmu; // 分母
};
// 函数rnMean:计算n个有理数的平均数
// 参数:a-存放有理数的数组,n-有理数的个数
// 返回值:n个有理数的平均数
struct rationalNumber rnMean(struct rationalNumber a[], int n);
int main()
{
char c;
struct rationalNumber a[100],z,k;
int n, i;
// 输入有理数个数
scanf("%d", &n);
// 输入n个有理数
for(i = 0; i < n; i++)
scanf("%d%c%d", &a[i].fenzi, &c, &a[i].fenmu);
z = rnMean(a,n); // 计算有理数平均数
// 输出平均数
if(z.fenmu == 1)
printf("%d\n", z.fenzi);
else
printf("%d/%d\n", z.fenzi, z.fenmu);
return 0;
}
//求每个的最大的公约数并简化
struct rationalNumber rnMax(struct rationalNumber n){
int t;
rationalNumber m=n;
m.fenzi=n.fenzi>0?n.fenzi:-n.fenzi;
while(m.fenmu!=0){
t=m.fenzi%m.fenmu;
m.fenzi=m.fenmu;
m.fenmu=t;
}
n.fenzi=n.fenzi/m.fenzi;
n.fenmu=n.fenmu/m.fenzi;
return n;
}
struct rationalNumber rnAdd(struct rationalNumber x, struct rationalNumber y){
x.fenzi=x.fenzi*y.fenmu+x.fenmu*y.fenzi;//分子之和
x.fenmu=x.fenmu*y.fenmu;//分母相同
return rnMax(x);
}
/********** Begin *********/
struct rationalNumber rnMean(struct rationalNumber a[], int n)
{
int i;
for(i=0;i<n-1;i++)
a[i+1]=rnAdd(a[i],a[i+1]);
a[i].fenmu*=n;
return a[i];
}
/********** End **********/
500
任务描述
本关任务:编写一个完整的程序,对输入的n(n<100)本书进行排序并输出。
相关知识
完成本关需要具备的知识介绍请参见前面三个关卡。
编程要求
在右侧编辑器中的Begin-End
之间补充代码,编写一个完整的程序,对输入的n(n<100)本书进行排序并输出,具体要求如下:
温馨提示:程序是可以拼凑的,本关可以使用结构数组来求解,数据的输入参照前面几关的代码,然后再加上一个排序程序,随便改改就成了。
程序首先输入一个正整数n,然后输入n本书的信息,每本书用两行输入,第一行输入书的名称(书名最长不超过50个字符,中间可能有空格),第二行输入价格,价格为浮点数。
例如:
3
Programming in C
21.5
数据结构与算法
18.5
三体(一)
28.0
程序要求对n本书按价格从低到高排序,如果价格相同,则按书名(字符串)字典序从小到大排序。最后输出排序结果,每行输出一本书的信息,首先输出价格,然后输出书名,中间用一个英文逗号和一个空格分开。
如上面输入对应的输出结果为:
18.5, 数据结构与算法
21.5, Programming in C
28, 三体(一)
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:
3
Programming in C
21.5
数据结构与算法
18.5
三体(一)
28.0
预期输出:
18.5, 数据结构与算法
21.5, Programming in C
28, 三体(一)
测试输入:
5
Programming in C
21.5
数据结构与算法
18.5
三体(一)
28.0
三国志
56.9
第一滴血
22.3
预期输出:
18.5, 数据结构与算法
21.5, Programming in C
22.3, 第一滴血
28, 三体(一)
56.9, 三国志
开始你的任务吧,祝你成功!
#include <string.h>
#include <iostream>
using namespace std;
//请在此添加代码,实现书籍数据的输入、排序和输出
/********** Begin *********/
typedef struct book{
char name[30];
float price;
}cs;//重新声明
int main()
{
int n,i,j,k;
cin>>n;
cs mbook[100];
cs t;
for(i=0;i<n;i++){
getchar();//吸收cin中的空格
cin.getline(mbook[i].name,30);//输入流,cin.getline(字符指针(char*),字符个数N(int),结束符(char)),最后一位以‘\0’结束
cin>>mbook[i].price;
}
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(mbook[k].price>mbook[j].price)
k=j;
else if(mbook[k].price==mbook[j].price&&strcmp(mbook[k].name, mbook[j].name)>0)
k=j;
}
if(k!=i){
t=mbook[k];
mbook[k]=mbook[i];
mbook[i]=t;
}
}
for(i=0;i<n;i++){
cout<<mbook[i].price<<", "<<mbook[i].name<<endl;
}
return 0;
}
/********** End **********/
文章浏览阅读15次。空化气泡的大小和相应的空化能量可以通过调整完全标度的振幅水平来操纵和数字控制。通过强调超声技术中的更高通量处理和防止样品污染,Epigentek EpiSonic超声仪可以轻松集成到现有的实验室工作流程中,并且特别适合与表观遗传学和下一代应用的兼容性。Epigentek的EpiSonic已成为一种有效的剪切设备,用于在染色质免疫沉淀技术中制备染色质样品,以及用于下一代测序平台的DNA文库制备。该装置的经济性及其多重样品的能力使其成为每个实验室拥有的经济高效的工具,而不仅仅是核心设施。
文章浏览阅读4.2k次,点赞3次,收藏14次。目录点击这里查看所有博文 本系列博客,理论上适用于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持)。 先不管支不支持,如果你用的是合宙的模块,那都不妨一试,也许会有意外收获。 我使用的是Air720SL模块,如果在其他模块上不能用,那就是底层core固件暂时还没有支持,这里的代码是没有问题的。例程仅供参考!..._合宙获取天气
文章浏览阅读7.7k次,点赞2次,收藏41次。1 关于meshMesh的意思是网状物,以前读书的时候,在自动化领域有传感器自组网,zigbee、蓝牙等无线方式实现各个网络节点消息通信,通过各种算法,保证整个网络中所有节点信息能经过多跳最终传递到目的地,用于数据采集。十多年过去了,在无线路由器领域又把这个mesh概念翻炒了一下,各大品牌都推出了mesh路由器,大多数是3个为一组,实现在面积较大的住宅里,增强wifi覆盖范围,智能在多热点之间切换,提升上网体验。因为节点基本上在3个以内,所以mesh的算法不必太复杂,组网形式比较简单。各厂家都自定义了组_802.11s
文章浏览阅读5.2k次,点赞8次,收藏21次。线程的几种状态_线程状态
文章浏览阅读4.2w次,点赞124次,收藏688次。stack翻译为栈,是STL中实现的一个后进先出的容器。要使用 stack,应先添加头文件include<stack>,并在头文件下面加上“ using namespacestd;"1. stack的定义其定义的写法和其他STL容器相同, typename可以任意基本数据类型或容器:stack<typename> name;2. stack容器内元素的访问..._stack函数用法
文章浏览阅读71次。<li> <a href = "“#”>-</a></li><li>子节点:文本节点(回车),元素节点,文本节点。不同节点树: 节点(各种类型节点)childNodes:返回子节点的所有子节点的集合,包含任何类型、元素节点(元素类型节点):child。node.getAttribute(at...
文章浏览阅读3.4k次。//config的设置是全局的layui.config({ base: '/res/js/' //假设这是你存放拓展模块的根目录}).extend({ //设定模块别名 mymod: 'mymod' //如果 mymod.js 是在根目录,也可以不用设定别名 ,mod1: 'admin/mod1' //相对于上述 base 目录的子目录}); //你也可以忽略 base 设定的根目录,直接在 extend 指定路径(主要:该功能为 layui 2.2.0 新增)layui.exten_layui extend
文章浏览阅读3.2k次,点赞6次,收藏13次。分层思想分层思想分层思想-1分层思想-2分层思想-2OSI七层参考模型物理层和数据链路层物理层数据链路层网络层传输层会话层表示层应用层OSI七层模型的分层结构TCP/IP协议族的组成数据封装过程数据解封装过程PDU设备与层的对应关系各层通信分层思想分层思想-1在现实生活种,我们在喝牛奶时,未必了解他的生产过程,我们所接触的或许只是从超时购买牛奶。分层思想-2平时我们在网络时也未必知道数据的传输过程我们的所考虑的就是可以传就可以,不用管他时怎么传输的分层思想-2将复杂的流程分解为几个功能_5g分层结构
文章浏览阅读191次。在激光雕刻中,单向扫描(Unidirectional Scanning)是一种雕刻技术,其中激光头只在一个方向上移动,而不是来回移动。这种移动方式主要应用于通过激光逐行扫描图像表面的过程。具体而言,单向扫描的过程通常包括以下步骤:横向移动(X轴): 激光头沿X轴方向移动到图像的一侧。纵向移动(Y轴): 激光头沿Y轴方向开始逐行移动,刻蚀图像表面。这一过程是单向的,即在每一行上激光头只在一个方向上移动。返回横向移动: 一旦一行完成,激光头返回到图像的一侧,准备进行下一行的刻蚀。
文章浏览阅读577次。强连通:在有向图G中,如果两个点u和v是互相可达的,即从u出发可以到达v,从v出发也可以到达u,则成u和v是强连通的。强连通分量:如果一个有向图G不是强连通图,那么可以把它分成躲个子图,其中每个子图的内部是强连通的,而且这些子图已经扩展到最大,不能与子图外的任一点强连通,成这样的一个“极大连通”子图是G的一个强连通分量(SCC)。强连通分量的一些性质:(1)一个点必须有出度和入度,才会与其他点强连通。(2)把一个SCC从图中挖掉,不影响其他点的强连通性。_强连通分量
文章浏览阅读3.9k次,点赞5次,收藏18次。在做web开发,要给用户提供一个页面,页面包括静态页面+数据,两者结合起来就是完整的可视化的页面,django的模板系统支持这种功能,首先需要写一个静态页面,然后通过python的模板语法将数据渲染上去。1.创建一个templates目录2.配置。_django templates
文章浏览阅读1.7k次。Ubuntu等Linux系统显卡性能测试软件 Unigine 3DUbuntu Intel显卡驱动安装,请参考:ATI和NVIDIA显卡请在软件和更新中的附加驱动中安装。 这里推荐: 运行后,F9就可评分,已测试显卡有K2000 2GB 900+分,GT330m 1GB 340+ 分,GT620 1GB 340+ 分,四代i5核显340+ 分,还有写博客的小盒子100+ 分。relaybot@re...