提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
需要随机出题,题目出现顺序要不一致
产生随机数 1~20
C语言随机数的生成【详解】_星空之路Star的博客-CSDN博客_c语言随机数
及时反馈正确情况,记录同学的准确率
自定义特性
(1) 大小写答案不区分
(2) 答错之后,说明正确答案是什么
(3)一开始什么都不输入,就只输出回车或者空格,也判断为正确
提示:以下是本篇文章正文内容,下面案例可供参考
一、随机数步骤
srand((unsigned int)time(NULL));//设置随机数步骤
for(i=1;i<=20;i++)
{
d:d[i]=rand()%20+1;//设置20个随机数
for(j=0;j<i;j++)
{
if(d[i]==d[j])
{
goto d;//保证随机数不重复
}
}
}
二、完整代码
代码如下(示例):
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int main()
{
char q[21][1000];//用来存放题目
char a[21];//用来存放正确答案
char b[21][1000];//用来存放用户输入的答案
printf("第三大题:选择题(每题5分,一共20题,请将正确的选项填入括号中)\n");
strcpy(q[1],"scanf 函数输入整数时可使用( )格式限定符\nA.%c\tB.%d\tC.%e\tD.%s\n");//输入好题目和选项存入每道题目中
a[1]='B';//将每道题的答案配对好
strcpy(q[2],"已知程序要使用函数printf,则程序必须包含头文件( )\nA.math.h\tB.stdlib.h\tC.stdio.h\tD.ctpe.h\n");
a[2]='C';
strcpy(q[3],"若有定义:int a=5,b=2,c=1;则表达式a-b<c||b==c的值是()\nA.0\tB.1\tC.2\tD.-1\n");
a[3]='A';
strcpy(q[4],"C语言中while和do-while循环的主要区别是( )\nA.do-while的循环体至少无条件执行一次\tB.while的循环控制条件比do-while的循环控制条件严格\tC.do-while允许从外部转到循环体内\tD.do-while的循环体不能是复合语句\n");
a[4]='A';
strcpy(q[5],"C语言对if嵌套语句的规定:else总是与( )配对\nA.第一个if\tB.之前最近的且不带else的if\tC.缩进位置相同的if\tD.之前最近的if\n");
a[5]='B';
strcpy(q[6],"如果int a=3,b=4;则条件表达式a<b? a:b的值是( )\nA.3\tB.4\tC.0\tD.1\n");
a[6]='A';
strcpy(q[7],"结构化程序设计的3种结构是( )\nA.顺序结构,选择结构,循环结构\tB.分支结构,数组结构,循环结构\tC.顺序结构,分支结构,跳转结构\tD.分支结构,选择结构,循环结构\n");
a[7]='A';
strcpy(q[8],"假设有定义:float x=16/5/2.0, y=16/5.0/2; 则 x 和 y 的值分别为( )\nA.1.5 1.6\tB.1.6 1.6\tC.1.5 1.5\tD.1.6 1.5\n");
a[8]='A';
strcpy(q[9],"判断实数 x 属于闭区间 [ a, b ] 的表达式为 ( )\nA.x <= [a, b]\tB.a <= x <= b\tC.a <= x && x <= b\tD.a ≤ x && x ≤ b\n");
a[9]='C';
strcpy(q[10],"表达式3.6-5/2+1.2+5%2的值是( )\nA.4.3\tB.4.8\tC.3.3\tD.3.8\n");
a[10]='D';
strcpy(q[11],"假设所有变量已正确定义,以下for语句不能编译的是( )\nA.for(i=0; i<10, j<10; i++)\tB.for(i=0; j=0; i<10; i++ )\tC.for(i=0; i<10; i--)\tD.for(i=0; j<10; j++)\n");
a[11]='B';
strcpy(q[12],"以下与k=n++等价的表达式是( )\nA.k=++n\tB.n=n+1,k=n\tC.k=n,n=n+1\tD.k+=n\n");
a[12]='C';
strcpy(q[13],"语句while(!E)中的表达式!E等价于( )\nA.E==0\tB.E!=1\tC.E!=0\tD.E==1\n");
a[13]='A';
strcpy(q[14],"C 语言程序中可以对程序进行注释,注释部分必须用的符号是( )\nA.‘{’和‘}’\tB.‘[’和‘]’\tC.‘/*’和‘*/’\tD.‘*/’和‘/*’\n");
a[14]='C';
strcpy(q[15],"当调用函数时,实参是一个数组名,则向函数传送的是( )\nA.数组的长度\tB.数组的首地址\tC.数组每一个元素的地址\tD.数组每个元素中的值\n");
a[15]='B';
strcpy(q[16],"设有数组定义:char array [ ]={“China”};则数组 array所占的空间为( )\nA.4个字节\tB.5个字节\tC.6个字节\tD.7个字节\n");
a[16]='C';
strcpy(q[17],"以下选项中合法的用户标识符是( )\nA.long\tB._2Test\tC.3Dmax\tD.A.dat\n");
a[17]='B';
strcpy(q[18],"即使两个指针变量的类型相同,它们也不能( )\nA.相减\tB.相加\tC.比较\tD.指向同一地址\n");
a[18]='B';
strcpy(q[19],"continue语句用于( )\nA.退出循环程序\tB.退出本次循环\tC.空操作\tD.根据if语句的判断进行选择\n");
a[19]='B';
strcpy(q[20],"设ch是char型变量,其值为G,且有表达式ch=(ch>='A'&&ch<='Z')?(ch+32):ch,表达式的值是\nA.A\tB.a\tC.G\tD.g\n");
a[20]='D';
srand((unsigned int)time(NULL));//设置随机数步骤
int i,j,c=0,flag=0,sum=0;
int d[21]={0};
for(i=1;i<=20;i++)
{
d:d[i]=rand()%20+1;//设置20个随机数
for(j=0;j<i;j++)
{
if(d[i]==d[j])
{
goto d;//保证随机数不重复
}
}
printf("第%d题:%s请输入你的选项:()(按回车进入下一题)\n",i,q[d[i]]);//随机输出每道题
scanf("%s",b[i]);//用户输入答案
int len=strlen(b[i]);
for(j=0;j<len;j++)
{
if(b[i][j]!=' ')
{
c=1;
break;//保证输入空格不跳题
}
}
getchar();//防止按完回车程序退出
if(c==1)
{
if(b[i][j]==a[d[i]]||b[i][j]==a[d[i]]+32)//大小写都算正确
{
printf("恭喜你回答正确,进入下一道题!\n");
flag++;
sum=sum+5;//每回答正确一次加5分
}
else
printf("很抱歉,回答错误,正确答案是%c。进入下一道题!\n",a[d[i]]);//及时反馈正确答案
printf("你当前回答正确了%d道题,当前得分为:%d\n\n",flag,sum);//反映总共答对的题目数量
if(i==20)
printf("恭喜你回答完了所有问题,你的最终得分为:%d\n你的正确率为:%.2f%%\n",sum,sum/100.0*100);//当所有题目抽完了反映用户的正确率
}
}
printf("其中你答对了第\n");
for(i=1;i<=20;i++)
{
if(b[i][j]==a[d[i]]||b[i][j]==a[d[i]]+32)
printf("%d题\n",i);//告诉用户他答对了哪些题目
}
return 0;
}