• XMU C语言程序设计实践(1)


    题目:

    任务1:英雄出世

     

    炎热的夏天午后,小明正在百无聊赖地写c语言程序。忽然,电脑屏幕一阵抖动,浮现下面18×18个看似杂乱无章的数字:

     

      32,  32,  32,  32,  32,  32,  32,  32,  32,  95,  45, 126, 126, 126, 126, 126,  45,  95,

      32,  32,  32,  32,  32,  32,  32,  32,  10,  32,  32,  32,  32,  32,  32,  32,  32,  32,

     -93, -34,  45,  45,  45, -93, -34,  45,  32,  32,  32,  92,  32,  32,  32,  32,  32,  10, 

      32,  32,  32,  32,  32,  32,  32,  32, 124, -93, -83,  32,  32, -93, -83,  32,  96,  92, 

      32,  32,  32, 124,  32,  32,  32,  32,  10,  32,  32,  32,  32,  32,  32,  32, 124,  32,

     -93, -64, -95, -95, -93, -64,  32,  32,  32, 124,  47, 126,  92,  32,  32,  32,  32,  10, 

      32,  32,  32,  32,  44, 126,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 

      32,  32,  32, 124,  32,  32,  32,  32,  10,  32,  32,  32,  32, 124,  32,  32,  32,  32, 

      79,  32,  32,  32,  32,  32,  32,  32,  32,  32,  95,  45, 126,  32,  32,  32,  32,  10, 

      32,  32,  32,  32,  32, 126,  45,  95,  95,  95,  95,  95,  95,  95,  95,  95,  45,  45,

     126,  32,  32, 126,  92,  32,  32,  32,  10,  32,  32,  32,  47,  32,  32,  44,  32,  32, 

      32,  46,  32,  32,  32,  32,  32,  46,  32,  32,  32,  92,  32,  32,  92,  32,  32,  10, 

      32,  32,  47,  95,  44,  39, 124,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32, 

      32,  32, 124,  96,  95,  95,  39,  32,  10,  32,  32,  32,  32,  32,  32, 124,  32,  32, 

      32, 124,  96,  46,  94,  46,  39, 124,  32,  32,  32, 124,  32,  32,  32,  32,  32,  10, 

      32,  32,  32,  32,  32,  32, 124,  32,  32,  32,  44,  40,  32,  32,  41,  47,  32,  92, 

      32,  32,  92,  95,  32,  32,  32,  32,  10,  32,  32,  32,  32,  32,  47,  95,  95, -93,

     -81,  32,  32,  96,  39,  32,  32,  32,  32, -93, -36,  95,  95,  92,  32,  32,  32,  10

     

    同时,天空飘下一张小纸条,上面写着一段神谕:“宽宏的数组,将容纳所见的一切;万能的指针,将把所见的一切化为字符;而后,救世主即将诞生!”。

     

    聪明的你,请帮帮惊慌失措的小明,一起揭开救世主的神秘面纱吧……

     

    任务1的要求

    main函数中,利用数组与指针操作,将救世主的模样正确显示在屏幕上。


     

    任务2:解救神兽

     

    就在救世主面世的一刹那,电闪雷鸣……小明穿越了……成了救世主……

     

    救世主当然不可能是孤独的,他有一只强大的助力兼小宠物——神兽。但是,在上古大战中,神兽被邪恶势力封印在一个叫“pet.txt”的文本文件里了。小明回想起救世主诞生的过程,神兽似乎也可以用类似的方式来唤醒,然而事情真有这么简单吗?小明打开文件后愣住了……

     

    此时,冥冥中似乎有个惹人嫌的家伙夹杂着中英文唠叨什么“16210”,这对小明会有帮助吗?

     

    另外,在救世主的记忆里,想容纳完整的神兽,似乎需要22×46大小的空间,这点也许对保留神兽很重要。

     

    任务2的要求

    实现函数void showFile(char * filename, char *arr, int h, int w)读取pet.txt文件,其中参数fileName的实参应为文件路径名,arr为二维数组首元素的地址,h为高,w为宽,利用在main函数定义的二维数组存放数据,利用指针操作,将神兽的模样正确显示在屏幕上。应在main函数调用showFile函数。


     

    任务3:驯兽高手

     

    费尽周折将神兽解救出来之后,刚从长期封印中苏醒过来的神兽似乎迷失了方向,昏头昏脑地往背离救世主的远方走去。小明哪里舍得前功尽弃,于是口里念念有词,手上频频点指,终于使得神兽调头归来。你知道小明是怎么做到的吗?

     

    任务3的要求

    实现函数void mirrorTrans(char * arr, int h, int w),操作存储神兽的数组,使之水平旋转180度(镜像大法),并把结果显示在屏幕上,其中arr的实参应为二维数组首元素的地址,h为高,w为宽。应在main函数调用mirrorTrans函数。注意:旋转后神兽的形态不应有明显的变化!


     

    任务4:枪林弹雨

     

    随着神兽的封印解开,与神兽同时被封印在文本文件devil.txt的邪恶势力也破茧而出,随即对神兽展开了猛烈的攻击。各种攻击覆盖了神兽所在的22×46的范围。救世主空有百试百灵的治疗术,但是呆头呆脑的神兽却从来不会喊疼,所以救世主需要一个辅助能力,对22×46范围内的任何一个坐标,能马上判断出神兽是否被击中。注意,擦破皮(正好在边缘)也算被击中。你能帮助救世主得到这个能力吗?

     

    已知神兽不会贴近22×46这个范围的四条边沿(即首行、末行、首列、末列都属于不会被击中的位置,显示神兽后也能观察到,这点也许有利于你开发该能力)。

     

    为了证明你正确地开发了该能力,请画出效果图,即把范围内所有不会被击中的位置标注为’*’号,而神兽原本占据的位置显示为空格。

     

    任务4的要求

    1)在main函数调用任务2实现的showFile函数,显示邪恶势力devil的真面目,devil占据空间的大小为16×54

    2)实现函数void coverHit(char * arr, int h, int w)画一个示意图,用’*’号标出22×46范围内所有发生未击中情况的位置点,其中arr为存放神兽的二维数组的首元素的地址,h为高,w为宽。当然,需要在main函数调用coverHit


     

    任务5:终极封印

     

    现在,拯救世界的担子落到了小明的肩上。经过分析,小明发现原来devil.txt的封印方式太逊了,因为文件太冗余了。小明需要掌握一门终极封印术,把devil再次封印。封印术的关键在于:(1)封印文件仍应该能够描述devil的全部信息;(2)封印文件越小,封印效果越好。为此,小明踏上了茫茫的修炼之路,究竟是修炼人族的ASCII码(Easy)?还是矮人族的折叠术(Normal)?还是精灵族的赫夫曼树(Difficult,可查阅数据结构相关介绍)?还是小明自创的独门封印绝技(Amazing!)?决定权在小明手里,让我们拭目以待……

     

    任务5的要求:

    1)实现函数void sealDevil(char * arr, char * filename) devil进行封印,其中arr表示存放devil的二维数组首元素的地址,filename表示新的封印文件的路径名,建议的文件名为“NewSeal”。

    2)实现函数void unsealDevil(char * filename)读取新的封印文件NewSeal,显示解封的结果(即再次把devil完整显示在屏幕上)以证明你的封印过程无误。

     

     

    题目思路:

      【】

      

      1 #include<iostream>
      2 #include<algorithm>
      3 #include<string>
      4 #include<stdio.h>
      5 #include<stdlib.h>
      6 #include<string.h>
      7 #define max(a,b) ((a)>(b)?(a):(b))
      8 #define min(a,b) ((a)<(b)?(a):(b))
      9 #define abs(a) ((a)>0?(a):(-(a)))
     10 #define sqr(a) ((a)*(a))
     11 #define swap(a,b) (a)^=(b),(b)^=(a),(a)^=(b)
     12 #define eps 1e-8
     13 #define MAX 0x7f7f7f7f
     14 #define N1 22
     15 #define M1 48
     16 #define N2 16
     17 #define M2 56
     18 using namespace std;
     19 int n,m,cas,ans,lll;
     20 char a1[]={  32,  32,  32,  32,  32,  32,  32,  32,  32,  95,  45, 126, 126, 126, 126, 126,  45,  95,
     21   32,  32,  32,  32,  32,  32,  32,  32,  10,  32,  32,  32,  32,  32,  32,  32,  32,  32, 
     22  -93, -34,  45,  45,  45, -93, -34,  45,  32,  32,  32,  92,  32,  32,  32,  32,  32,  10,  
     23   32,  32,  32,  32,  32,  32,  32,  32, 124, -93, -83,  32,  32, -93, -83,  32,  96,  92,  
     24   32,  32,  32, 124,  32,  32,  32,  32,  10,  32,  32,  32,  32,  32,  32,  32, 124,  32, 
     25  -93, -64, -95, -95, -93, -64,  32,  32,  32, 124,  47, 126,  92,  32,  32,  32,  32,  10,  
     26   32,  32,  32,  32,  44, 126,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  
     27   32,  32,  32, 124,  32,  32,  32,  32,  10,  32,  32,  32,  32, 124,  32,  32,  32,  32,  
     28   79,  32,  32,  32,  32,  32,  32,  32,  32,  32,  95,  45, 126,  32,  32,  32,  32,  10,  
     29   32,  32,  32,  32,  32, 126,  45,  95,  95,  95,  95,  95,  95,  95,  95,  95,  45,  45, 
     30  126,  32,  32, 126,  92,  32,  32,  32,  10,  32,  32,  32,  47,  32,  32,  44,  32,  32,  
     31   32,  46,  32,  32,  32,  32,  32,  46,  32,  32,  32,  92,  32,  32,  92,  32,  32,  10,  
     32   32,  32,  47,  95,  44,  39, 124,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  
     33   32,  32, 124,  96,  95,  95,  39,  32,  10,  32,  32,  32,  32,  32,  32, 124,  32,  32,  
     34   32, 124,  96,  46,  94,  46,  39, 124,  32,  32,  32, 124,  32,  32,  32,  32,  32,  10,  
     35   32,  32,  32,  32,  32,  32, 124,  32,  32,  32,  44,  40,  32,  32,  41,  47,  32,  92,  
     36   32,  32,  92,  95,  32,  32,  32,  32,  10,  32,  32,  32,  32,  32,  47,  95,  95, -93, 
     37  -81,  32,  32,  96,  39,  32,  32,  32,  32, -93, -36,  95,  95,  92,  32,  32,  32,  10
     38 };
     39 char a2[N1][M1],a4[N2][M2],a44[N2][M2],a5[N2][M2];
     40 int map[N1][M1],u[N1][M1];
     41 int dx[]={-1,1,0,0};
     42 int dy[]={0,0,-1,1};
     43 void work1()
     44 {
     45     int i,j,k;
     46     char *p1=&a1[0];
     47     for(i=0;i<sqr(18);i++)
     48     {
     49         printf("%c",*(p1+i));
     50     }
     51     puts("");
     52 }
     53 void showFile(char *filename,char *arr,int h,int w)
     54 {
     55     int i,j;
     56     FILE *fp2=fopen(filename,"r");
     57     for(i=0;i<h;i++)
     58     {
     59         for(j=0;j<w;j++)
     60         {
     61             fscanf(fp2,"%x",arr+i*w+j);
     62             printf("%c",*(arr+i*w+j));
     63         }
     64     }
     65     fclose(fp2);
     66     puts("");
     67 }
     68 void work2()
     69 {
     70     int i,j,k;
     71     showFile("pet.txt",&a2[0][0],N1,M1);
     72     puts("");
     73 }
     74 void mirrorTrans(char *arr,int h, int w)
     75 {
     76     int i,j,k;
     77     for(i=0;i<h;i++)
     78     {
     79         for(k=w-1;k>=0;k--)
     80         {
     81             char ch=*(arr+i*w+k);
     82                  if(ch=='{')ch='}';
     83             else if(ch=='}')ch='{';
     84             else if(ch=='[')ch=']';
     85             else if(ch==']')ch='[';
     86             else if(ch=='(')ch=')';
     87             else if(ch==')')ch='(';
     88             else if(ch=='/')ch='\';
     89             else if(ch=='\')ch='/';
     90             printf("%c",ch);
     91         }
     92     }
     93 }
     94 void work3()
     95 {
     96     mirrorTrans(&a2[0][0],N1,M1);
     97     puts("");
     98 }
     99 void dfs(int x,int y,int h,int w)
    100 {
    101     int i,j,xx,yy;
    102     if(u[x][y])return;
    103     u[x][y]=1;
    104     for(j=0;j<4;j++)
    105     {
    106         xx=x+dx[j];yy=y+dy[j];
    107         if(u[xx][yy])continue;
    108         if(xx>=0 && xx<h && yy>=0 && yy<w)
    109             if(a2[xx][yy]==0x20 || a2[xx][yy]==0x0D)
    110                 dfs(xx,yy,h,w);
    111             else continue;
    112     }
    113 }
    114 void coverHit(char *arr,int h,int w)
    115 {
    116     int i,j,k,l;
    117     dfs(0,0,N1,M1);
    118     for(i=0;i<h;i++)
    119     {
    120         for(j=0;j<w;j++)
    121         {
    122             if(u[i][j])printf("*");
    123             else printf(" ");
    124                  
    125         }
    126         puts("");
    127     }
    128     puts("");
    129 }
    130 void work4()
    131 {
    132     showFile("devil.txt",&a4[0][0],N2,M2);
    133     coverHit(&a2[0][0],N1,M1);
    134 }
    135 void sealDevil(char *arr, char *filename)
    136 {
    137     FILE *fp5=fopen(filename,"w"); 
    138     int i,j,h=N2,w=M2;
    139     for(i=0;i<h;i++)
    140     {
    141         for(j=0;j<w;j++)
    142         {
    143             fprintf(fp5,"%x ",*(arr+i*w+j));
    144         }
    145         fputs("",fp5);
    146     }
    147     fclose(fp5);
    148 }
    149 void unsealDevil(char *filename)
    150 {
    151     int i,j,h=N2,w=M2;
    152     char ch;
    153     FILE *fp5=fopen(filename,"r");
    154     for(i=0;i<h;i++)
    155     {
    156         for(j=0;j<w;j++)
    157         {
    158             fscanf(fp5,"%x",&a5[i][j]);
    159             printf("%c",a5[i][j]);
    160         }
    161     }
    162     fclose(fp5);
    163     puts("");
    164 }
    165 void work5()
    166 {
    167     int i,j;
    168     sealDevil(&a4[0][0],"NewSeal.txt");
    169     unsealDevil("NewSeal.txt");
    170 }
    171 int main()
    172 {
    173     int i,j,h,w;
    174     work1();
    175     work2();
    176     work3();
    177     work4();
    178     work5();
    179     return 0;
    180 }
    181 /*
    182 
    183 */
    View Code
  • 相关阅读:
    GDUFE ACM-1087
    背包九讲
    OJ4TH|Inverse number:Reborn
    OJ4TH|Let's play a game
    GG第四次作业
    OpenCV(3)其他常用数据类型
    OpenCV学习(2)读取视频和摄像头
    OpenCV(1)读写图像
    GG第三次作业
    GG第二次作业
  • 原文地址:https://www.cnblogs.com/Coolxxx/p/7090727.html
Copyright © 2020-2023  润新知