【持续更新】C语言 第六天学习笔记(数组下)

五、【理解】冒泡排序

     冒泡排序是指相邻的两个数进行比较,将小数放前面,大数放后面。最终排序结果呈从小到大排列。就像生活中沸腾的水,气泡由小变到大,因此也称为冒泡排序!(有些书籍或者有些人也将冒泡排序称之为从大到小排列,其实核心思想都一样,只要符合核心思想的都叫冒泡排序)
冒泡

如:有7个数
70 60 50 40 30 20 10
现需用冒泡排序将其从小到大排列

具体思想步骤:先用第1个数跟第2个数比较,发现70比60要大,所以70跟60交换位置,即现在位顺序为:60
70 50 40 30 20 10 再然后用第2个数跟第3个数进行比较,因为此时第2个数已经变为了70,所以是70与第3个数比较,发现70又比50要大,于是将第2个数与第3个数交换位置,即,现在顺序为:60
50 70 40 30 20 10,再然后用第3个数与第4个数进行比较,即70与40比较,发现70比40大,所以交换位置,此时顺序为:60 50 40 70 30 20 10,然后再用第4个数与第5个数进行比较,以此类推……

经过以上推测发现,我们一共需要6轮才能完整排好序,轮数如下:

第1轮:60 50 40 30 20 10 70 第1轮比较了6次

第2轮:50 40 30 20 10 60 70 第2轮比较了5次

第3轮:40 30 20 10 50 60 70 第3轮比较了4次

第4轮:30 20 10 40 50 60 70 第4轮比较了3次

第5轮:20 10 30 40 50 60 70 第5轮比较了2次

第6轮:10 20 30 40 50 60 70 第6轮比较了1次

此时经过6轮能完整地把一堆数字从小到大按顺序排列。

经过观察我们可以发现:

我们一共有7个数字,经过6轮可以完整排序好,那么代表有n个数字,我们就需要经过n-1轮

那么每轮比较多少次呢?

我们可以发现,每轮比较的次数 为 总数 - 轮数 (论数是从1开始数)

因此得到循环

for(int 轮数= 0; i < 总数 - 1 ; 轮数++){

 

//因此轮数在循环中是从0开始的,所以这里还需要-1

for(int 次数 =
0;  次数 <  总数 - 论述  -  1; 次数++){
 
if( 数组[次数] > 数组[次数+1] ){


//交换两个变量的值

int   temp = 数组[ 次数];

数组[次数] = 数组[次数 + 1];

数组[次数+ 1] 
=  temp;

}


}

 
}


所以,上面的7个数字反映成代码为:

    //初始化数组

   int nums[7] = {70,60,50,40,30,20,10};
  

    //计算出数组总长度

   int length = sizeof(nums)
/ sizeof(int);

    

    //外层循环控制轮数

   for(int i=0;i<length-1;i++){

        //内层循环控制每轮比较的次数
  
  for(int
j=0;j<length-i-1;j++){

            //如果当前位置上的数比下一个位置上的数要大

     
      if(nums[j] > nums[j+1]){

   
              //进行两个位置上的数值交换

     
          int temp  = nums[j];

          nums[j] = nums[j+1];

          nums[j+1]  = temp;

     
      }
  
  }

    }

六、【了解】二维数组定义

思考:某个公司有3个销售小组,每组5个人,现需要把每个小组中每个人的成绩保存起来,怎么做?

1、什么是二维数组?
简单来说就是数组里的每一个元素又是一个数组,所以称之为二维数组

2、二维数组可以理解成什么样?

二维数组其实可以理解为N行N列的表格

3、创建二维数组的语法

数据类型 二维数组名[ 行][ 列 ];

int arr[3][5];

表示申明了一个二维数组,这个数组有3行5列。或者说申明了一个长度为3的数组,这个数组里面的每一个元素又是一个长度为5的数组

4、术语:

元素:表格中每一个小格子就是二维数组中的一个元素

下标:二维数组中的每一个元素的下标由两部分组成:所在行,所在列,表示这个元素是第几行第几列的数据

