C语言求助,这段什么意思,求解释
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
} 展开
这是一个加密字符串的程序。
首先来分析这个程序的几个函数:
1.int gcd(int a ,int b);函数
从函数名就能看出这个函数是用来计算a和b的最大公约数的。该函数计算最大公约数的方法很简单,就是穷举1到min(a,b)的数,找出最大的约数。如果楼主对求最大公约数感兴趣可以搜搜“辗转相除法”
2.int encrypt(int m,int k1,int k2);
从函数名也能看出这个函数的用途,就是加密(encrypt)。该加密采用字符映射的方法,将m经过线性运算(a1*m+a2)的结果映射成0-26中的一个数字。%是取模运算,加密算法或HASH算法中最常用的非线性运算符,楼主感兴趣可以搜索“HASH”、“模运算”
3.main函数
main函数的第一个for循环是初始化字符数组m和c的过程,将m和c中的内容都手动赋值为0。
接下来是分别请求用户输入待加密字符串m和加密密钥key1和key2的语句,非常简单,不需多解释。
在接下来的while循环语句是验证key1和key2是否满足加密要求,如果不满足则会要求用户再次输入key1和key2,直至满足要求为止。为什么要对key1和key2有要求呢?因为这个算法采用的是字符映射的方法加密,如果key1和key2都是26的倍数,那么该程序就相当于没有加密效果,举例说明,如果要加密的算法是某一个字符是w,根据加密函数可知w会被映射成下面这个东西:
(w*key1+key2)%26 == (w*key1)%26 + key2%26 == w + 0 == w
所以说根本就没有加密效果。(虽然程序中未对key2进行检查,但key2的影响也是很大的)
最后一个for循环就是具体的加密过程,循环对字符串中的每一个字符进行加密,先用encrypt函数将字符串映射成0-26中的一个数字(很容易看出来这代表26个字母),然后再加上ASCII码'a'(即90),的到最后的结果。
以加密helloworld为例,密钥为123和321,结果看截图:
COORD啊HANDLE啊都是命令行有关的类,这个是标准写法,不用太管,只要知道先搞到
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
然后设置个位置类:
COORD pos;
pos.X = x;
pos.Y = y;
再提交:
SetConsoleCursorPosition(hOutput, pos);
就可以了。
这些单词是固定函数,还是自己定义的啊
固定的。在头文件Windows.h里定义的,不能改名。就相当于其他的vector一类的东西一样,是别人给你写好的函数和类。