四则运算作业
| 这个作业属于哪个课程 | 计算机18级|
| ---- | ---- | ---- |
| 这个作业的要求在哪里 | 个人作业-四则运算题目生成程序(补做)|
| 这个作业的目标| 会编写四则运算代码|
| 学号 | 3180701212|
题目要求:*
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
程序要求能处理用户的输入,判断对错,累积分数
程序支持可以由用户自行选择加、减、乘、除运算
使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
主函数:
`int main(void)
{
struct fraction f = { 21, 3 };
struct fraction f1 = { 8, 64 };
struct fraction f2 = { 9, 711 };
struct fraction reducedf = reduce_fraction(f);
printf("%d/%d reduced to simplest terms: %d/%d\n", f.numerator,
f.denominator, reducedf.numerator, reducedf.denominator);
struct fraction addedf = add_fractions(f1, f2);
printf("%d/%d + %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, addedf.numerator, addedf.denominator);
struct fraction subtractedf = subtract_fractions(f1, f2);
printf("%d/%d - %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, subtractedf.numerator,
subtractedf.denominator);
struct fraction multipliedf = multiply_fractions(f1, f2);
printf("%d/%d * %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, multipliedf.numerator,
multipliedf.denominator);
struct fraction dividedf = divide_fractions(f1, f2);
printf("%d/%d / %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, dividedf.numerator,
dividedf.denominator);
return 0;
}
加法:struct fraction add_fractions(struct fraction f1, struct fraction f2)
{
f1.numerator *= f2.denominator;
f2.numerator *= f1.denominator;
struct fraction result = {
f1.numerator + f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}`
减法:
`struct fraction subtract_fractions(struct fraction f1, struct fraction f2)
{
f1.numerator *= f2.denominator;
f2.numerator *= f1.denominator;
struct fraction result = {
f1.numerator - f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}`
乘法:
`
struct fraction multiply_fractions(struct fraction f1, struct fraction f2)
{
struct fraction result = {
f1.numerator * f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}`
除法:
`struct fraction divide_fractions(struct fraction f1, struct fraction f2)
{
struct fraction result = {
f1.numerator * f2.denominator,
f1.denominator * f2.numerator
};
result = reduce_fraction(result);
return result;
}`
源码:
`#include <stdio.h>
struct fraction {
int numerator;
int denominator;
};
// 求解最大公约数
int find_gcd(int n1, int n2);
// 将分数化为最简形式
struct fraction reduce_fraction(struct fraction f);
// 分数的四则运算
struct fraction add_fractions(struct fraction f1, struct fraction f2);
struct fraction subtract_fractions(struct fraction f1, struct fraction f2);
struct fraction multiply_fractions(struct fraction f1, struct fraction f2);
struct fraction divide_fractions(struct fraction f1, struct fraction f2);
int main(void)
{
struct fraction f = { 21, 3 };
struct fraction f1 = { 8, 64 };
struct fraction f2 = { 9, 711 };
struct fraction reducedf = reduce_fraction(f);
printf("%d/%d reduced to simplest terms: %d/%d\n", f.numerator,
f.denominator, reducedf.numerator, reducedf.denominator);
struct fraction addedf = add_fractions(f1, f2);
printf("%d/%d + %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, addedf.numerator, addedf.denominator);
struct fraction subtractedf = subtract_fractions(f1, f2);
printf("%d/%d - %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, subtractedf.numerator,
subtractedf.denominator);
struct fraction multipliedf = multiply_fractions(f1, f2);
printf("%d/%d * %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, multipliedf.numerator,
multipliedf.denominator);
struct fraction dividedf = divide_fractions(f1, f2);
printf("%d/%d / %d/%d = %d/%d\n", f1.numerator, f1.denominator,
f2.numerator, f2.denominator, dividedf.numerator,
dividedf.denominator);
return 0;
}
int find_gcd(int n1, int n2)
{
int temp;
while (n1 != 0) {
temp = n2 % n1;
n2 = n1;
n1 = temp;
}
return n2;
}
struct fraction reduce_fraction(struct fraction f)
{
int gcd = find_gcd(f.numerator, f.denominator);
f.numerator /= gcd;
f.denominator /= gcd;
return f;
}
struct fraction add_fractions(struct fraction f1, struct fraction f2)
{
f1.numerator *= f2.denominator;
f2.numerator *= f1.denominator;
struct fraction result = {
f1.numerator + f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}
struct fraction subtract_fractions(struct fraction f1, struct fraction f2)
{
f1.numerator *= f2.denominator;
f2.numerator *= f1.denominator;
struct fraction result = {
f1.numerator - f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}
struct fraction multiply_fractions(struct fraction f1, struct fraction f2)
{
struct fraction result = {
f1.numerator * f2.numerator,
f1.denominator * f2.denominator
};
result = reduce_fraction(result);
return result;
}
struct fraction divide_fractions(struct fraction f1, struct fraction f2)
{
struct fraction result = {
f1.numerator * f2.denominator,
f1.denominator * f2.numerator
};
result = reduce_fraction(result);
return result;
}`
总结:
总的来说,这次作业的收获还是挺大的。之前没有接触过博客园,对于博客园的一些操作不是很熟悉,准确地说是很不熟悉,以至于这次作业在排版方面花了很长时间。最简单的,作业开头的那个表格,我自己搞了半天也没有达到想要的效果,最后还是在同学的帮助下完成的。以后会多加练习,争取熟练掌握博客园的一些操作技巧。最最重要的,我觉得还是编程能力,个人认为提高编程能力最好的办法还是多做,多想,多练习。
| psp2.1 | 任务内容 | 计划完成需要的时间 | 实际完成需要的时间 |
|---|---|---|---|
| planning | 计划 | 15 | 10 |
| estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 12 | 15 |
| development | 开发 | 120 | 100 |
| analysis | 需求分析 | 10 | 8 |
| design spec | 生成设计文档 | 8 | 12 |
| design review | 设计复审 | 5 | 5 |
| coding standard | 代码规范 | 5 | 3 |
| design | 具体设计 | 10 | 16 |
| coding | 具体编码 | 35 | 37 |
| code review | 代码复审 | 6 | 8 |
| test | 测试 | 10 | 6 |
| reporting | 报告 | 6 | 8 |
| test reporting | 测试报告 | 3 | 2 |
| size measurement | 计算工作量 | 3 | 2 |
| postmortem & process improvement plan | 总结并提出改进计划 | 5 | 8 |

浙公网安备 33010602011771号