C语言——简易判断题答题系统。

前言:

本次程序主要是对随机出题程序的一次简单尝试设计,其中主要涉及到了随机取数简单数组循环、简单输入输出及简单语法if - else的使用,适合初学者的学习。下面列出此次设计程序思路以及所遇到的问题及解决方法等。

整体思路:

一:首先我定义了两个字符数组char timu[100][1000]char daan[100]将我的题目与答案分别保存起来。(题目与答案可自行定义)

 char timu[100][1000]={"1+1=2\n 你的答案: T/F","2+1=1\n 你的答案: T/F","2+5=7\n 你的答案: T/F","3+9=12\n你的答案: T/F","6+9=14\n你的答案: T/F","8+1=9\n你的答案: T/F","6+3=8\n你的答案: T/F","3+1=7\n你的答案: T/F","9+9=0\n 你的答案: T/F","1+1=2\n你的答案: T/F","8+1=9\n你的答案: T/F","1+0=1\n 你的答案T/F","7+2=9\n 你的答案: T/F","16+1=17\n你的答案: T/F","5+5=10\n你的答案: T/F","9+6=8\n你的答案 :T/F","9+2=0\n 你的答案:T/F","17+1=10\n你的答案: T/F","9+8=7\n 你的答案:T/F","50+8=3\n你的答案: T/F"};
    char daan[100]={'T','F','T','T','F','T','F','F','F','T','T','T','T','T','T','F','F','F','F','F'};

二:同样,再次定义两个数组int n[10]char name[10]并结合printfscanf进行学号与名字的输入及保存。

int sum=0,n[10];
    char x,name[10];
printf("姓名:");
scanf("%s",name); 
printf("学号:");

三:利用printf进行有关事项的输出。

printf("**答题开始**\n"); 
printf("判断题(满分为100分,(每题5分)\n");
printf("请输入你的答案:T(正确)/F(错误)(按Enter开始下一题)\n"); 
printf("答--题--开--始------------------------------------------------------------------------------------------------------\n"); 

四:主体函数。

 for(i=0;i<20;i++)
    {
    	srand((unsigned int)time(NULL));
        a=rand()%20;
        printf("第%d题\n",i+1);
        printf("%s\n",timu[a]);
        scanf("%s",&x);

利用循环与得到随机数a,并将随机数a作为数组timu[]的地址,从而实现随机出题。

难点:

1.rand()函数的调用。(用于取随机数)

   注意事项与知识链接:1.rand()函数所产生的随机数的范围:0-32767。

                                       2.在c 语言中rand()函数对应的头文件是:stdlib.h。

   结果:我们会发现调用了rand()函数后可以取得随机数a,但是仍然存在一个问题,即运行程序,每次产生的随机数相等。

2.srand函数的调用。

为了解决出现的随机数相等这一问题,我们调用函数srand。

注意事项与知识链接:1.使用sand()函数时我们需要用srand()函数设置随机数的种子。同样srand()函数需要一个变化的整型作为随机种子。通常我们使用时间作为随机数生成的种子,因为每次程序运行的时间不相同,所以产生的随机数也不相同。

3.time函数。

注意事项与知识链接:我们只需要给time函数传空指针NULL,他会给我们返回当前的时间,这样可以实现时间种子生成随机数。

注意:调用time函数需要给定头文件time.h。

于是,随机取数:srand(unsigned int time(NULL)),a=rand()%20表示生成0-19的随机数a。

4.scanf(“%s”,&x);

出于人性化考虑,用此形式输入字符串可无视错回车键造成答题结束的情况,并且多次输入TTT/FFF与T/F同效。

易错点:1.for循环中的(i=0;i<20)要与a=rand()%20(生成随机数0-19相对应,否则会出现一项输出不出来的情况)。

2.%s用于输入字符串,容易忽略取地址符,由于x之前并未定义,从键盘手动输入,因此需要加取地址符&。

五:判断正误并计数。

if(x==daan[a]||x-32==daan[a])
        {
        	b++;
        	sum=sum+5;
            printf("恭喜你,回答正确,当前回答正确数%d,得分为%d分;\n",b-1,sum);
        }
            else{
            printf("很遗憾,回答错误,当前回答正确数%d,得分为%d分;\n",b-1,sum);
            }

小难点:运用运算符“||”和ASCII码将t/f转换为T/F,即支持小写输入。

六:读取回车及换行。

易错:注意函数最后的读取回车与换行操作(位于循环末)。

     getchar();
            printf("\n");

getchar();//用于读取回车。

printf(“\n”);//换行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值