《C++程序设计实验报告.doc》由会员分享,可在线阅读,更多相关《C++程序设计实验报告.doc(46页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、C+程序设计实验报告 学 号:姓 名:王晨光班 级:指导老师:谢从华实验一、字符和格式的输出实验一,实验目的1、重点把握各种内部数据类型、数值和逻辑运算,各种表达式、函数声明、定义和调用。2、掌握过程控制编程方法,正确编制多重循环过程,对简单问题能够临场加以解决。3、学会使用简单的c+标准库;4、学习良好的编程习惯和形成自己的编程风格。二、实验设备与环境 装有C+语言工具软件 (Vs2008)的计算机。三、 实验内容a) P.30,3.2.1,字符三角形;b) P.31,3.2.2,背靠背字符三角形;c) P.32,3.2.3交替字符倒三角形;d) P.33,3.2.5,格式阵列一。四、实验过
2、程及结果1.1字符三角形【问题描述】:根据读入的字符值以及三角形的高,输入以该字符为填充字符的等腰三角形。【输入描述】:输入数据含有不超过50组的数据,每组数据包括一个可见字符c(33=c=126)和一个整数n(1=n=30)。【输出描述】:输出以c为填充字符、高为n的等腰三角形,勾画每个三角形时都应另起 一行。【程序代码】:#include#includeusing namespace std;int main()char c;for(int n; cincn; )for(int i=1; i=n; i+)coutstring(n-i, )+string(2*i-1,c)+n;【输入】:A
3、5 B 3【输出】:1.2 字符菱形【问题描述】:根据读入的字符和边长,勾画字符菱形。【输入描述】:输入数据含有不超过50组的数据,每组数据包括一个可见字符c和一个整数n(1=n=30)。【输出描述】:输出以c为填充字符、边长为n的菱形,勾画每个菱形时都应另起一行。【程序代码】:#include#includeusing namespace std;int main()char c;for(int n; cincn; )for(int i=1; i=n; i+)coutstring(n-i, )+string(2*i-1,c)+ n;for(int i=1; i=n-1; i+)coutstr
4、ing(i, )+string(2*n-1-2*i,c)+ n;【输入】: A 5 B 3【输出】:1.3背靠背字符三角形【问题描述】:根据读入的字符和高,勾画背靠背字符三角形。【输入描述】:输入数据不超过50组的数据,每组数据包括一个可见字符c和一个整数n(1=n=30)。【输出描述】:输出以c为填充字符,高为n的背靠背字符三角形,勾画每个三角形时都应另起一行。【程序代码】:#include #include using namespace std; int main() char c; for(int n; cincn; ) for(int i=1; i=n; i+) coutstring
5、(n-i, )+string(i,c)+ +string(i,c)+n; 【输入】: W 5 B 3【输出】:1.4 格式阵列一【问题描述】:根据读入的阶,按样例打印格式阵列。【输入描述】:输入读入的阶,按样例打印格式阵列。【输出描述】:输出以n为阶的格式阵列。每行开始先打印行号,行号为两个字符宽,右对齐,行号与元素之间空2格。每个元素占3个字符宽。右对齐,元素值起始位置为0,以后每向右前进一个,元素值便取前一元素加1除n的余数,每进到下一行,起始的元素值为上一元素加1除以n的余数,以此类推。每个格式阵列之间应有一空行,最前与最后不应有空行。【程序代码】:#include using name
6、space std;int n,casen;void computing()for(int i=0;in;i+)cout i+1;cout i;for(int t=1;tn;t+) cout (i+t)%n;coutn)if(casen0) coutendl;computing();casen+;return 0;【输入】: 6 3【输出】: 实验二、字符和数字运算实验一、实验目的 1、重点把握各种内部数据类型、数值和逻辑运算,各种表达式、函数声明、定义和调用。2、掌握过程控制编程方法,正确编制多重循环过程,对简单问题能够临场加以解决。3、学会使用简单的c+标准库;4、学习良好的编程习惯和形成
7、自己的编程风格。二、实验设备与环境 装有C+语言工具软件 (Vs2008)的计算机。三、实验内容a) P.44,3.6.1,逆反01串;b) P.44,3.6.2,倒杨辉三角形;c) P.45,3.6.3,“顺”序列;d) P.46,3.6.4,数字和。四、 实验过程及结果2.1逆反01串【输入描述】:输入数据含有不多于50个的01串,每个字串的长度不大于200.【输出描述】:按输入的01串输入对应的10串,每个字串单独占一行。【程序代码】:#includeusing namespace std;int main() string s; int i,m=1; for(;cins;m+) if(
8、s.length()=200) for(i=0;is.length();i+) if(s.substr(i,1)=1) cout0; else cout1; else break; cout50) break; 【输入】:00【输出】:2.2 倒杨辉三角形【输入描述】:输入数据中包含了不多于50个的整数n(1=n=10).【输出描述】:以n为行数,其打印出的倒杨辉三角形(每个数据占三个字符),每个倒三角形之间没有空行,见样本输出。【程序代码】:#include using namespace std;const int maxn=10;int amaxn+10maxn+10,n;void in
9、i()for(int i=1;i=maxn;i+)aii=1;ai1=1;for(int i=3;i=maxn;i+)for(int j=2;jn)for(int i=n;i=1;i-)for(int j=i;jn;j+) cout ;for(int j=1;j=i;j+)coutaij ;coutendl;return 0;【输入】:53【输出】:2.3“顺”序列【输入描述】:输入中第一行为一个整数n(1=n=10),描述后面一共有n组卡片,每组卡片的第一个数m(1=m=100),表示后面会出现m张卡片。【输出描述】:输入每组卡片,判断是否能构成“顺”序列。如果能构成“顺”序列,则输出yes
10、,否则就输出no。每个结果应分别不同行显示。【程序代码】:#include#includeusing namespace std;bool compute(int *a,int m) int i,j,max=0; for(i=0;imax) max=ai; for(i=0;im;i+) for(j=0;j=m) return false; return true;int main() int *a; int n=0; int m=0; string *b; int i,j; int rsize=0; coutn; b=new stringn; j=0; while(jn) coutm; a=n
11、ew intm; cout请输入一连串数据:endl; for(i=0;iai; if(compute(a,m) bj=Yes; else bj=No; delete a; j+; cout输出:endl; for(i=0;in;i+) coutbiendl; delete b; return 0;【输入】:24 5 7 6 8 8 1 7 3 2 8 12 78 3【输出】:2.4 数字和【输入描述】:输入数据中包含了不多于50个的正整数n【输出描述】:每个正整数都应输出一个各位数字和,并独占一行。【程序代码】:#include #include using namespace std;in
12、t main()string st;while(getline(cin,st)int ans=0;for(int i=0;i=0 & sti=9) ans+=sti-0;coutansendl;return 0;【输入】:123455612382【输出】:五、实验小结: 本次试验重点学习了各种数据类型,逻辑运算,函数的声明,定义和调用。在过程控制过程中,熟练地使用多重循环,同时应养成良好的编程习惯和形成自己的编程风格,一边为日后的学习打下坚实的基础。实验三、加密和解密算法实验一、实验目的 1、重视数学方法,提高数学推算和编程表的转换能力。2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的
13、分离计算。3、进一步学会使用c+标准库;4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。二、实验设备与环境 装有C+语言工具软件 (Vs2008)的计算机。三、实验内容a) P.98,7.2.1,密钥加密;b) P.99,7.2.2,密钥解密;四、 实验过程及结果3.1 密钥加密【实验代码】:#include #includeusing namespace std;int main() while(1)char key100,data101;cin.getline(key,100);cin.getline(data,100);coutkey; int i=0,j=0; for(i
14、=0;istrlen(data);i+) for(j=0;j=strlen(data) break; datai+=keyj-0; if(datai122) datai=datai-123+32; i+; i-=1; coutdataendl; return 0;【输入】:The result of 3 and 2 is not 8123Hello world【输出】:3.2 密钥解密【实验代码】:#include #includeusing namespace std;int main()while(1)char key100,data101;cin.getline(key,100);cin
15、.getline(data,100);coutkeyn; coutdatan; int i=0,j=0; for(i=0;istrlen(data);i+) for(j=0;j=strlen(data) break; datai-=keyj-0; if(datai32) datai=datai-32+123; i+; i-=1; coutdataendl; return 0;【输入】:xql”zkvyu “wl#7)hpl”5$rx”vuw$A123Igomq#Xqumf【输出】:五,实验小结: 通过本次实验,对加密解密有一定的了解,密钥加密就是将密钥数字串值循环加到明文上,使得明文不可阅读,
16、解密就是加密的反过程。实验中,遇到一些问题,字符串的读入和输出以及循环表达式的设计,通过查阅资料和上网查阅,最后算是解决问题。实验四、数字算法实验一、实验目的 1、重视数学方法,提高数学推算和编程表的转换能力。2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的分离计算。3、进一步学会使用c+标准库;4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。二、实验设备与环境 装有C+语言工具软件 (Vs2008)的计算机。三、实验内容a) P.102,7.3.1,n!的位数;b) P.103,7.3.2,排列对称串;c) P.103,7.3.3,勒让德多项式表;d) P.104,7.
17、3.4,立方数和连续奇数和;四、 实验过程及结果4.1 n!的位数【基本描述】:针对每个非负整数n,计算n!的位数【输入描述】:输入数据中含有一些整数n(0=n107)【输出描述】:根据每个整数n,输出n!的位数,每个数占独立一行。【主要代码】:#include #include using namespace std;int main()double N,logV;int i;while(couti)N=i;for(i=1,logV=0;i=N;i+)logV+=log(1.0*i);logV/=log(10.0);coutN!的位数:(int)(logV+1)endl;return 0;【
18、输入】:5 6【输出】:4.2 排列对称串【基本描述】:一些字串,有些是对称的,有些是不对称的。请将那些对称的字串按从小到大的顺序输出。字串先以长度论大小,如果长度相同,再以ASCII码值大小为标准。【输入描述】:输入数据中含有一些字串(1=串长=256)【输出描述】:根据每个字串,输出对称的那些串,并且要求按从小到大的顺序输出。【代码如下】:#include #include #include #include #include using namespace std; bool Comp(const string &s1,const string &s2) return s1.length
19、()!=s2.length()?s1.length()s2.length():s1s2; int main(int argc,char * argv) vector v; string t,s; while(cins) t=s; reverse(t.begin(),t.end(); if(t=s) v.push_back(s); if(cin.get()=n) break; sort(v.begin(),v.end(),Comp); for(int i=0;iv.size();i+) coutviendl; system(pause); return 0; 【输入】:123321sdfsdfd
20、dd【输出】:4.3 勒让德多项式表【基本描述】:数学poly函数的展开式也称关于x的n阶勒让德多项式,它的递推公式为:给定x,请计算n阶勒让德多项式的值。【输入描述】:输入数据中含有一些浮点数x(0x1)【输出描述】:对于每个x,分别计算2阶,3阶,4阶,5阶,6阶的勒让德多项式的值,其每个值的精度为6位小数。输出时,先列出x的值,保留3位小数精度,然后每输出一个阶值之前,都空出2格,由此一字排开,形成一张多项式表【代码如下】:#include #includeusing namespace std;double poly(int n,double x);int main() int i=0
21、; for(double x;cinx;) if(i=0) cout x p2(x) p3(x) p4(x) p5(x) p6(x)endl; i=1; coutfixedsetprecision(3)xsetprecision(6); for(int i=2;i=6;i+) coutsetw(11)poly(i,x); coutendl; double poly(int n,double x) if(n=0) return 1; if(n=1) return x; return (2*n-1)*x*poly(n-1,x)-(n-1)*poly(n-2,x)/n;【输入】:0.2 0.3 0.
22、35【输出】:4.4 立方数与连续奇数和【基本描述】:一个整数的立方数,可以表示为连续奇数的和,例如:33=7+9+1143=13+15+17+19针对每个正整数n,输出表示其立方数的连续奇数和【输入描述】:输入数据中含有一些整数n(1=n=100)【输出描述】:根据每个整数n,输出其值等于n3的连续奇数和【代码如下】:#include using namespace std;int main()int i,n,j,a5; cinn; for(i=0;iai; for(i=0;in;i+) int m=ai*ai-ai+1; for(j=0;jai;j+) coutm ; m+=2; cout
23、endl; return 0;【输入】:3 4 8【输出】:4.5 斐波那契数【基本描述】:根据输入数据中的n,输出第n项斐波那契数。【输入描述】:输入数据中含有一些整数n(0=n=46)【输出描述】:根据每个整数n,输出其第n项斐波那契数,每个数独占一行。【代码如下】:#include #include using namespace std;int main() int n; vector v; v.push_back(0); v.push_back(1); for(int k = 2; k n) cout vn n*n = x+n-1 - x=n*n-n+1。实验五、大数运算算法实验一、
24、实验目的 1、重视数学方法,提高数学推算和编程表的转换能力。2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的分离计算。3、进一步学会使用c+标准库;4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。二、实验设备与环境 装有C+语言工具软件 (Vs2008)的计算机。三、实验内容a) P.106,7.4.2,大数加;b) P.107,7.4.3,大数和;c) P.109,7.5.1,大数乘;四、 实验过程及结果5.1大数加【基本描述】:给定一些大数,把它们加起来。【输入描述】:输入数据中含有一些数据组(数量=100),每组数据由一个整数n(n=100)领衔,后跟n个大整数(0
25、=大数,大数位数=200),若n=0则表示输入结束。【输出描述】:输出每组数据所计算的大数和,每个结果但独占一行。【主要代码】:#include using namespace std;void add(string &a,const string &s) int temp=0; for(int ai=0,si=s.length()-1;si=0|temp;+ai,-si) temp+=aai-0+(si=0?ssi-0:0); aai=temp%10+0; temp=temp/10; int main() const int bitnum=205;for(int num;cinnum&num
26、;) string a(bitnum,0); for(string s;num-&cins;) add(a,s); reverse(a.begin(),a.end(); couta.substr(a.find_first_not_of(0)n;return 0;【输入】:5545790【输出】:07【测试结果】: 5.2 大数和【基本描述】:给定一些大数,有正有负,请计算其和。【输入描述】:输入数据中含有一些数据组(数量=100),每组数据由一个整数n(n=100)领衔,后跟n个大数(大数位数=200),若n=0则表示输入结束。【输出描述】:输出每组数据所计算的大数和,每个结果单独占一行。【主
27、要代码】:#include using namespace std;void comple(string &s) for(int i=0;i=0;i-) if(si=9) si=0; else si+; break; void add(string &a,const string &s) int temp=0; for(int ai=0,si=s.length()-1;si=0|temp;+ai,-si) temp+=aai-0+(si=0?ssi-0:0); aai=temp%10+0; temp=temp/10; int main()const int bitnum=205;for(int
28、 num;cinnum#) string a(bitnum,0); for(string s;num-&cins;) if(s0=-) s=s.substr(1); s=string(bitnum-s.length(),0)+s; comple(s); else s=string(bitnum-s.length(),0)+s; add(a,s); reverse(a.begin(),a.end(); if(a0=9) comple(a); cout-; int pos=a.find_first_not_of(0); if(pos=string:npos) cout0n; else co
29、uta.substr(pos)n;return 0;【输入】:2-22342-210【输出】:021【测试结果】: 5.3大数乘【基本描述】:给定一些大数,请计算其积。【输入描述】:输入数据中含有一些整数对(对数=1000),若某对整数n(整数位数=200)的值为0 0,则表示输入结束。【输出描述】:每对整数对应一个乘法计算结果,输出该结果,每个结果输出完后应回车。【主要代码】:#include using namespace std;string multi(const string &a,const string &b) if(a=0|b=0) return 0; string aa(a0
30、=-? a.substr(1):a); string bb(b0=-? b.substr(1):b); string sign=(a0=-)+(b0=-)=1?-:); string s(aa.length()+bb.length(),0); reverse(aa.begin(),aa.end(); reverse(bb.begin(),bb.end(); for(int j=0;jbb.length();+j) if(bbj=0) continue; int temp=0; for(int i=0;iab&(a!=0|b!=0);) coutmulti(a,b)n;return 0;【输入】
31、:2 312 340 0【输出】:6408【测试结果】;五,实验小结: 本次试验主要进行了大数运算,在编程时应注意运算的结果不能溢出,以及熟练的掌握函数的应用,在实验过程中遇到一些困难,通过网络和书籍,使得问题得到解决。实验六、日期处理算法实验一、实验目的 1、掌握从上到下的程序结构化设计,以主函数为驱动,层层调用其他函数的框架结构。2、掌握界面设计原理,学会编制作为界面的头文件。3、合理组织程序的各个模块;4、熟悉类型设计和类型实现的模块结构,熟悉自定义类型嵌入应用程序的基本方法。二、实验设备与环境 装有C+语言工具软件 (Vs2008)的计算机。三、实验内容a) P.167,11.2, 日期处理;四、 实验过程及结果【主要代码】/天数date.h#ifndef DATE_HEADER#define DATE_HEADER#includeusing namespace std;class Dateint _absDay;void _ymd2i(int y, int m, int d);void _i2ymd(int &y ,int &m,int &d)const;bool _isLeapYear(int y)const/判断是否为闰年return y%4=0 & y%100 | y%400=0; static const int tians;static const
限制150内