四六级考试评分程序

#include<iostream>
#include<cstring>
#include<stdlib.h>
#include<time.h>
#define MAXSIZE 55         //选择题的数量
#define MAXSIZE2 60        //卷子的数量
using namespace std;
float count;                 //计数
int main()
{
    cout<<"  * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
    cout<<"  *  试卷说明:                                   *"<<endl;
    cout<<"  *  共65道选择题,其中1~25为听力,每题7.1分;    *"<<endl;
    cout<<"  *  26~35为完型填空,每题3.55分;                *"<<endl;
    cout<<"  *  36~45为快速匹配,每题7.1分;                 *"<<endl;
    cout<<"  *  46~55为阅读,每题14.2分;                    *"<<endl;
    cout<<"  * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
    int i,k,score;
    char a[MAXSIZE+1],b[MAXSIZE+1];
    count=0.0;k=1;
    srand((unsigned)time(0));    //时间不同,产生的种子也不同
    FILE *fp=fopen("d:\\siliuji.txt","w");
    //生成随机标准答案
    char str[17]="Z";
    char *p;
    int y=1;
    for(i=0;i<55;i++)
    {
        if(i>=35&&i<=44)
           a[i]=rand()%12+65;
           else if(i>=25&&i<=34)
          {
            while(1)
            {
              a[i]=rand()%15+65;             
               p=strchr(str,a[i]);  //检测生成的答案是否重复 
              if(!p)
              {
				   str[y++]=a[i];
                   break;
              }
            }
          }
        else
            a[i]=rand()%4+65;
    }
    //输出标准答案
    for(i=0;i<55;i++)
    {
	   fprintf(fp,"%c ",a[i]);
	   cout<<a[i]<<" ";
       if((i+1)%11==0)
       {
       	   fprintf(fp,"\n");
		   cout<<endl;
       }
    } 
    fprintf(fp,"\n");
    cout<<endl;
    //循环生成60套试卷
     while(k<=60)
     {
         count=0;
		 score=0;
		 char string[17]="Z";
         char *ptr;
         int x=1;
         //生成55道选择题,并与标准答案进行比对
         for(i=0;i<55;i++)
       {
          if(i>=35&&i<=44)
            b[i]=rand()%12+65;
            else if(i>=25&&i<=34)
          {
            while(1)
            {
              b[i]=rand()%15+65;
               ptr=strchr(string,b[i]);
              if(!ptr)
              {
				   string[x++]=b[i];
                   break;
              }
            }
          }
          else
            b[i]=rand()%4+65;
       if(b[i]==a[i])
        {
           count++;
           if(i>=25&&i<=34)
            score+=3.55;
            else if(i>=45)
                score+=14.2;
            else
                score+=7.1;
        }
       }
       //结果输出
     for(i=0;i<55;i++)
       {
         fprintf(fp,"%c ",b[i]);
		 cout<<b[i]<<" ";
         if((i+1)%11==0)
         {
         	fprintf(fp,"\n");
         	cout<<endl;
         }
       }
    fprintf(fp,"第%d套卷子的正确率为:%f%\n",k,(count/55)*100);
    cout<<"第"<<k++<<"套卷子的正确率为:"<<((float)count/55)*100<<"%"<<endl;
    fprintf(fp,"分值为:%d\n",score);
    cout<<"分值为:"<<score<<endl;
    cout<<endl;
     }
   system("pause");
   return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多选题评分程序,C++编写的多选题评分程序。 一张试卷,满分100分,全部是多项选择题。 每道题分数分配有三种方法: (1)每道题满分相同,具体分数由题目数决定。如试卷有20道题,则每题满分为5分。 (2)每道题满分不一定相等,由该题正确答案的选项数与全部题目正确答案的选项数之和的比值决定。如某题正确答案的选项为ACD,其选项数就为3,而全部题目的正确答案的选项数之和为60,那么这道题目的满分为(3/60)*100 = 5分。 (3)每道题满分不一定相等,由出题者指定。 每道题的评分方案有三种: (1)多选少选均不得分。 (2)少选可得部分分数,而多选不得分。如正确答案为AD,那么选A则得该题满分1/2。 (3)选对一个选项得一定分值,选错一个选项扣掉同样的分值,但每道题不应出现负分。 假设正确答案为ACD, 如选AD,那么可以得该题满分的2/3; 如选ABD,那么可以得该题满分的1/3;等等。 注:一张试卷的所有题目实行同样的评分方案。 评分步骤: 每次评分时,按照以下步骤进行,以下是数据结构和接口函数的说明: 通过函数GetQuestionNum()获得试卷中的试题数目; 通过GetPaperAndAnswer()获得试卷信息和标准答案; 通过GetMethod()获得评分方案和每题分数分配方法; 按照每题分数分配方法和评分方案计算成绩; 将成绩通过函数OutputResult输出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值