加入收藏 设为首页 帮助中心
 
论坛首页
用户登录 | 用户注册 | 最新悬赏 | 最新贴子 | 会员中心 | 贴子搜索 | 网站地图 | 帮助中心 | 联系我们
站内搜索:
现在位置 > 维库电子开发网论坛 > EDA > 教小学生算术
帖子主题: 教小学生算术
你还没有登录,无法发表回复,请首先 登录.. [注 册]
积分:1500 月半弯
发表于:2007-12-12 16:32:00 楼主
级别:二钻
积分:1500分
注册:2007年11月06日
#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+Thb;break;      /*  计算出正确答案 放在 Tresult中    */
            }
        case 2:        /*  减 的情况   */
           { Tha=random(10);
             Thb=random(10);
             if(Tha<Thb)      /*  减不能的负  所以第一个运算数要比第二个大,如果小,则交换两变量的值   */
                {temp=Tha;Tha=Thb;Thb=temp;}   /*  交换 */
             Tresult=Tha-Thb;break;          /*  计算出正确答案 放在 Tresult中    */
   }
case 3:       /*   乘 的情况  */
           { Tha=random(10);
             Thb=random(10);
             Tresult=Tha*Thb;break;
           }
        case 4:        /* 除 的情况    */
          {do         /*  循环     保证可以除尽      */
            { do            /*  循环保证 除数不为 0 */
                {Tha=random(10);
                 Thb=random(10);

                 if(Tha<Thb)
                 {temp=Tha;Tha=Thb;Thb=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+Thb;break;
            }
        case 2:
           { Tha=random(90)+10;
             Thb=random(90)+10;
             if(Tha<Thb)
                {temp=Tha;Tha=Thb;Thb=temp;}
             Tresult=Tha-Thb;break;
   }
case 3:
           { Tha=random(90)+10;
             Thb=random(90)+10;
             Tresult=Tha*Thb;break;
           }
        case 4:
          {do
            { do
                {Tha=random(90)+10;
                 Thb=random(90)+10;

                 if(Tha<Thb)
                 {temp=Tha;Tha=Thb;Thb=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();    /* 等待用户输入回车结束程序运行 */
 
积分:350 淡紫枫铃
发表于:2007-12-12 16:34:00 1 楼
级别:四星
积分:350分
注册:2007年11月12日
好帖子 死顶, C程序就该这么写, 大量注释 一看就懂;</CC>  
快速回复:
用户名: 密码:  验证码,看不清楚?请点击刷新验证码 注册新帐号?
上传图片格式(jpg/gif/png)和文件格式(rar/pdf)
 
 
网站简介s广告服务网站地图帮助信息联系方式问题报告
Copyright 2007 - 2008 bbs.weeqoo.com
Powered By weeqoo Version 8.0.0XML