7.字符串数组逆序
注:sizeof(str)代表整个字符串的长度,strlen(len)代表有效字符的长度。
因此求字符串有效长度必须用strlen(len),不能用sizeof(str)/sizeof(str[0])
#include<stdio.h>
#include<string.h>
int main()
{
char str[32]="hello";
int len=strlen(str);
int i=0;
int temp=0;
for(i=0;i<(len/2);++i)
{
temp=str[i];
str[i]=str[len-1-i];
str[len-1-i]=temp;
}
puts(str);
return 0;
}
七、二维整型数组
1.语法
类型说明符 数组名 [行数][列数];
int a[3][4]; //可保存12个int类型数据
float a[3][4]; //可保存12个float类型数据

2.二维数组的访问
数组名 [行下标][列下标]
行下标:0—》行数-1
列下标:0—》列数-1
注意:二维数组规定,在二维数组初始化后,行下标可以省略,列下标不能省略
a[m][n]: //代表m个一维数组,其中每个一维数组有n个元素
a[0]: //代表一个一维数组
a[0]=10; //错误写法,不能给一维数组直接赋值
行数计算:
sizeof(a)/sizeof(a[0]) —–>行数
列数计算:
sizeof(a[0])/sizeof(a[0][0]) —–>列数
二维数组的赋值与访问:
#include<stdio.h>
int main()
{
int a[3][4]={0};
int i=0;
int j=0;
int t=0;
for(j=0;j<3;++j)
{
for(i=0;i<4;++i)
{
a[j][i]=t++;
}
}
for(j=0;j<3;++j)
{
for(i=0;i<4;++i)
{
printf("%d ",a[j][i]);
}
printf("\\n");
}
return 0;
}
//运行结果
0 1 2 3
4 5 6 7
8 9 10 11
3.二维数组的初始化
//全部初始化
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
//局部初始化
int a[3][4]={{1,2},{5,6,7},{9}}; //未初始化的数据按0存储
int a[3][4]={1,2,3,4,5};
//全部初始化成0
int a[3][4]={0};
4.二维数组的存储方式
满足单一性,有序性,连续性
八、二维字符型数组
作用:保存多个字符串
1.语法
char 数组名[行数][列数];
char str[3][100]; //占300字节
"hello world"
"how are you"
"xxxxxxxxx"
2.二维字符数组初始化
//初始化成全0
char str[3][100]={0};
char str[3][100]={{"hello"},{"world"},{"how"}};
// 里面的{}可以省略
char str[3][100]={"hello"};
3.二维字符数组输入输出
二维字符数组的输入输出可以当作多个一维字符数组
//输入
for(i=0;i<hang;++i)
{
gets(str[i]);
}
//输出
for(i=0;i<hang;++i)
{
puts(str[i]);
}
二位字符数组比较出最大字符串:
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][100]={"hello","world","hi"};
char max[100]={0};
strcpy(max,str[0]);
int i=0;
int hang=sizeof(str)/sizeof(str[0]);
for(i=1;i<hang;++i)
{
if(strcmp(str[i],max)>0)
{
strcpy(max,str[i]);
}
}
puts(max);
return 0;
}
二维字符数组行逆序:
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][100]={"how","are","you"};
int hang=sizeof(str)/sizeof(str[0]);
int i=0;
char temp[100]={0};
for(i=0;i<hang/2;++i)
{
strcpy(temp,str[i]);
strcpy(str[i],str[hang-1-i]);
strcpy(str[hang-1-i],temp);
}
for(i=0;i<hang;++i)
{
puts(str[i]);
}
return 0;
}
九、函数
优点:
1.降低程序的耦合性(关联度),减少重复代码
2.让程序模块化,增强代码复用性
1.函数的定义
(1)语法:
返回值 函数名(形参表)
{
函数体;
}
返回值:类型说明符 可以是int、char…基本数据类型、构造数据类型、void类型
也是返回函数最终结果的类型
void:空类型 函数不需要返回值时使用
函数名:标识符 字母数字下划线构成,不能与系统中的函数名重名
动宾命名:例:get_max_val();
形参表:函数执行过程中需要用到的条件
形式:数据类型 形参名,数据类型 形参名
例:int a,int b
2.函数的调用
(1)语法:
函数名(实参表);
实参表:传递给函数的具体的条件
值1,值2,…
(2)注意:
1.实参个数与形参个数一致
2.实参和形参数据类型一致,或者相互兼容
3.函数不被调用则不被执行,调用n次执行n次
4.实参名和形参名可以相同
5.除了void类型,别的类型函数若不return,则会返回一个随机值
(3)主调函数、被调函数
主调函数:调用函数的函数称为主调函数(如main)
被调函数:被调用的函数