长度:代表二维数组可以存储数据的个数,二维数组可以存取数据的个数为:行 * 列

七、【了解】二维数组的初始化

二维数组的初始化方法与一位数组的类似,都分为两大类:先定义再赋值、定义时初始化。

1、先定义再赋值:

int arr[2][3];
int arr[0][0] = 1;
int arr[0][1] = 2;
int arr[0][2] = 3;
int arr[1][0] = 11;
int arr[1][1] = 12;
int arr[1][2] = 13;

2、定义二维数组时初始化

1)完全初始化

int arr[2][3] = { 1,2,3,11,12,13 };

int arr[2][3] = { {1,2,3},{1,2,3} };

2)部分初始化 int arr[2][3] = { 1,2,3 };

其他没有初始化的部分默认值都为0

3)定义长度时可以省略行

int arr[][3] = {1,2,3,11,12,13 };

编译器会自动根据右边输入的个数再除以左边的列数得到行数

八、【了解】二维数组的取值和遍历

1、二维数组取元素的值

int arr[2][3] = { 1,2,3,11,12,13};

arr[1][2];//代表取第二行第三列的值

回顾:
如何打印以下图形?

*   *   *   *
*   *   *   *
*   *   *   *

我们说过,二维数组可以看成一个平面,因此我们也是可以用双层for循环来遍历行、再每一行里遍历列,就达到了遍历二维数组每一个元素的目的。

2、二维数组的遍历:
如图

思考&实现(难):

计算下面每一个课程的总分、平均分、最高分和最低分

再计算每一个学生的平均分
赵钱 孙李 周吴 郑王 冯陈

C 语言 80 61 59 85 76

OC 语言 75 65 63 87 77

iOS开发 92 71 88 90 76

解决代码:

 int arr[3][5] = {

    
  {80, 61,59, 85,76},

     
  {75, 65,63, 87,77},

     
  {92, 71,88, 90,76}

    };

  

   int max,min,sum;

   for(int row=0;row<3;row++){

    
  
        //假定最高分和最低分都是第一个人的

     
  max = min = sum = arr[row][0];

        //遍历每一列,判断出当前这行中哪个分数最大

        //哪个分数最小,以及计算出总和

     
  for(int   col=1 ; col<5;  col++){

    
       

 
          //判断是否为更高的分数

     
      if(max <  arr[row][col])

          max = arr[row][col];

          //判断是否为更低的分数


      if(min >arr[row][col])


          min = arr[row][col];


 
          //累加分数

    
      sum += arr[row][col];

     
  }

   
        //根据所在行数打印不同结果

     
  switch (row) {

 
              //C语言

     
      case 0:

    
           

                printf("C语言考试,最高分是:%d 最低分是:%d 总分是:%d \n",max,min,sum);

     
          break;

 
              //OC语言

     
      case 1:

    
           

                printf("OC语言考试,最高分是:%d 最低分是:%d 总分是:%d \n",max,min,sum);

     
          break;

 
              //iOS开发

     
      case 2:

    
           

                printf("iOS开发考试,最高分是:%d 最低分是:%d 总分是:%d \n",max,min,sum);

     
          break;

     
  }

    }

    

    

    //清空总分值

    sum =0;

    //因为要计算某个学生的平均分,那么只能从列开始遍历

   for(int col =0;col<5;col++){

    
   

        //再遍历这一列里的每一行

     
  for(int
row=0;row<3;row++){

    
      sum += arr[row][col];
  }
        //根据总分算出平均分
  int avg = sum /3;

        //根据列号来判断是哪一个人的,打印不同结果

  switch (col) {
      case 0:
         printf("赵钱的平均分是%d \n",avg);

    
          break;

   
      case 1:

         printf("孙李的平均分是%d \n",avg);
 
          break;
     
      case 2:
 
        printf("周吴的平均分是%d \n",avg);

     
          break;

          case 3:

              printf("郑王的平均分是%d \n",avg);

     
          break;     
      case 4:
              printf("冯陈的平均分是%d \n",avg);

          break;
   
  }

    }



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容