⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc7.dat

📁 这是一个包含多个语言的指令集
💻 DAT
📖 第 1 页 / 共 2 页
字号:
第6章    数    组

为了解决比较复杂的问题,本章介绍C语言提供的一种最简单的构造类型──数组.

6.1   1维数组的定义和引用

6.1.1  1维数组的定义

6.1.2  1维数组元素的引用

6.1.3  1维数组元素的初始化

6.1.4  1维数组应用举例 

6.1.1  1维数组的定义

[案例6.1]  从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来.      

排序的方法有很多,本题采用冒泡法.

冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部.就像水底的气泡一样逐渐向上冒,故而得名.

由A[n]~A[1]组成的n个数据,进行冒泡排序的过程可以描述为:

(1)首先将相邻的A[n]与A[n-1]进行比较,如果A[n]的值小于A[n-1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较A[n-1]与A[n-2],同样使小的上浮,大的下沉.依此类推,直到比较完A[2]和A[1]后,A[1]为具有最小排序码(数值)的元素,称第一趟排序结束.

    /*冒泡法排序*/

    for(i=0; i<NUM-1; i++)    /*外循环:控制比较趟数*/

        for(j=NUM-1; j>i; j--)  /*内循环:进行每趟比较*/

            if(data[j]<data[j-1])  /*如果data[j]大于data[j-1],交换两者的位置*/

               {temp=data[j];

                 data[j]=data[j-1];

                 data[j-1]=temp;

               };

    /*输出排序后的数据*/

    printf("\nthe  result of sort:\n");

    for(i=0; i<NUM; i++)

        printf("%d ",data[i]); 

    getch();               /*等待键盘输入任一字符,目的使程序暂停*/

}

                          [程序演示]

(2)  然后在A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到A[2];重复进行n-1趟后,整个排序过程结束.

/*案例代码文件名:AL6_1.C*/

/*功能:从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来.*/

#include "stdio.h"

#define NUM 10                   /*定义符号常量(数据个数N)*/

main()

