C语言 多维、字符数组
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何表示数组a的地址? &a[0][0]或者a
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
二维数组(引用)
注: 数组元素的使用方法与同类型的变量相同 (下标:整型常量、变量、或表达式) 引用:数组名[行下标][列下标]
例: • 设int a[3][2];,则给数组元素a[0][0]赋值1如何实现, 输出数组元素a[0][0]的值如何实现呢? • 给每个数组元素输入值如何实现,输出所有数组元素 的值如何实现呢? • 按矩阵格式输出所有数组元素的值如何实现?
多维数组(定义)
先定义,后使用
多维数组定义的一般形式: [存储类别] 类型名 数组名[常量表达式1] [常量表达式2] ……
int a[2]; int a[3][2]; int a[4][3][2];
二维数组(引用)
先定义,后使用
二维数组元素引用的一般形式: 数组名[行下标][列下标]
( 注:下标:整型常量、变量、或表达式)
测字符串长度ห้องสมุดไป่ตู้数 —strlen
格式:strlen(字符数组名)
char str[15]=“hello”; printf(“%d”,strlen(str)); 作用:测数组中字符串长度 注意:所测的长度不包含字符串结束符“\0”
字符串输入函数 char str[13];
格式:gets(字符数组名)
作用: 从键盘输入一个字符串并把该字符串存入“字符数 组”中,它遇到换行符表示字符串输入结束。换行符 不进入字符串,它们被转换为空字符作为字符串的结 束标志。
gets(str);
字符数组的输出
1、用格式符“%c”逐个输出字符
printf("%c,%c",str[0],str[1]);
字符数组的输入 char str[13];
1、用格式符“%c”逐个输入字符 for(i=0;i<13;i++) scanf("%c",&str[i]); 2、用格式符“%s”一次输入整个字符串 scanf(“%s”,str); /*输入" hello " */ scanf(“%[a-zA-Z]s”,str); /*输入"Ab12" */ scanf(“%[^1-3]s”,str); /*输入"Ab ↙ c12" */ 说明: scanf使用空格或回车作一个数据输入的结束标志, 所以不能输入带空格的字符串。使用gets函数可(只 以回车作结束标志)输入带空格的字符串。
字符数组(数组的应用) #include<stdio.h>
main() C中不使用字符串变量,而使用字符数组来处理字符串。 { char char c[12]; 定义: 字符数组名[常量表达式]; char str[3]; 引用:字符数组名 [下标] str[0],str[1],str[2] int i; c[0]='H';c[1]='o';c[2]='w';c[3]=' '; c[4]='a';c[5]='r'; c[6]='e';c[7]=' '; c[8]='y';c[9]='o';c[10]='u';c[11]='?'; for(i=0;i<12;i++) printf(“%s”,c); printf("%c",c[i]); printf("\n"); }
字符串(数组的应用)
初始化:
char str[5]={'h','e','l','l','o'}; char str[6]={'h','e','l','l','o'}; char str[ ]={'h','e','l','l','o','\0'}; char str[ ]={"hello"}; char str[ ]="hello"; char color[5][7]={“red”,”yellow”,”green”,”black”,”white”}; char color[][7]={“red”,”yellow”,”green”,”black”,”white”}; 见书122页
设int a[3][2];,则这个二维数组的6个元素分别为: a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
int a[3][2];
(3行2列,6个元素)
二维数组的元素在内存的存储 顺序是:按行存放
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
例如:
gets(str); puts(str);
字符串拷贝函数 —strcpy
格式:strcpy(字符数组名,字符串)
char str1[10],str2[]={"hello"}; strcpy(str1,str2); 不能将一个字符串常量或字符数组 strcpy(str1, "hello"); 直接赋给一个字符数组,只能使用 字符串拷贝函数。 说明: str1=str2; 1. ‘\0’一起被拷贝 str1="hello" 2.“字符数组”的长度要>=“字符串”中的实际字符串长度加1。 3.“字符数组”必须是数组名形式(如str1)。“字符串”可以 是一个字符串常量,也可以是已存放字符串的字符数组。
作用: 取消“字符数组”中的字符串结束标志‘\0’,然 后把 “字符串”连接到“字符数组”中的字符串后面,并 在最 后加一个‘\0’字符,结果放到“字符数组”中。
字符串比较函数 —strcmp
格式:strcmp(字符串1,字符串2) strcmp("abc","ab"); 作用:比较“字符串1”和“字符串2”的大小(从第一个字符 开始比 较,碰到第一个不相等的字符,看谁的ASCII码大)。 (1) 如果“字符串1”=“字符串2”,函数值为0; (2) 如果“字符串1”>“字符串2”,函数值为正整数; (3) 如果“字符串1”<“字符串2”,函数值为负整数。
拷贝字符串前n个字符的函数
格式:strncpy(字符数组名,字符串,n)
char a[10]="abc",b[5]="xyz"; strncpy(a,b,2);
注意:
只拷贝字符,不拷贝'\0'字符拷贝到目的字符数组
字符串连接函数 —strcat
格式:strcat(字符数组名,字符串)
char a[10]="abc",b[5]="xy"; strcat(a,b);
a[1][2]的值是多少?
例:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0<=i<=2,0<=j<=1)
#include<stdio.h> void main() { int a[3][2], int i,j; for(i=0;i<3;i++) for(j=0;j<2;j++) a[i][j]=i+j; for(i=0;i<3;i++) { for(j=0;j<2;j++) printf(“%4d”,a[i][j]); printf(“\n”); } }
第五章 数组 5.2 多维数组 5.3 字符数组
多维数组
引例:
• 一页纸写着两个字符,如何存放这两个字符? • 一页纸写着三行字符,每行两个字符,如何存放这些 字符? • 有一本书,共四页,每页纸写着三行字符,每行两个 字符,如何存放这些字符?
char ch[2]; char ch[3][2]; char ch[4][3][2];
二维数组的初始化
• • • • 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]= {{1,2,3},{4,5},{6}}; int a[ ][3]= {1,2,3,4,5,6,7,8,9}; 能写成int a[3][]= {{1,2,3},{4,5},{6}};吗? int a[][3]= {{1,2,3},{4,5},{9}}; 这个数组中共包含几个元素?
2、用格式符“%s”一次输出字符串
char str[13]="How are you?"; printf("%s",str); /*遇到“\0”输出结束*/
字符串输出函数
格式:puts(字符数组名)
char str[13];
作用:
将“字符串”输出到终端。输出时,字符串结束标志 ‘\0’空字符被转换为换行符,即输出完字符串后换行。
例:计算矩阵A2×3的转置矩阵AT a[i][j]的值是b[j][i]的值 #include<stdio.h> main() { int a[2][3]={{1,3,5},{2,4,6}}; int i,j,b[3][2]; for(i=0;i<3;i++) for(i=0;i<2;i++) { { for(j=0;j<2;j++) for(j=0;j<3;j++) printf("%5d",b[i][j]); { printf("\n"); printf("%5d",a[i][j]); } b[j][i]=a[i][j]; } } printf("\n"); }