“C++ 编程入门班” 练习四
跳转到导航
跳转到搜索
预习练习
自行输入【例4-1】、【例4-2】,编辑至运行通过。
【例4-1】数组的定义、赋值和遍历
#include <iostream>
using namespace std;
int main()
{
int a[3]; //定义数组
a[0]= 1; //通过索引引用,并赋值。注意索引是从0开始的。
a[1]= 2;
a[2]= 3;
int b[3]= {5,6,7}; //定义数组并同时赋值。注意括号是花括号。
for(int i=0;i<3;i++)
{
cout << a[i] << endl;
}
//计算数组b的长度,为什么要用这种方法呢?
//如果改成 int lenth = sizeof(b);
// lenth的值会是多少呢?
int lenth = sizeof(b)/sizeof(int);
for(int i=0;i<lenth;i++)
{
cout << b[i] << endl;
}
return 0;
}
【例4-2】数组排序
#include <iostream>
#include <stdlib.h>
#include <time.h>
#define random(x) (rand()%x)
using namespace std;
int main()
{
int a[10];
srand((int)time(0));//用系统时间来做种子
for(int i=0;i<10;i++)
{
a[i] = random(100); // 取100以内的随机数
}
//原始顺序
for(int i=0;i<10;i++)
{
cout << a[i] << ","; // 逐个输出
}
cout << endl;
for(int i=0;i<10;i++)
{
for(int j=i+1;j<10;j++)
{
if(a[i]>a[j])
{
//交换
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
//排序以后的顺序
for(int i=0;i<10;i++)
{
cout << a[i] << ","; // 逐个输出
}
cout << endl;
return 0;
}
知识点
数组的赋值方式
方法一:逐个赋值。注意索引值从0开始。
方法二:批量赋值。
数组的遍历
1、获得数组的长度
2、使用循环语句,逐个访问数组的元素。
冒泡排序算法
【例4-3】冒泡排序
#include <iostream>
#include <stdlib.h>
#include <time.h>
#define random(x) (rand()%x)
using namespace std;
int main()
{
int a[10];
srand((int)time(0));//用系统时间来做种子
for(int i=0;i<10;i++)
{
a[i] = random(100); // 取100以内的随机数
}
//原始顺序
for(int i=0;i<10;i++)
{
cout << a[i] << ","; // 逐个输出
}
cout << endl;
int n = sizeof(a)/sizeof(int);
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
//交换
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
//排序以后的顺序
for(int i=0;i<10;i++)
{
cout << a[i] << ","; // 逐个输出
}
cout << endl;
return 0;
}
假设共有10个数
第一轮:
1、从第1个数开始,将第1个数和第2个数比较,如果第1个数比第2个数大,交换两者。
2、将第2个数和第3个数比较,如果第2个数比第3个数大,交换两者。
3、将第3个数和第4个数比较,如果……
……
9、将第9个数和第10个数比较,如果第9个数比第10个数大,交换两者。
经过这一轮的比较,最大的数就是第10个。
第二轮:
与第1轮相同(可以只比较到第9个数)经过比较,最大的数是第10个,第二大的数是第9个。
第三轮:
与之前的相同(可以只比较到第8个数),经过比较,最大的数是第10个,第二大的数是第9个,第二大的数是第8个。
第十轮: 与之前的相同(可以只比较到第2个数)。
到此,经过不断比较和交换,最小的数不断上升,大的数逐个下沉,完成了从小到大的排序。 整个过程像气泡上升一样,所以也称为“冒泡排序”。
冒泡排序动画演示:
http://www.bilibili.com/video/av18176281/
扩展
【例4-1】的数组遍历,可以改用while 循环语句实现吗?
【例4-2】是按从小到大排序的,如果要改成从大到小排序,应该怎么修改?
【例4-2】和【例4-3】的排序有什么不同?
在各个例子的多个for 循环语句中,都使用了相同的int i,这些i之间是什么关系?互相会有影响吗?