第1题
面向对象的编程,设计一个数学中的分数类(Fraction),保存分数的信息。要求: (1) 一个分数由分子和分母构成:numerator分子和numerator分母。生成的分数对象的分子和分母必须满足的条件:分母不为零, 分子分母要以最简形式存放(化简后最大公约数只能为1)。如3/9=1/3。分子和分母异号时分子为负。 (2)默认构造函数分数值为0 (3)定义一个静态方法Parse(),试图解析输入字符串(如-3/4)为一个分数,并传递值给构造函数。 (4)定义适当的构造函数和属性。定义属性DecimalValue转换分数为近似小数(如0.25) 。 (5) 通过运算符重载,实现分数对象之间的四则运算, 计算结果仍以最简形式存放。 (6) 通过运算符重载,实现分数对象之间比较大小。 (7) 通过重载ToString方法,把分数转化为分数形式的字符串,如分数1/3,转化为“1/3”。 (8)在main方法,测试Fraction类的功能。有一个字符串数组,每个字符串都是一个分数,解析这些分数并计算他们的和,打印他们的分数和以及小数和。 注意,网上有很多类似的代码,可以参考,但一定要按照我的要求来做。
第2题
例如,输入308*28,结果为8624.000000。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在 main函数的横线上填入所编写的若干表达式或语句。
试题程序:
include<stdio, h>
main ( )
{
int a=0, b=0, flag=l, fg=l;
float result;
char *p, ch;
char str[10];
clrscr ();
printf("\n Input a string \n");
gets (str);
p=str;
while (*p)
{
if (*p>='0' &&*p<='9' && flag==l )
a=【 】;
else
if (fg)
{
ch=*p;
flag=2;
fg=0;
}
if (*p>='0 ' &&*p<='9' &&flag==2)
b=【 】;
p++;
}
switch(【 】)
{
case '+': result=a+b;break;
case '-': result=a-b;break;
case '*' :result=a*b;break;
case '/' :result= (float) a/b;break;
printf ("\nresult=%f", result);
}
第7题
[说明]
计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*120-37)”的后缀表达式形式为“46 5 120 37-*+”。
计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5 120 37-*+”的计算过程如下:
a.依次将46、5、120、37压入栈中;
b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中;
c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中;
d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中;
e.表达式结束,则计算过程完成。
函数computing(char expr[],int*result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“\”)。
函数computing中所用栈的基本操作的函数原型说明如下。
● void InitStack(STACK*s):初始化栈。
● void Push(STACK*s,int e):将一个整数压栈,栈中元素数目增1。
● void Pop(STACK*s):栈顶元素出栈,栈中元素数目减1。
● int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。
● int IsEmpty(STACKs):若s是空栈,则返回1;否则返回0。
[C函数]
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!