C&C++结构实训(国防科大)

本文介绍了如何使用C和C++的结构类型来处理有理数,包括化简、加法和计算平均数,并进一步讲解了如何对结构数组进行排序,以解决书籍排序问题。每个部分都提供了编程要求和测试说明,帮助读者掌握结构在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:有理数化简

200

  • 任务要求
  • 参考答案
  • 评论220

任务描述

本关任务:化简有理数。

相关知识

有理数的精确表示一般采用分数形式。分数的分子和分母都是整数,如果有理数为负数,则分子为负数,分母始终为正数。有理数的化简其实就是使分数成为最简分数,即通过化简使分子和分母互质。当分子为0时,分母应为1。

我们可以用两个整型变量来表示一个分数,但由于没有表示两个变量之间的逻辑关系,程序的可读性会很差。更好的方法是使用 C 和 C++ 的结构来表示。

结构

结构定义的一般形式为:

 
  1. struct <结构名>{
  2. <成员列表>
  3. };
  • struct 是关键字,表示结构定义;

  • <结构名>是一个标识符,是结构的名字;

  • <成员列表>由若干个成员的声明组成,每个成员都是该结构的一个组成部分。

例如,分数包含两个成员:分子和分母,可以定义为一个结构。分数结构名可以取名为 rationalNumber ,两个成员都是整型变量,可以分别取名为 fenzi 和 fenmu,则分数结构可以定义为:

 
  1. struct rationalNumber{
  2. int fenzi; // 分子
  3. int fenmu; // 分母
  4. };

结构的定义是定义一个新的数据类型(新类型名就是结构名),这样不会有内存分配。之后就可以像使用预定义类型(如 int )那样来使用结构类型。

例如:

 
  1. rationalNumber x,y;

该语句声明了两个 rationalNumber 类型的变量 x 和 y,每个变量中都包含了两个成员:整型的 fenzi 和 fenmu。变量的声明会有内存分配,可以使用 x 和 y 的两个整型变量成员来存储数据,这样就可以把同一个分数的分子和分母存入 rationalNumber 类型的相应变量中,该变量就可以表示一个分数了。

结构的定义是可以嵌套使用的。例如 person 结构中包含生日成员,而生日中又包含年、月、日三个成员,代码如下:

 
  1. // 定义结构date
  2. struct date
  3. {
  4. int year, month, day;
  5. };
  6. // 定义结构person
  7. struct person
  8. {
  9. int IDNumber; // 身份证号
  10. char name[20]; // 姓名
  11. char sex; // 性别
  12. date birthday; // 生日,嵌套定义
  13. };

结构的初始化及使用

结构变量的初始化和数组变量的初始化一样,采用花括号括起来的初始值列表的形式。

例如:

 
  1. rationalNumber x={12,46};

该语句中,其初始化值按序赋值给各个成员,即12和46分别赋值给了 x 的 fenzi 和 fenmu 成员。

结构变量的使用有两种方式:一种是把结构变量当做一个整体使用;另一种是拆开了用,单独操作其中的某个成员:

  1. 当结构变量当做一个整体使用时,有两个运算符:赋值运算符 = 和地址运算符 & 可以直接作用于结构变量上;

例如:

 
  1. rationalNumber x = {12,46}, y ;
  2. y = x ; // 结构变量中的每个成员分别赋值
  3. rationalNumber *p = &x; // 声明结构指针,并初始化为 x 的地址
    评论 16
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值