版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、通信与信息工程学院2012/2013学年 第 二 学期软件设计 实验报告模 块 名 称 visual c+ 专 业 广播电视工程 学 生 班 级 b100117 学 生 学 号 b10011714 学 生 姓 名 王建明 指 导 教 师 田炜 设计题目(1)p021e (2)p018m (3)r019m (4)p006h 任务要求(1)编辑文本;保存、打开指定位置的文本文件;具有输入输出界面。(2)编制不同数制间的转换程序。要求提供输入输出界面,当输完一个任意十进制数字,程序能自动将其转化为另外的数制表示的值,包括二进制、八进制和十六进制。(3)输入一个自然数n,求 ,同时统计结果中有多少个0
2、。(4)输入任意四个整数(0到10),运算符只有加减乘除,还有括号.每个数只能且必须用一次。要求判断这些表达的结果中是否有24。如果有,输出计算表达式:如输入4,6,1,1 输出 4*6*1*1 =24 (允许有括号)。实验设备及软件硬件设备:微型计算机一台jh5001iv型通信教学实验系统软件设备:microsoft visual c+ 6.0同组人员学号及姓名参考文献教材:visual c 6.0教程于涛等 编 科学出版社c语言程序设计 朱立华 王立柱 编著 人民邮电出版社参考书:计算机软件技术实验教程熊壮 编 重庆大学出版社visual c 6.0程序设计自学教程 康博创作室 编著 清华
3、大学出版社c程序设计第三版 谭浩强 编著 清华大学出版社题目一:p021e实验要求: 设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,例如:(1)编辑文本;(2)保存、打开指定位置的文本文件;(3)具有输入输出界面。1、问题分析与方案设计。 本次程序主要为了让我们了解c语言中对于文件的一般操作。文件是程序设计中的一个重要概念。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。c语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)数据顺序组成。根据数据的组织形式,可分为as
4、cii文件和二进制文件。ascii文件又称文本(text)文件,他的每一个字节放一个ascii代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。在文件系统中,“文件指针”是一个非常重要的概念,通常在进行关于文件操作的c程序时,会定义一个结构体变量的文件指针(file *fp),以便于c语言程序能够准确的对文件进行访问及操作。本次实验程序包含了简单地对于文件的打开、插入、删除、查找、替换、显示、保存的操作,通过对于文件指针的运用以及各种文件指令的运用,基本达到了实验的要求。在本次实验中,按照顺序程序的设计方法,加以熟练地运用c程序中主函数与一般函数之间的熟
5、练调用,顺利的实现了实验要求的各种结果。程序中用到的核心方法包括:文件的打开与关闭、文件的读写、文件的定位以及文件的出错检测等。其中包括了fopen、fclose、fputc、fgetc、fread、fwrite、rewind、fseek、ftell和ferror等函数。这些函数对算法的实现起了很大的作用具体算法实现过程如下图所示。开始程序流程图如下:1. 打开文件2. 退出choice=6 输入正确否?n选择操作ychoice=1choice=2输入文件名及路径文件能否打开?n y1.插入2.删除3.查找4.替换5.显示6.返回0.退出显示文件内容 choice=3 choice=1输入查找
6、的字符串输入插入的字符串输入删除的字符串输入替换的字符串及源字符串 choice=2 choice=4 choice=5choice=0结束2、编程实现。程序的关键源代码如下:(1) 打开指定位置的文件的代码:printf(请输入要打开的文件名及路径:);scanf(%s,name);fp=fopen(name,r+);if(!fp)system(cls);printf(ttt =文件无法打开!=n);choose0();system(cls); while(ch=fgetc(fp)!=eof)putchar(ch);rewind(fp);(2) 对文件内容进行插入操作的代码:char s11
7、0000;char s2100;int i=0;while(ch1=fgetc(fp)!=eof)s1i=ch1;i+;rewind(fp);s1i=0;system(cls);show();printf(请定位你想要插入字符串的地方:);scanf(%d,&set);system(cls);show();printf(输入你插入的字符串:);scanf(%s,s2);int len=strlen(s2);fclose(fp);fp=fopen(name,w);for(int j=0;jset;j+)ch1=s1j;fputc(ch1,fp);for(j=0;jlen;j+)ch1=s2j;f
8、putc(ch1,fp);for(j=set;ji;j+)ch1=s1j;fputc(ch1,fp);fclose(fp);system(cls);(3) 对文件内容进行查找操作的代码:int count=0;scanf(%s,str);int len=strlen(str);fp=fopen(name,r);if(!fp)printf(tttt =文件无法打开!=n);rewind(fp);while(ch=fgetc(fp)!=eof)str1count=ch;count+;str1count=0;fclose(fp);p=strstr(str1,str);system(cls);if(p
9、!=null)printf(ttt =文本中存在这样的字符串=n);elseprintf(tttt =文本中不存在这样的字符串=n);(4) 对文件内容进行替换的代码:printf(请输入被替换字符串:);printf(n);scanf(%s,s2);printf(请输入替换的字符串:);printf(n);scanf(%s,s3);int i,j,len1,len2,len3,len4,count=0;len1=strlen(s1);len2=strlen(s2);len3=strlen(s3);int num=0;fp=fopen(name,r);if(!fp)printf(tttt =文
10、件无法打开!=n);rewind(fp);while(ch=fgetc(fp)!=eof)s1count=ch;count+;s1count=0;fclose(fp);for(i=0;ilen1;i+)for(j=0;jlen2;j+)if(s1i+j!=s2j)s4num=s1i;num+;break;if(j=len2-1)for(int k=0;klen3;k+)s4num=s3k;num+;i+=len2-1;s4num=0;len4=strlen(s4); fp=fopen(name,w);for(j=0;jlen4;j+)ch=s4j;fputc(ch,fp);fclose(fp)
11、;(5) 对文件内容进行删除的代码:printf(请输入被删除字符串:);scanf(%s,s2);printf(n);int i,j,len1,len2,len4,count=0;len1=strlen(s1);len2=strlen(s2);int num=0;fp=fopen(name,r);if(!fp)printf(tttt =文件无法打开!=n);rewind(fp);while(ch=fgetc(fp)!=eof)s1count=ch;count+;s1count=0;fclose(fp);for(i=0;ilen1;i+)for(j=0;jlen2;j+)if(s1i+j!=s
12、2j)s4num=s1i;num+;break;if(j=len2-1)s4num=s1i+len2;num+;i+=len2;s4num=0;len4=strlen(s4);fp=fopen(name,w);for(j=0;jlen4;j+)ch=s4j;fputc(ch,fp);fclose(fp);(6) 显示文件内容的代码:fp=fopen(name,r);if(!fp)printf(tttt =文件无法打开!=n);choose0();printf(-) while(ch=fgetc(fp)!=eof)putchar(ch);rewind(fp);3、测试数据、测试结果、结果分析。(
13、1)欢迎界面:(2)选择菜单:(3)插入操作及结果:在文本文档“123456789abcdefg”的“123456789”后插入“gfedcba”其结果应为“123456789gfedcbaabcdefg”其c程序执行结果如下:(4)删除操作及结果:在文本文档“123456789gfedcbaabcdefg”中,删去文本“abcdefg”,其结果应为“123456789gfedcba”,其c程序执行结果如下:(5)查找操作及结果:在文本文档“123456789gfedcba”中,查找“123456789”字符串,其结果应为提示“=文本中存在这样的字符串=”。其c程序执行结果如下:(6)替换操作
14、及结果在文本文档“123456789gfedcba”中,将“gfedcba”字符串替换为“abcdefg”字符串,其结果应为“123456789abcdefg”。其c程序执行结果如下:(7) 实验结果分析。从上面的测试结果可以看出,本次实验程序基本完成了实验的要求内容而且在功能上还进行了一定程度的的丰富,实现了文件的打开、保存以及一些简单的编辑操作。程序通过打开文件后对文件内容进行字符串的一系列操作,运用c语言定义的指令对文件系统进行编辑,熟悉了各指令的用途,进一步了解了c语言是怎样对文件系统进行操作的,对后续课程的学习奠定了坚实的基础。题目二:p018m实验要求:编制不同数制间的转换程序。要
15、求提供输入输出界面,当输完一个任意十进制数字,程序能自动将其转化为另外的数制表示的值,包括二进制、八进制和十六进制。1、问题分析与方案设计。算法处理的对象是数据,而数据是以某种特定的形式存在的(例如整数、实数、字符等形式)。不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组)。c语言提供了一些数据类型,由这些数据类型可以构造出不同的数据结构。包括:基本类型、构造类型、指针类型和空类型。数据一般常用的有十六进制、十进制、八进制和二进制。在计算机内部,数据一般以二进制的方式存储和运算。当往计算机中输入一个非二进制数据时,计算机会自动将其转换为二进制数来存储或计算,当需要输出其他进制
16、的数据时,需要转换成其他进制的数据输出。根据设计题目的要求,可以知道要实现进制数的转换,可以将不同的进制数转换成字符串输出,即可以实现将不同进制数的显示。对于转换,可以考虑使用一个模块,将任意进制的数(程序接受时依然当作字符串接收)转换成十进制的整数,然后再从这个十进制整数出发转换成任意进制的数显示(也是一个字符串)。这个程序设计的关键在于任意进制的数转换成十进制数以及十进制数转换成任意进制数!转化成十进制时可以通过计算输入字符串的长度,在知道输入是几进制的前提下就可以将不同位上的数转换成十进制求和就可以得到;转换成任意进制时可以使用短除法,不断相除取余数知道商为零为止,得到的字符串在翻转后即
17、使得到的任意进制数对应的字符串。程序中还加入了各种进制的判断程序,通过调用判断输入数据是否为已选进制的子程序来判断输入数据格式是否符合要求。本次实验程序设计了判断十六进制、十进制、八进制和二进制的子程序,从而使程序具有更高的可靠性和更强的鲁棒性。通过运用主程序与子程序之间的相互调用,也使得程序结构变得更加清晰,具有更好的可读性。具体的程序流程图如下:开始结束1. 输入二进制数2. 输入八进制数3. 输入十进制数4. 输入十六进制数0.退出正确否n显示结果 y choice=0输入相应的进制数choice!=0 y相应的进制数否n y1.转为二进制2.转为八进制3.转为十六进制0.退出1.转为二
18、进制2.转为十进制3.转为十六进制0.退出choice=01.转为二进制2.转为八进制3.转为十六进制0.退出1. 转为八进制2. 转为十进制3. 转为十六进制0.退出choice=02、编程实现。程序的关键源程序代码如下:(1) 判断输入数据是否为已选进制数据:doint i=0;scanf(%s,a);int len=strlen(a); for(i=0;i=0&ai=0&ai=0&ai=a&ai=a&ai=0;j-)printf(%d,sj);printf(n);(3) 已选进制数转换成十进制数据:int i,len,y=0;len=strlen(a);for(i=0;i=a&ai=a&
19、ai=f)y+=(int(pow(16,int(len-1-i)*(int (ai)-87);else y+=(int(pow(16,int(len-1-i)*(int (ai)-48);十六进制数转换成十进制数据return y;3、测试数据、测试结果、结果分析。(1)欢迎语及一级菜单界面:(2) 二级菜单界面:(3)十进制数转换成其它进制数据:当用键盘想程序中键入十进制数“1000”时,其经程序转换后的结果应为:二进制为“1111101000”;八进制为“1750”;十六进制为“3e8”。其c程序运行结果如下:(4) 其它进制数转换成十进制数据:1)当输入二进制数据“11110000000
20、001111”时,十进制数结果应为“61455”,其c程序运行结果如下:2)当输入八进制数据“76543210”时,十进制数结果应为“16434824”,其c程序运行结果如下:3)当输入十六进制数据“1234abcd”时,十进制数结果应为“305441741”。其c程序运行结果如下:(5) 非十进制数据之间的相互转换:1)当输入二进制数据“010101010101”时,转换成八进制数据,其结果应“525”,其c程序运行结果如下:2)当输入八进制数据“76543210”时,转换成十六进制数据,其结果应为“fac688”,其c程序运行结果如下:3 )当输入十六进制数据“1234dcba”时,转换成
21、二进制数据,其结果应为“10010001101001101110010111010”:(6) 实验结果分析。本次实验程序基本完成了实验要求,并且还增加了非十进制与非十进之间的转换,进一步了解了数据在计算机内部的存储方式以及计算机计算数据的方式。在数据相互转换的过程中都是以计算机内部的二进制数据作为基础,然后再配以一定的算法,从而实现了各种进制间的转换。通过学习,了解到进制之间转换的基本算法,通过编程可以实现任意进制间的转换。当然,在计算机内部执行进制转换算法时,都是以二进制数作为纽带进行计算的。题目三:r019m实验要求:输入一个自然数n,求n! ,同时统计结果中有多少个0。1、问题分析与方案
22、设计。在微软的windows操作系统中,目前主流的版本分为32位操作系统和64位操作系统,本次实验采用的是32位的操作系统。在32位操作系统的微机中,存储一个数所能够达到的最大值为2-1=4294967295,如果超出这个数字,就会发生溢出,使得最后得到的结果不是正确的数值。经过测算,如果使用常规的算法,n的阶乘最多可以计算到12!,当计算比12大的数字的阶乘时就发生了溢出,不能得出正确的计算结果。为了解决一般算法不能计算大数阶乘的问题,本次实验采用了一位数组代替32位比特数存储数据的方法,虽然在一定程度上造成了计算机存储空间的浪费,但是却能够较好地实现大数据的阶乘,从而使程序具有更强的可靠性
23、和更强的鲁棒性。程序中首先定义了一个包含有10000个元素的一维整型数组,用来存储运算结果中每一位的数字09,虽然采用字符数组能够减少存储空间的浪费,但是考虑到算法的复杂度,最终采用了一维整型数组的存储方式。程序算法采用了按位计算,逐位存储的方法,把每一位的计算结果都用一位数组的一个元素来存储,从低位到高位依次进行。当计算结果的位数超出预先定义的整型一位数组的元素个数时,也会发生溢出,使得最终的结果不正确。所以,当整型一维数组的元素个数越多时,所能计算的n的数值也就越大,但是最终也不能无限制的增大,因为整型一维数组的元素个数是已定的,是有所约束的。当然,这个问题也可以用c语言中的申请一维动态空
24、间的方式来解决,这种方法在本次实验中没有使用,只是使用了一维数组的方式。实验要求统计计算结果中“0”的个数。本次程序实现的算法比较简单,考虑到n阶乘的计算结果以从低到高一位接一位的方式依次存储在一维数组的各个元素中,故可以采用将数组的每一个元素依次和数字“0”进行比较的方法,如果数组的某一位与“0”相等,则“0”的个数加1,运用这种逐个元素进行比较方法,可以最终得出计算结果中所含“0”的个数。本次试验程序还加入了欢迎、退出界面和输入数据判断子程序,当输入不符合实验要求的数据时,程序会自动提醒用户重新输入,直到输入正确的数据为止。通过这些子程序,可以使得整个程序看起来更加舒服,可读性更强,也增加
25、了程序的可靠性。具体的程序流程图如下:开始1. 输入阶数n2. 退出正确否 ny输入n正确否n y输出结果中“0的个数输出n!计算结果 结束2、编程实现。程序的关键源程序代码如下: int data10000=0; int digit,count=0; int i,j,r,k; data0=1; data1=1; digit=1; for(i=1;in+1;i+) for(j=1;jdigit+1;j+) dataj*=i; for(j=1;j10) for(r=1;r9) digit+; datar+1+=datar/10; datar=datar%10; printf(%d!=,n); f
26、or(k=digit;k0;k-) printf(%d,datak); if(datak=0) count+; printf(n); printf(结果中0的个数为:); printf(%dnnn,count);3、测试数据、测试结果、结果分析。(1)欢迎界面:(2)输入n,计算阶乘及统计“0”个数:1)当输入的n包含小数,输入数字“10.2”,其c程序运行结果如下:2)当输入的n为负数,本次输入“-10”,其c程序运行结果如下:3)当输入的n为自然数且比较小,本次输入“20”,其c程序运行结果如下:4)当输入的n为自然数且比较大,本次输入“500”,其c程序运行结果如下:(3)实验结果分析。
27、 本次实验程序基本实现了实验要求,并且在人机交互界面上做了比较大的改善,使得程序的人际交互界面更加友好。同时,采用了较为复杂的算法来实现了大数的阶乘,有效的避免了传统算法计算阶乘时计算机内部存储数据会发生溢出的问题,使程序具有更高的可靠性和更强的鲁棒性。题目四:p006h实验要求:输入任意四个整数(0到10),运算符只有加减乘除,还有括号.每个数只能且必须用一次。要求判断这些表达的结果中是否有24。如果有,输出计算表达式:如输入4,6,1,1 输出 4*6*1*1 =24 (允许有括号)。1、问题分析与方案设计。24点游戏是我们在日常的生活中经常碰到的游戏,它的基本规则是输入四个自然数(本次实
28、验要求是从010的自然数),然后运用加、减、乘、除四种运算方法配以一定数量的括号,使得输入的四个数的运算结果为24。本次实验要求输入的四个数每个数都参与运算并且都只能用一次。本程序算法用到的基本思想是回溯,树的深度为最深为4,树的判断分支为 加减乘除,对不满足条件的解进行剪枝(即当前结果=24),当到达递归边界(即树的深度为4时)时,即判断当前的结果是否符合条件(=24),符合即找到解,否则继续进行。程序实现的基本思路是把这个问题分解成了两个子问题,首先运用四层“for”循环语句对输入的四个数字进行无重复全排列,然后将其按序存放在一维数组中;其次再使用三层“for”循环语句对四则运算情况进行从
29、头到尾的穷举,最后再将每种情况下的四个数字和三个运算符进行全排列,再加以括号控制运算的顺序,如果运算结果等于24,则输出,否则则不输出。注意到如果运算结果为-24的话,只需要把中间“-”两边的数据进行调换就可以得到它的相反数24。同理,如果结果为1/24,则将“/”两边的数据调换,如果结果为-1/24,则需要将“-”和“/”运算符两边的数字进行对调。程序的运行结构基本分为四大模块,即输入数据模块、数据运行排序模块、加减乘除运算模块和结果输出模块。其中,输入模块主要是让用户输入需要计算的数据,如果用户输入的数据不符合程序要求,则系统会提示用户是否重新输入数据,直到用户输入正确地符合要求的数据为止
30、;数据排序模块主要是让程序对输入的四个数据进行全排列,并且将排列的数据存放在一位数组中,等待执行后面的运算;加减乘除模块式的作用也是进行全排列,与第二步不同的是,加减乘除的符号进行排列时允许出现两个或三个相同的符号,排列后与第二步的四个数字进行组合计算;结果输出模块的作用是输出符合题目要求的结果。程序的算法思想虽然比较简单清晰,但是实现起来有一定的难度,因为程序涉及的循环嵌套语句比较多,而且需要定义的变量也比较多,所以需要程序员有较强的编程能力。程序中使用到了许多输出格式控制符号,这些符号的准确运用使得最终的输出结果更加清晰明快。为了使程序具有良好的互动界面,程序还设计了简单的人际交互界面。在
31、实现界面的算法时,运用了c语言中的“goto”语句,使得实现起来避免了主程序和子程序之间的相互调用,使程序更加简洁。具体的流程图如下:开始输入4个数字正确否n数字全排列y运算符号全排列结果输出继续?y结束n2、编程实现。程序的关键源代码如下:(1) 定义加减乘除运算的子程序:double fun(double a1,double a2,int b) switch(b) case 0:return (a1+a2); case 1:return (a1-a2); case 2:return (a1*a2); case 3:return (a1/a2); default:return 0;(2)对数
32、据、符号排列及运算的关键代码:if(flg)flg=0;for(i=0;i4;i+) for(j=0;j4;j+) if(j!=i) for(k=0;k4;k+) if(k!=i&k!=j) for(l=0;l4;l+) if(l!=i&l!=j&l!=k) for(n=0;n4;n+) for(m=0;m4;m+) for(r=0;r4;r+) tem1=fun(numi,numj,n); tem2=fun(tem1,numk,m); tem3=fun(tem2,numl,r); if(tem3=24.0) printf(%d%c%d)%c%d%c%d=24n,savei,signn,savej,signm,savek,signr,savel);q=1;else if(tem3=-24.0) if(signm=-)printf(%d%c(%d%c%d)%c%d=24n,savek,signm,savei,signn,savej,signr,savel);q=2;else if(tem3=1.0/24.0)if(signr=/)printf(%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆机电职业技术大学《工业通风与除尘》2024-2025学年第二学期期末试卷
- 武汉科技大学《大规模集成电路制造工艺》2024-2025学年第二学期期末试卷
- 机关内部安全巡逻制度
- 浙江农林大学《物联网技术应用基础》2024-2025学年第二学期期末试卷
- 机关合同内部监督制度
- 杭州现金内部控制制度
- 架子队内部分配制度
- 桂林传销内部制度
- 检验科科室内部考核制度
- 民校内部管理制度
- 特殊工艺过程管理办法
- 2025至2030中国氟化铝行业发展研究与产业战略规划分析评估报告
- 加油站反恐应急预案(3篇)
- 医院陪诊陪护方案
- 煤矿全员培训机电课件
- 三电保护管理办法
- 2025年四川省自贡市初中学业水平考试中考物理真题试卷(中考真题+答案)
- 道路监理服务方案模板
- 重症肺炎患者护理常规
- 硬度计操作指导书
- 公司廉政宣教月活动方案
评论
0/150
提交评论