论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

边锋密码保护计算器

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:46:44

#include <stdio.h>
#include <conio.h>

 /*本程序是为边锋的密码保护用的计算器,第一行是两步结果,第二行是四步结果*/

/*应mb459同学,发表到网上,假如录用,算在mb459上*/
 /*程序大部分是土著人(yujiezuo)做的,我只负责小部分程序及修改调试工作*/

 /*程序的精华部分在第二个子程序,就是void cryptogram(int *),这个是yujiezuo做的,
       当时我们分别用自己的算法,自己写程序,结果我的失败了:-(          */
 /*程序中有一个goto语句,是c#的大忌,假如看懂程序的话,很轻易去掉的
        在main函数里完全可以去掉,这样程序运行一次只能计算一次
 */

/*这个程序最主要的是程序的健壮性,我们在这上面花了不少心血,程序运行后不管你输入什么非法字符,都会有相应的语句,还支持退格*/
 /*progammed by yujiezuo&GW                                                ----GW*/


void thenumber(int g[])                  /*取20位基数,输入20位后自动弹出,无需敲回车*/
{
       int i,c,lenth,y;
       char pr[30]="\nplease input the number:";
       lenth=strlen(pr);
       for(i=0;i<20;i++)g[i]=0;
       printf(pr);
       for(i=0;i<20;i++)
         {
           c=getche();
    if(c==8)
             {
               i-=2;
               printf(" \b");
               if(i<-1)
                 {
                   printf(":");
                   i++;}
               continue;
             }
     g[i]=(c-48);
            if(g[i]>10 || g[i]<0)
             {
               printf("\a");
               if(g[i]==-35)     /*对回车的抵御*/
                {
                  y=wherey();
                  gotoxy(lenth+i,y);
                }
               else printf("\b \b"); /*其余非法字符*/
              i--;
              continue;
                
                
       
             }
         }
 }
                                         

void cryptogram(int g[])             /*取得密码,密码会被*覆盖,程序的精华呀*/
{                                   
  int i,c,k=0,h[20];                 /*k是计数器,花了好长时间才调试出来的*/
  for(i=0;i<20;i++){g[i]=0;h[i]=0;}
  printf("\nplease input your cryptogram:");
  for(i=0;i<20;i++)
    {
      c=getche();
      k++;
      if(c==8)                       /*对退格键的处理*/
        {
         i-=2;
  printf(" \b");
         if(i<-1)                    /*假如还没敲数字就退格就会发生错误,这是对这种情况的处理*/
           {
            printf(":");
            k++;
            i++;
           }
         k-=2;
         continue;
        }
       if(c==13){k=k-1;break;}      /*回车,输入完毕*/
       if(c>58 || c<48)             /*对非数字的处理*/
         {
          k--;
          i--;
          printf("\b \b");
          continue;
         }  
       g[i]=c-48;
       printf("\b*");             /*这个就是用*覆盖密码*/
     }
  for(i=(20-k);i<20;i++)h[i]=g[i+k-20];
  for(i=0;i<20;i++)g[i]=h[i];                  /*总之程序的健壮性是非常好的*/
}                                          


void twoadd(int g[],int h[])         /*(因为20位数太长了,只能放在数组里了),是两个20位数组相加,结果放在第一个数组里*/
{
  int y[21],i;                        /*y[]是进位存储器*/
  y[20]=0;
  for(i=19;i>=0;i--)
    {
     g[i]=g[i]+h[i]+y[i+1];
     y[i]=g[i]/10;
     g[i]%=10;
    }
}

void tenadd(int g[],int h[])        /*两个10位数组相加*/
{
  int z[11],i;                         /*z[]是进位存储器*/
  z[10]=0;
  for(i=9;i>=0;i--)
    {
     g[i]=g[i]+h[i]+z[i+1];
     z[i]=g[i]/10;
     g[i]%=10;
    }
}

void newone(int g[],int h[])         /*生成新的20位数组*/
{
  int i;
  for(i=0;i<20;i++)
   {
    if(!g[i])
     g[i]=10;
    g[i]=h[g[i]-1];
   }
}


void main()
{
  int i,l,a,b;
  int m[20],n[20],x[10],y[10];
next:
  for(i=0;i<20;i++)
    {
     m[i]=0;
     n[i]=0;
    }
  for(i=0;i<10;i++)
    {
     x[i]=0;
     y[i]=0;
    }
  thenumber(m);
  printf("\n\n");
  cryptogram(n);
  twoadd(m,n);
  for(i=0;i<10;i++)
    {
     x[i]=m[i];
     y[i]=m[i+10];
    }
  tenadd(x,y);
  printf("\n\n\n");
  for(i=0;i<10;i++)
    printf("%d",x[i]);
  printf("\n\n\n");
  newone(m,x);
  for(i=0;i<10;i++)
    {
     x[i]=m[i];
     y[i]=m[i+10];
    }
  tenadd(x,y);
  printf("\n\n");
  for(i=0;i<10;i++)
    printf("%d",x[i]);
  printf("\n\n\n");
  printf("press any two same keys to exit\nor press Esc to exit\npress Enter to continue\n");
  a=getche();
  if(a==27)exit();
  if(a==13)goto next;
  b=getche();
  if(a-b)goto next;
}



上一篇:{应用}怎样编制黑白棋(4) 人气:7013
下一篇:{应用}孔明棋,你玩过吗 人气:5643
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058