第5章 C语言数组

更新时间:2023-09-02 04:33:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言数组,即教程

第5章 数 组 章5.1 一维数组 5.2 二维数组 5.3 字符数组

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

int a,b; int c[10]; 都是变量。 则 c[0],c[1],…,c[9]都是变量。 都是变量 5.1.1 一维数组的定义 数组名[元素个数 元素个数]; 类型标识符 数组名 元素个数 ; 例如: 例如: char str[20]; ; 数组名为 str,有20个元素 , 个元素: 个元素 str[0],str[l],str[2],…….,str[19] , , ,2011-6-5 计算机程序设计基础(C) 2

5.1 一维数组

C语言数组,即教程

5.1.2 一维数组的存储形式对于 int a[10]; ; 编译系统为数组a分配 编译系统为数组 分配10*sizeof(int) 个字 分配 节的存储区域。 节的存储区域。

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

5.1.3 一维数组的初始化和 int b1=0, s=0; 类似,有 类似, int a[10] ={0, l,2,3,4,5,6,7,8,9} ; (1) 全部赋初值,可不指定长度,如 全部赋初值,可不指定长度, int a[ ] ={0, l,2,3,4,5,6,7,8,9} ; (2) 部分赋初值,长度不能省略,如 部分赋初值,长度不能省略, int a[10] ={1,2,3} ; char b[5] ={‘+’,’-’} ; ={‘+’,’(3) 初值不能多于数组长度,如 初值不能多于数组长度, int a[3]={1,2,3,4} 是错误的。 是错误的。2011-6-5 计算机程序设计基础(C) 4

C语言数组,即教程

5.1.4 一维数组的引用 数组名[下标 下标] 数组名 下标 下标可以是整型表达式 整型表达式。 下标可以是整型表达式。 例如: 例如 int a[10]; a[0]=5; a[1]=2*a[3/4]; a[5]=a[3%2]+a[6-6];

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

5.1.5 一维数组应用举例 用数组求Fibonacci数列的前 项。 数列的前40项 例5.1 用数组求 数列的前 1,1,2,3,5,8,13,21,…… , , , , , , , , f1=1, f2=1, fn=fn-1+fn-2 (n>2) #include <stdio.h> void main() { int i; long f [40]={1,1}; for(i=2;i<40;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<40;i++) { if(i%5==0) printf("\n"); printf("%10ld",f[i]); } }2011-6-5 计算机程序设计基础(C) 6

C语言数组,即教程

个数从小到大排序。 【例5.2】用选择排序法对 个数从小到大排序。 】用选择排序法对N个数从小到大排序 分析: 分析:设 N=5a[0] a[1] a[2] a[3] a[4]

原序列: 原序列: 遍选择: 第1遍选择: 遍选择 遍选择: 第2遍选择: 遍选择 3遍选择 遍选择: 第3遍选择: 遍选择: 第4遍选择: 遍选择

8 1 1 1 1

6 6 2 2 2

3 3 3 3 3

1 8 8 8 6

2 2 6 6 8

i=0, i=1, i=2, i=3,

k=2, j=2 k=0,j=1 , k=1, j=3 j=4 k=3, j=1 j=3 k=1,j=2 , k=4, j=3 k=2, j=2 j=4 k=2, j=4 j=3 k=4, j=4 k=3, j=4

for ( i=0; i<4; i++ ) i=0; i<4; { k=i; for( j=i+1; j<5; j++ ) if( a[k]>a[j] ) k=j ; j=i+1; j<5; t=a[k]; a[k]=a[i]; a[i]=t; }2011-6-5 计算机程序设计基础(C) 7

C语言数组,即教程

#include <stdio.h> #define N 8 void main() { float a[N],t; int i,j,k; for(i=0;i<N;i++) scanf("%f",&a[i]); for(i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) if(a[j]<a[k]) k=j; t=a[k]; a[k]=a[i]; a[i]=t; } for(i=0;i<N;i++) printf("

%.2f ",a[i]); } 2011-6-5 计算机程序设计基础(C)

C语言数组,即教程

【例5.3】用冒泡排序法对n个数从小到大排序。 】用冒泡排序法对 个数从小到大排序。 个数从小到大排序 个数, 对5个数,从小到大排序: 个数 从小到大排序: 第一遍选择: 第一遍选择: 8 6 3 1 2 第一次 6 8 3 1 2 第二次 6 3 8 1 2 第三次 N=5 6 3 1 2 8 结果

6 3 1 8 2 第四次

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

6 3 1 3 1 2 1 2 3 2 6 6 8 8 8 第一遍 第二遍 第三遍

1 2 3 6 8 第四遍

for(i=0;i<Nfor(i=0;i<N-1;i++) for(j=0;j<Nfor(j=0;j<N-1-i;j++) if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1] ; a[j+1]=t; }2011-6-5 计算机程序设计基础(C) 10

C语言数组,即教程

#include <stdio.h> #define N 8 void main() { float a[N] ,t; int i,j,k; printf("input %d numbers:\n",N); for(i=0;i<N;i++) scanf("%f",&a[i]); for(i=0;i<N-1;i++) for(j=0;j<N-1-i;j++) if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1] ; a[j+1]=t;} printf("the sorted numbers:\n"); for(i=0;i<N;i++) printf("%.2f ",a[i]); }2011-6-5 计算机程序设计基础(C) 11

C语言数组,即教程

5.2 二维数组 5.2.1 二维数组的定义 数组名[常量表达式 常量表达式]; 常量表达式][常量表达式 类型标识符 数组名 常量表达式 常量表达式 ; 例如: 例如: float a[3][4]; ; 共有12个元素, 共有 个元素,即: 个元素 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]2011-6-5 计算机程序设计基础(C) 12

