软件工程第一次作业 出题程序

一、功能介绍

程序采用c语言编写,实现功能:

1.每次出30道题,并给出答案

2.四则运算(结果不会出现负数,除法全部可以整除)

3.真分数四则运算(结果全为最简形式)

二、完成效果

1.开始界面

2.四则运算出题

3.显示答案

4.真分数四则运算

5.显示答案

三、编写过程

程序的两大功能就是四则运算和真分数的四则运算,所以在主函数设计if分支,按照选择使用不同的功能。

这两个主要部分都是通过生成一个0-3的随机数来控制出的题是加法还是减法还是乘除法,然后用for循环完成30道题的生成。

1.四则运算的编写

生成两个随机的运算数,值控制在10以内。

如果加法就直接加,然后将结果存放在数组answer[30]里面。

如果是减法,要比较两个随机数的大小,避免被减数小于减数而产生负数,如果被减数小于减数,则将两数位置调换,再将结果存放在数组中。

如果是乘法就直接乘,结果存放在数组中。

除法先用随机数生成结果和除数,然后相乘求出被除数,这样可以保证除法答案全是整数。

最后用for循环打印答案。

2.真分数运算的编写

生成四个随机的运算数,值控制在10以内,分别作为两个运算数的分子和分母。

用于保存结果的数组也有一个变为两个,分别存放结果的分子和分母,这样设计方便将分数化成最简形式。

如果是加法,按照最小公倍数通分,然后存放结果。

如果是减法,先求出结果,判断正负,如果为负数则调换两数顺序,然后将结果(负数)取反并保存。

如果是乘法,现将分子相乘,分母相乘,然后求出分子分母的最大公约数化成最简。

如果是除法,将被除数分子分母调换位置,按照乘法方法计算。

最后用for循环打印答案。

完整代码

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

void Function1();
void Function2();
int maxg(int a, int b);

int main(void)
{
int choose;
printf("欢迎使用!\n\n请选择以下操作:\n\n");
printf("1.整数四则运算\n\n2.真分数运算\n\n");
printf("输入对应选项数字,按回车确认\n");
//system("pause");
scanf("%d",&choose);
if (choose == 1)
Function1();//四则运算
else
if (choose == 2)
Function2();//真分数运算
else
printf("非法输入!");
return 0;
}

void Function1()
{
int i ;
int answer[30], a, b, c,d;
for (i = 0; i < 30; i++)
{
a = (int)rand() % 4;
if (a == 0)//加法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
printf("第%d题 %d+%d= \n",i+1,b,c);
answer[i] = b + c;
}
else
if (a == 1)//减法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
if (c > b)//避免出现负数
{
d = b;
b = c;
c = d;
}
printf("第%d题 %d-%d= \n", i + 1, b, c);
answer[i] = b - c;
}
else
if (a == 2)//乘法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
printf("第%d题 %dX%d= \n", i + 1, b, c);
answer[i] = b * c;
}
else
if (a == 3)//除法
{
b = (int)rand() % 10;
c = (int)rand() % 10;
d = b*c;//保证结果都是整数
printf("第%d题 %d÷%d= \n", i + 1, d, c);
answer[i] = b;
}
}
system("pause");//按任意键显示答案
printf("\n");
for (i = 0; i < 30; i++)
{
printf("第%d题 %d\n", i + 1, answer[i]);
}
system("pause");
}

