C语言求助,这段什么意思,求解释

voidPos(intx,inty){COORDpos;HANDLEhOutput;pos.X=x;pos.Y=y;hOutput=GetStdHandle(STD_OU... void Pos(int x, int y)
{
COORD pos;
HANDLE hOutput;
pos.X = x;
pos.Y = y;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
}
展开
 我来答
SGZ我爱罗
2019-09-11 · TA获得超过264个赞
知道答主
回答量:49
采纳率:0%
帮助的人:64.7万
展开全部

这是一个加密字符串的程序。

首先来分析这个程序的几个函数:

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,结果看截图:

chinaboyzyq
2019-09-10 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:3172万
展开全部
设置控制台光标到x,y指定的位
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
直角世界的博客
2019-09-10 · TA获得超过106个赞
知道小有建树答主
回答量:91
采纳率:89%
帮助的人:35.8万
展开全部
设置命令行的光标位置。你可以试试呀。
COORD啊HANDLE啊都是命令行有关的类,这个是标准写法,不用太管,只要知道先搞到
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
然后设置个位置类:
COORD pos;
pos.X = x;
pos.Y = y;
再提交:
SetConsoleCursorPosition(hOutput, pos);
就可以了。
追问
这些单词是固定函数,还是自己定义的啊
追答
固定的。在头文件Windows.h里定义的,不能改名。就相当于其他的vector一类的东西一样,是别人给你写好的函数和类。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式