lmdi

导航

第一次作业

具体要求如下:

  • 能自动生成小学四则运算题目(注意是给小学生用的,要是结果出现负数的话他们会迷茫的!)
  • 除了整数外,还要支持真分数的四则运算

 

方案的实现:

1.自动生成小学四则运算题目,首先需要生成两个随机数,这里用到了rand(),为了保证随机数在100以内,并且避免为0,因此令rand()%100+1;

2.用switch case语句随机选择加减乘除操作,调用相应的子函数;

3.加法运算分两种情况:一.两个加数均为整数。a>b时,直接输出a+b=?。二.有真分数的情况。当a<b且e<f时,则输出a/b + e/f =?;

4.减法运算分四种情况:一.被减数、减数均为整数且a>b时,直接输出a-b=?。二.有真分数且a<b e<f的情况,则输出a/b - e/f=?;三.a<b且e>f时,输出b-a=?;四.a/b<e/f时,则输出e/f-a/b=?;

5.乘法运算分两种情况:一.两个乘数均为整数。a>b时,直接输出a*b=?。二.有真分数的情况。当a<b且e<f时,则输出a/b * e/f =?;

6.除法运算分两种情况:一.被除数、除数均为整数且a>b时,直接输出a/b=?。二.有真分数的情况。当a<b且e<f时,则输出a/b / e/f =?;

 

编程中遇到的问题:把srand()函数放在for循环里边,导致所有出现的随机数都相等,经检查修正后数据符合要求。

 

程序清单:

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

void Add(int a,int b,int e,int f){
if (a>b)
printf("%d + %d=?\n", a, b);
if (a < b&&e<f)
printf("%d/%d + %d/%d=?\n", a, b, e, f);
}

void Jian(int a,int b,int e,int f){
if (a>b)
printf("%d - %d=?\n", a, b);
if (a < b){
if (e>f)
printf("%d - %d=?\n", b, a);
else
{
if (float(a) / float(b) > float(e) / float(f))
printf("%d/%d - %d/%d=?\n", a, b, e, f);
else
printf("%d/%d - %d/%d=?\n", e, f, a, b);
}
}
}

void Cheng(int a,int b,int e,int f){
if (a>b)
printf("%d * %d=?\n", a, b);
if (a < b&&e<f)
printf("%d/%d * %d/%d =?\n", a, b, e, f);
}

void Chu(int a,int b,int e,int f){
if (a>b)
printf("%d / %d=?\n", a, b);
else{
if (e>f)
printf("%d / %d=?\n", b, a);
else
printf("%d/%d / %d/%d=?\n", a, b, e, f);
}
}

int main(){
int a, b,c,d,e,f;
printf("请输入做题数目:\n");
scanf("%d", &d);
srand((unsigned)time(NULL));
for (int i = 0; i < d; i++){
a = rand() % 100+1;
b = rand() % 100+1;
c = rand() % 4;
e = rand() % 100 + 1;
f = rand() % 100 + 1;
switch (c){
case 0:
Add(a, b,e,f);
break;
case 1:
Jian(a, b,e,f);
break;
case 2:
Cheng(a, b,e,f);
break;
case 3:
Chu(a, b,e,f);
break;
}
}
printf("输入任意数字结束!\n");
scanf("%d", &d);
return 0;
}

posted on 2016-03-11 17:42  lmdi  阅读(205)  评论(1编辑  收藏  举报