当前位置:编程学习 > C/C++ >>

恺撒密码C语言加密解密程序 不要C++ VB BC 的

答案:
边锋密码保护计算器
#include <stdio.h>
#include <conio.h>


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




 /*程序的精华部分在第二个子程序,就是void cryptogram(int *)
     
/*这个程序最主要的是程序的健壮性,我们在这上面花了不少心血,程序运行后不管你输入什么非法字符,都会有相应的语句,还支持退格*/
 /*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 conti

上一个:单片机定时器T0100ms定时中断,怎么用C语言实现
下一个:C语言怎么编个实用软件?!满意给加100分。

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,