计算机C++程序设计实验报告Word格式文档下载.docx
《计算机C++程序设计实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机C++程序设计实验报告Word格式文档下载.docx(43页珍藏版)》请在冰点文库上搜索。
string(n-i,'
'
)+string(2*i-1,c)+'
\n'
;
}
【输入】:
A5B3
【输出】:
1.2字符菱形
根据读入的字符和边长,勾画字符菱形。
输入数据含有不超过50组的数据,每组数据包括一个可见字符c和一个整数n(1<
输出以c为填充字符、边长为n的菱形,勾画每个菱形时都应另起一行。
{
)+string(2*i-1,c)+'
=n-1;
string(i,'
)+string(2*n-1-2*i,c)+'
A5B3
1.3背靠背字符三角形
根据读入的字符和高,勾画背靠背字符三角形。
输入数据不超过50组的数据,每组数据包括一个可见字符c和一个整数n(1<
输出以c为填充字符,高为n的背靠背字符三角形,勾画每个三角形时都应另起一行。
intmain(){
)
i++)
)+string(i,c)+"
"
+string(i,c)+"
\n"
W5B3
1.4格式阵列一
根据读入的阶,按样例打印格式阵列。
输入读入的阶,按样例打印格式阵列。
输出以n为阶的格式阵列。
每行开始先打印行号,行号为两个字符宽,右对齐,行号与元素之间空2格。
每个元素占3个字符宽。
右对齐,元素值起始位置为0,以后每向右前进一个,元素值便取前一元素加1除n的余数,每进到下一行,起始的元素值为上一元素加1除以n的余数,以此类推。
每个格式阵列之间应有一空行,最前与最后不应有空行。
#include<
intn,casen;
voidcomputing(){
for(inti=0;
i<
i++){
cout<
"
i+1;
i;
for(intt=1;
t<
t++)cout<
(i+t)%n;
endl;
}
while(cin>
n){
if(casen>
0)cout<
computing();
casen++;
return0;
63
实验二、字符和数字运算实验
一、实验目的
三、实验内容
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,数字和。
4、实验过程及结果
2.1逆反01串
输入数据含有不多于50个的01串,每个字串的长度不大于200.
按输入的01串输入对应的10串,每个字串单独占一行。
intmain()
strings;
inti,m=1;
for(;
cin>
s;
m++)
{
if(s.length()<
=200)
for(i=0;
s.length();
i++)
if(s.substr(i,1)=="
1"
)
cout<
0"
elsecout<
elsebreak;
if(m>
50)break;
2.2倒杨辉三角形
输入数据中包含了不多于50个的整数n(1<
=10).
以n为行数,其打印出的倒杨辉三角形(每个数据占三个字符),每个倒三角形之间没有空行,见样本输出。
constintmaxn=10;
inta[maxn+10][maxn+10],n;
voidini(){
for(inti=1;
=maxn;
a[i][i]=1;
a[i][1]=1;
for(inti=3;
for(intj=2;
j<
j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
ini();
for(inti=n;
i>
=1;
i--){
for(intj=i;
j++)cout<
for(intj=1;
=i;
cout<
a[i][j]<
}
cout<
5
3
2.3“顺”序列
输入中第一行为一个整数n(1<
=10),描述后面一共有n组卡片,每组卡片的第一个数m(1<
=m<
=100),表示后面会出现m张卡片。
输入每组卡片,判断是否能构成“顺”序列。
如果能构成“顺”序列,则输出yes,否则就输出no。
每个结果应分别不同行显示。
boolcompute(int*a,intm)
inti,j,max=0;
m;
if(a[i]>
max)
max=a[i];
for(j=0;
if(a[i]+1==a[j]||a[i]==max)
break;
if(j>
=m)
returnfalse;
returntrue;
int*a;
intn=0;
intm=0;
string*b;
inti,j;
intrsize=0;
请输入一个整数n:
b=newstring[n];
j=0;
while(j<
请输入整数m:
a=newint[m];
请输入一连串数据:
a[i];
if(compute(a,m))
b[j]="
Yes"
else
No"
delete[]a;
j++;
输出:
b[i]<
delete[]b;
2
45768
81732812783
2.4数字和
输入数据中包含了不多于50个的正整数n
每个正整数都应输出一个各位数字和,并独占一行。
stringst;
while(getline(cin,st)){
intans=0;
for(inti=0;
st.length();
if(st[i]>
='
0'
&
&
st[i]<
9'
)ans+=st[i]-'
ans<
12345
56123
82
五、实验小结:
本次试验重点学习了各种数据类型,逻辑运算,函数的声明,定义和调用。
在过程控制过程中,熟练地使用多重循环,同时应养成良好的编程习惯和形成自己的编程风格,一边为日后的学习打下坚实的基础。
实验三、加密和解密算法实验
1、重视数学方法,提高数学推算和编程表的转换能力。
2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的分离计算。
3、进一步学会使用c++标准库;
4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。
a)P.98,7.2.1,密钥加密;
b)P.99,7.2.2,密钥解密;
3.1密钥加密
【实验代码】:
string.h>
{while
(1){
charkey[100],data[101];
cin.getline(key,100);
cin.getline(data,100);
key;
inti=0,j=0;
strlen(data);
strlen(key);
if(i>
=strlen(data))
data[i]+=key[j]-'
if(data[i]>
122)
data[i]=data[i]-123+32;
i++;
i-=1;
data<
4972863
Theresultof3and2isnot8
123
Helloworld
3.2密钥解密
while
(1){
key<
data[i]-=key[j]-'
if(data[i]<
32)
data[i]=data[i]-32+123;
xql”zkvyu“wl#7)hpl”5$rx”vuw$A
Igomq#Xqumf
五,实验小结:
通过本次实验,对加密解密有一定的了解,密钥加密就是将密钥数字串值循环加到明文上,使得明文不可阅读,解密就是加密的反过程。
实验中,遇到一些问题,字符串的读入和输出以及循环表达式的设计,通过查阅资料和上网查阅,最后算是解决问题。
实验四、数字算法实验
a)P.102,7.3.1,n!
的位数;
b)P.103,7.3.2,排列对称串;
c)P.103,7.3.3,勒让德多项式表;
d)P.104,7.3.4,立方数和连续奇数和;
4.1n!
的位数
【基本描述】:
针对每个非负整数n,计算n!
的位数
输入数据中含有一些整数n(0<
10^7)
根据每个整数n,输出n!
的位数,每个数占独立一行。
【主要代码】:
cmath>
doubleN,logV;
inti;
while(cout<
输入N的值:
i)
N=i;
for(i=1,logV=0;
=N;
logV+=log(1.0*i);
logV/=log(10.0);
N<
!
的位数:
(int)(logV+1)<
return0;
56
4.2排列对称串
一些字串,有些是对称的,有些是不对称的。
请将那些对称的字串按从小到大的顺序输出。
字串先以长度论大小,如果长度相同,再以ASCII码值大小为标准。
输入数据中含有一些字串(1<
=串长<
=256)
根据每个字串,输出对称的那些串,并且要求按从小到大的顺序输出。
【代码如下】:
fstream>
vector>
algorithm>
boolComp(conststring&
s1,conststring&
s2)
{
returns1.length()!
=s2.length()?
s1.length()<
s2.length():
s1<
s2;
}
intmain(intargc,char*argv[])
vector<
v;
stringt,s;
s)
{
t=s;
reverse(t.begin(),t.end());
if(t==s)
v.push_back(s);
}
if(cin.get()=='
)
sort(v.begin(),v.end(),Comp);
v.size();
i++)
v[i]<
system("
pause"
);
123321
321
sdfsdfd
121212
\\dd\\
4.3勒让德多项式表
数学poly函数的展开式也称关于x的n阶勒让德多项式,它的递推公式为:
给定x,请计算n阶勒让德多项式的值。
输入数据中含有一些浮点数x(0<
x<
1)
对于每个x,分别计算2阶,3阶,4阶,5阶,6阶的勒让德多项式的值,其每个值的精度为6位小数。
输出时,先列出x的值,保留3位小数精度,然后每输出一个阶值之前,都空出2格,由此一字排开,形成一张多项式表
iomanip>
doublepoly(intn,doublex);
{inti=0;
for(doublex;
x;
){
if(i==0){
xp2(x)p3(x)p4(x)p5(x)p6(x)"
i=1;
fixed<
setprecision(3)<
setprecision(6);
for(inti=2;
=6;
setw(11)<
poly(i,x);
doublepoly(intn,doublex){
if(n==0)
return1;
if(n==1)
returnx;
return((2*n-1)*x*poly(n-1,x)-(n-1)*poly(n-2,x))/n;
0.20.30.35
【输出】:
4.4立方数与连续奇数和
一个整数的立方数,可以表示为连续奇数的和,例如:
3^3=7+9+11
4^3=13+15+17+19
针对每个正整数n,输出表示其立方数的连续奇数和
输入数据中含有一些整数n(1<
=100)
根据每个整数n,输出其值等于n^3的连续奇数和
intmain()
{
inti,n,j,a[5];
i++)
}
intm=a[i]*a[i]-a[i]+1;
j++)
m<
m+=2;
}
348
4.5斐波那契数
根据输入数据中的n,输出第n项斐波那契数。
=46)
根据每个整数n,输出其第n项斐波那契数,每个数独占一行。
intn;
int>
v.push_back(0);
v.push_back
(1);
for(intk=2;
k<
=46;
++k)
v.push_back(v[k-1]+v[k-2]);
while(cin>
n)
cout<
v[n]<
endl;
5678940
本次试验第一,三,五题均使用递归算法,即程序自己调用自己的编程技巧。
在使用递归时,要有递归边界条件,递归前进段和递归返回段。
当边界条件不满足时,递归前进,当边界条件满足时,递归返回。
应该熟练掌握递归算法的用法。
第二题中,排序比较函数的具体方法是,判断参与比较的没两个字符串的长度是否相等,若不相等则按长度从小到大的顺序返回;
若相等则以ASCII码值为排序标准,即按字符串从小到大排序。
第四题中,立方数表示为连续的奇数和。
n个连续的奇数,假设第一个奇数为x,那么第n个奇数就是x+(2n-2)
。
n个连续奇数的和就等于x+(x+2)+...+(x+(2n-2))=(x+n-1)*n。
正整数n的立方可以表示为n个连续奇数的和
就可以变成
n*n*n=(x+n-1)*n->
n*n=x+n-1->
x=n*n-n+1
实验五、大数运算算法实验
a)P.106,7.4.2,大数加;
b)P.107,7.4.3,大数和;
c)P.109,7.5.1,大数乘;
5.1大数加
给定一些大数,把它们加起来。
【输入描