实验五 数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解:
#include<iostream.h>
int main()
{
char str[]="This is a book!"; //A
int i=0,j;
while(str[i]!=NULL)
{
if(str[i]==' ')
{ //B
j=i;
while(str[j]!=NULL)
{
str[j]=str[j+1];
2个标准学时。
for(i=1; i<10; i++)
{
for(j=0; j<10-i; j++)
{
if(aver[j]<aver[j+1])
{
t=aver[j];
aver[j]=aver[j+1];
aver[j+1]=t;
}
}
}
cout<<"学生按平均成绩高低排序为:"<<endl;
for(i=0; i<10; i++)
分析:建立两个变量i、j,先使i指向字符数组str1的第一个元素,然后移动i使其指向str1的末尾,即指向str1的最后一个元素‘\0’;再使j指向字符数组str2的第一个元素,然后将str2中的元素分别赋给str1中相应位置的元素,直到str2结束为止,即j指向str2的最后一个元素‘\0’;最后在str1的末尾添加一个结束标志‘\0’。
j++;
}
}
i++;
}
cout<<str<<endl; //C
return 0;
}
思考:
将程序中A行的“"”用“'”改写,观察现象。
将程序中B行的“'”用“"”改写,观察现象。
将程序中C行改写为:
for(j=1;str[j]!=NULL;j++,cout<<str[j]) ;
cout<<endl;
观察输出结果。
}
cout<<"杨辉三角形:"<<endl;
for(i=0;i<n;i++)
{
cout<<" ";
for(j=0;j<=i;j++) cout<<y[i][j]<<"Fra Baidu bibliotek";
cout<<endl;
}
return 0;
}
思考:
添加语句输出如图5-2所示杨辉三角形。
3.从键盘输入两个字符串,将它们连接成一个字符串。
将A行改为下列程序段:
int n;
cin>>n;
int a[n]”
观察运行结果?分析原因。
将B行改为“for(i=1;i<=10;i++)”,观察现象。
2.应用二维数组打印如图5-1所示杨辉三角形。
分析:由杨辉三角形可以看出每行数存在以下规律:每行数据的个数与行序相同;每行的第一个数和最后一个数均为1;中间的数为上一行同一列的数和其前一列的数之和。
cout<<aver[i]<<" ";
cout<<endl;
return 0;
程序如下:
解:
#include <iostream.h>
int main(void)
{
char str1[40],str2[20];//定义字符数组str1、str2
int i,j;
cout<<"输入二个字符串:";
cin.getline(str1,20);//输入字符串1到str1中
cin.getline(str2,20);//输入字符串2到str2中
实验五
一、目的和要求
1.掌握一维数组、二维数组、字符数组的定义、初始化赋值、数组元素的引用方法;
2.掌握求最大、小值、平均值、排序的方法以及有序数组的查找、增加、删除的编程方法;
3.初步掌握字符串处理函数的使用方法以及字符串复制、连接、测长等程序的编写方法;
4.掌握数组的典型应用。
二、实验设备及分组
i=0;//使i指向str1的第一个元素
while (str1[i]!='\0')//判断str1是否结束
i++;//str1没有结束,使i指向下一个元素
j=0;//使j指向str2的第一个元素
while (str2[j]!='\0')//判断str2是否结束
{
str1[i]=str2[j];//str2没有结束,将str2[j]赋给;str1[i]
6.编写程序,实现str=str1+str2的操作,此处运算符“+”表示将二个字符串str1、str2连接成一个字符串str。用键盘将二个字符串输入字符数组str1与str2中,连接后的字符串存放在字符数组str中,并输出连接后的字符串str。
四、课后作业
1.设A、B、C为m行n列矩阵。设计矩阵加法程序,能完成C=A+B的操作。m与n用define定义为常量,其值由用户自定义。
编程序将输入字符串中出现的字符除空格外,按从大到小的顺序输出(每个字符只输出一次)。
(二)完成实验项目
1.编程实现将一十进制整数M转换为D进制数。
2.已知一int a[20]数组,编程将值为偶数的元素移到数组前端,值为奇数的元素移到数组后端。(要求元素比较、移动次数尽量最少)
3.求 ,其中n≥20。
4.某班有10个学生,进行了“数学”、“语文”、“英语”、“C++语言”等科目的考试,编写程序:
(1)将考试成绩输入一个二维数组;
(2)求每门课的平均成绩、每门课的不及格学生的人数及每门课的最高分与最低分;
(3)求每个学生的平均成绩、总分、不及格门数;
(4)按学生平均成绩的高低排序并输出。
5.设计一个程序,打印杨辉三角形。(使用其它方法)
解:
#include <iostream.h>
int main()
{
int a[10]; //A
int i,j,t;
cout<<"输入数据:"<<endl;
for(i=0;i<10;i++)//B
{
cout<<"a["<<i+1<<"]=";
cin>>a[i];
}
for(i=0;i<=8;i++)
{
i++;//使i指向str1的下一个元素
j++;//使j指向str2的下一个元素
}
str1[i]='\0';//在str1末尾添加结束标志‘\0’
cout<<str1<<endl;//输出str1
return 0;
}
4.编程序将输入的字符串删去空格后输出。
分析:逐个读取每个字符,若为空格将其后面的字符和字符串结束标志前移一位,再从该位置开始,重复上述操作,直到字符串结束。
1.Windows XP操作系统;
2.Visual C++6.0语言环境;
3.每人一台PC机。
三内容和步骤
(一)验证实验程序
1.应用一维数组,对10个数进行冒泡排序,使其按照从大到小的顺序输出。
分析:n个数冒泡排序的方法是将第一个数与其后面的数逐个进行比较,发现大者进行交换,完成后最大的数就放到了第一个的位置;第二个数与其后面的数逐个进行比较,发现大者进行交换,完成后次大的数就放到了第二个的位置;如此循环,直到第n-1个数与第n个数进行比较,发现大者进行交换。
for(j=i+1;j<=9;j++)
{
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
cout<<"排序结果为:"<<endl;
for(i=0;i<=9;i++) cout<<"a["<<i+1<<"]="<<a[i]<<" "<<endl;
return 0;
}
思考:
解:
#include <iostream.h>
int main()
{
int y[5][5];
int i,j,n=5;
for(i=0;i<n;i++)
{
y[i][i]=1;
y[i][0]=1;
}
for(i=2;i<n;i++)
{
for(j=1;j<i;j++)
y[i][j]=y[i-1][j-1]+y[i-1][j];
4.友爱数:若两数彼此的真因子之和等于对方,则称此两数为友爱数。
如:最小的友爱数为220与284。
220的真因子有1、2、4、5、10、11、20、22、44、55、110,和为284
284的真因子有1、2、4、71、142,和为220
请编程找出100000以下的所有友爱数。
5.撰写实验报告。
五、实验机时
2.已有一按从小到大次序排序好的数组,现输入一数,要求用折半查找法找出该数在数组中的位置。
3、完备数:一个数的真因子和---除了本身以外的正因子和刚好等于它本身,则称此数为完被数。最小的完备数是6,因为6的真因子有1、2、3,加起来正好等于6;下一个是28,因为1+2+4+7+14=28。请编程找出100000以下的所有完备数。
#include<iostream.h>
int main()
{
char str[]="This is a book!"; //A
int i=0,j;
while(str[i]!=NULL)
{
if(str[i]==' ')
{ //B
j=i;
while(str[j]!=NULL)
{
str[j]=str[j+1];
2个标准学时。
for(i=1; i<10; i++)
{
for(j=0; j<10-i; j++)
{
if(aver[j]<aver[j+1])
{
t=aver[j];
aver[j]=aver[j+1];
aver[j+1]=t;
}
}
}
cout<<"学生按平均成绩高低排序为:"<<endl;
for(i=0; i<10; i++)
分析:建立两个变量i、j,先使i指向字符数组str1的第一个元素,然后移动i使其指向str1的末尾,即指向str1的最后一个元素‘\0’;再使j指向字符数组str2的第一个元素,然后将str2中的元素分别赋给str1中相应位置的元素,直到str2结束为止,即j指向str2的最后一个元素‘\0’;最后在str1的末尾添加一个结束标志‘\0’。
j++;
}
}
i++;
}
cout<<str<<endl; //C
return 0;
}
思考:
将程序中A行的“"”用“'”改写,观察现象。
将程序中B行的“'”用“"”改写,观察现象。
将程序中C行改写为:
for(j=1;str[j]!=NULL;j++,cout<<str[j]) ;
cout<<endl;
观察输出结果。
}
cout<<"杨辉三角形:"<<endl;
for(i=0;i<n;i++)
{
cout<<" ";
for(j=0;j<=i;j++) cout<<y[i][j]<<"Fra Baidu bibliotek";
cout<<endl;
}
return 0;
}
思考:
添加语句输出如图5-2所示杨辉三角形。
3.从键盘输入两个字符串,将它们连接成一个字符串。
将A行改为下列程序段:
int n;
cin>>n;
int a[n]”
观察运行结果?分析原因。
将B行改为“for(i=1;i<=10;i++)”,观察现象。
2.应用二维数组打印如图5-1所示杨辉三角形。
分析:由杨辉三角形可以看出每行数存在以下规律:每行数据的个数与行序相同;每行的第一个数和最后一个数均为1;中间的数为上一行同一列的数和其前一列的数之和。
cout<<aver[i]<<" ";
cout<<endl;
return 0;
程序如下:
解:
#include <iostream.h>
int main(void)
{
char str1[40],str2[20];//定义字符数组str1、str2
int i,j;
cout<<"输入二个字符串:";
cin.getline(str1,20);//输入字符串1到str1中
cin.getline(str2,20);//输入字符串2到str2中
实验五
一、目的和要求
1.掌握一维数组、二维数组、字符数组的定义、初始化赋值、数组元素的引用方法;
2.掌握求最大、小值、平均值、排序的方法以及有序数组的查找、增加、删除的编程方法;
3.初步掌握字符串处理函数的使用方法以及字符串复制、连接、测长等程序的编写方法;
4.掌握数组的典型应用。
二、实验设备及分组
i=0;//使i指向str1的第一个元素
while (str1[i]!='\0')//判断str1是否结束
i++;//str1没有结束,使i指向下一个元素
j=0;//使j指向str2的第一个元素
while (str2[j]!='\0')//判断str2是否结束
{
str1[i]=str2[j];//str2没有结束,将str2[j]赋给;str1[i]
6.编写程序,实现str=str1+str2的操作,此处运算符“+”表示将二个字符串str1、str2连接成一个字符串str。用键盘将二个字符串输入字符数组str1与str2中,连接后的字符串存放在字符数组str中,并输出连接后的字符串str。
四、课后作业
1.设A、B、C为m行n列矩阵。设计矩阵加法程序,能完成C=A+B的操作。m与n用define定义为常量,其值由用户自定义。
编程序将输入字符串中出现的字符除空格外,按从大到小的顺序输出(每个字符只输出一次)。
(二)完成实验项目
1.编程实现将一十进制整数M转换为D进制数。
2.已知一int a[20]数组,编程将值为偶数的元素移到数组前端,值为奇数的元素移到数组后端。(要求元素比较、移动次数尽量最少)
3.求 ,其中n≥20。
4.某班有10个学生,进行了“数学”、“语文”、“英语”、“C++语言”等科目的考试,编写程序:
(1)将考试成绩输入一个二维数组;
(2)求每门课的平均成绩、每门课的不及格学生的人数及每门课的最高分与最低分;
(3)求每个学生的平均成绩、总分、不及格门数;
(4)按学生平均成绩的高低排序并输出。
5.设计一个程序,打印杨辉三角形。(使用其它方法)
解:
#include <iostream.h>
int main()
{
int a[10]; //A
int i,j,t;
cout<<"输入数据:"<<endl;
for(i=0;i<10;i++)//B
{
cout<<"a["<<i+1<<"]=";
cin>>a[i];
}
for(i=0;i<=8;i++)
{
i++;//使i指向str1的下一个元素
j++;//使j指向str2的下一个元素
}
str1[i]='\0';//在str1末尾添加结束标志‘\0’
cout<<str1<<endl;//输出str1
return 0;
}
4.编程序将输入的字符串删去空格后输出。
分析:逐个读取每个字符,若为空格将其后面的字符和字符串结束标志前移一位,再从该位置开始,重复上述操作,直到字符串结束。
1.Windows XP操作系统;
2.Visual C++6.0语言环境;
3.每人一台PC机。
三内容和步骤
(一)验证实验程序
1.应用一维数组,对10个数进行冒泡排序,使其按照从大到小的顺序输出。
分析:n个数冒泡排序的方法是将第一个数与其后面的数逐个进行比较,发现大者进行交换,完成后最大的数就放到了第一个的位置;第二个数与其后面的数逐个进行比较,发现大者进行交换,完成后次大的数就放到了第二个的位置;如此循环,直到第n-1个数与第n个数进行比较,发现大者进行交换。
for(j=i+1;j<=9;j++)
{
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
cout<<"排序结果为:"<<endl;
for(i=0;i<=9;i++) cout<<"a["<<i+1<<"]="<<a[i]<<" "<<endl;
return 0;
}
思考:
解:
#include <iostream.h>
int main()
{
int y[5][5];
int i,j,n=5;
for(i=0;i<n;i++)
{
y[i][i]=1;
y[i][0]=1;
}
for(i=2;i<n;i++)
{
for(j=1;j<i;j++)
y[i][j]=y[i-1][j-1]+y[i-1][j];
4.友爱数:若两数彼此的真因子之和等于对方,则称此两数为友爱数。
如:最小的友爱数为220与284。
220的真因子有1、2、4、5、10、11、20、22、44、55、110,和为284
284的真因子有1、2、4、71、142,和为220
请编程找出100000以下的所有友爱数。
5.撰写实验报告。
五、实验机时
2.已有一按从小到大次序排序好的数组,现输入一数,要求用折半查找法找出该数在数组中的位置。
3、完备数:一个数的真因子和---除了本身以外的正因子和刚好等于它本身,则称此数为完被数。最小的完备数是6,因为6的真因子有1、2、3,加起来正好等于6;下一个是28,因为1+2+4+7+14=28。请编程找出100000以下的所有完备数。