6.二维数组

本文详细介绍了C语言中二维数组的定义、初始化及应用实例,包括求最值、排序等常见操作,并展示了如何存储和查找字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/***************************************************************************************
* Description:数组3:二维数组
* VersionName           DateDescription
1.0    路飞老师    2016/7/27初始创建
* Copyright (c) by 择善教育. All Rights Reserved.

****************************************************************************************/
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>//标准的输入输出头文件
#include<stdlib.h>//system函数的头文件
#include<string.h>//字符串操作函数的头文件

//程序的入口main函数
int main()
{
/*     A   B   C
语文   10  20  30
数学   40  50  60
英语   70  80  90

int iScore[3][3];//3行3列的数组
定义方式:类型  数组名[常量表达式][常量表达式]

iScore[0][0],iScore[0][1],iScore[0][2]
iScore[1][0],iScore[1][1],iScore[1][2]
iScore[2][0],iScore[2][1],iScore[2][2]

c语言,只要是数组,满足同类型,对称
*/
/*
初始化
分段赋值:int iScore[3][3]={{10,20,30},{40,50,60},{70,80,90}};//建议用这种
连续赋值:int iScore[3][3]={10,20,30,40,50,60,70,80,90};

1,可以只对部分元素赋值
 int iScore[3][3]={0};
2、如果全部元素赋值,那么一维的长度可以不给出,但是二维的长度一定要给出
3、二维数组可以看作是一维数组嵌套构成
  一个二维数组就可以分解为多个一维数组,一维数组的名字
  iScore[0]  iScore[1]  iScore[2]
*/
int iScore[][3] = { { 10, 20,30}, { 40, 50, 60 }, { 70, 80, 90 } };
int i, j,t;
int row, col;
int iMax[3] = { 0 }, iMin[3] = { 0 };
char acHz[] = "天";
char acNames[5][20] = { 0 };
int iCnt = 0, iLoc[5] = { 0 };


//遍历二维数组,并查看他们的内存地址
//iScore,iScore[0],iScore[0][0]
//iScore[i],iScore[i][0]
printf("二维数组的首地址=%#x\n",iScore);
for (i = 0; i < 3; i++)
{
printf("%d行首地址=%#x\n", i,iScore[i]);
for (j = 0; j < 3; j++)
{
printf("值=%d,地址=%#x  ", iScore[i][j], &iScore[i][j]);
}
printf("\n");
}
/*
求最值、排序
求各门成绩中,谁的成绩最好
对每个人,哪门成绩最好
*/
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{

if (j == 0)
{
iMax[i] = iScore[i][j];
iMin[i] = iScore[i][j];
}

if (iMax[i]<iScore[i][j])
{
iMax[i] = iScore[i][j];
}
if (iMin[i]>iScore[i][j])
{
iMin[i] = iScore[i][j];
}
}

}
for (i = 0; i < 3; i++)
{
printf("第%d门成绩的最高分是%d,最低分=%d\n", i, iMax[i], iMin[i]);
}

for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{

if (j == 0)
{
iMax[i] = iScore[j][i];
iMin[i] = iScore[j][i];
}

if (iMax[i]<iScore[j][i])
{
iMax[i] = iScore[j][i];
}
if (iMin[i]>iScore[j][i])
{
iMin[i] = iScore[j][i];
}
}

}
for (i = 0; i < 3; i++)
{
printf("第%d人的最高分是%d,最低分=%d\n", i, iMax[i], iMin[i]);
}
/*
求各门成绩进行排序
对每个人的成绩排序
*/
for (row = 0; row < 3; row++)
{
for (i = 0; i < 3 - 1; i++)
{
for (j = 0; j < 3 - i - 1; j++)
{
if (iScore[row][j]<iScore[row][j+1])
{
t = iScore[row][j];
iScore[row][j] = iScore[row][j + 1];
iScore[row][j + 1] = t;
}
}
}
}
printf("对各门成绩进行排序\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", iScore[i][j]);
}
printf("\n");
}

for (col = 0; col < 3; col++)
{
for (i = 0; i < 3 - 1; i++)
{
for (j = 0; j < 3 - i - 1; j++)
{
if (iScore[j][col]<iScore[j+1][col])
{
t = iScore[j][col];
iScore[j][col] = iScore[j + 1][col];
iScore[j + 1][col] = t;
}
}
}
}
printf("对每个人的成绩进行排序\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("%d ", iScore[i][j]);
}
printf("\n");
}

/*
存储多个字符串:存储多个姓名
scanf输入多个姓名,然后遍历打印这些姓名
查找姓“李”的人的个数和位置
查找带“天”字的人的个数和位置
*/
for (i = 0; i < 5; i++)
{
printf("请输入%d个名字:",i);
scanf("%s", acNames[i]);//acNames[i]是每一个字符数组的首地址,即数组名
}
iCnt = 0;
for (i = 0; i < 5; i++)
{
printf("第%d个名字:%s\n", i,acNames[i]);
if (0 == strncmp(acNames[i],"李",2))
{
iLoc[iCnt] = i;
iCnt++;
}
}
for (i = 0; i < iCnt; i++)
{
printf("第%d个姓李的人的位置=%d\n",i,iLoc[i]);
}
//天天
iCnt = 0;
for (i = 0; i < 5; i++)
{
for (j = 0; acNames[i][j] != '\0';j++)//如果所有的都是汉字,j+=2
{
if (acNames[i][j] == acHz[0] && acNames[i][j+1]==acHz[1])
{
iLoc[iCnt] = i;
iCnt++;
break;
}
}
}
for (i = 0; i < iCnt; i++)
{
printf("第%d个含有天的人的位置=%d\n", i, iLoc[i]);
}

system("pause");

return 0;
}
//程序结束

内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值