{ int data[NUM];                   /*定义1个1维整型数组data*/

    int i,j,temp;                   /*定义循环变量和临时变量*/

    clrscr();               /*库函数clrscr():清屏*/

    printf("Please input 10 numbers:\n");

    for(i=0; i<NUM; i++)

        scanf("%d", &data[i]);

(3)  

数组同变量一样,也必须先定义、后使用.

1维数组是只有1个下标的数组,定义形式如下:

数据类型   数组名[常量表达式][, 数组名2[常量表达式2]……];

(1)“数据类型”是指数组元素的数据类型.

(2)数组名,与变量名一样,必须遵循标识符命名规则.

(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量.

注意:C语言中不允许动态定义数组. 

特别说明:在数组定义时,“常量表达式”外的方括号;以及元素引用时,“下标表达式”外的方括号,都是C语言语法规则所要求的,不是本书所约定的可选项的描述符号!

(4)  组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号.

(5)  数组名中存放的是一个地址常量,它代表整个数组的首地址.同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元.

   6.1.2  数组元素的引用

   引用数组中的任意一个元素的形式:

            数组名[下标表达式]

    1.“下标表达式”可以是任何非负整型数据,取值范围是0~(元素个数-1).

    特别强调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界.因此在编写程序时,保证数组下标不越界是十分重要的.

    2.1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算.

     3.在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理.

6.1.3  1维数组元素的初始化 

  初始化格式:

数据类型  数组名[常量表达式]={初值表}

(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定).如果被定义数组的长度,与初值个数不同,则数组长度不能省略.

(2)“初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值.

(3)根据存储类型的不同,数组有静态数组(static)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分.

6.1.4  1维数组应用举例

        [案例6.2] 已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩.其中平时、实习、测验和期末分别占10%、20%、20%、50%.
/*案例代码文件名:AL6_2.C*/
/*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来.按空格键继续循环,其他键终止循环.*/
#include “stdio.h”
main()
{ int i=1,j;
  char con_key=‘\x20’;                              /* ‘\x20’ 空格键的ASCII码*/
  float score[5],ratio[4]={0.1,0.2,0.2,0.5};   /*定义成绩、比例系数数组*/
  while(con_key=='\x20')

    while(con_key=='\x20')

    {clrscr();

      printf("输入第%2d个学生的成绩\n", i++);

      printf("平时    实习    测验    期末成绩\n");

      score[4]=0;                   /* score[4]:存储总评成绩*/

      for(j=0; j<4; j++)

          {scanf("%f",&score[j]);

            score[4] += score[j] * ratio[j];

          }

      printf("总评成绩为:%6.1f\n", score[4]);

      printf("\n按空格键继续,其它键退出");

      con_key=getch();        /*getch()函数等待从键盘上输入一个字符*/

    }

}

6.2   2维数组的定义和引用

6.2.1  2维数组的定义

6.2.2  2维数组元素的引用

6.2.3  2维数组元素的初始化

6.2.4  2维数组应用举例 

6.2.1  2维数组的定义

[案例6.3]  给一个2*3的2维数组各元素赋值,并输出全部元素的值. 

/*案例代码文件名:AL6_3.C*/

/*功能:从键盘上给2*3数组赋值,并在屏幕上显示出来.*/

#define Row 2

#define Col 3

#include "stdio.h"

main()

    { int i, j, array[Row][Col];         /*定义1个2行3列的2维数组array*/

      for(i=0; i<Row; i++)                /*外循环:控制2维数组的行*/

      for(j=0; j<Col; j++)                  /*内循环:控制2维数组的列*/

          {printf("please input array[%2d][%2d]:",i,j);

            scanf("%d",&array[i][j]);     /*从键盘输入a[i][j]的值*/

           }

       printf("\n");

       /*输出2维数组array*/

       for(i=0;i<Row;i++)

        { for(j=0;j<Col;j++)

                printf("%d\t",array[i][j]);    /*将a[i][j]的值显示在屏幕上*/

           printf("\n");

        }

       getch();

   }                                                         

2维数组的定义方式如下:

    数据类型  数组名[行常量表达式][列常量表达式][,  数组名2[行常量表达式2][列常量表达式2]……];

1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推.

2. 设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数). 

3.可以把2维数组看作是一种特殊的1维数组:它的元素又是一个1维数组.

例如,对x[3][2],可以把x看作是一个1维数组,它有3个元素:x[0]、x[1]、x[2],每个元素又是一个包含2个元素的1维数组,如图6-4所示.即把x[0]、x[1]、x[2]看作是3个1维数组的名字. 

?6.2.2  2维数组元素的引用

引用2维数组元素的形式为:

数组名[行下标表达式][列下标表达式]

1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量.

2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内.假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3.

3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的2维数组元素.

6.2.3  2维数组元素的初始化

1.按行赋初值

数据类型  数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};

赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推.

2.按2维数组在内存中的排列顺序给各元素赋初值

数据类型  数组名[行常量表达式][列常量表达式]={初值表};

赋值规则:按2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素.

如果对全部元素都赋初值,则“行数”可以省略.注意:只能省略“行数”. 

6.2.4  2维数组应用举例

        [案例6.4]  有M个学生,学习N门课程,已知所有学生的各科成绩,编程:分别求每个学生的平均成绩和每门课程的平均成绩. 

/*案例代码文件名:AL6_4.C*/

/*功能:计算个人平均成绩与各科平均成绩,并在屏幕上显示出来.*/

#define NUM_std  5             /*定义符号常量人数为5*/

#define NUM_course  4                   /*定义符号常量课程为4*/

#include "stdio.h"

main()

{ int i,j;

   static float score[NUM_std+1][NUM_course+1]={{78,85,83,65},

                                           {88,91,89,93}, {72,65,54,75},

                                     {86,88,75,60}, {69,60,50,72}}; 

        for(i=0;i<NUM_std;i++)

        {for(j=0;j<NUM_course;j++)

         { score[i][NUM_course] += score[i][j];/*求第i个人的总成绩*/

            score[NUM_std][j] += score[i][j]; /*求第j门课的总成绩*/

          }

          score[i][NUM_course] /= NUM_course;/*求第i个人的平均成绩*/

         }

     for(j=0;j<NUM_course;j++)

     score[NUM_std][j] /= NUM_std; /*求第j门课的平均成绩*/

     clrscr();

     /*输出表头*/

     printf("学生编号  课程1   课程2   课程3   课程4   个人平均\n");

     /*输出每个学生的各科成绩和平均成绩*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -