目录
一、一维数组
1、五只小猪称体重
2、元素逆置
3、冒泡排序
二、二维数组
考试成绩统计
一、一维数组
1、五只小猪称体重
要求:
现有五只小猪,体重分别为764,942,613,476,940。定义一个一维数组,存放五只小猪的体重,找出其中最重的小猪,并打印输出。
分析:
1、首先按照题目的要求,我们需要定义一个一维数组,有三种方法可以定义一维数组,按照自己的习惯用哪一种都可以。
2、两两比较小猪的体重,保留较大的值。
在完成这一步骤时,我们可以认定一个最大值max,让max与数组中的值进行比较,并用较大值更新max。
3、打印输出最大值。
代码:if语句实现比较
#includeusing namespace std; int main() { int arr[5] = {764,942,613,476,940};//定义体重数组 int max = arr[0];//暂认定arr[0]为最大值 for(int i = 1; i < 5; i++)//for语句实现循环比较 { if(max < arr[i])//如果当前最大值比arr[i]小,则更新最大值 { max = arr[i]; }//如果当前最大值依然为较大值,则直接进行下一次比较 } cout << "最重的小猪体重为:" << max << "KG" << endl;//打印输出 system("pause"); return 0; }
运行结果:
代码:三目运算符实现比较
#includeusing namespace std; int main() { int arr[5] = {764,942,613,476,940};//定义体重数组 int max = arr[0];//暂认定arr[0]为最大值 for(int i = 1; i < 5; i++)//for语句实现循环比较 { //三目运算符实现比较大小 //当前最大值max > arr[i],则输出max的值;反之输出arr[i]的值 max = max > arr[i] ? max : arr[i]; } cout << "最重的小猪体重为:" << max << "KG" << endl;//打印输出 system("pause"); return 0; }
运行结果:
2、元素逆置
理解:元素逆置,顾名思义就是将最后一个数与第一个数交换位置,倒数第二个数与正数第二个数交换位置······那么什么时候停止交换呢?我们将这组数据定义为arr[ ],第一个数为arr[0],第二个数为arr[1]······最后一个数为arr[i],如果这组数据为奇数个,那么到中间那个数时停止交换;如果一组数据为偶数个,那么当交换位置的两个数,第一个数的下标大于第二个数的下标时停止。例如:一个数组有6个元素,将这个数组逆置,当执行完arr[3]与arr[4]交换位置后停止,因为再往后执行arr[4]与arr[3]又将交换位置,此时会还原。
要求:有一个一维数组,arr[10] = {62,8,46,21,37,64,97,30,10,40};将其中的元素进行逆置,并打印输出。
分析:
1、创建这个一维数组
2、定义一个变量,用于中间过渡。
3、分别定义两个变量start、end下标,用于表达要交换的元素,交换完成后变量start++,变量end--。直到start >= end时停止交换。
4、打印输出逆置后的数组。
代码:
#includeusing namespace std; int main() { //1、创建一维数组 int arr[10] = { 62,8,46,21,37,64,97,30,10,40 }; cout << "逆置前为:"; for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } cout << endl; //2、定义变量temp,用于交换中过渡 int temp = 0; //3、定义起始下标start,结束下标end int start = 0; int end = sizeof(arr) / sizeof(arr[0]) - 1;//用整个数组占用的内存空间 / 某个元素占用的内存空间,得到这个数组的元素个数。 //最后要-1是因为,起始元素1的起始下标为0,中间是有差值在的,不能直接用个数代表下标。 //这种方式定义结束下标,就算不知道元素个数也可以完成元素的逆置 while (start < end)//起始下标 < 结束下标执行循环,否则退出。此时不需要考虑奇偶。 { //4、元素逆置 temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; //5、下标更新 start++; end--; } //6、打印输出 cout << "逆置后为:"; for (int i = 0; i < 10; i++) { cout << arr[i] << " "; } cout << endl; system("pause"); return 0; }
虽然用多一个变量来过渡的方式,代码比较长,但是重要的是要学习这种思想。
因为如果我们不用中间变量过渡,直接将arr[end]的值赋给arr[start],我们就没办法再把原始的arr[start]的值赋给arr[end]了,直接被覆盖了。
运行结果:
还有一种简单的方法实现元素逆置:直接倒序输出
#includeusing namespace std; int main() { int arr[] = { 45,78,23,49,10,69,72,67,91,83,64,76,26 }; cout << "逆置前为:"; //i < (sizeof(arr) / sizeof(arr[0])) 依然通过内存空间来确定循环的次数 for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++) { cout << arr[i] << " " ; } cout << endl; cout << "逆置后为:"; for (int i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++) { //-1的意义与上面那个方法的-1意义一样 //-i:直接实现倒序输出 cout << arr[sizeof(arr) / sizeof(arr[0]) - 1 - i] << " "; } cout << endl; system("pause"); return 0; }
运行结果:
3、冒泡排序
用法:对一组数据进行排序。
例子:将数组{4,2,8,0,5,7,1,3,6,9}进行升序排序。
分析:
1、比较相邻的元素。
如果第一个比第二个大,就交换它们,一共比较8次。第一轮比较完成之后就会得到最大值9。
2、重复步骤1,直到排序完成。
第二轮比较时,因为已经找出最大数,此时不需要再将9加入比较,所以比较的元素-1,相应的比较次数也会-1;
第三轮比较时,8、9已被找出,比较元素再-1,比较次数再-1。
依此类推,直到按升序找出所有数,停止比较。
注意:
排序总轮数 = 元素个数 - 1
每轮对比次数 = 剩余元素个数 - 1
剩余元素个数 = 元素个数 - 排序轮数
代码:
#includeusing namespace std; int main() { int arr[] = { 4,2,8,0,5,7,1,3,6,9,13,12,15,10,14,11 }; cout << "排序前为:" ; for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { cout << arr[i] << " "; } cout << endl; for(int i = 0; i < sizeof(arr) / sizeof(arr[0]) - 1; i++)//排序轮数 { for(int j = 0; j < sizeof(arr) / sizeof(arr[0]) - i - 1; j++)//每轮比较次数 { if(arr[j] > arr[j+1])//如果是降序排列,> 改为 < { int temp = arr[j+1];//交换 arr[j+1] = arr[j]; arr[j] = temp; } } } cout << "排序后为:" ; for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { cout << arr[i] << " "; } system("pause"); return 0; }
运行结果:
二、二维数组
考试成绩统计
有3名同学张三、李四、王五,在一次考试中的成绩如下,请分别输出三名同学的总成绩。
代码:
#includeusing namespace std; int main() { string name[3] = {"张三","李四","王五"}; int arr[3][3] = { 100,100,100,90,50,100,60,70,80 }; for (int i = 0; i < 3; i++) { int sum = 0; for (int j = 0; j < 3; j++) { cout << arr[i][j] << 't'; sum += arr[i][j]; } cout << name[i] <<"的总成绩为:" << sum << endl; } system("pause"); return 0; }
运行结果:
暑期编程PK赛 得CSDN机械键盘等精美礼品!