void Function2()
{
int fenzi[30],fenmu[30];
int a, b, c, d, e, i;
for (i = 0; i < 30; i++)
{
a = (int)rand() % 4;
if (a == 0)
{
b = ((int)rand() % 9) + 1;//避免分母出现0
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
printf("第%d题 (%d/%d)+(%d/%d)= \n", i + 1, b, c,d,e);//按最小公倍数化简
fenmu[i] =c*e/maxg(c,e) ;
fenzi[i] = fenmu[i] / c*b + fenmu[i] / e*d;
}
else
if (a == 1)
{
b = ((int)rand() % 9) + 1;
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
fenmu[i] = c*e / maxg(c, e);//按最小公倍数化简
fenzi[i] = fenmu[i] / c*b - fenmu[i] / e*d;
if (fenzi[i] < 0)//如果出现负数,将减数与被减数调换
{
fenzi[i] = 0 - fenzi[i];//保证结果为正数
printf("第%d题 (%d/%d)-(%d/%d)= \n", i + 1, d, e, b, c);
}
printf("第%d题 (%d/%d)-(%d/%d)= \n", i + 1, b, c, d, e);
}
else
if (a == 2)
{
b = ((int)rand() % 9) + 1;
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
printf("第%d题 (%d/%d)X(%d/%d)= \n", i + 1, b, c, d, e);
fenzi[i] = b*d;
fenmu[i] = c*e;
fenzi[i] = fenzi[i] / maxg(fenzi[i], fenmu[i]);//通分后分子分母除以最大公约数
fenmu[i] = fenmu[i] / maxg(fenzi[i], fenmu[i]);
}
else
if (a == 3)
{
b = ((int)rand() % 9) + 1;
c = ((int)rand() % 9) + 1;
d = ((int)rand() % 9) + 1;
e = ((int)rand() % 9) + 1;
printf("第%d题 (%d/%d)÷(%d/%d)= \n", i + 1, b, c, d, e);
fenzi[i] = b*e;
fenmu[i] = c*d;
fenzi[i] = fenzi[i] / maxg(fenzi[i], fenmu[i]); //通分后分子分母除以最大公约数
fenmu[i] = fenmu[i] / maxg(fenzi[i], fenmu[i]);
}
}
system("pause");//按任意键显示答案
printf("\n");
for (i = 0; i < 30; i++)
{
if (fenzi[i]==0)
printf("第%d题 %d\n", i + 1, fenzi[i]);//如果分子为0,直接将0作为结果打印
else
printf("第%d题 %d/%d\n", i + 1, fenzi[i],fenmu[i]);
}
system("pause");
}

int maxg(int a, int b)//最大公约数
{
int c, d;
if (a < b)
{
c = a;
a = b;
b = c;
}
d = a%b;
if (d == 0)
return b;
else
maxg(b, d);
}

时间: 2024-08-05 02:03:24

软件工程第一次作业 出题程序的相关文章

软件工程第一次作业补充

软件工程第一次作业的补充 对于作业"在一周之内快速看完<构建之法>,列出你不懂的5-10个问题". 作业要求有: (1)在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 (2)列出一些事例或资料,支持你的提问 (3)说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾? 例如:我看了这一段文字 (引用文字),有这个问题 (提出问题):我查了资料,有这些说法

软件工程第一次作业程序开发历程

收到软件工程的作业,面对题目“......”.我先拟定了一个大概的思路,以及一些关键的函数.思路利用循环产生30道算术式,并计算答案,存储答案,在利用循环显示30道题的答案. 而关键函数我认为就是随机正整数的产生.考虑到这点,我决定用javascript来编写我的程序,其一是因为最近学习js,其二是因为对c和c++有点陌生了,然后javascript有Math.random这个函数,尽管它只能产生0与1之间的随机数.决定完语言后,我又分析了下题目,考虑到涉及真分数的问题,我将程序分成整数与真分数

软件工程第一次作业,小学生四则运算的出题程序

一.背景 阿超有个儿子上小学二年级,老师每天让家长给孩子出30道加减法题,虽然不多,但是每天都做也算是个负担,阿超作为一个老牌程序员当然想用计算机来解决这个小问题,目前对于这个问题对于任何语言都不是问题,比如: C/C++.C#.Java.Python.VB.JavaScript.Perl…… 具体要求如下: 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!) 除了整数外,还要支持真分数的四则运算 请大家用任何一种自己擅长的语言来编写这段程序,并把程序的介绍和自

