c语言 流星雨的实现
题目:流星雨得实现
学院:
班级:
姓名:
学号:
指导教师:
时间:
目录
一课程设计目得 (2)
二设计内容与要求 (3)
三概要设计 (3)
四详细设计 (4)
五运行界面 (5)
六设计总结 (15)
七教师评语 (16)
一课程设计目得
程序模拟一组流星飞向地面得情境,地面用多行#来表示,流星用大写字母表示。
二设计内容与要求
1 内容:程序产生一组流星(比如10个),从屏幕顶部下降飞向
地面。
2 一组流星中,每个流星得字符颜色就是随机得,下降得位置
就是随机得,下降得速度也就是随机得。一个流星下落只能去掉一个#号,当最后一行地面有#被去掉时,程序终止。
三概要设计
○1首先定义二维数组screen表示地面与天空,此数组就是一个24行81列得字符数组。上面得行表示天空,数组单元得值就是空格;最下面得几行(如5行)表示地面,数组单元得值就是’#’;整个屏幕得大小就是80*25,即25行80列, 为了在输出最后一行时不换行滚屏,程序只能利用上面得24行空间。把数组定义成81列得目得就是,每行得最后字符赋值成’\0’,就可以按照字符串得方式输出每行文本了。
○2编写得程序在下降过程中,程序必须知道流星得字符、颜色、位置、速度,因此程序需要定义以下几个数组变量:存放流星字符得数组,存放流星字符颜色得数组,存放流星行位置得数组,存放流星列位置得数组,存放流星下降速度得数组。
○3输出时程序首先输出地面与天空,即输出定义得二维数组screen中得字符串,前21行就是空行,后3行就是#号。这样screen[24][81]得字符矩阵就与整个屏幕对应起来。然后随时机产生一
组流星数据,包括字符、颜色、位置与速度。速度用一次下降多少行来表示,最大得速度就是4。由于要随机产生这些数据,因此需要调用random函数。(random函数得原型就是int random(int num); 这个函数产生一个0—num-1之间得一个随机数。流星字符可以这样产生:random(26)+’A’; 流星字符得颜色可以这样产生:random(16)+1;流星下降得位置可以这样产生:random(4)+1;流星得行位置一开始都就是1; 流星得列位置可以这样产生:random(80)+1;但要保证所有流星得列位置不能相同。调用random之前,用randomize()库函数进行初始化。两个库函数都在stdlib、h文件中。)设置后,每个流星按照自己得速度下落,所谓得下落就就是逐行移动流星字符: 在下一行新得位置上显示流星字符,在原来得位置上显示空格以便擦除流星字符,然后再延迟等待几十毫秒。这样循环往复就构成了流星下落得动画。但要注意,流星得速度各不相同,而一次下落多行得流星也要逐行下落。如果流星得新位置所对应得screen得单元格得值就是’#’,则表示撞到了地面。这种情况下在流星得新位置上输出空格,擦除#号,并且对screen相应得单元赋值为空格,流星字符也要赋值为空格,以表示流星消失。
○4当screen[23]中任何一个单元格就是空格时,程序终止。
四详细设计
模块一:输入天空与地面,天空与地面都就是静止得。
模块二:产生一组流星,流星得表示。
模块三:流行得颜色,位置,速度。
模块四:若碰到#号,流星与#号同时消失。
模块五:若第24行得流星被碰到,程序终止。
五运行界面
1 程序框图
2 程序清单
#include
#include
#include
#include
#define ROW 24
#define COL 81
#define REAL 100
#define NUM 10
#define SPEED 4
int random(int num);
static void setSky();
static void display();
int check_last_row();
void word_n_down();
int word_one_down(int begin,int position,int speed ,int word,int *word_end);
void gotoxy(int x,int y);
char sky_ground[REAL][COL];
int test = 0;
int cycle_end = 0;
int word_end[NUM];
int list = 0;
int begin[NUM];
int position[NUM];
int word[NUM];
int speed[NUM];
int main()
{
int end_flag = 0;
time_t t;
srand((unsigned) time(&t));
setSky();
while(!(end_flag = check_last_row())) {
for(int a=0;a word_end[a] = 0; list = 0; cycle_end = 0; word_n_down(); } system("pause"); return 0; } static void setSky() { for(int b=0;b { for(int c=0;c { sky_ground[b][c] = ' '; } sky_ground[b][COL-1] = '\0'; } for(int d=ROW-5;d for(int e=0;e sky_ground[d][e] = '#'; } sky_ground[d][COL-1] = '\0'; } } static void display() { gotoxy(0,0); for(int f=0;f { printf("%s",sky_ground[f]); } } int random(int num) { return(rand() % num); } int check_last_row() { for(int g=0;g { if(sky_ground[23][g] == ' ') return 1; } return 0; } void word_n_down() { for(int h=0;h { begin[h] = random(ROW-5); position[h] = random(COL-2); word[h] = random(26) + 'A'; speed[h] = random(SPEED)+1; } while(1) { if(cycle_end >= NUM) break; test = list-1; if(test < 0) test = 0; if(check_last_row()) { system("pause"); exit(0); } for(int i=0;i word_one_down(begin[i],position[i],speed[i], word[i],&word_end[i]); list ++; display(); Sleep(200); } } int word_one_down(int begin,int position,int speed,int word,int *word_end) { if((*word_end) == 0) { if(begin+list*speed >= ROW) return 0; sky_ground[begin+test*speed][position] = ' '; if(begin+list*speed >= 19) { for(int z=19;z { if(sky_ground[z][position] == '#') { sky_ground[z][position] = ' '; *word_end = 1; cycle_end ++; break; } } } else { sky_ground[begin+list*speed][position] = word; } } return 0; } void gotoxy(int x,int y) { COORD coord; coord、X=x; coord、Y=y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord ); } 3、系统运行结果 六设计总结 经过一个星期得上机实践学习,使我对C语言有了更进一步得认识与了解,要想学好它要重在实践,要通过不断得上机操作才能更好地学习它,通过实践,我也发现我得好多不足之处,首先就是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C 语言得一些标准库函数不太了解,还有对函数调用得正确使用不够熟悉,还有对C语言中经常出现得错误也不了解,通过实践,使我在这几个方面得认识有所提高。 虽然设计时完成了,但就是我觉得其中还就是由一些不足之处:1、警告句。程序中缺少一些警告句,例如:“就是否真得删除(y/n)?”。2、重名得情况。由于考虑得不周全,没有设计遇到重名 七教师评语 RSA算法 1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。 RSA的安全性依赖于大数难于分解这一特点。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 密钥对的产生。选择两个大素数,p 和q 。计算:n = p * q 然后随机选择加密密钥e,要求e 和( p - 1 ) * ( q - 1 )互质。最后,利用Euclid 算法计算解密密钥d, 满足e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q 不再需要,应该丢弃,不要让任何人知道。加密信息m(二进制表示)时,首先把m分成等长数据块m1 ,m2,..., mi ,块长s,其中2^s <= n, s 尽可能的大。对应的密文是:ci = mi^e ( mod n ) ( a ) 解密时作如下计算:mi = ci^d ( mod n ) ( b ) RSA 可用于数字签名,方案是用( a ) 式签名,( b )式验证。具体操作时考虑到安全性和m信息量较大等因素,一般是先作HASH 运算。RSA 的安全性。RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA 就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 */ #include RC4 加密算法 C 语言实现 代码文件名 RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径 下)编译执行!编译环境 Microsoft Visual C++ 6.0 C-Free 5.0 代码解释 RC4 加密算法是大名鼎鼎的RSA 三人组中的头号人物Ron Rivest 在1987 年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box 长度可为任意,但一般为256字节。该算法的速度可以达到DES 加密的10倍左右。 RC4 算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box 长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示): for (i=0; i } 得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。 RC4加密算法在C++中的实现: RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。 GetKey函数:随机字符串产生器。 ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串非常适合在HTTP中传输。 HexToByte函数:把十六进制字符串,转为字节码。。 Encrypt函数:把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用于传输。 Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。 源代码 以下为Encrypt.h文件代码 #ifndef _ENCRYPT_RC4_ #defi ne _ENCRYPT_RC4_ #in clude 课程设计报告 课程设计名称: C语言程序设计 指导教师: 学生: 学号: 学院:电子信息工程学院 完成时间: 2011年9月27日 嘉应学院电子信息工程学院 1 C语言课程设计说明书 目录 1 需求分析 (1) 2总体设计 (2) 3详细设计 (3) 3.1 换位加密流程图 (3) 3.2 换位解密流程图 (4) 3.3 替代加密流程图 (5) 3.4 替代解密流程图 (6) 4调试与测试 (8) 5测试结果 (8) 6附录 (11) I 1 需求分析 问题描述(实验指导书中已经给出) ①数据的输入和输出;要求使用文件操作。文件(明文,仅限于英文字母)存放在某一已知文本文件中,加密后的文件(密文)存放在另一文件中。 ②换位加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文; ③凯撒加密和解密: 加密:根据密钥(即移位位数,用户从键盘输入)将对应字符进行移位操作,输出密文;解密:输入密文后再输入移位位数则可输出明文; ④统计单词的个数; ⑤退出。 2总体设计 (程序设计总流程图,可以画带流程线的流程图) 此处只需要写出一个流程图就可以了,就是总的那个流程图,请规范的画图。不需要分出2.1和2.2. 开始 welcome() caidan() transpen( ); transpde( ) caesaren( ) caesarde() mingwent miwentongji(byebye() 3详细设计 (各模块功能说明,如函数功能、入口及出口参数说明,函数调用关系描述等 这块大家问题最多了,这里不是写程序代码,而是写流程图里面各个主要函数的作用,函数之间关系的说明。 以第1题为例,此处应为: 3.1 换位加密流程图 流程图 (对流程图加以说明。可以把关键语句放在此处,加以注释说明) 建立mingwen.txt 和miwen.txt 文件 输入密钥n 输入明文到数组r k=strlen(r)j 计算数组r 长度 for i=0 to k 关闭并保存mingwen.txt 文件 打开mingwen.txt 文件 space(h,r) 将明文去空格并放到数组h 中 m=strlen(h) 计算数组h 长度 m%n==0 是 否 hang=m/n hang=m/n+1 j=0 for i=0 to hang for i=m to hang*n z=0 fputc(r[i],mingwen) 将明文存放到mingwen.txt 文件中 for j=0 to n h[i]='a'+j j++ for i=0 to hang zl[i][j]=h[z] z++ for j=o to n zl[i][j]=h[z] z++ C语言实现文件的des加解密实例 c语言中的正则 ,d3.js画矢量图+可拖拽的实现思路 DOM2级事件处理程序跨浏览器兼容事件 ,exel导入/导出和csv文件导入、导出 ,Go http访问使用代理 golang进行socket通讯 ,hessian+hibernate 懒加载处理 ,HTML+CSS代码橙色导航菜单html5 撞球游戏 // get 网络请求 func Get(api string,params .Values)(rs[]byte ,err error){ var *. ,err=.Parse(api) if err!=nil{ fmt.Printf("解析错误:\r\n%v",err) return nil,err } //如果参数中有中文参数,这个方法会进行Encode //iOS KVO注册和监听方法 //C语言websocket编程 .RawQuery=params.Encode() resp,err:=http.Get(.String()) if err!=nil{ fmt.Println("err:",err) return nil,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } // post 网络请求 ,params 是.Values类型 func Post(api string, params .Values)(rs[]byte,err error){ resp,err:=http.PostForm(api, params) if err!=nil{ return nil ,err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } //代码描述:基于GO的黄金数据接口调用代码实例 //关联数据:黄金数据 //css之before and after [代码] [C#]代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using https://www.360docs.net/doc/88512153.html,;RSA加密算法_源代码__C语言实现
RC4加密算法C语言实现
(完整word版)电子系c语言程序设计加密解密
C语言实现文件的des加解密实例
RSA加解密算法C语言的实现