C++程序设计实验报告 下载本文

(此文档为word格式,下载后您可任意编辑修改!)

C++程序设计 实验报告

学 号: 姓 名:王晨光 班 级: 指导老师:谢从华

2 实验一、字符和格式的输出实验

一,实验目的

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,格式阵列一。

四、实验过程及结果 1.1字符三角形

【问题描述】:根据读入的字符值以及三角形的高,输入以该字符为填充字符

的等腰三角形。

【输入描述】:输入数据含有不超过50组的数据,每组数据包括一个可见字符

c(33<=c<=126)和一个整数n(1<=n<=30)。

【输出描述】:输出以c为填充字符、高为n的等腰三角形,勾画每个三角形

时都应另起 一行。

【程序代码】:

#include #include using namespace std; int main(){ char c;

for(int n; cin>>c>>n; ) for(int i=1; i<=n; i++)

cout<

【输入】:

A 5 B 3

【输出】:

1.2 字符菱形

【问题描述】:根据读入的字符和边长,勾画字符菱形。

【输入描述】:输入数据含有不超过50组的数据,每组数据包括一个可见字符

c和一个整数n(1<=n<=30)。

【输出描述】:输出以c为填充字符、边长为n的菱形,勾画每个菱形时都应

另起一行。

【程序代码】:

#include #include using namespace std; int main(){ char c;

for(int n; cin>>c>>n; ) {

for(int i=1; i<=n; i++)

cout<

cout<

【输入】:

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; cin>>c>>n; ) for(int i=1; i<=n; i++)

cout<

【输入】:

W 5 B 3

【输出】:

1.4 格式阵列一

【问题描述】:根据读入的阶,按样例打印格式阵列。 【输入描述】:输入读入的阶,按样例打印格式阵列。 【输出描述】:输出以n为阶的格式阵列。

每行开始先打印行号,行号为两个字符宽,右对齐,行号与元素之间空2格。 每个元素占3个字符宽。右对齐,元素值起始位置为0,以后每向右前进一

个,元素值便取前一元素加1除n的余数,每进到下一行,起始的元素值为上一元素加1除以n的余数,以此类推。

每个格式阵列之间应有一空行,最前与最后不应有空行。

【程序代码】:

#include using namespace std; int n,casen;

void computing(){ for(int i=0;i

int main(){ while(cin>>n){ if(casen>0) cout<

【输入】:

6 3

【输出】:

\

实验二、字符和数字运算实验

一、实验目的

1、重点把握各种内部数据类型、数值和逻辑运算,各种表达式、函数声明、定义和调用。

2、掌握过程控制编程方法,正确编制多重循环过程,对简单问题能够临场加以解决。

3、学会使用简单的c++标准库;

4、学习良好的编程习惯和形成自己的编程风格。

二、实验设备与环境

装有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串,每个字串单独占一行。 【程序代码】:

#include using namespace std; int main()

{

string s; int i,m=1;

for(;cin>>s;m++) {

if(s.length()<=200) {

for(i=0;i

if(s.substr(i,1)==\ cout<<\

else cout<<\ } }

else break; cout<50) break; } }

【输入】:

0

【输出】:

2.2 倒杨辉三角形

【输入描述】:输入数据中包含了不多于50个的整数n(1<=n<=10). 【输出描述】:以n为行数,其打印出的倒杨辉三角形(每个数据占三个字

符),每个倒三角形之间没有空行,见样本输出。

【程序代码】:

#include using namespace std; const int maxn=10;

int a[maxn+10][maxn+10],n; void ini(){ for(int i=1;i<=maxn;i++){ a[i][i]=1;a[i][1]=1; } for(int i=3;i<=maxn;i++){ for(int j=2;j

int main(){ ini(); while(cin>>n){ for(int i=n;i>=1;i--){ for(int j=i;j

【输入】:

5 3

【输出】:

2.3“顺”序列

【输入描述】:输入中第一行为一个整数

n(1<=n<=10),描述后面一共有n

组卡片,每组卡片的第一个数m(1<=m<=100),表示后面会出现m张卡片。

【输出描述】:输入每组卡片,判断是否能构成“顺”序列。如果能构成“顺”

序列,则输出yes,否则就输出no。每个结果应分别不同行显示。

【程序代码】:

#include #include using namespace std;

bool compute(int *a,int m) {

int i,j,max=0; for(i=0;imax) max=a[i]; }

for(i=0;i

for(j=0;j

if(a[i]+1==a[j] || a[i]==max) break;

}

if(j>=m)

return false; }

return true; }

int main() {

int *a; int n=0; int m=0; string *b; int i,j;

int rsize=0;

cout<<\请输入一个整数n:\ cin>>n;

b=new string[n]; j=0;

while(j

cout<<\请输入整数m:\ cin>>m;

a=new int[m];

cout<<\请输入一连串数据:\ for(i=0;i>a[i]; if(compute(a,m)) b[j]=\ else

b[j]=\ delete[] a; j++; }

cout<<\输出:\ for(i=0;i

cout<

【输入】:

2

4 5 7 6 8

8 1 7 3 2 8 12 78 3

【输出】:

2.4 数字和

【输入描述】:输入数据中包含了不多于50个的正整数n

【输出描述】:每个正整数都应输出一个各位数字和,并独占一行。 【程序代码】:

#include #include using namespace std; int main(){ string st; while(getline(cin,st)){ int ans=0; for(int i=0;i='0' && st[i]<='9') ans+=st[i]-'0'; } cout<

【输入】:

12345 56123 82

【输出】:

五、实验小结:

本次试验重点学习了各种数据类型,逻辑运算,函数的声明,定义和调用。在过程控制过程中,熟练地使用多重循环,同时应养成良好的编程习惯和形成自己的编程风格,一边为日后的学习打下坚实的基础。

实验三、加密和解密算法实验

一、实验目的

1、重视数学方法,提高数学推算和编程表的转换能力。

2、拓展编程表达的方法,熟练运用函数等手段进行计算模块的分离计算。 3、进一步学会使用c++标准库;

4、在保证编程程序正确的条件下,关注数据结构和算法,改进效率。

二、实验设备与环境

装有C++语言工具软件 (Vs2008)的计算机。

三、实验内容

a) P.98,7.2.1,密钥加密; b) P.99,7.2.2,密钥解密;

四、实验过程及结果 3.1 密钥加密 【实验代码】:

#include #include

for(i=0;i=strlen(data)) break;

data[i]+=key[j]-'0'; if(data[i]>122)

data[i]=data[i]-123+32; i++; } i-=1; }

cout<

return 0; }

【输入】:

The result of 3 and 2 is not 8 123 Hello world

【输出】:

3.2 密钥解密

【实验代码】:

#include #include

for(i=0;i=strlen(data)) break;

data[i]-=key[j]-'0'; if(data[i]<32)

data[i]=data[i]-32+123; i++; } i-=1; }

cout<

return 0;

}

【输入】:

a) xql”zkvyu “wl#7)!的位数; b) P.103,7.3.2,排列对称串; c) P.103,7.3.3,勒让德多项式表; d) P.104,7.3.4,立方数和连续奇数和;

四、实验过程及结果 4.1 n!的位数

【基本描述】:针对每个非负整数n,计算n!的位数 【输入描述】:输入数据中含有一些整数n(0<=n<10^7)

【输出描述】:根据每个整数n,输出n!的位数,每个数占独立一行。 【主要代码】:

#include #include using namespace std; int main() {

double N,logV; int i;

while(cout<<\输入N的值:\{ N=i;

for(i=1,logV=0;i<=N;i++) {

logV+=log(1.0*i); }

logV=log(10.0);

cout<

return 0; }

【输入】:

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()!=s2.length()?s1.length()

int main(int argc,char * argv[]) {

vector v;

string t,s; while(cin>>s) {

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;i

cout<

system(\ return 0; }

【输入】:

123321 123 321 sdfsdfd 121212 \\\\dd\\\\

【输出】:

4.3 勒让德多项式表

【基本描述】:数学poly函数的展开式也称关于x的n阶勒让德多项式,它

的递推公式为:

给定x,请计算n阶勒让德多项式的值。

【输入描述】:输入数据中含有一些浮点数x(0

【输出描述】:对于每个x,分别计算2阶,3阶,4阶,5阶,6阶的勒让

德多项式的值,其每个值的精度为6位小数。输出时,先列出x的值,保留3位小数精度,然后每输出一个阶值之前,都空出2格,由此一字排开,形成一张多项式表

【代码如下】:

#include #include using namespace std;

double poly(int n,double x); int main() { int i=0;

for(double x;cin>>x;){ if(i==0){

cout<<\ x p2(x) p3(x) p4(x) p5(x) p6(x)\ i=1; }

cout<

cout<

cout<

double poly(int n,double x){ if(n==0)

return 1; if(n==1)

return x;