2017年秋季学期软件工程第一次作业(曹洪茹)

作业一 在开始作业要求的正文之前,我先简单谈谈自此课开课以来,包括读了许多大牛写的博文之后的几点感悟和思考. 首先,作为一名有四年地方大学生活经验的军校研究生,我很激动也很庆幸在研究生阶段能遇到这么一门真正实现本科教育改革创新,以培养学生思维逻辑能力.切实达到教学目标为为目的的课程.同时,比较讽刺的是,在崇尚思想自由.开放.创新的地方本科院校没有邂逅的这种课程反倒让我在军校这个相对封闭化.教条化的环境中接触到了,这主要得益于何老师对教育的前瞻性的战略眼光.其次,我对这个课的课堂模式是持支持态度的

软件工程第一次作业(2)

上次我们只是简单的聊了聊,这次我们举例以问答的方式详谈: 一,工具类软件:QQ 问:这些软件的开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户的现金么?还是别的? 答:早期不清楚,但是现在,只要你是中国人,估计几乎离不开QQ了,大家打开一台新手机的第一件事估计都是安装qq吧,因为他的用户太广了,我们的爸爸妈妈,同学朋友,老师同事,甚至爷爷奶奶现在都在用,几乎成了电话之后的第二种联系方式(我觉的这个意义已经超过了电话):QQ的盈利很广,会员制度:什么黄黑钻

对三类软件(游戏,系统,工具)的分析与心得(软件工程第一次作业)

软件有很多种,如工具类软件.游戏类软件.系统类软件,它们的运行方式也各种各样,如以单机方式运行.以网站方式运行或者以APP方式运行在手机端等,请选取三种软件,分析它们各自的特点. 1   这些软件的开发者是怎么说服你(陌生人)成为他们的用户的?他们的目标都是盈利么?他们的目标都是赚取用户的现金么?还是别的?2   这些软件是如何到你手里的(邮购,下载,互相拷贝……)3   这些软件是如何处理Bug 的?又是如何更新新版本的?4   同一类型的软件之间是如何竞争的? 这一类软件的发展趋势如何?5

2017秋-软件工程第一次作业

1 自我介绍 我叫翟宇豪,目前是东北师范大学2017级研究生,本科专业是计算机科学与技术专业,研究生专业是计算机技术.选择计算机专业的初衷其实非常简单,高考之后,在当时的情况下,家人.长辈的推荐下,我认为金融行业和计算机行业将是最有发展的两个领域.我希望去沿海城市.南方城市.但是因为分数限制无奈选择了哈尔滨工程大学就读.我备选专业中大部分都和金融专业相关,但是哈工程是工科类院校,所以我选择了理工类的计算机这个专业由此走上了程序猿之路. 2对计算机专业的畅想 在本科学习过程中,有很多课程是与计算机

补交软件工程第一次作业

一.个人简介 1.基本信息: 姓名:郎吉圣 学号:1425052026       班级:信管141 兴趣:阅读,电脑,运动 2.编程能力:学过c++以及java.一般一段程序写十几行,至多二十多行. 二.码云注册 1.码云账号:[email protected] 2.注册经过: 1)访问https://git.oschina.net/ 2)点击右上角"注册"进入注册界面 3)依次填写"Email"\"昵称"."个性网址".&

高级软件工程第一次作业

(1)回想一下你对计算机/软件工程专业的畅想 考研时你是如何做出选择计算机/软件工程专业的决定的? 如同D的博主一般,我也是一个偏科生,在英语.语文等语言方面和政治哲学方面有严重的不足,我在我还没有考上大学的时候,我就希望我学习的专业是计算机或者智能技术.电子等类别的专业,我的大学志愿也是这般选择的,但是不一样的是,我在高中才接触了计算机,那时什么都不懂,只觉得它很神奇,很美妙.上了大学,我读了网络工程,我很认真的学习了专业的知识.慢慢的时间一点一滴的流逝了,我在大三的时候还在想,我要不要去考研