【学习ios之路:C语言】② 二维.三维数组.字符串数组的应用

时间:2022-09-03 10:27:58
二.三维数组
例如:
int a[2][4][3] = {0};

表⽰示整型的三维数组,2层4⾏3列。元素个数为2*4*3 = 24个.例:随机产生一个三维数组,求三维数组的和.



<span style="font-size:14px;">for (int i = 0; i < 3; i++) { //第一层控制层
printf("------第%d层-----\n",i+1);
for (int j = 0; j < 4; j++) { //第二层控制行
for (int k = 0; k < 3; k++) { //第三层控制列
m[i][j][k] = arc4random() % ( 40 - 20 + 1) +20;
printf("%d ", m[i][j][k] );
sum += m[i][j][k];
}
printf("\n");//换行
}
printf("\n");//换层
}
printf("sum = %d \n",sum);</span>



2.随机生成一个三维数组,编程求深度的平均值,保存在一个二维数中。

   

<span style="font-size:14px;"> int a[3][4][5] = {0};//定义一个3层4行5列的三维数组.取值范围 10 - 20
//随机获取值
for (int i = 0; i < 3; i++) {//层

for (int j = 0; j < 4; j++) {//行

for (int k = 0; k < 5; k++) { //列
a[i][j][k] = arc4random() % (20 - 10 + 1) + 10;
printf("%d ", a[i][j][k]);
}
printf("\n");
}
printf("\n");
}

//求对应深度平均值
int m[4][5] = {0};//定义一个4行5列的二维数组,用来存储深度的和.
//分析:先层,后列,后行. 先 即在内层.
for (int i = 0; i < 4; i++) { //行
for (int j = 0; j < 5; j++) { //列
for ( int k = 0; k < 3; k++) {//层
m[i][j] += a[k][i][j];
}
printf("%.2f ",m[i][j] * 1.0 / 3);//深度平均值
// printf("%d ", m[i][j]);
}
printf("\n");
}
</span>


3.字符串数组
  字符串数组:存放多个字符串,每一个字符串都是用一个一维的字符数组存储.本质上:字符串数组就是有多个一维字符数组组成.
  当定义字符串数组时,列数一定要大于等于最长的字符串长度 + 1.

 

char str[4][6] = {"my333", "you", "hedr", "me"};
//输出字符串数组中的单个字符
printf("%c \n", str[3][1]);//e

//如何访问字符串? 只用访问到行索引即可.
printf("%s\n", str[3]);//me,访问到行数即可.

//交换 you 和 me 的位置;
char temp[10] = {0}; //存储临时字符串.

//temp[i] = str[1];字符串不能直接赋值,所以用到拷贝.
strcpy(temp, str[1]);
//将me拷贝到you里面
strcpy(str[1], str[3]);
//将temp拷贝到str[3]中.
strcpy(str[3], temp);</span>
//输出字符串(访问字符串,只获取行索引,不用获取列索引)
for (int i = 0; i < 4; i++) {
printf("%s \n",str[i]); // my dme hder you
}

//求字符串数组str中字符串的最长长度
unsigned long max = 0;long len = 0; int index = 0;
for (int i = 0 ; i < 4; i++) {
len = strlen(str[i]);
if (max < len) {
max = len ;
index = i;
}
}
printf("最长字符串为 :%s, 长度为: %ld",str[index], max);




例如:
int a[2][4][3] = {0};
表⽰示整型的三维数组,2层4⾏3列。元素个数为2*4*3 = 24个.例:随机产生一个三维数组,求三维数组的和.


for (int i = 0; i < 3; i++) { //第一层控制层
printf("------第%d层-----\n",i+1);
for (int j = 0; j < 4; j++) { //第二层控制行
for (int k = 0; k < 3; k++) { //第三层控制列
m[i][j][k] = arc4random() % ( 40 - 20 + 1) +20;
printf("%d ", m[i][j][k] );
sum += m[i][j][k];
}
printf("\n");//换行
}
printf("\n");//换层
}
printf("sum = %d \n",sum);



2.随机生成一个三维数组,编程求深度的平均值,保存在一个二维数中。


i<span style="font-size:14px;">nt a[3][4][5] = {0};//定义一个3层4行5列的三维数组.取值范围 10 - 20
//随机获取值
for (int i = 0; i < 3; i++) {//层

for (int j = 0; j < 4; j++) {//行

for (int k = 0; k < 5; k++) { //列
a[i][j][k] = arc4random() % (20 - 10 + 1) + 10;
printf("%d ", a[i][j][k]);
}
printf("\n");
}
printf("\n");
}

//求对应深度平均值
int m[4][5] = {0};//定义一个4行5列的二维数组,用来存储深度的和.
//分析:先层,后列,后行. 先 即在内层.
for (int i = 0; i < 4; i++) { //行
for (int j = 0; j < 5; j++) { //列
for ( int k = 0; k < 3; k++) {//层
m[i][j] += a[k][i][j];
}
printf("%.2f ",m[i][j] * 1.0 / 3);//深度平均值
// printf("%d ", m[i][j]);
}
printf("\n");
}
</span>
 

例题:输入6个字符串,并对它们按从小到大的顺序排序后输出.


char str[5][10] = {0};//定义一个字符串数组
printf("请输入五个字符串:\n");
for (int i = 0; i < 5; i++) {
scanf("%s", str[i]); //str[i]就代表地址.
}
for (int i = 0; i < 5; i++) {
printf("%s ", str[i]);
}
printf("\n");
int max = 0;
char temp[10] = {0};
for (int i = 0; i < 5 - 1; i++) {
for (int j = 0; j < 5 - i - 1; j++) {
max = strcmp(str[j], str[j + 1]); //vv ,aa 3,4 //字符串比较,只比较首字母.
if (max > 0) {
strcpy(temp, str[j]);
//将me拷贝到you里面
strcpy(str[j], str[j + 1]);
//将temp拷贝到str[3]中.
strcpy(str[j + 1], temp);
}
}
}
for (int i = 0; i < 5; i++) {
printf("%s ", str[i]);
}