#5:C语言复习:数组和字符串;
2017-12-27 13:26
225 查看
一. 一维数组的定义
类型标识符 数组名[整型常量表达式]
1.类型标识符可以是:int 、float、char、指针等各种
2.数组名遵循命名规则(第一个为字母),在一个函数内,数组、变量名不能重名
3.整型常量表达式说明数组元素个数,不能包含变量或者函数
4.数组和变量可同时定义
5.数组序号从零开始!!!!!!!!!!!
例一:
一维数组的引用:输出全部元素
例二:
一组数组的初始化方法:
// 1. for(i=0 ;i<=x; i++) scanf("%d",a[i]); // for循环赋值,手动输入
// 2. int a[8]={0,1,2,3,4,5,6,7}; // 所有元素赋值
// 3. int a[8]={0,1,2,3,4}; // 部分元素赋值,后面的元素自动附为零
// 4. int a[]={1,2,3,4,5}; // 通过赋值来确定数组大小
例三:
一维数组程序设计举例:冒泡排序法( 从小到大 )
二、二维数组和多维数组
定义形式: 类型标识符 数组名[exp1](行)[exp2](列);
储存形式: 按行存储,第一行存完再继续存储第二行
1. 二维数组元素的引用:经典
void main()
{
int i,j,a[3][2];
printf("请按行输入原始数据:\n"); // 经典的二维数组输入
for(i=0; i<3; i++)
for(j=0; j<2; j++)
scanf("%d",&a[i][j]);
for(i=0; i<3; i++) // 经典的二位数组输出
for(j=0; j<2; j++)
printf("\na[%d][%d]=%d\n",i,j,a[i][j]);
}
2. 二维数组的初始化:
// 1. int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; // 分行给二维数组赋初值
// 2. int a[3][4]={ 1,2,3,4,5,6,7,8,9,10,11,12}; // 不够的元素赋值为0
// 3. int a[3][4]={ {1}, {2}, {3} };
// ={ {1,0,0,0},{2,0,0,0},{3,0,0,0} };等
// 4. int a[][4]={ 1,2,3,4,5,6,7,8,9 }; // 可省略行数,系统自动计算行数
// 5. int a[3][]={ {0,0,3}, {0}, {0,10} }; // 省略列数,但应分行赋值;
3. 二维数组程序设计举例:
求转置矩阵
void main()
{
int a[2][3],b[3][2],i,j;
printf("按行输入原始数据:\n");
for(i=0; i<=1; i++)
for(j=0; j<=2; j++)
scanf("%d",&a[i][j]);
for(i=0; i<=1; i++)
for(j=0; j<=2; j++)
b[j][i]=a[i][j]; // 转置矩阵的算法灵魂!!!!!
for(i=0; i<=2; i++)
{
for(j=0; j<=1; j++) // 先排列输出一行 再换行输出第二行。矩阵的经典输出!!!
printf("%4d",b[i][j]);
printf("\n");
}
}
三、字符数组与字符串
1.字符数组的初始化:
// 1. char c[10]={ 'p','r','o' };
// 2. char str[]={ 's','t','r','i' };
// 3. char ca[][5]={ {'a'}, {'b','b'},{'c','c','c'}};
// 4. char c[12]="computer & C";
错误,字符十二个,但是要给“\0”预留空间,所以数组大小为13;
// 5. char ca[3][5]={{"a"},{"bb"},{"ccc"}}; //
2. 字符串的输入输出:
void main()
{
char str[20];
int i;
printf("请输入字符串\n"); // 经典的字符串输入
for(i=0; i<=12; i++)
scanf("%c",&str[i]);
for(i=0; i<=12; i++) // 经典的字符串输出
printf("%c",str[i]);
printf("\n");
printf("请输入字符串\n"); // 特殊的字符串输出(无空格)
scanf("%s",str);
printf("%s\n",str); // scanf在输出时碰到空格等便停止输出,最终输出computer.
}
3. puts(str)和gets(str);
void main()
{
char str[13];
printf("请输入一个字符串\n");
gets(str);
puts(str);
}
4. 字符串处理函数:
1.strcat(字符数组名1,字符串2)
连接两个字符串; 字符数组1足够长;
void main()
{
char st1[30]="My name is ",st2[]="John";
strcat(st1,st2);
puts(st1);
}
2.strcyp(字符数组名1,字符串2)
字符串2的内容全部复制给字符串1; 字符数组1的长度不小于字符数组二的长度;
void main()
{
char st1[15],st2[]="C Language";
strcpy(st1,st2);
puts(st1);
}
3.strcmp(字符串1,字符串2)
比较两个字符串的大小;
从左到右比较两个字符串的大小,若相等继续比较,直到不同字符或遇到"\0"为止,
以第一个不同字符的比较为准:
exp1=exp2 返回值为0;
exp1>exp2 返回正值;
exp1<exp2 返回负值;
void main()
{
int k;
char st1[15],st2[]="C Language";
printf("请输入一个字符串:\n");
gets(st1);
k=strcmp(st1,st2); // C语言不允许关系运算符比较两个数组的大小,
// if(st1>=st2)是错误的;
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1<st2\n");
}
4.strlen(字符串)
计算字符串的实际长度(不含字符结束的"\0"),并作为返回值:
void main()
{
int k;
char st[80];
printf("请输入一个字符串:\n");
gets(st);
k=strlen(st);
printf("字符串的长度为:%d\n",k);
}
四、字符数组程序设计举例:
1. 从键盘输入若干字符串,存入二维数组,然后从小到大排序:
void main()
{
char a[3][80],b[80];
int i,j;
printf("请输入三个数组:\n"); // gets的经典算法
for (i=0; i<3; i++)
gets(a[i]);
for(i=0; i<3; i++) // 类似冒泡排序法的算法
for (j=2; j>i; j--)
if (strcmp(a[j],a[j-1])<0) // 经典的两个字符比大小并交换的算法;类似于max;
{
strcpy(b,a[j]);
strcpy(a[j],a[j-1]);
strcpy(a[j-1],b);
}
for(i=0; i<3; i++)
puts(a[i]);
}
2. 一个字符串的逆置:
void main()
{
char s[60],ch;
int m,j;
printf("请输入一个字符串:\n");
gets(s);
m=strlen(s)-1; // 在计算循环次数的时候经常使用!!!!!
for (j=0; j<m; j++,m--) // 交换对应项;
{
ch=s[j];
s[j]=s[m];
s[m]=ch;
}
printf("逆置的字符串为:%s\n",s);
}
3. 将一个数字字符串转换为一个整数:
void main()
{
char str[80];
long x=0;
int i=0,n;
printf("请输入一个数字字符串\n");
gets(str);
n=strlen(str);
if (str[0]=='-') i++; // 若第一个字符为符号,进行下一个数字计算;
for (; i<n; i++) // 一个数字字符减去0的ASCII码等于这个数字!!
x=x*10+str[i]-'0';
if (str[0]=='-') x=-x; // 如为负值,加上负号;
printf("%d\n",x);
}
类型标识符 数组名[整型常量表达式]
1.类型标识符可以是:int 、float、char、指针等各种
2.数组名遵循命名规则(第一个为字母),在一个函数内,数组、变量名不能重名
3.整型常量表达式说明数组元素个数,不能包含变量或者函数
4.数组和变量可同时定义
5.数组序号从零开始!!!!!!!!!!!
例一:
一维数组的引用:输出全部元素
void main() { int s[10]; int i; for(i=0; i<=9; i++) s[i]=i*i; for(i=0; i<=9; i++) printf("%d\n",s[i]); }
例二:
一组数组的初始化方法:
// 1. for(i=0 ;i<=x; i++) scanf("%d",a[i]); // for循环赋值,手动输入
// 2. int a[8]={0,1,2,3,4,5,6,7}; // 所有元素赋值
// 3. int a[8]={0,1,2,3,4}; // 部分元素赋值,后面的元素自动附为零
// 4. int a[]={1,2,3,4,5}; // 通过赋值来确定数组大小
例三:
一维数组程序设计举例:冒泡排序法( 从小到大 )
void main() { int a[50],i,j,t,n; // i:第i个数据 j:第j趟比较 t:经典交换中的交换变量 n:数据个数 printf("输入数据个数:\n"); // 经典的循环输入数组数据 scanf("%d",&n); printf("请输入原始数据:\n"); for(i=0; i<n; i++) scanf("%d",&a[i]); for(j=1; j<=n-1; j++) // 进行n-1次循环; for(i=0; i<=n-j-1; i++) // 每次循环比较前n-j个数,共n-j-1次; if(a[i]>a[i+1]) { t=a[i]; // 经典的交换数据 a[i]=a[i+1]; a[i+1]=t; } printf("\n"); for(i=0; i<n; i++) // 经典的循环输出 printf("%d\n",a[i]); }
二、二维数组和多维数组
定义形式: 类型标识符 数组名[exp1](行)[exp2](列);
储存形式: 按行存储,第一行存完再继续存储第二行
1. 二维数组元素的引用:经典
void main()
{
int i,j,a[3][2];
printf("请按行输入原始数据:\n"); // 经典的二维数组输入
for(i=0; i<3; i++)
for(j=0; j<2; j++)
scanf("%d",&a[i][j]);
for(i=0; i<3; i++) // 经典的二位数组输出
for(j=0; j<2; j++)
printf("\na[%d][%d]=%d\n",i,j,a[i][j]);
}
2. 二维数组的初始化:
// 1. int a[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; // 分行给二维数组赋初值
// 2. int a[3][4]={ 1,2,3,4,5,6,7,8,9,10,11,12}; // 不够的元素赋值为0
// 3. int a[3][4]={ {1}, {2}, {3} };
// ={ {1,0,0,0},{2,0,0,0},{3,0,0,0} };等
// 4. int a[][4]={ 1,2,3,4,5,6,7,8,9 }; // 可省略行数,系统自动计算行数
// 5. int a[3][]={ {0,0,3}, {0}, {0,10} }; // 省略列数,但应分行赋值;
3. 二维数组程序设计举例:
求转置矩阵
void main()
{
int a[2][3],b[3][2],i,j;
printf("按行输入原始数据:\n");
for(i=0; i<=1; i++)
for(j=0; j<=2; j++)
scanf("%d",&a[i][j]);
for(i=0; i<=1; i++)
for(j=0; j<=2; j++)
b[j][i]=a[i][j]; // 转置矩阵的算法灵魂!!!!!
for(i=0; i<=2; i++)
{
for(j=0; j<=1; j++) // 先排列输出一行 再换行输出第二行。矩阵的经典输出!!!
printf("%4d",b[i][j]);
printf("\n");
}
}
三、字符数组与字符串
1.字符数组的初始化:
// 1. char c[10]={ 'p','r','o' };
// 2. char str[]={ 's','t','r','i' };
// 3. char ca[][5]={ {'a'}, {'b','b'},{'c','c','c'}};
// 4. char c[12]="computer & C";
错误,字符十二个,但是要给“\0”预留空间,所以数组大小为13;
// 5. char ca[3][5]={{"a"},{"bb"},{"ccc"}}; //
2. 字符串的输入输出:
void main()
{
char str[20];
int i;
printf("请输入字符串\n"); // 经典的字符串输入
for(i=0; i<=12; i++)
scanf("%c",&str[i]);
for(i=0; i<=12; i++) // 经典的字符串输出
printf("%c",str[i]);
printf("\n");
printf("请输入字符串\n"); // 特殊的字符串输出(无空格)
scanf("%s",str);
printf("%s\n",str); // scanf在输出时碰到空格等便停止输出,最终输出computer.
}
3. puts(str)和gets(str);
void main()
{
char str[13];
printf("请输入一个字符串\n");
gets(str);
puts(str);
}
4. 字符串处理函数:
1.strcat(字符数组名1,字符串2)
连接两个字符串; 字符数组1足够长;
void main()
{
char st1[30]="My name is ",st2[]="John";
strcat(st1,st2);
puts(st1);
}
2.strcyp(字符数组名1,字符串2)
字符串2的内容全部复制给字符串1; 字符数组1的长度不小于字符数组二的长度;
void main()
{
char st1[15],st2[]="C Language";
strcpy(st1,st2);
puts(st1);
}
3.strcmp(字符串1,字符串2)
比较两个字符串的大小;
从左到右比较两个字符串的大小,若相等继续比较,直到不同字符或遇到"\0"为止,
以第一个不同字符的比较为准:
exp1=exp2 返回值为0;
exp1>exp2 返回正值;
exp1<exp2 返回负值;
void main()
{
int k;
char st1[15],st2[]="C Language";
printf("请输入一个字符串:\n");
gets(st1);
k=strcmp(st1,st2); // C语言不允许关系运算符比较两个数组的大小,
// if(st1>=st2)是错误的;
if(k==0) printf("st1=st2\n");
if(k>0) printf("st1>st2\n");
if(k<0) printf("st1<st2\n");
}
4.strlen(字符串)
计算字符串的实际长度(不含字符结束的"\0"),并作为返回值:
void main()
{
int k;
char st[80];
printf("请输入一个字符串:\n");
gets(st);
k=strlen(st);
printf("字符串的长度为:%d\n",k);
}
四、字符数组程序设计举例:
1. 从键盘输入若干字符串,存入二维数组,然后从小到大排序:
void main()
{
char a[3][80],b[80];
int i,j;
printf("请输入三个数组:\n"); // gets的经典算法
for (i=0; i<3; i++)
gets(a[i]);
for(i=0; i<3; i++) // 类似冒泡排序法的算法
for (j=2; j>i; j--)
if (strcmp(a[j],a[j-1])<0) // 经典的两个字符比大小并交换的算法;类似于max;
{
strcpy(b,a[j]);
strcpy(a[j],a[j-1]);
strcpy(a[j-1],b);
}
for(i=0; i<3; i++)
puts(a[i]);
}
2. 一个字符串的逆置:
void main()
{
char s[60],ch;
int m,j;
printf("请输入一个字符串:\n");
gets(s);
m=strlen(s)-1; // 在计算循环次数的时候经常使用!!!!!
for (j=0; j<m; j++,m--) // 交换对应项;
{
ch=s[j];
s[j]=s[m];
s[m]=ch;
}
printf("逆置的字符串为:%s\n",s);
}
3. 将一个数字字符串转换为一个整数:
void main()
{
char str[80];
long x=0;
int i=0,n;
printf("请输入一个数字字符串\n");
gets(str);
n=strlen(str);
if (str[0]=='-') i++; // 若第一个字符为符号,进行下一个数字计算;
for (; i<n; i++) // 一个数字字符减去0的ASCII码等于这个数字!!
x=x*10+str[i]-'0';
if (str[0]=='-') x=-x; // 如为负值,加上负号;
printf("%d\n",x);
}
相关文章推荐
- 【高级语言程序设计期末复习No.2】数组与字符串
- 数据结构与算法复习(10)—— 后缀数组与字符串问题
- Ruby语言基础学习七:Ruby字符串、数组、
- C语言基础—数组和字符串
- C 语言 实现 字符串 分割 函数(返回"二维字符数组",及分割后的字符数组的长度)
- Java复习(1)-字符串,switch,数组
- 黑马程序员-iOS基础-C语言基础(四)内存剖析、数组、字符串
- C语言复习 -- 指针数组和数组指针
- c语言基础--数组和指针---字符串
- C语言基础:数组和字符串
- 黑马程序员——c语言基础:数组和字符串
- [go语言]数组和字符串
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
- C语言基础:指针类型与指针和数组、字符串的关系
- C语言基础:数组与字符串
- 【数据结构与算法的语言基础】数组与字符串
- 主题四 指针和数组(上)----23.C语言中的字符串
- C 语言 实现 字符串 分割 函数(返回"二维字符数组",及分割后的字符数组的长度)
- 指针和数组、字符串 | C语言教程 | C语言系列教程
- 【php基础班】第11天 复习、二维数组、数组方法、字符串对象、Math对象、date对象