问题描述:
要思路,要原程序代码,要注示.
本人C语言知识水有限.
解析:
include <stdio.h>/* 调用库函数 */
#include <stdlib.h>/* 调用库函数 */
int Tha/* 变量 表示第一个运算数 */
int Thb/* 第二个运算数 */
int Tresult/* 正确答案 */
int Qcount/* 题目的个数 */
int Upnum/* 升级的分数 */
int Tscore/* 当前得分 */
char op/* 运算符号 */
TestTen() /* 出第一个级别题的函数 */
{
int Userda/* 用户给出的答案 */
int temp/* 临时变量,用于交换两个变量得值 */
op=random(4)+1/* 产生一个1-4之间的随机数,用于表示+ ,- , * , / */
switch(op) /* 判断运算符是什么 */
{
case 1: /* 加 的情况 */
{ Tha=random(10)/* 产生一个0-9之间的随机数 放在第一个运算数 Tha中 */
Thb=random(10)/* 产生一个0-9之间的随机数 放在第二个运算数 Thb中 */
Tresult=Tha+Thbbreak/* 计算出正确答案 放在 Tresult中 */
}
case 2: /* 减 的情况 */
{ Tha=random(10)
Thb=random(10)
if(Tha<Thb) /* 减不能的负 所以第一个运算数要比第二个大,如果小,则交换两变量的值 */
{temp=ThaTha=ThbThb=temp} /* 交换 */
Tresult=Tha-Thbbreak/* 计算出正确答案 放在 Tresult中 */
}
case 3: /* 乘 的情况 */
{ Tha=random(10)
Thb=random(10)
Tresult=Tha*Thbbreak
}
case 4: /* 除 的情况 */
{do /* 循环 保证可以除尽 */
{ do /* 循环保证 除数不为 0 */
{Tha=random(10)
Thb=random(10)
if(Tha<Thb)
{temp=ThaTha=ThbThb=temp}
}while(Thb==0) /* 当除数0 的时候继续产生新的随机数 */
}while((Tha%Thb)!=0)/* 当不能整除的时候继续产生新的随机数 */
Tresult=Tha/Thb
break
}
}
switch(op) /* 根据 op的值决定输出 问题 */
{
case 1: {printf("\n%d + %d = ",Tha,Thb)break}
case 2: {printf("\n%d - %d = ",Tha,Thb)break}
case 3: {printf("\n%d X %d = ",Tha,Thb)break}
case 4: {printf("\n%d / %d = ",Tha,Thb)}
}
scanf("%d",&Userda)/* 用户输入答案 */
while(Userda!=Tresult) /* 判断答案是否正确 */
{ if(Tscore>=10) /* 不正确减分 */
Tscore=Tscore-10
printf("\nWrong! Now Your Score: %d",Tscore)/* 输出错误信息和 当前分数 */
/*if(Tscore<Upnum)
return*/
printf("\n Input The Answer Again: ")/* 提示重新输入 */
scanf("%d",&Userda)/* 用户输入答案 */
}
Tscore=Tscore+10/* 答对了 加分 */
printf("\n Right! Now Your Score: %d",Tscore)/* */
}
TestHun() /*出第二个级别题的函数*/
{
int Userda
int temp
op=random(4)+1
switch (op)
{
case 1:
{ Tha=random(90)+10/* 产生 10-99 之间的随机数,即两位数 */
Thb=random(90)+10
Tresult=Tha+Thbbreak
}
case 2:
{ Tha=random(90)+10
Thb=random(90)+10
if(Tha<Thb)
{temp=ThaTha=ThbThb=temp}
Tresult=Tha-Thbbreak
}
case 3:
{ Tha=random(90)+10
Thb=random(90)+10
Tresult=Tha*Thbbreak
}
case 4:
{do
{ do
{Tha=random(90)+10
Thb=random(90)+10
if(Tha<Thb)
{temp=ThaTha=ThbThb=temp}
}while (Thb==0)
}while ((Tha%Thb)!=0)
Tresult=Tha/Thb
break
}
}
switch(op)
{
case 1: {printf("\n%d + %d = ",Tha,Thb)break}
case 2: {printf("\n%d - %d = ",Tha,Thb)break}
case 3: {printf("\n%d X %d = ",Tha,Thb)break}
case 4: {printf("\n%d / %d = ",Tha,Thb)}
}
scanf("%d",&Userda)
while(Userda!=Tresult)
{ if(Tscore>=10)
Tscore=Tscore-10
printf("\nWrong! Now Your Score: %d",Tscore)
if(Tscore<Upnum) /* 如果分数小于设定的分数则直接推出函数 */
return
printf("\n Input The Answer Again: ")
scanf("%d",&Userda)
}
Tscore=Tscore+10
printf("\n Right! Now Your Score: %d",Tscore)
}
main()
{
int Leiji=0/* 变量 , 存储 累计答题数目 */
randomize()/* 保证每次运行程序 产生的随机数序列不相同的语句 */
clrscr()/* 清屏 : 清除屏幕上上次运行的内容,重新开始运行程序 */
clrscr()
printf("\nTEST START:-------------------------------------")
printf("\n Please Input Question Count: ")/* 提示信息 :输入问题个数 */
scanf("%d",&Qcount)/* 用户输入问题个数 */
do
{printf("\n Please Input UpLevel Score(Times of 10 (Sheng ji de fen shu)) : ")
/* 提示信息 :输入升级分数(10的倍数 ) */
scanf("%d",&Upnum)/* 用户输入升级分数 */
if(Upnum<10) /* 如果用户输入的升级分数<10 */
printf("\n Must >= 10 ! ")
else if(Upnum%10!=0) /* 如果用户输入的升级分数不是10的倍数 :即 整除10 不等于0 */
printf("\n Must Some Times of 10!(10 de bei shu!)")/* */
else break
}while(1)/* 不满足条件永远循环 */
printf("\n--------------------------------------------------------")
printf("\n--------------------------------------------------------")printf("\nTest Start:")
printf("\n--------------------------------------------------------")
printf("\n----------------------------------")
printf("\n Lever 1 Start :")
Begin1:
printf("\n----------------------")
printf("\n Question: %d",Leiji+1)/* 输出 题号 */
TestTen()
Leiji++
if(Leiji==Qcount) /* 如果做题个数 和 事先设定好的问题个数相同 则结束答题! */
{ printf("\n--------------------------------------------------------")
printf("\n--------------------------------------------------------\n")
printf("\n Test Over!!!\n")
printf("\n--------------------------------------------------------")
printf("\n Your Final Score: %d",Tscore)
if(Tscore>=Upnum)
printf("\n Your Final Level: LEVEL 2")
else
printf("\n Your Final Level: LEVEL 1")
goto LastLine
}
if(Tscore<Upnum) /* 分数 小于 升级分数 */
goto Begin1/* 转向到 Begin1 继续作题 */
printf("\n Up To Advance Level!\n Lever2 Start :---------")/* 达到升级分数 升级到 Level2 */
Begin2:
printf("\n----------------------")
printf("\n Question: %d",Leiji+1)
TestHun()
Leiji++
if(Leiji==Qcount)
{ printf("\n--------------------------------------------------------")
printf("\n--------------------------------------------------------\n")
printf("\n Test Over!!!\n")
printf("\n--------------------------------------------------------")
printf("\n Your Final Score: %d",Tscore)
if(Tscore>=Upnum)
printf("\n Your Final Level: LEVEL 2")
else
printf("\n Your Final Level: LEVEL 1")
goto LastLine
}
if(Tscore<Upnum)
{printf("\nDown To Normal Level! Lever1 : -------")/* 从Level2答题过程中分数小于升级分数 降级到Level 1 继续答题 */
goto Begin1}
else
goto Begin2
LastLine:
printf("\n------------------------------------------------")
getchar()getchar()/* 等待用户输入回车结束程序运行 */
}
能根据输入题数出题 什么意思
有个题库?
界面要求:美观简洁 什么标准
作者满意就可?
实现起来应该不难
晚上9点以后我可以帮你做
好办 我帮你写吧 能否多给点分呢 (*^__^*) 嘻嘻……
晚上10点前给你答案
花了一个中午给你编的,还增加了计算分数功能
界面没有做 需要的话再联系
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int Getanum(int num)
{
int a
srand(num*num+time(0))
a=(rand()+num)%10//产生10以内的随机数
return a
}
void main()
{
int i,num,a,b,c,op,error
error = 0//错误数置零
num = 100//使得下面的while循环成立即可
while(!(num>0&&num<10))//只接受10以内的题目数
{
printf("Please input the sum of exam :")
scanf("%d",&num)
}
for(i=0i<numi++)//每次出题开始
{
a = Getanum(i)//第一个 *** 作数
b = Getanum(a)//第二个
op = (Getanum(a+b)+b)/a%2//产生符号 +或者-
switch(op)
{
case 0://+
if(a+b>10)//超过10重新来
{
i--
break
}
else
{
printf("%d : %d + %d = ",i+1,a,b)//出题
scanf("%d",&c)//取输入的结果
if(c != a+b)//答案错误
{
printf("Error!\n")
error++
}
else//正确答案鼓励一下
{
printf("Good!\n")
}
}
break
case 1://-
if(b>a)//保证a>b 使得不出现负数
{
a=a+b
b=a-b
a=a-b
}
printf("%d : %d - %d = ",i+1,a,b)//出题
scanf("%d",&c)//取结果
if(c != a-b)
{
printf("Error!\n")
error++//错误自加
}
else
{
printf("Good!\n")
}
break
default:
break
}
}
printf("%d errors!\n",error)//输出错误数
printf("Your mark is %d .\n",(num-error)*100/num)//所得分数
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)