给一段C语言代码!

Python014

给一段C语言代码!,第1张

#include <stdio.h>

int main(int argc, char *argv[])

{

int i,j,k,n

printf("请输入需要打印的图形的行数:")

scanf("%d",&n)

if(n%2==0) /*分成上下两部分,输入数值n/2 */

n=n/2

else

n=n/2+1

for (i=1i<=ni++) /*输出上半三角形 */

{

for (j=nj>ij--)

printf(" ")

for (k=0k<2*i-1k++)

printf("*")

printf("\n")

}

/* 输出下半三角形*/

for (i=n-1i>0i--)

{

for (j=nj>ij--)

printf(" ")

for (k=0k<2*i-1k++)

printf("*")

printf("\n")

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

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

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