c语言 求小学生算术题(输出不知怎么的,求大神解答)

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int sum(int a,int b)
{
return(a+b);
}
int sub(int a,int b)
{
return(a-b);
}
int chen(int a,int b)
{
return(a*b);
}
int chu(int a,int b)
{
return(a/b);
}
void SIZE()
{
int a,b,c,d,e,x,i=0,k;
char op,f;
srand((unsigned)time(NULL));
printf("\n小朋友你好,现在开始做四则运算了,你准备好了吗?按enter继续\n");
getchar();
for(k=0;k<=9;k++)
{
loop:a=rand()%10+1;
b=rand()%10+1;
e=rand()%4+1;
x=e;
switch(x)
{
case 1:op='-',d=sub(a,b);break;
case 2:op='+',d=sum(a,b);break;
case 3:op='*',d=chen(a,b);break;
case 4:op='/';
if(a%b==0)
{
d=chu(a,b);
}
else
{
goto loop;
}
}
printf("%d%c%d=\n",a,op,b);
koop:scanf("%d",&c);
if(c==d)
{
printf("正确\n");
}
else
{
printf("错误\n你想纠正你的答案吗?请选择“Y”或者“N”\n");
scanf("%c",&f);
if(f=='Y'||f=='y')
{
goto koop;
}
else
{
i++;
}
}
}
printf("你错误%d道题,得了%d分\n",i,100-i*10);
}
int main(void)
{
SIZE();
return 0;
}

看了你的程序,基本能完成所需的功能,但是逻辑混乱
说实话,好几个要求都没有达到,这个题目需要数组
goto在c中尽量少使用,用循环完全可以达到目的
加减乘除完全不需要子函数,直接在size中写就可以

先声明几个数组(abxd都是数组),
开始循环生成这30个数
随机生成op(也是数组)后,如果不是除,那么就不需要判断第二个是否为了零和整除了
这样生成10个题目,计算d

随后开始屏幕打印可输入结果
接着打印统计结果和正确错误题目

接着对错误的处理,这里需要一个大的死循环。for(;;)或者while(1),把上面的都包含起来
跳出的条件是输入y对错误处理

给你基本的框架,需要的自己填写吧

int a[10],b[10],c[i],x[10],d[10],i;
char op[10];
while(1) //这个用了对错误处理

{
for(i=0;i<10;i++)
{
x[i]=rand()%4+1;
ab生成随机数
if(x[i]==4) //处理除法

while(1)
{
if(b[i]!=0&&a%b=0)
break;

ab生成随机数
}
switch(x) //赋值d和op

{
case 1:op[i]='-',d[i]=a[i]+b[i];break;
case 2:op[i]='+',d[i]=a[i]-b[i];break;
case 3:op[i]='*',d[i]=a[i]*b[i];break;
case 4:op[i]='/';d[i]=a[i]/b[i];break;
}
}

for(i=0;i<10;i++) //做题

{
printf("%d\t%d%c%d=\n",i+1a,op,b);
scanf("%d",&c[i]);
if(c[i]==d[i]) //这个if--else判断是正确错误的判断,x是标示

x[i]=1;
else
x[i]=0;

system("cls"); //如果需要清屏,加代码

}
for(i=0;i<10;i++) //打印结果
if(x[i]==0)
printf("%d\t%d%c%d=%d\t错误\n",i+1a[i],op[i],b[i],c[i]);
else
printf("%d\t%d%c%d=%d\t正确\n",i+1a[i],op[i],b[i],c[i]);
//下面是对错误的处理
printf("错误\n你想纠正你的答案吗?请选择“Y”或者“N”\n");
scanf("%c",&f);
if(f=='Y'||f=='y')
{
for(i=0;i<10;i++)
{
if(x[i]==0)
打印错误的题目,改正

}

}如果还有错误,还需改正,那么从打印结果到这来再用一个while死循环包含起来

}

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-05
要用数据结构吧,你这明显没用啊。
应该就用线性链表存每次的运算符和操作数,还有结果的正确与否。
运算符用随机数在4以内产生,操作数10以内产生,若为除法运算符则要求第二个操作数不为0,否则重新生成。
把每次运算结果与输入对比,将结果在结点对应域记录下来,链接到链表上,再生成下一组。
循环10次就完了。
第2个回答  2012-12-05
程序具体没看,但给你一个建议,不要用goto,对你好,对别人也好
第3个回答  2012-12-06
你这个除法 你觉得算3除以4会得到什么结果
第4个回答  2012-12-05
case 1:op='-',d=sub(a,b);break; // op = '-' 后面应该是“;”,其它case也要改。

