
注意下除法,我定义的都是整数,所以除法计算要输入舍去小数点的数字
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void main()
{
int i,j,t,sum=0
char a[4]={'+','-','*','/'},b[5]
long int re,r
srand((int)time(NULL))
while(1)
{
i=rand()%10//可以自己定义数据的范围
j=rand()%10
t=rand()%4
printf("%d%c%d=",i,a[t],j)
scanf("%d",&re)
switch(t)
{
case 0: r=i+jbreak
case 1: r=i-jbreak
case 2: r=i*jbreak
case 3: r=i*jbreak
}
//printf("%d %d",r,re)
if(r==re)
sum=sum+1
printf("是否做下一题\n")
scanf("%s",b)
if(strcmp(b,"no")==0)
break
}
printf("你的成绩是:%d\n",sum)
}
首先你得定义一个数b,如果是整形,可以用intb;然后执行赋值 *** 作。而lg5+|b|中用到了数学计算,所以头文件中要包含math.h。
log10(5)+abs(b)
前者为double型后者为int型,在c语言中结果会自动转换,即由低到高转化,最后的结果是double型,int转为double
这个设计到优先级 要栈处理下面这个程序 输入0结束
输入其它的+-*/运算式 输出结果
但是字符与字符间有空格 不然要出错
比如输入1 + 2
或者 + 2 * 5 - 7 / 11
注意有空格
#include <iostream>
#include <stack>
#include <string>
#include <string.h>
using namespace std
int main(){
char ch[210]
int len,i,j
double n,m,k
while (cin.getline(ch,210))
{
len = strlen(ch)
if(len==1&&'0' == ch[0])break
stack<double>s1
stack<char>s2
i=0,k=0
while (i<len)
{
if (' '== ch[i]){
i++
continue
}
else if ('0'<=ch[i] &&'9'>=ch[i])
{
k = 0
k = k*10 + ch[i]-'0'
i++
while ('0'<=ch[i] &&'9'>=ch[i]&&i<len)
{
k = k*10 + ch[i]-'0'
i++
}
s1.push(k)
k =0
}
else
{
if ('*'==ch[i] || '/'==ch[i])
{
j =i
n = s1.top(),s1.pop()
i++
i++
k = 0
while ('0'<=ch[i] &&'9'>=ch[i]&&i<len)
{
k = k*10 + ch[i]-'0'
i++
}
if ('*'==ch[j])
{
k = k*n
}else{
k = n/k
}
s1.push(k)
}
else if('+'==ch[i] || '-'==ch[i])
{
s2.push(ch[i])
i++
}
}
}
char str, str2
while (!s2.empty())
{
str = s2.top()
s2.pop()
k = s1.top(),s1.pop()
if ('+' == str)
{
n = s1.top()s1.pop()
if (!s2.empty())
{
str2 = s2.top()
if ('-' == str2)
{
k = n - k
}else{
k = k + n
}
}else
k = k + n
// cout<<k<<endl
s1.push(k)
}else{
n = s1.top()s1.pop()
if (!s2.empty())
{
str2 = s2.top()
if ('-' == str2)
{
k = k + n
}else{
k = n - k
}
}else
k = n - k
s1.push(k)
}
}
printf("%0.2lf\n",s1.top())s1.pop()
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)