实用c语言程序设计第4章__数组
发布时间:2021-06-05
发布时间:2021-06-05
第四章 数组
4.1 一维数组 4.2 二维数组及多维数组
4.3 字符数组与字符串
上一内容
下一内容
回主目录
返回
2015-2-6
数组
数组—就是有序并具有相同性质类型的数据的集合
数组中的每一个元素都属于同一数据类型 用统一的数组名和下标来唯一的确定数组中的元素 数组元素的类型可以是基本类型或导出类型
上一内容
下一内容
回主目录
返回
2015-2-6
4.1 一维数组
一维数组程序举例 一维数组的定义 一维数组的初始化 一维数组元素的引用
上一内容
下一内容
回主目录
返回
2015-2-6
4.1.1 数列的排序程序实例【例1】 对i个任意整数进行非递减排序。#define maxi 50 main( ) {int a[maxi]; /*定义一个有50个分量的数组变量a*/ int i; /*实际要处理的数据元素个数,i<=50*/ int t; /*用于辅助两个整型变量交换值*/ int n,j; printf("请输入数列的个数i(1<i<50): "); scanf("%d",&i); for (n=1;n<=i;n++) {printf("请输入第%d个数: ",n); scanf("%d",&a[n]); /*输入待排序的数据元素*/ printf("\n") } for(n=1;n<i;n++) /*控制需要排序的趟数*/ for(j=1;j<i-n;j++) /*第n趟冒泡排序*/ if (a[j]>a[j+1]) /*相邻位置的元素进行比较*/ {t=a[j]; a[j]=a[j+1]; a[j]=t;} /*若为逆序,则交换之*/ for(n=1;n<=i;n++) printf("%d ",a[n]); /*完成排序后输出*/ } 上一内容 下一内容 回主目录
返回
2015-2-6
数列的排序程序实例【例2】 将一个一维数组中的元素逆转。 运行结果: 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1
#include "stdio.h" main( ) {int k,t,i; static int a[9]={1,2,3,4,5,6,7,8,9 }; for (k=0; k<9; k++) /*输出原数组中的元素*/ printf("%4d",a[k]); printf("\n"); i=9 for (k=0;k<=i/2-1; k++) /*数组中的元素逆转*/ { t=a[k]; a[k]=a[n-k-1]; a[n-k-1]=t; } for (k=0; k<9; k++) /*输出逆转后数组中的元素*/ printf("%4d",a[k]); printf("\n"); } 上一内容 下一内容 回主目录
返回
2015-2-6
数列的排序程序实例【例3】 利用最小二乘法求蔗糖水解反应的反应速率常数k。#include "stdio.h" for (i=1;i<=n;i++) #include "math.h" scanf("%f,%f \n",&t[i],&a[i]); main( ) for (i=1;i<=n;i++) { { float a[30],t[30],y[30]; y[i]=log(a[i]-a∞) float xi=0,yi=0, xy=0,x2=0,m,k,a∞; xi=xi+t[i]; int i, n; printf("输入实验测量值的次数n=") yi=yi+y[i]; xy=xy+t[i]*y[i]; ; x2=x2+t[i]*t[i]; scanf("%d",&n); } printf("\n"); m=(xi*yi-n*xy)/(xi*xi-n*x2); printf("输入a(∞)="); k=-m; scanf("%f",&a∞); printf("k=%f8.5min-1\n") printf("\n"); } printf("时间(min), a(t)\n");
程序运行: 输入实验测量值的次数n= 7↙ 输入a(∞)=-1.98↙ 时间(min), a(t) 0,6.60↙ 10,6.17↙ 20,5.79↙ 40,5.00↙ 80,3.71↙ 180,1.40↙ 300,-0.24↙ k
=0.00515 min-1
上一内容
下一内容
回主目录
返回
2015-2-6
4.1.2 一维数组的定义和初始化1.一维数组的定义格式:类型说明符 数组名[常量表达式]; 功能:定义一个一维数组,常量表达式的值,就是数组元素的个数。 (1)数组名规定和变量名相同,遵守标识符命名规则。
(2)数组名后是用方括弧括起来的常量表达式,不能有圆括弧。(3)常量表达式表示元素个数,即数组的长度。 (4)每个数组第一个元素的下标固定为 0,称为下标的下界;最后一个元 素的下标为元素个数减 1,称为下标的上界。 (5)常量表达式中可以包括常量和符号常量,不允许是 0、负数和浮点数 ,也不能包含变量。 (6)数组的定义可以和普通变量的定义出现在同一个定义语句中。 上一内容 下一内容 回主目录
返回
2015-2-6
一维数组的定义和初始化2.一维数组的初始化格式:static 类型说明符 数组名[常量表达式]={初值 1,初值 2,……};
功能:在定义数组时对数组元素赋以初值。(1)初值可以是数值型、字符常量或字符串。 (2)关键字 static是“静态存储”的意思,也可以省略,但意义上是有差别的 。 (3)数组元素的初值必须依次放在一对花括号内。数组中有若干个数组元素 ,可在{}中给出各数组元素的初值,各初值之间用逗号分开。
上一内容
下一内容
回主目录
返回
2015-2-6
一维数组的定义和初始化举例进一步说明: 给数组 a各元素赋以初值。例如: static int a[10]= {0,1,2,3,4,5,6,7,8,9}; 可以只给一部分元素赋初值 。例如:
static int a[10]= {0,1,2,3,4}; 如果想使一个数组中全部元素值为 0,可以写成:
static int a[10]= {0,0,0,0,0,0,0,0,0,0};或 static int a[10]; 在对全部数组元素赋初值时,可以不指定数组长度: static int a[]= {1,2,3,4,5} 返回
上一内容
下一内容
回主目录
2015-2-6
4.1.3 一维数组元素的引用引用形式 数组名[下标]说明
下标是整型表达式 数组元素与同类型的变量使用方法相同 数组下标范围为0~n-1(n为数组长度) 注意防止数组下标越界举例 a[0]=a[5]+a[j]*3;
例如: main() { int i,a[10]; printf("请输入 10 个数组元素值:"); for(i=0;i<=9;i++) a[i]=i; for(i=0;i<=9;i++) printf("%d",a[i]); }运行结果: 0123456789
上一内容
下一内容
回主目录
返回
2015-2-6
4.2 二维数组及多维数组
二维数组程序设计简例 二维数组的定义 二维数组的初始化
二维数组元素的引用 多维数组简介
上一内容
下一内容
回主目录
返
回
2015-2-6
4.2.1 二维数组程序设计简例【例4】 输入 4 名学生 3 门课程的成绩,算出每位学生的平均分,打印出成 绩表。然后再分别统计出每门课程的平均分。main( ) { int a[4][4];/*定义一个4×4 的二维数组a存放成绩单*/ int i,j,t; float x; printf("请输入成绩:\n"); /*将 4 名学生 3 门课程的成绩存入数组a中*/ printf("课程 1 课程 2 课程 3 \n"); for( i=0; i<4; i++) for(j=0; j<3; j++) scanf("%d",&a[i][j]); for( i=0; i<4; i++) /*求每位学生的平均分*/ { t=0; for(j=0; j<3; j++) t=t+a[i][j]; a[i][3]=t/3; } 上一内容 下一内容 回主目录
返回
2015-2-6
二维数组程序设计简例printf(" 课程 1 课程 2 课程 3 平均分\n"); for(i=0; i<4; i++) /*按行、列形式输出成绩 单*/ { for(j=0; j<4; j++) printf("%6d",a[i][j]); printf("\n"); } for(i=0; i<3; i++) { x=0; for(j=0; j<4; j++) x=x+a[j][i]; printf("第%d 门课的平均分是 :%4.1f\n",i+1,x/4.0); } }程序的运行情况如下: 请输入成绩: 课程 1 课程 2 课程 3 75 82 92↙ 93 95 91↙ 84 93 85↙ 67 65 78↙ 课程 1 课程 2 课程 3 平均分 75 82 92 83 93 95 91 93 83 93 85 87 67 65 78 70 第1门课的平均分是:79.5 第2门课的平均分是:83.7 第3门课的平均分是:86.5
上一内容
下一内容
回主目录
返回
2015-2-6
二维数组程序设计简例【例5】 求矩阵 a3×3和矩阵 b3×3的乘积矩阵 c3×3。已知:a3 3= 201 112 010 b 3 3 = 112 211 110
main() { int a[3][3]= {{2,0,1},{1,1,2},{0,1,0}}; int b[3][3]= {{1,1,2},{2,1,1},{1,1,0}}; int i,j,k; printf(″数列a:\n″);/*输出a矩阵的元素*/ for(i= 0;i<3;i++ ) {for(j= 0;j< 3;j++ ) printf(″% 5d ″,a[i][j]); printf(″\n″); } printf(″\n数列b:\n″);/*输出b矩阵的元素*/ 返回
/*定义数组并初始化*/
上一内容
下一内容
回主目录
2015-2-6
二维数组程序设计简例for(i= 0;i<3;i++ ) {for(j= 0;j< 3;j++ ) 程序运行情况: printf(″% 5d ″,b[i][j]); 数列 a: printf(″\n″); 201 } 112 printf(″\n数列c:\n″);/*计算出c矩阵并输出c矩阵的元素*/ 010 for(i= 0;i<3;i++ ) 数列 b: {for(j= 0;j<3;j++ ) 112 {c[i][j]=0; 211 for(k= 0;k<3;k++ ) c[i][j]= c[i][j]+ a[i][k]*b[k][j]; 1 1 0 数列 c: printf(″% 5d″,c[i][j]); } 334 printf(″\n″); 543 } 211 }
上一内容
下一内容
回主目录
返回
2015-2-6
二维数组程序设计简例【例6】有一个3 4的矩阵,找出其中最大的那个元素的值,以及它所在的 列和行。main( ) 运行结果为: { max=12,row=2,colum=2 int i,k,row=0,colum=0,max; static int a[3][4]={{5,2,1,4},{
10,12,6,5},{0,7,-2,3}}; max=-10; for (i=0;i<=2;i++) for (k=0;k<=3;k++) if (a[i][k]>max) { max= a[i][k]; row=i; colum=k; } printf(″max=%d, row=%d, colum=%d\n″,max,row+1,colum+1) } 上一内容 下一内容 回主目录
返回
2015-2-6
4.2.2 二维数组的定义和初始化1.二维数组的定义格式:类型说明符 数组名[常量表达式 1][常量表达式 2]功能:定义一个二维数组。 (1)数据类型是数组全体数组元素的数据类型;数组名用标识符表示。 (2)格式中的两个整型常量表达式分别代表数组具有的行数和列数,注意
:左边的常量表达式表示数组的行,右边的常量表达式表示数组的列。(3)数组一样,二维数组下标值也是从 0 开始的。 (4)数组各元素占有连续的存储空间,各数组元素按行的顺序排列。
上一内容
下一内容
回主目录
返回
2015-2-6
二维数组的定义和初始化例如:int a[3][4](1)定义a为3 4(三行四列)的二维数组,其数组元素的类型是 int。注意 不能写成int a[3,4];
(2)a数组共有3 4=12个数组元素。
(3)a数组行下标为 0,1,2列下标为 0,1,2,3。a数组的数组元素是: 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](4)二维数组a的每一行都可以看作一维数组,用 a[i]表示第 i行构成的一 维数组的数组名。把数组a[3][4]看成一个有3个元素的一维数组:a[0] 、a[1]、a[2],而每个一维数组又各是一个具有4 个 int 型数据的一维数 组,如图 4-1 所示。 上一内容 下一内容 回主目录
返回
2015-2-6
二维数组的定义和初始化a[0] a[3][4] a[1] a[2] 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] 图4-1
(5)定义了int型数组a,编译程序将为 a数组在内存中开辟 3 4= 12 个连续的存 储单元,用来存放 a数组的 6个数组元素。如图 4-2所示。数组名a代表 a数组的 首地址。 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]图4-2 上一内容 下一内容 回主目录
返回
2015-2-6
二维数组的定义和初始化2.二维数组的初始化格式:static 类型说明符 二维数组名[下标][下标]= {{常量列表},…} 功能:定义一个二维数组,并给每个数组元素赋初值。 在{}中给出各数组元素的初值,各初值之间用逗号分开。把{}中的初值依 次赋给各数组元素。有如下几种初始化方式: (1)初值按行的
顺序依次排列,每行都用一对花括号括起来,各行之间用 逗号隔开。如:static int a[2][3]={{1,2,3},{4,5,6}}; (2) 不分行的初始化。二维数组可以像一维数组那样,将所有元素的 初值写在一对花括号内,。编译系统将会为这些有序数据按数组元素在内存 中排列的顺序按行依次为各元素赋初值。如: static int a[2][3]={1,2,3,4,5,6}; 上一内容 下一内容 回主目录
返回
2015-2-6
二维数组的定义和初始化(3)对二维数组中部分元素初始化。如: static int a[2][3]={{1,2},{4}};
(4)如果对二维数组的全部元素都初始化,可以省略第一维的定义,但 不能省略第二维的定义。如: static int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; (5)如果只对部分数组元素提供初值,又省略了第一维的长度,那么应分行 赋初值,既使某行没有对应的初值,也必须保留对应该行的一对花括号。如: static int a[ ][4]={{1,3},{ },{5,6,7},{8,9,10,11} };
上一内容
下一内容
回主目录
返回
2015-2-6
上一篇:医学基础知识试题库