题目:

任务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完整显示在屏幕上)以证明你的封印过程无误。

题目思路:

  【】

  

 #include<iostream>
#include<algorithm>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define sqr(a) ((a)*(a))
#define swap(a,b) (a)^=(b),(b)^=(a),(a)^=(b)
#define eps 1e-8
#define MAX 0x7f7f7f7f
#define N1 22
#define M1 48
#define N2 16
#define M2 56
using namespace std;
int n,m,cas,ans,lll;
char a1[]={ , , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
-, -, , , , -, -, , , , , , , , , , , ,
, , , , , , , , , -, -, , , -, -, , , ,
, , , , , , , , , , , , , , , , , ,
-, -, -, -, -, -, , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , ,
, , , , , , , , , , , , , , , , , -,
-, , , , , , , , , -, -, , , , , , ,
};
char a2[N1][M1],a4[N2][M2],a44[N2][M2],a5[N2][M2];
int map[N1][M1],u[N1][M1];
int dx[]={-,,,};
int dy[]={,,-,};
void work1()
{
int i,j,k;
char *p1=&a1[];
for(i=;i<sqr();i++)
{
printf("%c",*(p1+i));
}
puts("");
}
void showFile(char *filename,char *arr,int h,int w)
{
int i,j;
FILE *fp2=fopen(filename,"r");
for(i=;i<h;i++)
{
for(j=;j<w;j++)
{
fscanf(fp2,"%x",arr+i*w+j);
printf("%c",*(arr+i*w+j));
}
}
fclose(fp2);
puts("");
}
void work2()
{
int i,j,k;
showFile("pet.txt",&a2[][],N1,M1);
puts("");
}
void mirrorTrans(char *arr,int h, int w)
{
int i,j,k;
for(i=;i<h;i++)
{
for(k=w-;k>=;k--)
{
char ch=*(arr+i*w+k);
if(ch=='{')ch='}';
else if(ch=='}')ch='{';
else if(ch=='[')ch=']';
else if(ch==']')ch='[';
else if(ch=='(')ch=')';
else if(ch==')')ch='(';
else if(ch=='/')ch='\\';
else if(ch=='\\')ch='/';
printf("%c",ch);
}
}
}
void work3()
{
mirrorTrans(&a2[][],N1,M1);
puts("");
}
void dfs(int x,int y,int h,int w)
{
int i,j,xx,yy;
if(u[x][y])return;
u[x][y]=;
for(j=;j<;j++)
{
xx=x+dx[j];yy=y+dy[j];
if(u[xx][yy])continue;
if(xx>= && xx<h && yy>= && yy<w)
if(a2[xx][yy]==0x20 || a2[xx][yy]==0x0D)
dfs(xx,yy,h,w);
else continue;
}
}
void coverHit(char *arr,int h,int w)
{
int i,j,k,l;
dfs(,,N1,M1);
for(i=;i<h;i++)
{
for(j=;j<w;j++)
{
if(u[i][j])printf("*");
else printf(" "); }
puts("");
}
puts("");
}
void work4()
{
showFile("devil.txt",&a4[][],N2,M2);
coverHit(&a2[][],N1,M1);
}
void sealDevil(char *arr, char *filename)
{
FILE *fp5=fopen(filename,"w");
int i,j,h=N2,w=M2;
for(i=;i<h;i++)
{
for(j=;j<w;j++)
{
fprintf(fp5,"%x ",*(arr+i*w+j));
}
fputs("",fp5);
}
fclose(fp5);
}
void unsealDevil(char *filename)
{
int i,j,h=N2,w=M2;
char ch;
FILE *fp5=fopen(filename,"r");
for(i=;i<h;i++)
{
for(j=;j<w;j++)
{
fscanf(fp5,"%x",&a5[i][j]);
printf("%c",a5[i][j]);
}
}
fclose(fp5);
puts("");
}
void work5()
{
int i,j;
sealDevil(&a4[][],"NewSeal.txt");
unsealDevil("NewSeal.txt");
}
int main()
{
int i,j,h,w;
work1();
work2();
work3();
work4();
work5();
return ;
}
/* */

