一道C语言程序设计题,希望有人能帮我做出来

额,老师出的一到题,要很详细,每步步骤都要写出来、希望大家帮忙请看下题目:简单数学计算题测试程序主要功能:1.生成随机的题量和相应的数学计算题(比如30道,每题的基本形式... 额,老师出的一到题,要很详细,每步步骤都要写出来、希望大家帮忙请看下题目:简单数学计算题测试程序
主要功能:
1.生成随机的题量和相应的数学计算题(比如30道,每题的基本形式是两个证书的加减乘除)
2.用户输入每道题的结果
3.计算机计算每道题,并给用户的答案评分,并得出成绩
实现思路:
该题的主要难点在于如何表示这些数学题,而且要保证生成的题目都是随即的,由于每个题目都只是2个数的加减乘除,可以选用3个数组,2个数组分别存储相应的操作数,一个数组用来存储相应的运算符号,还需要两个数组来存放标准答案和用户计算的答案。
(随机函数用random实现,random的原型是 int random(int),用来产生0到指定数之间的随机整数,该函数在头文件stdlib.h中)
题目就是这样,额,刚开始学C语言,所以不懂,希望大家帮个忙。答的好的追加100分、 ,谢谢了!~~
展开
 我来答
百度网友d9f150452
2008-05-24 · 超过43用户采纳过TA的回答
知道小有建树答主
回答量:68
采纳率:0%
帮助的人:88.9万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define max 31//定义产生题量的最大值,可以自己改
void main()
{
int num,right,yi[max],er[max],ch[max],i;
float score,re[max],answer;
char fuhao[4]={'+','-','*','/'};
srand(time(NULL));
num=rand()%(max-1)+1;//产生随机题目数量
for(i=1;i<=num;i++)
{
yi[i]=rand()%101;
er[i]=rand()%50+1;
ch[i]=rand()%4;
switch(ch[i])
{
case(0):re[i]=float(yi[i]+er[i]);break;
case(1):re[i]=float(yi[i]-er[i]);break;
case(2):re[i]=float(yi[i]*er[i]);break;
case(3):re[i]=float(yi[i])/float(er[i]);break;
}
}
right=0;
score=0;
printf("本次共产生了%d道题,开始测试:\n",num);
for(i=1;i<=num;i++)
{
printf("%d:%d%c%d=",i,yi[i],fuhao[ch[i]],er[i]);
scanf("%f",&answer);
printf("正确答案:%-6.2f\n",re[i]);
if(fabs(answer-re[i])<0.01)right++;
}
score=100*float(right)/float(num);
printf("测试结束!\n您共答对了%d道题,得分:%-4.2f\n",right,score);
}
这个程序已经在vc++6.0下调试通过了,如果你的编译器不能显示汉字的话,只要把汉字改成英文就行,如果对该程序有不懂的地方,可以去我的空间留言,告诉我你的联系方式,我会给你解释
一根红梅
2008-05-24 · TA获得超过156个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:150万
展开全部
呵呵 写不出来能来看看不能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天王笑笑神
2008-05-24 · 超过71用户采纳过TA的回答
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:216万
展开全部
有点麻烦,想想还是可以做出来滴,我先试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
很拽的跳蚤灬
2008-05-24 · TA获得超过638个赞
知道小有建树答主
回答量:718
采纳率:0%
帮助的人:0
展开全部
有点麻烦,我试试看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
2008-05-24 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5232万
展开全部
程序如下
#define N 3 改 #define N 30 就是 30道题。
学生答案误差 这里用了 1E-03, 你可以改变要求(因除法运算,有截断误差)
得分这里给对了几道。你可以用 N 计算 得分百分比。

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

#define N 3
void main()
{
char op[4][2]={"+","-","*","/"};
int x[N],y[N],o[N];
float r[N],s[N];
int i,mk=0;
srand((unsigned)time(NULL));
// rand()
for (i=0;i<N;i++){
x[i] = rand() % 500;
y[i] = rand() % 500;
o[i] = rand() % 4;
};

for (i=0;i<N;i++){
switch (o[i]){
case 0: r[i] = (float) x[i] + y[i]; break;
case 1: r[i] = (float) x[i] - y[i]; break;
case 2: r[i] = (float) x[i] * y[i]; break;
case 3: r[i] = (float) x[i] / y[i]; break;
default: break;
};
};

for (i=0;i<N;i++){
printf("Q%d: %d %s %d =\n",i,x[i],op[o[i]],y[i]);
}

printf("enter student results\n");
for (i=0;i<N;i++){
scanf("%f",&s[i]);
}

for (i=0;i<N;i++){
if (abs(r[i] - s[i]) < 1E-03) mk= mk + 1;
}

printf("score: %d",mk);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kkskssk
2008-05-25 · TA获得超过484个赞
知道小有建树答主
回答量:586
采纳率:0%
帮助的人:412万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 30 /*题目数*/
#define MAX 100 /*最大数*/

char op(int i,int a,int b,double *result) {
switch (i)
{
case 0:
*result = a + b;
return '+';
case 1:
*result = a - b;
return '-';
case 2:
*result = a * b;
return '*';
case 3:
if(b) *result = a / (double)b;
else *result = -1.0;
return '/';
}
return 0;
}
int main()
{
int a,b,i,rgt=0;
double result,uresult,score=0.0;
srand((unsigned)time(NULL)); /*设置随机数种子*/
for(i=0;i<N;i++) {
a=rand()%MAX;
b=rand()%MAX;
printf("%d%c%d=",a,op(rand()%4,a,b,&result),b);
scanf("%lf",&uresult);
if(uresult==result) printf("正确\n"),rgt++;
else printf("错误,正确答案是:%.3lf\n",result);
}
score = rgt*(100.0/N);
printf("答对%d道题.分数:%.0lf\n",rgt,score);
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式