【Educoder作业】C&C++结构实训

这篇具有很好参考价值的文章主要介绍了【Educoder作业】C&C++结构实训。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Educoder作业】C&C++结构实训

学好结构体是学好对象的基础。

T1 有理数化简

知道结构体是干嘛的就能做了,注意一些地方的特判即可。

#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 x = n.fenzi, y = n.fenmu;
	if (!x) return (rationalNumber){x, 1};
	int x_ = x < 0 ? -x : x;
	for (int i = 2; i <= x_; i ++ ) {
		while (x_ % i == 0 && y % i == 0) x_ /= i, y /= i;
	}
	x_ = x < 0 ? -x_ : x_;
	return (rationalNumber){x_, y};
    
    
    /********** End **********/
}

T2 有理数加法

没啥区别啊感觉,注意求 g c d gcd gcd别弄错了,实在不行咱就直接用 C + + C++ C++里自带的。

#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)
{
	rationalNumber z;
    z.fenzi = x.fenzi * y.fenmu + y.fenzi * x.fenmu;
    z.fenmu = x.fenmu * y.fenmu;
    int mdl = z.fenzi < 0 ? -z.fenzi : z.fenzi;
    for (int i = 2; i <= mdl; i ++ ) while (mdl % i == 0 && z.fenmu % i == 0) mdl /= i, z.fenmu /= i;
    if (!mdl) z.fenmu = 1;
    z.fenzi = mdl < 0 ? -mdl : mdl;
    return z;
}
/********** End **********/


T3 有理数平均数

这个题我们处理好 g c d gcd gcd的同时,搞清楚分数乘即可,因为除法本质就是乘法。

#include <bits/stdc++.h>
using namespace std;

struct rationalNumber{
    int fenzi; // 分子
    int fenmu; // 分母
};

// 函数rnMean:计算n个有理数的平均数
// 参数:a-存放有理数的数组,n-有理数的个数
// 返回值:n个有理数的平均数
rationalNumber rnMean(rationalNumber a[], int n);

int main()
{
    char c;
    rationalNumber a[100],z;
    int n, i;
    cin >> n;     // 输入有理数个数
    // 输入n个有理数
    for(i = 0; i < n; i++)
        cin >> a[i].fenzi >> c >> a[i].fenmu;
    z = rnMean(a,n);     // 计算有理数平均数
    // 输出平均数
    if(z.fenmu == 1)
        cout << z.fenzi << endl;
    else
        cout << z.fenzi << "/" << z.fenmu << endl;
    return 0;
}

// 请在此添加代码,实现函数rnMean
/********** Begin *********/
rationalNumber disp(rationalNumber x) {
    for (int j = 2; j <= abs(x.fenzi); j ++ ) while (x.fenzi % j == 0 && x.fenmu % j == 0) x.fenzi /= j, x.fenmu /= j;
    return x;
}
rationalNumber rnMean(rationalNumber a[], int n)
{
    if (n == 1) return disp(a[0]);
    // cout << a[0].fenzi << ' ' << a[0].fenmu << endl ;

    for (int i = 1; i < n; i ++ ) {
        a[0].fenzi = a[0].fenzi * a[i].fenmu + a[0].fenmu * a[i].fenzi, a[0].fenmu *= a[i].fenmu;
        a[0] = disp(a[0]);
    }
    a[0].fenmu *= n;
    a[0] = disp(a[0]);
    return a[0];
}
/********** End **********/

T4 书籍排序

字典序的处理就是一个一个扫过去,如果会 s t r i n g string string的话就会很方便。不会的话注意读入,因为书名有空格所以不能用 s c a n f scanf scanf,但是 g e t l i n e getline getline会将上一个整数留在后面的回车读下来,从而不读书名。所以我们需要一个不记录的 g e t c h a r getchar getchar来满足我们的需求。文章来源地址https://www.toymoban.com/news/detail-506455.html

#include <bits/stdc++.h>

using namespace std;

//请在此添加代码,实现书籍数据的输入、排序和输出
/********** Begin *********/
struct Node {
    char name[100];
	double value;
}a[100];

int main()
{
    int n; cin >> n ;
    for (int i = 1; i <= n; i ++ ) {
        char c = getchar();
        cin.getline(a[i].name, 100);
        cin >> a[i].value;
    }
    // for (int i = 1; i <= n; i ++ ) {
    //     cout << a[i].value << ", " << a[i].name << endl ;
    // }
    for (int i = 1; i < n; i ++ ) {
        int id = i;
        for (int j = i + 1; j <= n; j ++ ) {
            if (a[id].value > a[j].value) id = j;
            else if (a[id].value == a[j].value) {
                int l1 = strlen(a[id].name), l2 = strlen(a[j].name);
                bool flag = false;
                for (int k = 0; k < min(l1, l2); k ++ ) {
                    if (a[j].name[k] < a[id].name[k]) {
                        flag = true;
                        break;
                    }
                    else if (a[j].name[k] > a[id].name[k]) {
                        break;
                    }
                }
                if (flag) id = j;
            }
        }
        swap(a[i], a[id]);
    }
    for (int i = 1; i <= n; i ++ ) {
        cout << a[i].value << ", " << a[i].name << endl ;
    }
    return 0;
}
/********** End **********/

