C语言编写一个简单的选择题答题系统

上个星期,我们老师给我们布置了一道非常变态的作业题。开始一看只有一道题,欣喜若狂,

以为老师终于大发慈悲了一回,结果点开一看,长这样。。。

 顿时就傻了眼,对于一个刚接触C语言一两个月的小白来说,不能说不会做,只能说看不懂[哭笑][哭笑]。

但是经过几天的艰苦打拼,最终还是完成了老师交给我们的任务。接下来,就为大家分享一些我写代码时遇到的困难,和解决的方案。

首先我抽到的组是第三组,也就是说要去完成一个20道选择题的答题系统。

困难一

如何保证20道题随机出现?并且20道题里面没有重复的题?

方案一

保证20道题随机出现,我去网上搜寻了一些相关资料,发现rand函数是个不错的选择,(关于rand函数的用法,请观看此文:C语言随机数的生成【详解】_星空之路Star的博客-CSDN博客_c语言随机数

然后就是如何保证抽到的20个随机数里没有相同的数字。

对此我的做法是

	int b[20]=0;
    for (int i = 0;; i++)
	{
	
	   int a = 1 + rand() % 20; 
	    for(int j=0;j<=19;j++)
	{
		if(b[j]==0)
		break;
	}
	  	if(j==20)
	break;
	if(b[a-1]!=0
	continue;
		if(b[a-1]==0)
	b[a-1]=1;}

直至20道题全部抽完为止

困难二

怎样将抽到的随机数去对应相应的题号,从而呈现相应的题目?

方案二

对此我用到了函数指针数组来解决此次难题

  void (*p[20])() = { t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20 }

当产生了一个随机数后,再

p[a - 1]();

去对应相应的题目

前提是每道题目都要用函数的形式表达出来[苦笑][苦笑]

 void t1()
{
    char a[10];
    char b='C';
    int c=0;
    printf("考察内容:c语言局部变量和全局变量\n");
    yanshi(2000);    // 前面定义了延时函数,来达到延时的效果
    printf("变量存储类别寄存器变量使用(  )关键字\n");
    printf("A.auto  B.extern  C.register   D.static\n");
    printf("你的答案是:");
    gets(a);
    for(int i=0;i<=strlen(a);i++)
    {
    	if(a[i]!=b&&a[i]!=b+32&&a[i]!=' ')
    	{
    		c=1;
    		break;
    	}
    }
    if(c==1) 
    printf("答案错误 正确答案是:%c\n",b);
    else {
    sum++;
	printf("恭喜你,回答正确\n");
	}
} 

困难三

如何让输出时的字体变色?

方案三

使输出字体变色我用到的是system函数

具体用法如

system("color 2");	

记得加上头文件 Windows.h

详细用法见此文章

(8条消息) C语言中如何使用system函数_路遥芝麻的博客-CSDN博客_c语言system函数用法

困难四

如何让程序延迟执行?

方案四

对此,我用到的是sleep函数

具体用法如

sleep(1000);   //程序延时一秒执行

同样也是记得加上头文件 Windows.h

详细用法见此文章

(8条消息) Sleep()函数的使用方法详解_无赖H4的博客-CSDN博客_sleep函数

以上就是我写代码是遇到的比较棘手的问题,希望能给你带来帮助。

也欢迎各位大佬点评和给出观点,进步是不断在不完善中逐渐完善的!受教了。谢谢!!!

  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值