c++实验答案 下载本文

(2)算法分析:排序是指将一组无序的数据按从小到大(升序)或从大到小(降序)的次序重新排列。下面算法采用的是冒泡法排序。 #include

for i=0 to N-1 输入a[i]

for i=1 to N-1 for j=0 to N-i-1 真假

a[j]与a[j+1]交换 for i=0 to N-1 输出a[i]

图5.1 冒泡法排序流程图 a[j]>a[j+1] #include #define N 10 void main(void) { float a[N],temp; int i,j;

cout<<\ for (i=0;i<=N-1;i++) cin>>a[i];

for (i=1;i<=N-1;i++) for (j=0;j<=N-i-1;j++) if (a[j]>a[j+1]) { temp=a[j];

a[j] =a[j+1]; a[j+1]=temp; }

for (i=0;i<=N-1;i++)

cout<

下面算法采用的是选择法排序。 #include #include #define N 10 void main(void) { float a[N],temp; int i,j;

cout<<\ for (i=0;i<=N-1;i++) cin>>a[i];

for(i=0;i

{ temp=a[i]; a[i]=a[j]; a[j]=temp;} }

for (i=0;i<=N-1;i++)

cout<

运行结果:

Input score:90 78 68 96 88 75 67 85 92 84 68 75 78 84 85 88 90 92 96 (3)

#include #include #define N 5 void main(void)

{ float a[N][N],max,min,sum; int i,j,r1=0,r2=0,c1=0,c2=0; cout<<\ for(i=0; i>a[i][j]; max=min=a[0][0]; sum=0;

for(i=0; imax)

{ max= a[i][j]; r1=i;c1=j; }

else if (a[i][j]

if (i==j || i+j==N-1) sum+=a[i][j]; }

cout<<\ cout<<\ cout<<\}

运行结果: Input a[5][5]:

1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9

max=9 row1=4 col1=4 min=1 row2=0 col2=0 sum=45 (4)

#include #include #define M 3 #define N 3 void main(void)

{ int a[M][N],b[M][N],c[M][N],i,j; cout<<\ for (i=0;i>a[i][j];

cout<<\ for (i=0;i>b[i][j]; for (i=0;i

c[i][j]= a[i][j]+b[i][j]; for (i=0;i

cout<

运行结果: Input a[M][N]: 1 2 3 4 5 6 7 8 9

Input b[M][N]: 3 2 1 6 5 4 9 8 7

4 4 4 10 10 10

16 16 16

实验五

1.实验目的 通过本次实验

(1)初步掌握有序数组的查找、增加、删除的编程方法;

(2)初步掌握字符数组的定义、赋初值与字符串处理函数的使用方法; (3)初步掌握字符串复制、连接、测长等程序的编写方法; (4)学会打印杨辉三角形的编程方法; (5)学会二维数据表的排序编程方法。 2.实验要求

(1)编写实验程序;

(2)在VC++运行环境中,输入源程序; (3)编译运行源程序;

(4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容

(1)已有一按从小到大次序排序好的数组,现输入一数,要求用折半查找法找出该数在数组中的位置。 实验数据:

数组值为:10,12,14,16,18,20,22,24,26,28 输入数: 16

(2)编写程序,实现str=str1+str2的操作,此处运算符“+”表示将两个字符串str1、str2连接成一个字符串str。用键盘将两个字符串输入字符数组str1与str2中,连接后的字符串存放在字符数组str中,并输出连接后的字符串str。 1)用C++提供的字符串处理函数完成上述要求。 2)不用C++提供的字符串处理函数完成上述要求。 实验数据:abcde fghij

(3)设计一个程序,按习题4.12的要求打印杨辉三角形。

(4)在表4.4中求每个学生的平均成绩及每门课的最高分与最低分,对学生成绩表用擂台法按平均成绩降序排序后输出。 表4.4 学生成绩情况表

学 号数 学语 文外 语平均成绩 1001908085 1002707580 1003657075 1004855060 1005809070 最高分 最低分

4.解答参考

(1)分析:对已排好序的数,折半查找法总是将要找的数与中间的元素比较,若大于它,则到后半部分去找,否则到前半部分去找。 #include #define N 10 void main(void) { float b,a[N];

int low,high,i,mid;

cout<<\:\ //输入10个有序数 for(i=0;i>a[i];

cout<<\ //输入要查找的数 cin>>b;

low=0; //设置查找的区间,开始时是全部 high=i-1;

mid=(low+high)/2;

while(a[mid]!=b&&lowa[mid]) low=mid+1 ; //重新设置查找区间为原区间的后半部 else high=mid-1; //重新设置查找区间为原区间的前半部 mid=(low+high)/2; //设置中间的比较元素 }

if (b==a[mid]) //找到 cout<

else //没找到 cout<<\}

运行结果:

Input sort array a[10]:

10 12 14 16 18 20 22 24 26 28 Input number b: 16 16 is on 3 (2)

解:解法一

#include #include #define N 30 void main(void)

{ char str1[N],str2[N],str[2*N];

cout<<\ first String\ cin>>str1;

cout<<\ second String\ cin>>str2; strcpy(str,str1); strcat(str,str2);