第1关:有理数化简
200
- 任务要求
- 参考答案
- 评论220
任务描述
本关任务:化简有理数。
相关知识
有理数的精确表示一般采用分数形式。分数的分子和分母都是整数,如果有理数为负数,则分子为负数,分母始终为正数。有理数的化简其实就是使分数成为最简分数,即通过化简使分子和分母互质。当分子为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 的地址