C语言数组,即教程

5.2.2 二维数组的存储形式 二维数组在内存中按行存放 按行存放。 二维数组在内存中按行存放。 a[0][0] int a[3][2]; a[0][0] a[1][0] a[2][0] a[0][1] a[1][1] a[2][1] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]2011-6-5 计算机程序设计基础(C) 13

C语言数组,即教程

5.2.3 二维数组的初始化(1)全部元素赋初值 全部元素赋初值int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; ;

int a[3][4]={ l,2,3,4,5,6,7,8,9,10, 11,12}; ; (2) 部分元素赋初值。 部分元素赋初值。 int a[3][4]={{l},{5},{9}}; , , ; int a[3][4]={1,5,9,4}; (3)一维的长度可不指定。 一维的长度可不指定。 一维的长度可不指定 int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; = ;

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

5.2.4 二维数组的引用数组名[下标 下标 数组名 下标][下标 下标 下标] 如: int x[2][3]; x[0][0]=3; x[1][2]=x[0][0]+5; x[1][2] ++;

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

5.2.5 二维数组应用举例 的整数矩阵, 【例5.5】 输入一个 ×4的整数矩阵,分别求 】 输入一个4× 的整数矩阵 两对角线上元素之和。 两对角线上元素之和。m[0][0] m[1][0] m[2][0] m[3][0] m[0][1] m[1][1] m[2][1] m[3][1] m[0][2] m[1][2] m[2][2] m[3][2] m[0][3] m[1][3] m[2][3] m[3][3]

分析: 分析:当 i==j 时, m[i][j]在主对角线上 在主对角线上 当 i+j==3 时,m[i][j]在次对角线上 在次对角线上2011-6-5 计算机程序设计基础(C) 16

C语言数组,即教程

m[0][0] m[0][1]

m[0][2] m[0][3] #define N 4 #include<stdio.h> m[1][0] m[1][1] m[1][2] m[1][3] void main() m[2][0] m[2][1] m[2][2] m[2][3] {int m[N][N]; m[3][0] m[3][1] m[3][2] m[3][3] int i, j, r1=0, r2=0; 分析: 分析:当 i=j 时, m[i][j]在主对角线上 在主对角线上 for( i=0;i<N;i++) 当 i+j=3 时,m[i][j]在次对角线上 在次对角线上 { printf("one line:"); for(j=0;j<N;j++) { scanf("%d",&m[i][j]); if(i==j) r1+=m[i][j]; if(i+j==N-1) r2+=m[i][j]; } } printf("the result: %d, %d\n",r1,r2); }

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

5.3 字符数组 5.3.1 字符数组的定义char a[10]; a[0]=’C’; a[1]=’H’; a[2]=’I’; a[3]=’N’; a[4]=’A’; a[5]=’\0’; 在内存中的状态如下: 在内存中的状态如下:

2011-6-5

计算机程序设计基础(C)

C语言数组,即教程

5.3.2 字符数组的初始化char c[7]={‘a’, ‘ ’ ,‘b’ ,‘o’, ‘y’ }; = ; a b o y \0 \0

又如 char c[ ]={‘a’, ‘ ’ , ‘b’,’o’,’y’,’\0’}; char c[ ]={“a boy”}; char c[ ]= “a boy”; 三者等价。 三者等价。 a2011-6-5

b

o

y

\019

计算机程序设计基础(C)

本文来源:https://www.bwwdw.com/article/k3bi.html

Top