上个星期,我们老师给我们布置了一道非常变态的作业题。开始一看只有一道题,欣喜若狂,
以为老师终于大发慈悲了一回,结果点开一看,长这样。。。
顿时就傻了眼,对于一个刚接触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函数
以上就是我写代码是遇到的比较棘手的问题,希望能给你带来帮助。
也欢迎各位大佬点评和给出观点,进步是不断在不完善中逐渐完善的!受教了。谢谢!!!