c语言考试选择题标准化,选择题标准化系统

#include

#include//cls#include//toupper#include//time#include //malloctypedef struct

{

char question[200],A[100],B[100],C[100],D[100];

char key;

}Question;

void menu();

void remenu();

void answer();

void addquestion();

void readfile(Question* qs,int total);

void question1(Question* qs,int i);//输出问题(不输出答案);void question2(Question* qs,int i);//输出问题(带答案)int Total();

void menu()

{

int n;//记录序列号 system("cls");

printf("************************************************************************************************************************\n");

printf("* 单项选择题标准化考试系统 V2.4 *\n");

printf("* *\n");

printf("* ①抽取答题 *\n");

printf("* *\n");

printf("* ②试题录入 *\n");

printf("* *\n");

printf("* ③ 退出 *\n");

printf("************************************************************************************************************************\n");

do

{

printf("┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n");

printf("请输入正确的序列号:\n");

printf("┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n");

scanf("%d",&n);

printf("\n");

}

while(n<1||n>4);

switch(n)

{

case 1:

answer();

break;

case 2:

addquestion();

break;

case 3:

exit(0);

break;

dedault:

printf("错误\n");

}

}

void addquestion()

{

FILE* readf;

char ch;

system("cls");//清屏 printf("*****************************************************************************\n");

printf("试题录入 \n");

printf("*****************************************************************************\n") ;

readf=fopen("question.txt","a");//a为文件追加内容 if(!readf)

{

printf("无法打开文件,打开文件失败\n");

exit(1);

}

printf("请按照以下格式来录入问题、ABCD四个选项及正确答案,并以#结束\n");

printf("例;( )是当前所处历史方位的关键词。\n") ;

printf("新时代\n");

printf("新时期\n");

printf("新阶段\n");

printf("新征程\n");

printf("A\n");

ch=getchar();//读取第一个字符 while(ch!='#')

{

fputc(ch,readf);

ch=getchar();

}

fclose(readf);

remenu();

}

void answer()

{

int i,j,total,n;//i用于索引,j也用于索引同i一起实现生产不重复的随机数组的功能。total用来存储总题目数。n用来存储用户输入的抽取题目数目。 int *a;//生产整型指针,用于建立动态数组 Question *qs;//生成Question型指针,用于建立动态结构数组 int score=0;//用于记分 char an;//存储用户输入的答案

total=Total();//利用Total()函数将总题目数返回给total qs=(Question*)malloc(total*sizeof(Question));

readfile(qs,total);//读取题目

system("cls");

printf("************************************************************************************************************************\n");//美化界面 printf("抽取答题 \n");

printf("************************************************************************************************************************\n");

printf("当前题库题目总数:%d\n",total);

loop1:printf("请输入抽查的题目数量:"); //loop1充当前哨,防止用户输入的n>total scanf("%d",&n);

printf("正在加载...\n");

printf("………………………………………………………………………………………………………………………………………………………………\n");

if(n<=total)

{

//开始生成不重复的随机数组 a=(int*)malloc(n*sizeof(int));//分配空间生成动态数组 for(i=0;i

{

loop2:srand(time(NULL));//srand和rand一起使用,这条语句大家把它看作用rand之前的一个习惯用法(rand为随机数) a[i]=rand()%total; //保证随机数在total内(小于total)(total为总题数) for(j=i-1;j>=0;j--)

{

if(a[i]==a[j])

goto loop2;//如果新抽出的题目(a[i])与已抽出的题目(a[j])一样,跳到loop:后的语句重新抽取a[i]

}

}

}

else

{

printf("超过最大题数,最大题数为%d\n",total);//保证抽出的题目不重复且在系统支持范围内(题目数量不超出总题数) goto loop1;

}

for(i=0;i

question1(&qs[a[i]],i+1);

fflush(stdin);//清空键盘缓冲区 an=getchar();//读取用户输入的答案 while((int)an<65||((int)an>68&&(int)an<97)||(int)an>100)//用强制转换判断用户输入的是否为选项 {

printf("请输入A,B,C,D其中之一作为你的答案\n");

fflush(stdin);

an=getchar();//读取用户输入的答案

}

if((int)an>96&&(int)an<101)//若用户输入的是小写字母,让其转换为大写字母 an=toupper(an);//大小写转换 if(qs[a[i]].key==an);//批改 {

score+=1;//正确+1分 printf("正确\n\n");

}

if(qs[a[i]].key!=an);

{

printf("错误\n正确答案为%C\\n\n",qs[a[i]].key);

}

}

printf("¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤\n");

printf("共%d题,您答对了%d道题\n",n,score);

printf("得分:%f\n",((float)score/n)*100);//评分 printf("¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤\n");

free(qs);//释放分配的内存空间 free(a);//同上 remenu();//返回菜单或退出//试题删除函数():用于删除题目。包含Total(),Readfile(),Putques2(),Remenu()函数

void remenu();

{

int n;

do

{

printf("§返回主菜单§请输入①\n");

printf("§ 退出 §请输入②\n");

scanf("%d",&n);

}while(n<1||n>2);

if(n==1)

menu();

else

exit(0);

}

void readfile(Question* qs,int total);

{

int i=0;

char o;

FILE* readf;

readf=fopen("question.txt","r");//仅打开 if(!readf)

{

printf("打开文件失败\n");

exit(1);

}

for(i=0;i

fscanf(readf,"%s%s%s%s%s%c%c",qs[i].question,qs[i].A,qs[i].B,qs[i].C,qs[i].D,&o,&qs[i].key);

fclose(readf);

}

//计算总题目数函数():功能入其名,利用几个空字符串读取文件内所有题目,读完一题total加一次1。int Total()

{

int total;//total用于存储总题目数 char question[200],A[100],B[100],C[100],D[100];//建立空字符串用于存储读的题目 char key,o;

FILE* readf;

readf=fopen("question.txt","r");

if(!readf)

{

printf("打开文件失败\n");

exit(1);

}

for(total=0;!feof(readf);total++)//每读完一个题目,总题目数+1 fscanf(readf,"%s%s%s%s%s%c%c",question,A,B,C,D,&o,&key);

total-=1;

fclose(readf);//关闭文件 return total;//返回total的值并退出该函数}

//输出题目函数():用于题目的打印。一个打印出来无答案,一个有答案。分别用于抽取答题函数和试题删除函数。void question1(Question* qs,int i);//导入Question型指针,以及当前题目序号i{printf("(%d)%s\n A.%s\n B.%s\n C.%s\n D.%s\n",i,qs->question,qs->A,qs->B,qs->C,qs->D);}

void question2(Question* qs,int i);

{printf("(%d)%s\n A.%s\n B.%s\n C.%s\n D.%s\n 答案:%c\n",i,qs->question,qs->A,qs->B,qs->C,qs->D,qs->key);}

int main()

{

menu();

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值