用C语言设计一个简易的选择题答题系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

需要随机出题,题目出现顺序要不一致
产生随机数 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;
}
 
 

总结:以上就是今天要讲的内容,本文仅仅简单介绍了C语言的使用制作简易的答题系统。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值