提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本文写的是一名刚接触C语言的小白在编写时遇到的一些问题以及解决方法。
要求:1.20道题
2.随机出题,题目顺序不一样
提示:以下是本篇文章正文内容,下面案例可供参考
一、问题一:如何产生随机数(不重复)
对于一名小白来说,刚看到时真的不知道怎么下手。在经过不断思考后,最后采用的是以下方法:
采用随机数的方法:首先我们需要用到随机数函数rand(),以及头文件<stdlib.h>。
用法如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
x=rand();
printf("%d",x);
return 0;
}
但是这用随机数实际上是伪随机数。为什么这么说呢?函数rand()输出的随机数实际上是根据算法计算出来,并不能每次都随机。举个例子,第一次运行会随机输出,一个数,但二次或者多次运行仍是第一次的结果,所以我们还需要另一个函数srand和另一个头文件<time.h>。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int x;
srand(time(NULL));
x=rand();
printf("%d",x);
return 0;
}
此时我们可以输出一个真正的随机数。但此时问题又来了,我们只需要1-20以内的随机数啊,如何控制随机数的范围呢?其实很简单,只需要将代码稍稍修改一下即可,具体操作如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int x;
srand(time(NULL));
x=rand()%20+1;
printf("%d",x);
return 0;
}
现在我们就可以得到1-20之间的随机数了,是不是很简单呢?接下来就是如何让产生的20个随机数不重复:
int i,j,x,a[20]={0};//数组初始化为0
x = rand()% 20 + 1;//生成 1~20 之间的随机数
a[0] = x; //第一个不会重复
for(i=1; i<20; i++)
{ //生成数组前20个随机数
x = rand()%20+1;
a[i] = x;
for(j=0; j<i; j++)
{ //筛选有效随机数
if(a[i] == a[j])
{ //随机数重复,则随机数无效
i-=1;//随机数无效,数组下标减1,重新生成当前数组随机数
break;
}
}
}
到此不重复的随机数就产生了。
二、问题二:如何录入题目
废话不多说,继续讲如何录入题目。我采用的是通过用2维数组方法来存储题目以及选项 ,刚开始没想明白的时候感觉挺难的,后来发现其实非常简单,举例如下:
char tm[20][1000];
char da[20]
strcpy(tm[0],"如果int a=3,b=4;则条件表达式a<b? a:b的值是( )\nA.3\tB.4\tC.0\tD.1\n");//录入第一题
da[0]='A';//配对第一题答案
如此依次将题目录入即可,配合问题一所述,答题系统大体框架基本完成。
总结
提示:这里对文章进行总结:
对我而言,答题系统的主要难点在于随机数的抽取,今天写这篇文章希望可以帮助到跟我一样的新手。大家有什么更好的建议可以评论区一起探讨共同进步。