XMU C语言程序设计实践(1)的更多相关文章

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

    •       使用动态链表完成一个简单的商品库存信息管理系统. •       商品信息包括如下字段:商品号.商品名称.商品库存 •       函数 create:接收用户输入的商品号和商品名称的 ...

  2. XMU C语言程序设计实践(4)

    以下实验二选一. 1.使用队列实现迷宫算法,找到最短路径. 2.实现顺序队列和链队列的所有基本操作,InitQueue(&Q):DestroyQueue(&Q):ClearQueue( ...

  3. XMU C语言程序设计实践(3)

    问题描述: 以一个n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍,设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论. 对于本问题需用栈实现“穷举求解”算法,即:从 ...

  4. XMU C语言程序设计实践(2)

    任务一:颠倒的世界 小明最近突然喜欢倒着写字,写出来的句子全是颠倒的,也就是把一句话里的字符全都逆序写,譬如“I Love This Game!”,他就偏偏要写成“!emaG sihT evoL I” ...

  5. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  6. C语言程序设计课程总结

    第一次教授C语言程序设计课程,相比计算机组成原理.arm体系结构等偏向硬件的课程,C的教学方式要灵活一些.计算机组成原理课程偏向理论,哈尔滨工业大学的计算机组成原理是国家精品课,增加了mooc+spo ...

  7. 【任务】Python语言程序设计.MOOC学习

    [博客导航] [Python导航] 任务 18年11月29日开始,通过9周时间跨度,投入约50小时时间,在19年1月25日之前,完成中国大学MOOC平台上的<Python语言程序设计>课程 ...

  8. 2019年春季学期《C语言程序设计II》助教注意事项

    本学期<C语言程序设计II>课程安排 理论课时24(1-12周),实验课时8(13周),课程设计课时16(14-15周) 理论课教学内容 附:教学进度表 本学期实验课和课程设计参考教材 & ...

  9. C语言程序设计实习报告

    C语言程序设计实习报告 简介 语言实践心得体会范文在科技高度发展的今天,计算机在人们之中的作用越来越突出.而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此, ...

随机推荐

  1. Milk(sort+结构体)

    Description Ignatius drinks milk everyday, now he is in the supermarket and he wants to choose a bot ...

  2. 【02】SASS与SCSS

    SASS语法 SASS语法也称之为SASS的缩进语法,其目的是担供一个更简洁的语法.对于一些人来说,更多的是基于于CSS的美学吸引力,用SASS来代替SCSS语法. SASS语法和CSS语法不一样,他 ...

  3. PS学习笔记(03)

    ui到底是什么? 很多同学不知道ui是什么,以为画个ICON图标就是做ui了,导致很多人都忙着画各种各样的图标.这样很容易让那些新人们走错路,最后我想说的是icon不是全部,不要沉迷其中,要学的还有很 ...

  4. Android滚动页面位置指示器:CircleIndicator

     Android滚动页面位置指示器:CircleIndicator CircleIndicator是github上的一个开源的用于页面滚动时候的位置指示器,指示当前页面在总的页面中的位置和前后位置 ...

  5. LA 3890 半平面交

    二分查询答案,判断每一个新形成的向量合在一块能否形成半平面交 #include <iostream> #include <cstdio> #include <cstrin ...

  6. hdu 1564水题Play a game

    #include<stdio.h> int main() {  int n;  while(scanf("%d",&n),n) {   n=n*n-1;   i ...

  7. bzoj 3223 文艺平衡树 splay 区间翻转

    Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 17715  Solved: 7769[Submit][Status][ ...

  8. java中filter的用法

    filter过滤器主要使用于前台向后台传递数据是的过滤操作.程度很简单就不说明了,直接给几个已经写好的代码: 一.使浏览器不缓存页面的过滤器 Java代码   import javax.servlet ...

  9. CodeForces - 601A The Two Routes

    http://codeforces.com/problemset/problem/601/A 这道题没想过来, 有点脑筋急转弯的感觉了 本质上就是找最短路径 但是卡在不能重复走同一个点 ----> ...

  10. 【HDOJ6301】Distinct Values(贪心,set)

    题意:给定一个n个数的数列与m个区间,要求每个区间内的数字互不相同,求使得数列字典序最小的方案 n<=1e5 思路: #include<cstdio> #include<vec ...