到了这里,关于【Educoder作业】C&C++结构实训的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Educoder作业】C&C++指针实训

    不是很熟练,之前从来没用过,讲解不到位恕罪。 T1 去掉字符串首尾空格 我们需要知道两个事情,第一个事情是在函数中引用了数组指针之后,在函数内部就可以当做一个正常数组使用;第二个事情是字符串的末尾是用一个’\\0收尾的,所以我们在去掉末尾的空格时,在非空

    2024年02月09日
    浏览(54)
  • 【Educoder作业】C&C++线性表实训

    第一次接触链表的话,可能会有疑惑。疑惑在于它到底比数组强在哪里。写完这次实训可能就会感受到,或者写了这10个题还是没有头绪,本篇结尾我们就稍微聊一聊。 T1 顺序构建线性表 这个题可以说是定了整个实训的基调,结构体里是包含了一个本身的数据 d a t a data d a

    2024年02月16日
    浏览(37)
  • CSS--头歌(educoder)实训作业题目及答案

    目录 CSS——基础知识 第1关: 初识CSS:丰富多彩的网页样式 第2关: CSS样式引入方式 CSS——基础选择器 第1关: CSS 元素选择器 第2关: CSS 类选择器 第3关: CSS id选择器 CSS——文本与字体样式 第1关: 字体颜色、类型与大小 第2关: 字体粗细与风格 第3关: 文本装饰与文本布局 CSS——

    2024年04月15日
    浏览(126)
  • JavaScript上部分--头歌(educoder)实训作业题目及答案

      目录 JS简介 第1关: JavaScript基础入门 第2关: JavaScript 与 HTML 第3关: JavaScript 变量 JS 数据类型 第1关: JavaScript 数据类型介绍 第2关: JavaScript 数据类型转换 JS运算符 第1关: 算术运算符 第2关: 比较和逻辑运算符 第3关: 条件和赋值运算符 第4关: 运算符的优先级和结合性 JS对象 第

    2024年02月08日
    浏览(33)
  • JavaScript下部分--头歌(educoder)实训作业题目及答案

    目录  JSON 第1关: JSON对象 第2关: JSON数组 第3关: JSON字符串 Math、日期和异常处理 第1关: Math类 第2关: Date类 第3关: JavaScript错误 HTML DOM——文档元素的操作(一) 第1关: 通过id获取文档元素 第2关: 通过类名获取文档元素 第3关: 通过标签名获取文档元素 第4关: html5中获取元素的

    2023年04月26日
    浏览(41)
  • JavaScript上部分--头歌(educoder)实训作业题目及答案 JS简介

      目录 JS简介 第1关: JavaScript基础入门 第2关: JavaScript 与 HTML 第3关: JavaScript 变量 JS 数据类型 第1关: JavaScript 数据类型介绍 第2关: JavaScript 数据类型转换 JS运算符 第1关: 算术运算符 第2关: 比较和逻辑运算符 第3关: 条件和赋值运算符 第4关: 运算符的优先级和结合性 JS对象 第

    2023年04月22日
    浏览(140)
  • 头歌(educoder)实训作业题目及答案分享 ——1-7 Java入门-分支与循环练习

    📜个人简介 :  作者简介:大家好,我是Passenger.n✌️  支持一下:点赞👍+收藏🌟+留言📪 📣 系列专栏:java基础🍁 ✉️格言:花有重开日,人无再少年!🌞 万事开头难,既然迈开了这一步,那就坚持走下去! 这是我的第一篇博客,希望萌新看了有收获,大佬看了给指

    2024年02月04日
    浏览(75)
  • 头歌(educoder)实训作业题目及答案分享 ——1-3 Java入门 - 运算符和表达式

    📜个人简介 :  作者简介:大家好,我是Passenger.n  支持一下:点赞👍+收藏🌟+留言📪 📣 系列专栏:java基础🍁 ✉️格言:花有重开日,人无再少年!🌞 万事开头难,既然迈开了这一步,那就坚持走下去! 这是我新的一篇博客,希望萌新看了有收获,大佬看了给指路😝

    2024年02月07日
    浏览(115)
  • 【Educoder离散数学实训】关系基础

    题有点多,能聊的不多。有些题还是比较有价值的 就单独说几个题,代码放在最后。所有函数都改成自己写的了,没准比答案给的好读一点? T1 求给定集合的对角线关系(diagonal relation) 我觉得如果卡住的话,第一关会是一个大坎。 因为我们并不知道他到底在说啥,于是我

    2024年02月07日
    浏览(50)
  • Educoder C&C++线性表实训

    目录 第1关:顺序构建线性表 第2关:逆序构建线性表 第3关:排序构建线性表 第4关:查找元素 第5关:删除指定位置的结点 第6关:删除包含特定数据的结点 第7关:线性表长度 第8关:线性表应用一:栈 第9关:线性表应用二:队列 第10关:线性表应用三:集合 第1关:顺序

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包