C语言编一个小学生算术题程序,求大神!!
do { printf("请输入密码(Ctrl + C 退出) : ");gets(s);}while(strcmp(s,password));menu();

C语言编写程序求小学算术题,求大神帮改错
这样就行了。swich 语句后面不用加;case和后面的表达式用而个空格 隔开要 。char a 要在最前面定义。引用 switch(表达式){ case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;……case 常量表达式n:语句n;break;default:语句n+1;break;} ...

c语言 再做一年级的算术题
int main(){ float d1,d2;char op;printf("please input d1 op d2\\n");printf("for example:\\n");printf("1 + 2\\n");printf("4 - 3\\n");printf("5 * 6\\n");printf("6 \/ 3\\n");printf("10 %% 3\\n");printf("===\\n");scanf("%f %c %f",&d1,&op,&d2);sw...

c语言高手来看看这道题怎么做???\/
int func1(){ int a,b,c,d,e,f,g,h,i,j,marks=0;printf("这是一年级学生的10个算术题:\\n");printf("1+6=");scanf("%d",&a);if(a==7)marks++;printf("2+3=");scanf("%d",&b);if(b==5)marks++;printf("3+8=");scanf("%d",&c);if(c==11)marks++;printf("...

C语言:!(x+y)+z-1 && y+z\/2 跪求高手解答 不胜感激。 谢谢!!
先算(x+y),再算(x+y)-z,再算(x+y)-z-1。若(x+y)-z-1的结果为非零数,则!(x+y)-z-1的值为0。(x+y)-z-1的值为0,则!(x+y)-z-1的值为1。先算z\/2,再算y+z\/2。若y+z\/2的值为0,那么整个表达式的值为0。若左边(x+y)-z-1的结果为1 ,y+z\/2...

急求:C语言小学生算法练习软件
void addScore(int x,int y, int z ,char op)\/\/获得成绩值,x,y是两个计算的数,z是计算结果,c是运算符号,z是总分 { int s;printf("%d %c %d=",x,op,y);scanf("%d",&s);if(s==z){ sumScore=sumScore+10;corrN ++;} else { printf("你的答案错误,请重新输入答案!\\n")...

求C语言高手帮忙解答,感激不尽
1-5 CDCBC 6-10 BDABC 对错对对错 对对错错对 不懂问下,或百度。

一道c语言编程题,求教
思路分析:首先建立一个缓冲数组,由于题目要求输入的数据个数不超过两位,所以,数据的位数设为100即可,即BUF[100]; 当检测到输入,(+,-,*,\/)的时候,停止输入,并将前面的树,用求最大最小的算法(查找法)找出其最大值和最小值(这个算法也可以在输入的时候同时操作!),当输入“=”的...

在c语言中,int a=9;表示式(++a*2\/3)的值为多少?求大神解释一下
在c语言中,int a=9;表示式(++a*2\/3)的值为多少?求大神解释一下 开始时a的值为9,然后语句++a*2\/3,先执行++a,此时a的值为10(因为是前置),然后a*2\/3=20\/3=6(因为整数除是不进位取整的)++a*2\/3等价于(++a)*2\/3 c语言中表达式a=5<<2;a的值为多少?<<是移位运...

c语言怎么求余数?
在C语言中,求余数可以使用取模运算符 % 来完成。取模运算符 % 用于计算两个数相除的余数,它的语法如下:c复制int result = a % b;其中,a 和 b 是要求余数的两个整数,result 是计算得到的余数。以下是一个示例程序,演示如何使用取模运算符 % 求两个数的余数:c复制#include <stdio.h>...

相似回答