标题:判断题答题小程序
Author: plc6666
软工专业 工科男
格言:总有人间一两风,填我十万八千梦。
文章目录
一.程序的由来
本学期学完C语言后,刘老师为了锻炼学生的写代码能力和语言组织能力。特出此题来考察学生。
二.程序的状况
1.程序实现了颜色转换的功能
答对题目用绿色,答错用红色,输入用黄色,不同颜色搭配,使得程序看起来更加的清爽。
下面是代码展示:
void color(const unsigned short textColor)
{
if(textColor>=0 && textColor<=15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textColor);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
下面是效果图:
2.程序能随机抽20题,不重复
这点比较难得地方在于出了题目后不应该让其再次被抽中,要避免重复的概率,我想了很久在这点上面,最后再一次偶然的机会下,灵感来了,眼前一亮,我想了出来。
下面是我的代码展示:
struct ti{
char timu[1000];
char daan[8];
};
struct ti f[25];
for(i=20;i>=1;i--)
{
//求随机数。
//srand(time(0));与下面效果相同
srand((unsigned int )time (NULL));
j=1+rand()%(i);
......//中间省略了一些代码
......
strcpy(f[j].timu,f[i].timu);
strcpy(f[j].daan,f[i].daan);
}
下面是这部分代码的讲解:
这代码的作用就是将随机抽取的题目用完后,将原本放在最后面的题目和答案,占据此题目的下标,除去代码最后几题可能一直重复抽题,题目显示时间过长的问题,从而使得代码运行更加的快。
3.程序能根据你的分数,给出相应的评语
下面是代码展示
void dengji(double s)
{
color(5);
if(s>=90){
printf("很棒哟,请继续保持^_^。");
}else if(s>=70){
printf("不错哟,还要继续加油哦^_^。");
}else if(s>=60){
printf("才刚及格,还要努力呀。");
}else{
printf("还没及格呢>_<,但不要放弃噢,下次一定能行。");
}
}
下面是效果图
4.程序有些人性化^ _ ^
(1)输入小写的字母和大写的字母,效果相同,如t和T,二者等价。
(2)当用户不小心输入的字母不为 t or T or f or F,系统会给出提示,并再次给出机会,让其重新输入。(若还是不知悔改,系统会生气哦)
(3)可以在前面输入空格和回车,也可以输入多个单词,但会以第一个单词为答案。
下面是部分代码展示:
e = 0;
while(strcmp(tijiao,"f")!=0&&strcmp(tijiao,"F")!=0&&strcmp(tijiao,"t")!=0&&strcmp(tijiao,"T")!=0)
{
e ++;
color(4);
if(e<=1)printf("提示:请输入t or T or f or F !!!\n");
else{
printf("是不是有毛病!请看提示!!!\n");
}
color(6);
scanf("%s",tijiao);
flag=0;
while((imp = getchar())!='\n'){
if(flag==0){
color(14);
printf("(按第一个不为空格的单词为你提交的答案)\n");
flag=1;
}
}
}
下面是效果图:
三.我遇到的困难及如何解决的
1.在写这个小程序时,我用的是结构体来存储数据,这样的好处是:
(1)方便增加其他题目,如果你想增加题目,只需把题目和答案存到结构体内即可,调用时也可以一起调用,可以更灵活的调用数据。
(2)有利于后续随机抽题的实现,细心的你应该已经发现,在二.2程序能随机抽20题,不重复中我使用的就是结构体。在我没用结构体的时的代码:
int arr[22];
memset(arr,511,sizeof(arr));//让arr数组每一个元素都为-1
for(i=0;;i++)
{
//求随机数。
//srand(time(0));
srand((unsigned int )time (NULL));
j=1+rand()%20;
if(arr[j]!=-1){
continue;
}
arr[j]=1;
}
这会导致有可能在抽取最后一道题的时候,如果运气不好会一直循环下去,导致时间耗费的比较多,从而成为垃圾程序。
2.在存储你提交的答案时,由于我使用的是scanf(“%s”,tijiao),它遇到空格便停止输入了,但如果你输入了很多单词,它只会读取第一个,其他的留在缓存区里面。
下面是效果图:
为了解决这个坑,我绞尽脑汁的想,不断在网上查资料,功夫不负有心人。最终想到了用下面这段代码来解决。
int imp = 0,flag=0;
while((imp = getchar())!='\n')
{
}
这段代码可以帮助我们清除缓存区的数据。下面是效果图:
以上两点就是我写这个程序遇到的最大的问题,但也是在自己的努力下解决了,所以大家在面临问题的时候也不要放弃呀,相信自己一定能行的,加油(ง •_•)ง!!!
四.写完程序后的心得与体会
刚开始,听到刘老师布置这个任务的时候(特别是说可以输入其他字母的时候),我心想这不是判断题吗,为啥还要输入其他的字母,我当时非常的震惊。后面在深入的去学习如何写这个程序的时候,我才发现刘老师的要求不是很难,后来我便去查资料更深入学习,去让程序变得更加的完美。在学习写这程序的过程中,我明白了自学的重要性,和在网上如何快速的查找自己需要的资料,这种能力培养的重要性。回顾此次的学习,感觉收获满满,使自己在一定的程度上明白了自己的优势和劣势。
五.未来的期待与展望
我希望这次写的程序将只是我迈向高级程序员的第一步,在将来我一定会创作出比这要好的程序。这是我人生新的一个起点,加油!!!!向前冲呀
先赞后看,养成习惯!!!^ _^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持的动力。记得关注我哦!