早教吧作业答案频道 -->其他-->
这个程序运行减法的时候有错误.如果我从键盘输入一个负数就会出错.急#include#include#include#includeintscan(){chars[100];inti,t,z=0;do{z=0;gets(s);for(i=0;s[i]!='\0';i++)if(s[i]'9')break;if(i>=strlen(s))for(t=0;s[t]!=
题目详情
这个程序运行减法的时候有错误.如果我从键盘输入一个负数就会出错.急
#include
#include
#include
#include
int scan()
{
char s[100];
int i,t,z=0;
do
{
z=0;
gets(s);
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
if(i >= strlen(s))
for(t=0;s[t]!='\0';t++)
z=z*10+((int)s[t]-48);
else
printf("您输入答案形式有误,请输入正确的形式:\n");
}
while(i < strlen(s));
return(z);
}
int x=1,y=1,choice=0,sum=0,right=0,z=0,answer;
float precent;
char symbol;//(符号)
void random()//随机给出等式
{
srand(time(NULL));
x=rand()%100+1;
y=rand()%100+1;
}
void choose()
{
int operation(int,int,int);
if(sum==0) precent=0.0;
else precent=(float)right/sum;
printf("\n如需进行加减乘除运算测试,请分别输:1(加法运算)、2(减法运算)、3(乘法运算)、4(除法运算)\n");
printf("如需退出请输:5(退出运算)\n");
choice=scan();
switch(choice)
{
case 1:printf("欢迎您进行加法运算测试,如需退出请输:99999\n");symbol='+';break;
case 2:printf("欢迎您进行减法运算测试,如需退出请输:99999\n");symbol='-';break;
case 3:printf("欢迎您进行乘法运算测试,如需退出请输:99999\n");symbol='*';break;
case 4:printf("欢迎您进行除法运算测试,如需退出请输:99999\n");symbol='/';break;
case 5:printf("欢迎您下次再来测试\n");
printf("您本次测试共完成%d道题,其中%d道回答正确,正确率为:%f.本次获得积分%d分...\n",sum,right,precent,right);
break;
default:printf("您输入答案形式有误,请输入正确的形式:\n");choose();
}
}
int ans(int x,int y,int choice)
{
switch(choice)
{
case 1:z=x+y;break;
case 2:z=x-y;break;
case 3:z=x*y;break;
case 4:z=x/y;break;
}
return(z);
}
void operation()
{
random();
printf("%d%c%d=",x,symbol,y);
z=ans(x,y,choice);
answer=scan();
if(z==answer)
{
printf("恭喜您,回答正确.\n");
right++;sum++;
operation();
}
else if(answer==99999) choose();
else
{
printf("不正确,正确答案为:%5d\n",z);
sum++;
operation();
}
}
void main()
{
printf("欢迎您来到四则运算测试系统(请每次输入后以Enter键结束)\n");
choose();
while(choice!=5)
\x05 operation();
}
#include
#include
#include
#include
int scan()
{
char s[100];
int i,t,z=0;
do
{
z=0;
gets(s);
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
if(i >= strlen(s))
for(t=0;s[t]!='\0';t++)
z=z*10+((int)s[t]-48);
else
printf("您输入答案形式有误,请输入正确的形式:\n");
}
while(i < strlen(s));
return(z);
}
int x=1,y=1,choice=0,sum=0,right=0,z=0,answer;
float precent;
char symbol;//(符号)
void random()//随机给出等式
{
srand(time(NULL));
x=rand()%100+1;
y=rand()%100+1;
}
void choose()
{
int operation(int,int,int);
if(sum==0) precent=0.0;
else precent=(float)right/sum;
printf("\n如需进行加减乘除运算测试,请分别输:1(加法运算)、2(减法运算)、3(乘法运算)、4(除法运算)\n");
printf("如需退出请输:5(退出运算)\n");
choice=scan();
switch(choice)
{
case 1:printf("欢迎您进行加法运算测试,如需退出请输:99999\n");symbol='+';break;
case 2:printf("欢迎您进行减法运算测试,如需退出请输:99999\n");symbol='-';break;
case 3:printf("欢迎您进行乘法运算测试,如需退出请输:99999\n");symbol='*';break;
case 4:printf("欢迎您进行除法运算测试,如需退出请输:99999\n");symbol='/';break;
case 5:printf("欢迎您下次再来测试\n");
printf("您本次测试共完成%d道题,其中%d道回答正确,正确率为:%f.本次获得积分%d分...\n",sum,right,precent,right);
break;
default:printf("您输入答案形式有误,请输入正确的形式:\n");choose();
}
}
int ans(int x,int y,int choice)
{
switch(choice)
{
case 1:z=x+y;break;
case 2:z=x-y;break;
case 3:z=x*y;break;
case 4:z=x/y;break;
}
return(z);
}
void operation()
{
random();
printf("%d%c%d=",x,symbol,y);
z=ans(x,y,choice);
answer=scan();
if(z==answer)
{
printf("恭喜您,回答正确.\n");
right++;sum++;
operation();
}
else if(answer==99999) choose();
else
{
printf("不正确,正确答案为:%5d\n",z);
sum++;
operation();
}
}
void main()
{
printf("欢迎您来到四则运算测试系统(请每次输入后以Enter键结束)\n");
choose();
while(choice!=5)
\x05 operation();
}
▼优质解答
答案和解析
scan函数中第一个for循环:
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
此处有问题,因为你如果输入的第一个字符是个负号的话,那么i=0时就回Kill掉for循环,所以后边的if(i >= strlen(s))这个条件判断为假倒至其走到else分支
改动的方法就是将那个第一个for循环里边的if条件改为如下:
if(!(s[i] == '-' ||s[i]>'0' && s[i]
for(i=0;s[i]!='\0';i++)
if(s[i]'9') break;
此处有问题,因为你如果输入的第一个字符是个负号的话,那么i=0时就回Kill掉for循环,所以后边的if(i >= strlen(s))这个条件判断为假倒至其走到else分支
改动的方法就是将那个第一个for循环里边的if条件改为如下:
if(!(s[i] == '-' ||s[i]>'0' && s[i]
看了这个程序运行减法的时候有错误....的网友还看了以下:
电路分析的一些问题电路分析中说i跟u方向相同也就是i要流向u的正极那么p=i*u,方向不同就p=-i 2020-03-31 …
为什么在一个u形管中,一段封闭了,另一端接上了真空环境,那么气体的压强就等于u形管两端水银柱的高度 2020-05-17 …
步和哪个字押韵押韵都是遵循一个规律,就是韵母相同。“助”字的韵母是一个“u”,因此,和“步”押韵的 2020-06-08 …
用图象法计算电动势和内电阻时,先要描点,就是在U-I坐标系中描出与每组I、U值对应的点,以下说法中 2020-06-25 …
一台电动机的额定电压为U,电流为I,电阻为R,当它正常工作时,电动机的功率为什么不是U^2/R功率 2020-07-04 …
aoeiu(u的旁边是一个比U上面多了两点的,后面就以V代替)aieiuiaoouiuieveer 2020-07-28 …
在欧姆定律公式中,I、U、R三个量是对(同一/不同)导体、(同一/不同)工作状态而言的,也就I、U 2020-07-29 …
已知z=f(u,v)可微,u=u(x),v=v(x)可导得dz/dx=limΔz/Δx为什么不是(Δ 2020-11-24 …
纯电感交变电路中[U=U反设有纯电感交变电路,由于无电阻,电能全部转化为磁场能.这样一来就得到U=U 2020-11-27 …
yong的韵头、韵腹、韵尾是?long的呢?为什么我看参考书yong的是i,o,ng,而long就是 2020-11-28 …