C语言第二十五讲

课堂笔记

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值