C语言课题:需要解题分析,yuan代码,运行结果

编写一个程序,由计算机随机出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;
}

运行截图:

img

解答如下,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的结果,四舍五入

img

#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;
}

效果:

img


题主采纳一下呗~谢谢,希望能帮到你。