课堂笔记
1.冒泡排序(最大的气泡会最先上升)
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
//向函数传递一维数组
void createArray(int a[],int n)
//第一个参数只是知道数组的首地址在哪里,第二个参数是控制元素个数
{
int i;
srand(time(NULL));
for(i=0;i<n;i++)
{
a[i]=rand()%101;
}
}
void printArray(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
cout<<a[i]<<"\t";
}
cout<<endl;
}
int Max(int a[],int n)
{
int max;
max=a[0];
int i;
for(i=1;i<n;i++)
{
if(a[i]>max) max=a[i];
}
return max;
}
//
//
void selectSort(int a[],int n)
{
int i,j;
int min,mi;
int t;
for(i=0;i<n-1;i++)
{
//找最小值
min=a[i];
mi=i;
for(j=i+1;j<n;j++)
{
if(a[j]<min)
{
min=a[j];
mi=j;
}
}
//a[mi],a[i]
//交换
t=a[mi]; a[mi]=a[i]; a[i]=t;
printArray(a,10);
}
}
//冒泡排序算法
void bubbleSort(int a[],int n)
{
int i,j;
int t;
for(i=0;i<n-1;i++)//外层控制轮次
{
for(j=0;j<n-1-i;j++) //i=0, j=0,,,n-2//内层控制由谁来结束然后交换
{
if(a[j]>a[j+1])//交换
{
t=a[j]; a[j]=a[j+1]; a[j+1]=t;
}
}
printArray(a,10);//在每一轮交换后完成输出,是在内层完成后的外层
}
}
int main(int argc, char** argv) {
int a[10];
// a[i]= a+i*sizeof(int)
createArray(a,10);
//createArray(&a[2],5);
//createArray(a+2,5):
printArray(a,10);
cout<<"**************************************"<<endl;
//cout<<Max(a,10)<<endl;
//selectSort(a,10);
bubbleSort(a,10);
cout<<"**************************************"<<endl;
printArray(a,10);
return 0;
}
2..二维数组基础
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
//二维数值型数组——相当于矩阵
int main()
{
int a[3][4]={{1,2},{3,4,5},6};
给第一行 给第二行
//两个下标,分别是行数和列数,一共要分配12个空间
万一给多了呢?
自己试一试
int b[]={1,2,3,4,5};
int c[][2]={1,2,3,4,5,6,7};
//逻辑上:3行4列的矩形数表
// a[0][0] a[0][1] a[0][2] a[0][3]
// a[1][0] a[1][1] a[1][2] a[1][3]
// a[2][0] a[2][1] a[2][2] a[2][3]
//a仍然代表的是数组的首地址 &a[0][0]
//行主序存储:一行一行地进行存储
也就是第一行排列完跟在后面排第二行,以此类推(实际上)
//内存当中的存储(物理上):
C语言从0开始
// a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
int i,j;
for(i=0;i<3;i++)//外行控制行下标
{
for(j=0;j<4;j++)//内行控制列下标
{
cout<<a[i][j]<<"\t"; // a[i][j]= a+i*4+j a[1][2]= a+1*4+2
}
cout<<endl;
}
cout<<sizeof(b)<<endl;
cout<<sizeof(a)<<endl;
cout<<sizeof(c)<<endl;
return 0;
}
&a[i][j]//访问地址
不加&访问值
行下标表示前面有几个完整的行
列下标表示同一行前面有几个数
a[i]=a+i*sizeof(int)
a[i][j]=a+i*4+j
4列 还是基于a[3][4]的例子
j列
eg a[1][2]=a+1*4+2 显示的是在实际上排一行中的第几个位置
int b[]={1,2,3,4,5,6}
空的时候必须初始化
分配多少给多少
空的时候又不初始化会出现“unknown size”错误,因为系统不知道给b分配多少空间
在一维数组想省略元素个数(下标),一定要初始化
Int c[][]={1,2,3,4,5,6}
“missing size”
Int c[][2]={1,2,3,4,5,6}
2*2 4个元素 不够
3*2 6个元素
={1,2,3,4,5,6,7}
7独占第四行
4*2 不足补0
二维数组想省略元素个数(下标)至少有一个不为空
3.二维数组中找最大值
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
//二维数值型数组
int main()
{
int a[3][4];
int i,j;
srand(time(NULL));
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
a[i][j]=rand()%100;
cout<<a[i][j]<<"\t"; // a[i][j]= a+i*4+j a[1][2]= a+1*4+2
}
cout<<endl;
}
int max,mr,mc;
max=a[0][0]; mr=0; mc=0;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
mr=i;
mc=j;
}
}
}
cout<<mr<<"\t"<<mc<<"\t"<<max<<endl;
return 0;
}
4.矩阵乘法
// Note:Your choice is C++ IDE
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
//二维数值型数组
int main()
{
int a[3][4],b[4][2],c[3][2];
// c[2][1]=a[2][0]*b[0][1]+ a[2][1]*b[1][1]+ a[2][2]*b[2][1]+a[2][3]*b[3][1]
//
//
//
//
int i,j,k;
srand(time(NULL));
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
a[i][j]=rand()%10;
cout<<a[i][j]<<"\t"; // a[i][j]= a+i*4+j a[1][2]= a+1*4+2
}
cout<<endl;
}
cout<<"______________________________________________________________________"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<2;j++)
{
b[i][j]=rand()%10;
cout<<b[i][j]<<"\t"; // a[i][j]= a+i*4+j a[1][2]= a+1*4+2
}
cout<<endl;
}
cout<<"______________________________________________________________________"<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
c[i][j]=0;
for(k=0;k<4;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
cout<<c[i][j]<<"\t";
}
cout<<endl;
}
return 0;
}