【超星】程序设计基础 字母矩阵

题目名称:字母矩阵

题目描述:用循环语句控制打印如下图形,其中输出的每个字母占用2个字符宽度(空格在前,字母在后)。

字符图形.jpg

  

输入:无

输出:如上图字母矩阵

说明:请同学们根据字母、位置的规律实现该程序。打表爽一时,考试两行泪~

下面先给出最基础的解法,比较繁琐

#include<stdio.h>

int main(void)

{

    char x,y,i=1,j;

    while(i<=6){j=1;y=1;

        while(j<=9){

        if(63+i+j<=73)

        printf(" %c", 63+i+j);

        if(63+i+j>73){

        printf(" %c", 64+y);

        y++;}j++;}

        i++;printf("\n");}

    while(i>6&&i<=11){j=1;y=1;

        while(j<=9){

        if(75-i+j<=73)

        printf(" %c", 75-i+j);

        if(75-i+j>73){

        printf(" %c", 64+y);

        y++;}j++;}

        i++;printf("\n");}

        return 0;

}

下面是用队列思想循环左移和循环右移

 #include<stdio.h>
int main(void)
{
    char a[10]={'A','B','C','D','E','F','G','H','I'};     //初始化赋值
    int j;
    for(int i=0;i<6;i++)
    {
        for(j=0;j<9;j++)
        {
            printf(" %c",a[(j+i)%9]);             //循环左移一位
        }
        printf("\n");
    }
    for(int i=0;i<5;i++)                        //循环打印行
    {
        for (j=0;j<9;j++)                     //打印每行的数
        {
            printf(" %c",a[(4+j-i)%9]);           //循环右移四位
        }
        if(i!=4)                                     //保证最后不换行
            printf("\n");
    }
    return 0;
}

一种防止通过英文字母频率分析解密的方法是使用加密字母对(pair)对英文文本进加 密和解密。Playfair密码就是一种采用这种方法的简单密码。 1. 建立这种密码的密钥的方法如下: ⑴ 首先选择一个单词或词组作为密钥单词。由于密钥单词是建立密钥的唯一依据, 因此加密和解密的双方只要知道密钥单词和密码建立方法(Playfair密码),就 可以方便地建立唯一的密钥。 ⑵ 删除该密钥单词的重复字母,然后,将这些字母(按组成单词的顺序)与字母(除去密钥单词字母外)的其他字母(按字母顺序)一起组成一个5×5 的正方形密钥矩阵。由于正方形矩阵只有25 个位置,所以将I和J视为同一 字母(即矩阵只包含I或J)。例如,我们选择的密钥单词为Spring,则正方形 密钥矩阵字母为: S P R I N G A B C D E F H K L M O Q T U V W X Y Z 2. 使用Playfair密码对单词进的方法是对组成单词的字母从左至右顺序逐对进。 根据被加密字母对在密钥矩阵的位置差异,加密字母对的产生方法分为三种情况: ⑴ 被加密的两个字母在密钥正方形位置既不同且不同,例如被加密字母对为 AM,在正方形找到以这两个字母为顶点的矩形为: S P R I N G A B C D E F H K L M O Q T U V W X Y Z 则这对字母的加密字母对应是该矩形的另一对顶点字母,即GO。 ⑵ 被加密的两个字母在密钥正方形位置是同或同,则只需要简单地对调这两 个字母,例如被加密字母对为HK,则加密字母对为KH;又如被加密字母对为 AF,则加密字母对为FA。 S P R I N G A B C D E F H K L M O Q T U V W X Y Z ⑶ 被加密的两个字母相同,可以视为第⑵情况的特例,则被加密字母对不进任何 变化。 注意,在加密变换过程字母的大、小写保持不变。 例如单词Information根据上述加密变换规则经过In ->Ni, if -> pk, ko -> ft, tr -> qi, im -> st, ta -> oc, ct -> tc, ci -> ic, co -> at, tn -> ui被变换成Npfqsotiaui 3. 解密是对加密单词的字母从右至左顺序逐对进。方法与加密方法相同。 例如加密单词Npfqsotiaui经过iu -> nt, ta -> oc, ci -> ic, ct -> tc, co -> at, ts -> mi, iq -> rt, tf -> ok, kp -> fi, iN -> nI被还原为Information。 要求: 1. 编写一个命名为encrypt的程序,该程序运时能通过命令“encrypt 文件名” 将文件名指定的英文文本文件以读/写模式打开,并通过输入的密钥单词建立正方形 密钥矩阵,再使用该密钥矩阵该将文件的文本加密后,生成一个加密文本文件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

装B且挨揍の

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值