编写一个程序,由计算机随机出10个题,完成100以内整数(1~100)的加减乘除运算,其中运算数运算符随机产生,其运算结果都为整数(四舍五入)。
计算机出题后,由用户输入答案,计算机判断输入的答案是否正确,最后统计得分。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//用于随机生成1~100之内的整数
int randInt(){
int a;
a=rand()%100+1;//rang()用于随机生成一个整数,rand()%100:表示求的0~99的整数
return a;
}
//用于随机生成1~4之内的整数,用来表示+-*/符号
int randchar(){
int a;
a=rand()%4+1;
return a;
}
int main(){
int i,j=0;//j计算对了多少道题
int ch,a,b,result=0; //ch表示运算符对应的数字,a,b用来储存操作数,result用来保存用户答案
int right[10];//用来储存题目正确答案的
int score=0;//用来计算分数,一道题10分,总分100
//随机生成题目
for(i=1;i<=10;i++){
a=randInt();
b=randInt();
ch=randchar();
switch(ch){
case 1:
right[i-1]=a+b;//储存正确答案
printf("第%d题:%d+%d=\n",i,a,b);
break;
case 2:
right[i-1]=a-b;//储存正确答案
printf("第%d题:%d-%d=\n",i,a,b);
break;
case 3:
right[i-1]=a*b;//储存正确答案
printf("第%d题:%d*%d=\n",i,a,b);
break;
case 4:
right[i-1]=(int)((float)a / b + 0.5);//进行四舍五入,储存正确答案
printf("第%d题:%d/%d=\n",i,a,b);
break;
}
}
//
printf("请输入你的答案:\n");
for(i=0;i<10;i++){
printf("第%d题结果:",i+1);
scanf("%d",&result);
if(result==right[i]){score=score+10;j++;}
}
printf("你一共对了%d道题,总分%d",j,score);
return 0;
}
运行截图:
解答如下,cal()函数计算除法结果四舍五入
解题分析:生成两个操作数a和b,再生成一个运算符op,用anw存储答案,然后输入数保存为input,输入数与答案比较,相等则为对,否则为错。每对一题加10分,错题不得分。
函数及功能:
int randInt();生成1-100的整数
int randOp();生成0-3的整数,0-3表示+-*/
int cal(int a ,int b);计算a/b的结果,四舍五入
#include<stdio.h>
#include <time.h>
#include<stdlib.h>
int randInt()
{
return rand()%100+1;
}
int randOp()
{
return rand()%4;//生成0~3之内的整数,用来表示+-*/符号
}
int cal(int a ,int b)
{
double c=(double)a/b;
if(c-(int)c>0.5) return (int)c+1;
else return (int)c;
}
void test()
{
int a,b,op;
int anw;
char Op[]="+-*/";
int score=0;
int count=0;
int number=10;
for(int i=0;i<number;i++)
{
a=randInt();
b=randInt();
op=randOp();
printf("第%d题:%d%c%d=\n",i+1,a,Op[op],b);
if(op==0)
anw=a+b;
else if(op==1)
anw=a-b;
else if(op==2)
anw=a*b;
else if(op==3)
anw=cal(a,b);
//anw=a/b;
printf("请输入第%d题答案:",i+1);
int input=0;
scanf("%d",&input);
if(anw==input)
{
printf("答案正确\n");
score+=100/number;
count++;
}
else
{
printf("答案错误\n");
printf("正确答案为:%d\n",anw);
}
printf("当前分数为:%d\n\n",score);
}
printf("\n答对了%d道题,总分%d",count,score);
}
int main()
{
srand(time(NULL));
test();
return 0;
}
用随机数生成数值和运算符就行。运算符就产生1-4,分别对应加减乘除
其运算结果都为整数(四舍五入)----这个要确定一下,5/2=3吗?
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main ()
{
//编写一个程序,由计算机随机出10个题,完成100以内整数(1~100)的加减乘除运算,其中运算数运算符随机产生,其运算结果都为整数(四舍五入)。
//计算机出题后,由用户输入答案,计算机判断输入的答案是否正确,最后统计得分。
srand(time(NULL));
int a,b,opr,r,ur=0,count = 0;
for(int i=0;i<10;i++)
{
a = rand()%100+1;
b = rand()%100+1;
opr = rand()%4+1;
switch(opr)
{
case 1://加法
printf("%d + %d = ",a,b);
r = a+b;
break;
case 2:
printf("%d - %d = ",a,b);
r = a-b;
break;
case 3:
printf("%d * %d = ",a,b);
r = a*b;
break;
case 4:
printf("%d / %d = ",a,b);
r = a*1.0/b+0.5;
break;
}
scanf("%d",&ur);
if(ur == r)
{
printf("正确!\n");
count++;
}
else
printf("错误!\n");
}
printf("总得分为:%d\n",count);
return 0;
}
解题分析:
这道题可以分6个步骤:
1.for循环10道题
2.rand随机数函数产生随机运算符号和数字
3.输出题目
4.输入题目
5.判断正确还是错误
6.结束循环,输出得分
其中最难的可能是随机数函数。
rand函数的头文件是:
#include <cstdlib>
但是如果没加srand()初始化随机数发生器,会发现rand虽然产生了随机数,但是重复运行会发现随机数
不会变。同样是下面对应的两个数。用户未设定随机数种子时,系统默认的随机数种子为1。
rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。
一般常写成:srand(time(NULL));
接下来放上源代码:
这个是C++版的:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n=0,cnt=0;
for(int k=1;k<=10;k++){
cnt++;
srand(time(NULL));
int x=rand()%100,y=rand()%100+1,p=rand()%4;
double ans,res;
cout<<"第一题:";
switch(p){
case 0:
cout<<x<<"+"<<y<<"="<<endl;
res=x+y;
break;
case 1:
res=x-y;
cout<<x<<"-"<<y<<"="<<endl;
break;
case 2:
res=x*y;
cout<<x<<"*"<<y<<"="<<endl;
break;
case 3:
res=x/y;
cout<<x<<"÷"<<y<<"="<<endl;
break;
}
cout<<"请输入答案:";
cin>>ans;
if(res==ans){
cout<<"回答正确!"<<endl;
n++;
}
else cout<<"回答错误…"<<endl;
}
cout<<"得分:"<<n*10<<endl;
return 0;
}
这个是C语言版的:
#include<stdio.h>
#include<time.h>
#include<cstdlib>
using namespace std;
int main()
{
int n=0,cnt=0;
for(int k=1;k<=10;k++){
cnt++;
srand(time(NULL));
int x=rand()%100,y=rand()%100+1,p=rand()%4;
double ans,res;
printf("第%d题:",cnt);
switch(p){
case 0:
printf("%d+%d=\n",x,y);
res=x+y;
break;
case 1:
res=x-y;
printf("%d-%d=\n",x,y);
break;
case 2:
res=x*y;
printf("%d*%d=\n",x,y);
break;
case 3:
res=x/y;
printf("%d/%d=\n",x,y);
break;
}
printf("请输入答案:");
scanf("%d",&ans);
if(res==ans){
printf("回答正确!\n");
n++;
}
else printf("回答错误…\n");
}
printf("得分:%d",n*10);
return 0;
}
效果: