lab5

更新时间:2024-01-28 12:44:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

实验5 数组

一、实验目的

⑴ 掌握一维数组和二维数组定义的规则,初始化及数组元素的引用方法。

⑵ 熟练掌握一维数组和二维数组的使用基本算法,解决排序和矩阵操作问题。 ⑶ 掌握字符数组与字符串的关系以及字符数组与字符串的使用方法。

二、实验内容和实验要求

1.练习题一

⑴ 编程实现将10个整数升序排列。 ⑵ 要求

从键盘输入10个整数存放在一个一维数组中,调整10个数按从小到大的顺序排列,并输出。分别用冒泡法和选择法实现。(写两个程序)

⑶程序代码 冒泡法:

#include using namespace std; int main() {

int i,j,t,a[10],k;

cout<<\输入10个整数:\ for(i=0;i<10;i++) cin>>a[i]; for(i=0;i<9;i++) for(j=i+1;j<10;j++) if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } cout<<\输出升序排列的结果:\ for(i=0;i<10;i++) cout<

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

选择法:

#include using namespace std; int main() {

int i,j,t,a[10],k;

cout<<\输入10 个整数:\ for(i=0;i<10;i++) cin>>a[i]; for(i=0;i<9;i++) { k=i; for(j=i+1;j<10;j++) if(a[k]>a[j]) k=j; if(k!=i) { t=a[i]; a[i]=a[k]; a[k]=t; } }

cout<<\输出升序排列的结果:\ for(i=0;i<10;i++) cout<

⑷运行结果贴图 冒泡法:

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

选择法:

2.练习题二

⑴ 若干个数据首尾相连,构成一个圆环,找到连续的4个数之和最大的一段。 ⑵ 要求

从键盘输入数据,当输入-1时结束输入,输出其中连续的4个数之和最大的一段的起始数据的位置及这4个数的和。

⑶ 思路见实验教材 ⑷ 程序代码

#include using namespace std; int main() { int aa,i,n=0,j,max=1,s=0; int a[20]; cout<<\输入圆环数据:\ cin>>aa; while(aa!=-1) { a[n++]=aa; cin>>aa; } for(i=0;i

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

if(s>max) { max=s; j=i; } } cout<<\输出圆环数据:\ for(i=0;i return 0; }

⑸ 运行结果

⑹ 思考题及问题

题目中的数组元素数目不确定,在定义数组时,使用下面语句: int n; int a[n];

是否可以,为什么?

答: 不可以,因为n为变量,而数组内下标必须为常数。

3.练习题三

⑴ 矩阵是线性代数中的重要概念及研究工具,在计算机算法设计中,常常选用二维数组之类的数据结构来描述矩阵。试编程实现一个2×3矩阵A到3×2的矩阵B的转置。

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

1 4

1 2 3

A = B = 2 5 4 5 6

3 6

⑵ 要求

按行给原始的二维数组初始化。转置后存到另一个二维数组中,并输出。 ⑶ 思路

矩阵转置就是将原始数组行和列元素互换,即a[0][0]?b[0][0],a[0][1]? b[1][0],a[0][2]?b[2][0],a[1][0]?b[0][1],…,a[i][j]?b[j][i],…。

⑷ 程序代码

#include #include using namespace std; int main() { int a[2][3]={{1,2,3},{4,5,6}}; int i,j,b[3][2]; cout<<\原始矩阵:\ for(i=0;i<2;i++) { for(j=0;j<3;j++) cout< for(j=0;j<2;j++)

cout<

⑸ 运行结果

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

⑹ 思考题及问题 分析:

for (i=0; i<2; i++) { for (j=0; j<3; j++)

cout<程序中cout<

答: 位置在内循环最后一行,起的作用是结束内循环。

三、自测练习

1.自测练习一

试统计键盘输入的一串英文字符中每种英文字符个数。 要求:⑴相同英文字符的大小写形式视为同一种统计对象;

⑵遇到任意非英文字符时统计终止; ⑶按每行10个数据的格式输出数据。

程序代码: #include using namespace std; int main() {

char s[100],p[26],n; int i,j;

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

}

int q[26]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; n='A';

cout<<\输入英文字符串:\gets(s);

for(i=0;i<26;i++) { }

for(j=0;s[j]>='A'&&s[j]<='Z'||s[j]>='a'&&s[j]<='z',j<100;j++) { }

for(i=0,j=0;i<26;i++) { } return 0; 运行结果:

cout<

cout<<\for(i=0;i<26;i++)

if(s[j]==p[i]||s[j]-32==p[i])

q[i]++;

p[i]=n; n=n+1;

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

2.自测练习二

一个8个整数的数组,使用键盘输入数据,找出最小数和最大数及其下标,并输出。 程序代码: #include using namespace std; int main() {

int i,j,k,m,n; int a[8]; j=k=0;

cout<<\输入8个整数:\ for(i=0;i<8;i++) cin>>a[i]; m=n=a[0]; for(i=1;i<8;i++) {

if(a[i]>m) {

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

} }

}

m=a[i]; j=i;

else if(a[i]

cout<<\最大的数为:\其下标为:\cout<<\最小的数为:\其下标为:\return 0;

n=a[i]; k=i;

运行结果:

3.自测练习三

A和B是两个4×4的下三角方阵(即行列相等)初始化后的状态,请编程输出任意方阵(键盘输入方阵的行列值)的这类初始化状态。

1 0 0 0 2 3 0 0 A4×4 = B4×4 = 4 5 6 0

7 8 9 10

程序代码: #include

0 0 0 7

0 0 4 8 0 2 5 9 1 3 6 10

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

#include using namespace std; int main() {

int a[4][4],b[4][4],c[4][4]; int i,j,k;

cout<<\输入原始数据:\ for(i=0;i<4;i++) }

运行结果:

for(j=0;j<4;j++)

cin>>a[i][j];

for(i=0,k=3;i<4;i++,k--)

for(j=0;j<4;j++,k++)

b[i][k%4]=a[i][j];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

c[i][j]=b[j][i];

cout<<\矩阵为:\

for(i=0;i<4;i++) { }

for(i=0;i<4;i++) { }

for(j=0;j<4;j++)

cout<

cout< cout<<\矩阵为:\

return 0;

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

4.自测练习四

完成实验教材P37第5题 程序代码: #include using namespace std; int main() {

char s[100]; int i;

cout<<\输入字符串:\ gets(s);

for(i=0;i<100;i++) { }

cout<<\输出字符串为:\ for(i=0;s[i]!='\\n';i++)

cout<

cout<

运行结果:

if(s[i]>='A'&&s[i]<='Z') s[i]=s[i]+32; s[i]=s[i]-32;

if(s[i]>='a'&&s[i]<='z')

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

5.自测练习五

有M(1000以内)个猴子围成一圈,每个有一个编号,编号从1到M。打算从中选出一个大王。经过协商,决定选大王的规则如下:从第一个开始,每隔N(任意正整数)个,数到的猴子出圈,最后剩下来的就是大王。要求,从键盘输入M、N(均为正整数),试编程计算哪一个编号的猴子将成为大王。

程序代码: #include using namespace std; int main() {

int a[1000]; int M,N,j,n; float i;

cout<<\输入M,N的数值:\ cin>>M>>N; i=-1; n=0;

for(j=0;j

if(a[j]!=0) }

while(n==M); { } j++; if(j==M)

j=0; a[j]=0; i=0; n++; i++; if(i==(N+1))

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

}

cout<<\成为大王的猴子编号为:\

return 0; 运行结果:

6、自测练习六

完成课后作业P90页的程序4,对上次作业结果进行验证。 程序代码:

using namespace std; #include\const M=4; const N=4; int main() {

int a[M][N],i,j,sum=0; for(i=0;i

for(j=0;j

for(i=1;i

sum+=a[i][0]; sum+=a[i][N-1]; sum+=a[0][i]; sum+=a[M-1][i]; cin>>a[i][j]; for(i=0;j

C++程序设计 lab5 学号:41130091 班级:材料1104 姓名:丁振文

}

}

cout<<\二维数组周边元素之和为:\return 0;

运行结果:

本文来源:https://www.bwwdw.com/article/z5lw.html

Top