c语言数组和指针
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
15
【例6.5】 从键盘上任意键入一个3行4列的矩阵,要求 输出其转置矩阵(注意换行输出)。
main() { int i, j,a[3][4],b[4][3]; for (i=0; i<3; i++) /*输入原始矩阵 输入原始矩阵a*/ 输入原始矩阵 for (j=0; j<4; j++) scanf("%d", &(a[i][j])); for (i=0; i<3; i++) /*计算矩阵 的转置矩阵 计算矩阵a的转置矩阵 计算矩阵 的转置矩阵b*/ for (j=0; j<4; j++) b[j][i] = a[i][j]; printf("\n"); /*输出转置矩阵 输出转置矩阵b*/ 输出转置矩阵 for (i=0; i<4; i++) { for (j=0; j<3; j++) printf("%7d ", b[i][j]); printf("\n"); } }
17
字符数组的初始化
将字符逐个赋给数组元素;如:
char a[10]={‘I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’}; char a[ ]={‘I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’};
用字符串初始化。如:
char a[ ]={“Hello”}; char a[ ]= “Hello”;
34
12
11
6.1.3 二维数组
二维数组的定义
类型说明符 数组名 [常量表达式] [常量表达式]; 例如:int a[10] [5];
float x[5][5] ;
多维数组定义的一般形式:
数据类型名 数组名 [常量表达式1][常量 表达式2]……[常量表达式n];
12
二维数组的引用
先定义后使用; 引用时只能引用单个元素,不能引用整个数组; 数组元素的表示:
数组名 [下标1] [下标2]
二维及多维数组在内存中的存放
二维数组中各元素的顺序遵照按行存放的原则。 多维数组中的元素在内存中的存放顺序为按行存 放,即最左边的下标变化最慢,最右边的下标变 化最快。
13
二维数组的初始化
逐行初始化; 例如:int a[3] [3]={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 按数组排列的顺序对各元素赋初值; 如: int a[3] [3]={1, 2, 3, 4, 5, 6, 7, 8, 9}; 对部分元素赋初值。 如: int a[3] [3]={{1},{ 2, 3}, {4}}; int a[ ] [3]={{1},{ 2, 3}, {4}};
10
【例6.3】从键盘输入5个整数,将它们反序输出。
main() { int i; int nums[5]; for(i=0;i<5;i++) scanf("%d",&nums[i]); for(i=4;i>=0;i--) printf("%5d",nums[i]); }
运行情况: 12 34 5 7 89 89 7 5
int i; for(i=0;i<12;i++) printf("%c",c1[i]); printf("\n"); } 运行后,屏幕上显示: 运行后,屏幕上显示: Hello,World!
20
格式符输入、 【例6.7】用“%s”格式符输入、输出字符串。 】 格式符输入 输出字符串。
main() { char c3[10]; static char c4[ ]={" are good."}; scanf("%s",c3); printf("%s%s\n\n",c3,c4); } 运行后,键入: 运行后,键入: You are 屏幕上显示输出: 屏幕上显示输出: You are good.
不能省略 思考
怎样初始化矩阵: 怎样初始化矩阵:1 2 3
4 5 6
7 8 9
14
【例6.4】 有一个3×4的矩阵,编写一个程序,找出其中 的最大值和最小值,并输出其所在的行号和列号。
main() { int i,j,row1,col1,row2,col2,max,min; int a[3][4]={{12,3,45,5},{23,34,56,1},{11,22,33,74}}; max=a[0][0];min=a[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) { if(a[i][j]>max) { max=a[i][j];row1=i;col1=j;} if(a[i][j]<min) { min=a[i][j];row2=i;col2=j;} } printf("max=%5d,row=%d,col=%d\n",max,row1,col1); printf("min=%5d,row=%d,col=%d\n",min,row2,col2); }
9
main() {int a[10]; int i,j,t; for (i=0;i<10;i++) scanf("%d",&a[i]); /*从键盘输入各数组值 从键盘输入各数组值*/ 从键盘输入各数组值 printf("\ printf("\n"); for (j=0;j<9;j++) for (i=0;i<9-j;i++) (i=0;i<9冒泡法排序 if (a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("The sorted numbers :\n"); :\ for (i=0;i<10;i++) 输出排序后的结果*/ 输出排序后的结果 printf("%d ",a[i]); /*输出排序后的结果 }
printf(“%s”,a); scanf(“%s”,a);
不能写成&a, 不能写成 ,因 为数组名代表数 组的起始地址。 组的起始地址。
19
【例6.6】逐个字符输出“Hello,World!”。
main() { char
c1[12]={
'H','e','l','l','o',',', 'W','o','r','l','d','!'}; 'W','o','r','l','d','!'};
先计算, 先计算,后输出
8
6.2】用冒泡法对10 10个数排序 【例6.2】用冒泡法对10个数排序
冒泡法简介:将相邻两个数比较, 冒泡法简介:将相邻两个数比较,将小的调 到前面。设有下面六个数,用起泡法比较的 到前面。设有下面六个数, 过程如下: 过程如下:
9 8 5 4 2 0 8 9 5 2 4 0 8 5 9 2 4 0 8 5 2 9 4 0 8 5 2 4 9 0 8 5 2 4 0 9 8 5 2 4 0 9 5 8 2 4 0 9 5 2 8 4 0 9 5 2 4 8 0 9 5 2 4 0 8 9
整型常量或整型表达式, 整型常量或整型表达式,如a[5], a[2*3], a[2*i]等。 等
6
一维数组的初始化
在定义数组的同时赋初值。 在定义数组的同时赋初值。 例如: 例如:int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int a[10]={1, 2, 3, 4, 5,}; 在对全部数组元素赋初值时, 在对全部数组元素赋初值时,可以不指定数组 长度。 长度。 如: int a[ ]={1, 2, 3, 4, 5, 6, 7, 8, 9};
使用scanf函数时 使用scanf函数时, 函数时, 输入的字符串中如果含有空格 或制表符, 或制表符,系统遇到时会认为输 入结束,接着自动在字符串的 入结束, 末尾加上结束标志‘ 末尾加上结束标志‘\0’。
21
字符串处理函数
1、puts(字符数组) 2、gets(字符数组) 3、strcat(字符数组1,字符数组2) 4、strcpy(字符数组1,字符串2) 5、strcmp(字符串1,字符串2) 6、strlen(字符数组) 7、strlwr(字符串) 8、sΒιβλιοθήκη Baidurupr(字符串)
用char a[5]=“Hello”;初始化后结果是:
注意: 注意:
用char a[]=“Hello”;初始化后结果是: a[]=“Hello”;初始化后结果是: 初始化后结果是
18
字符数组的引用 同其它数组一样,只能引用数组元素。 同其它数组一样,只能引用数组元素。
字符数组的输入和输出
用格式符“%c”逐个输入或输出; 用格式符“%s”将整个字符串一次输入或输出;
22
【例6.8】使用gets函数和puts函数实现二维字 符数组的输入、输出。
#include <stdio.h> main() { char string[3][15]; int i; for(i=0;i<3;i++) /* /*输入多个字符串*/ */ gets(string[i]); printf("The output is:\n"); for(i=0;i<3;i++) /*输出多个字符串*/ puts(string[i]); }
16
6.1.4 字符数组
存放字符的数组称为字符数组。C语言中字 符数组一般用于处理字符串,很少作为纯粹数组 使用。
字符数组的定义
同前面定义数组的方法相同。如:
或 char a[10]; int a[10];
注意:1、字符数组中的一个元素存放一个字符。
2、字符数组用于处理字符串时,字符数组中 必须有一个元素的值为‘\0’,即串结束标志。
7
【例6.1】 Fibonacci数列问题 6.1】 Fibonacci数列问题
方法1 不用数组 方法1:不用数组
main() {int f1,f2; int i; 赋初值 f1=1;f2=1; for (i=1;i<=10;i++) { printf("%12d%12d\ printf("%12d%12d\n", f1,f2); if (i%2==0) printf("\ printf("\n"); f1=f1+f2; f2=f1+f2; } 边计算, 边计算,边输出 }
23
3
6.1.1 数组的概念
数组是有序数据的集合。 数组是有序数据的集合。数组中的每个 有序数据的集合 元素都属于同一个数据类型。 元素都属于同一个数据类型。同一个数组的 不同元素用一个统一的数组名和表示该元素 在数组中位置的下标来唯一地确定。 在数组中位置的下标来唯一地确定。 C 语言中的数组有下面几种: 语言中的数组有下面几种: 一维数组 二维数组 字符数组
4
6.1.2 一维数组
一维数组的定义
类型说明符 数组名 [常量表达式]; 例如:int a[10] ;
float x[20] ;
注意 :1、数组名命名规则与变量名相同。 数组名命名规则与变量名相同。
int a(10) ;float 2x[20]; ;
2、常量表达式表示元素的个数。 常量表达式表示元素的个数。 数组中共有5个元素 个元素, 如定义 int a[5] 后,数组中共有 个元素,
分别是a[0] , a[1] , a[2] , a[3] , a[4] 。 分别是
5
一维数组的引用
数组和变量一样必须先定义后方能使用。 数组和变量一样必须先定义后方能使用。 C语言规定引用时只能引用单个元素,不能 语言规定引用时只能引用单个元素, 语言规定引用时只能引用单个元素 引用整个数组。 引用整个数组。 数组元素的表示: 数组元素的表示: 下标] 数组名 [下标 下标
方法2 方法2:用数组
main() {int f[20]={1, 1}; 赋初值 int i; for (i=2;i<=20;i++) f[i]= f[i-2]+f[i-1]; for (i=0;i<=20;i++) { if (i%5==0) printf("\n"); printf("%12d\n",f[i]); } }
C语言程序设计
数组与指针(1) 数组与指针(
贵州大学电气工程学院 测控技术与仪器教研室 王民慧
1
本章主要内容
6 1 数组 6.2 指针的概念 6.3 指针与数组 6.4 字符串的指针 6.5 指针数组和指向指针的指针
6.1 数组
6.1.1 6.1.2 6.1.3 6.1.4 数组的概念 一维数组 二维数组 字符数组
【例6.5】 从键盘上任意键入一个3行4列的矩阵,要求 输出其转置矩阵(注意换行输出)。
main() { int i, j,a[3][4],b[4][3]; for (i=0; i<3; i++) /*输入原始矩阵 输入原始矩阵a*/ 输入原始矩阵 for (j=0; j<4; j++) scanf("%d", &(a[i][j])); for (i=0; i<3; i++) /*计算矩阵 的转置矩阵 计算矩阵a的转置矩阵 计算矩阵 的转置矩阵b*/ for (j=0; j<4; j++) b[j][i] = a[i][j]; printf("\n"); /*输出转置矩阵 输出转置矩阵b*/ 输出转置矩阵 for (i=0; i<4; i++) { for (j=0; j<3; j++) printf("%7d ", b[i][j]); printf("\n"); } }
17
字符数组的初始化
将字符逐个赋给数组元素;如:
char a[10]={‘I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’}; char a[ ]={‘I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’};
用字符串初始化。如:
char a[ ]={“Hello”}; char a[ ]= “Hello”;
34
12
11
6.1.3 二维数组
二维数组的定义
类型说明符 数组名 [常量表达式] [常量表达式]; 例如:int a[10] [5];
float x[5][5] ;
多维数组定义的一般形式:
数据类型名 数组名 [常量表达式1][常量 表达式2]……[常量表达式n];
12
二维数组的引用
先定义后使用; 引用时只能引用单个元素,不能引用整个数组; 数组元素的表示:
数组名 [下标1] [下标2]
二维及多维数组在内存中的存放
二维数组中各元素的顺序遵照按行存放的原则。 多维数组中的元素在内存中的存放顺序为按行存 放,即最左边的下标变化最慢,最右边的下标变 化最快。
13
二维数组的初始化
逐行初始化; 例如:int a[3] [3]={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; 按数组排列的顺序对各元素赋初值; 如: int a[3] [3]={1, 2, 3, 4, 5, 6, 7, 8, 9}; 对部分元素赋初值。 如: int a[3] [3]={{1},{ 2, 3}, {4}}; int a[ ] [3]={{1},{ 2, 3}, {4}};
10
【例6.3】从键盘输入5个整数,将它们反序输出。
main() { int i; int nums[5]; for(i=0;i<5;i++) scanf("%d",&nums[i]); for(i=4;i>=0;i--) printf("%5d",nums[i]); }
运行情况: 12 34 5 7 89 89 7 5
int i; for(i=0;i<12;i++) printf("%c",c1[i]); printf("\n"); } 运行后,屏幕上显示: 运行后,屏幕上显示: Hello,World!
20
格式符输入、 【例6.7】用“%s”格式符输入、输出字符串。 】 格式符输入 输出字符串。
main() { char c3[10]; static char c4[ ]={" are good."}; scanf("%s",c3); printf("%s%s\n\n",c3,c4); } 运行后,键入: 运行后,键入: You are 屏幕上显示输出: 屏幕上显示输出: You are good.
不能省略 思考
怎样初始化矩阵: 怎样初始化矩阵:1 2 3
4 5 6
7 8 9
14
【例6.4】 有一个3×4的矩阵,编写一个程序,找出其中 的最大值和最小值,并输出其所在的行号和列号。
main() { int i,j,row1,col1,row2,col2,max,min; int a[3][4]={{12,3,45,5},{23,34,56,1},{11,22,33,74}}; max=a[0][0];min=a[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) { if(a[i][j]>max) { max=a[i][j];row1=i;col1=j;} if(a[i][j]<min) { min=a[i][j];row2=i;col2=j;} } printf("max=%5d,row=%d,col=%d\n",max,row1,col1); printf("min=%5d,row=%d,col=%d\n",min,row2,col2); }
9
main() {int a[10]; int i,j,t; for (i=0;i<10;i++) scanf("%d",&a[i]); /*从键盘输入各数组值 从键盘输入各数组值*/ 从键盘输入各数组值 printf("\ printf("\n"); for (j=0;j<9;j++) for (i=0;i<9-j;i++) (i=0;i<9冒泡法排序 if (a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("The sorted numbers :\n"); :\ for (i=0;i<10;i++) 输出排序后的结果*/ 输出排序后的结果 printf("%d ",a[i]); /*输出排序后的结果 }
printf(“%s”,a); scanf(“%s”,a);
不能写成&a, 不能写成 ,因 为数组名代表数 组的起始地址。 组的起始地址。
19
【例6.6】逐个字符输出“Hello,World!”。
main() { char
c1[12]={
'H','e','l','l','o',',', 'W','o','r','l','d','!'}; 'W','o','r','l','d','!'};
先计算, 先计算,后输出
8
6.2】用冒泡法对10 10个数排序 【例6.2】用冒泡法对10个数排序
冒泡法简介:将相邻两个数比较, 冒泡法简介:将相邻两个数比较,将小的调 到前面。设有下面六个数,用起泡法比较的 到前面。设有下面六个数, 过程如下: 过程如下:
9 8 5 4 2 0 8 9 5 2 4 0 8 5 9 2 4 0 8 5 2 9 4 0 8 5 2 4 9 0 8 5 2 4 0 9 8 5 2 4 0 9 5 8 2 4 0 9 5 2 8 4 0 9 5 2 4 8 0 9 5 2 4 0 8 9
整型常量或整型表达式, 整型常量或整型表达式,如a[5], a[2*3], a[2*i]等。 等
6
一维数组的初始化
在定义数组的同时赋初值。 在定义数组的同时赋初值。 例如: 例如:int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int a[10]={1, 2, 3, 4, 5,}; 在对全部数组元素赋初值时, 在对全部数组元素赋初值时,可以不指定数组 长度。 长度。 如: int a[ ]={1, 2, 3, 4, 5, 6, 7, 8, 9};
使用scanf函数时 使用scanf函数时, 函数时, 输入的字符串中如果含有空格 或制表符, 或制表符,系统遇到时会认为输 入结束,接着自动在字符串的 入结束, 末尾加上结束标志‘ 末尾加上结束标志‘\0’。
21
字符串处理函数
1、puts(字符数组) 2、gets(字符数组) 3、strcat(字符数组1,字符数组2) 4、strcpy(字符数组1,字符串2) 5、strcmp(字符串1,字符串2) 6、strlen(字符数组) 7、strlwr(字符串) 8、sΒιβλιοθήκη Baidurupr(字符串)
用char a[5]=“Hello”;初始化后结果是:
注意: 注意:
用char a[]=“Hello”;初始化后结果是: a[]=“Hello”;初始化后结果是: 初始化后结果是
18
字符数组的引用 同其它数组一样,只能引用数组元素。 同其它数组一样,只能引用数组元素。
字符数组的输入和输出
用格式符“%c”逐个输入或输出; 用格式符“%s”将整个字符串一次输入或输出;
22
【例6.8】使用gets函数和puts函数实现二维字 符数组的输入、输出。
#include <stdio.h> main() { char string[3][15]; int i; for(i=0;i<3;i++) /* /*输入多个字符串*/ */ gets(string[i]); printf("The output is:\n"); for(i=0;i<3;i++) /*输出多个字符串*/ puts(string[i]); }
16
6.1.4 字符数组
存放字符的数组称为字符数组。C语言中字 符数组一般用于处理字符串,很少作为纯粹数组 使用。
字符数组的定义
同前面定义数组的方法相同。如:
或 char a[10]; int a[10];
注意:1、字符数组中的一个元素存放一个字符。
2、字符数组用于处理字符串时,字符数组中 必须有一个元素的值为‘\0’,即串结束标志。
7
【例6.1】 Fibonacci数列问题 6.1】 Fibonacci数列问题
方法1 不用数组 方法1:不用数组
main() {int f1,f2; int i; 赋初值 f1=1;f2=1; for (i=1;i<=10;i++) { printf("%12d%12d\ printf("%12d%12d\n", f1,f2); if (i%2==0) printf("\ printf("\n"); f1=f1+f2; f2=f1+f2; } 边计算, 边计算,边输出 }
23
3
6.1.1 数组的概念
数组是有序数据的集合。 数组是有序数据的集合。数组中的每个 有序数据的集合 元素都属于同一个数据类型。 元素都属于同一个数据类型。同一个数组的 不同元素用一个统一的数组名和表示该元素 在数组中位置的下标来唯一地确定。 在数组中位置的下标来唯一地确定。 C 语言中的数组有下面几种: 语言中的数组有下面几种: 一维数组 二维数组 字符数组
4
6.1.2 一维数组
一维数组的定义
类型说明符 数组名 [常量表达式]; 例如:int a[10] ;
float x[20] ;
注意 :1、数组名命名规则与变量名相同。 数组名命名规则与变量名相同。
int a(10) ;float 2x[20]; ;
2、常量表达式表示元素的个数。 常量表达式表示元素的个数。 数组中共有5个元素 个元素, 如定义 int a[5] 后,数组中共有 个元素,
分别是a[0] , a[1] , a[2] , a[3] , a[4] 。 分别是
5
一维数组的引用
数组和变量一样必须先定义后方能使用。 数组和变量一样必须先定义后方能使用。 C语言规定引用时只能引用单个元素,不能 语言规定引用时只能引用单个元素, 语言规定引用时只能引用单个元素 引用整个数组。 引用整个数组。 数组元素的表示: 数组元素的表示: 下标] 数组名 [下标 下标
方法2 方法2:用数组
main() {int f[20]={1, 1}; 赋初值 int i; for (i=2;i<=20;i++) f[i]= f[i-2]+f[i-1]; for (i=0;i<=20;i++) { if (i%5==0) printf("\n"); printf("%12d\n",f[i]); } }
C语言程序设计
数组与指针(1) 数组与指针(
贵州大学电气工程学院 测控技术与仪器教研室 王民慧
1
本章主要内容
6 1 数组 6.2 指针的概念 6.3 指针与数组 6.4 字符串的指针 6.5 指针数组和指向指针的指针
6.1 数组
6.1.1 6.1.2 6.1.3 6.1.4 数组的概念 一维数组 二维数组 字符数组