少一些豪情壮志的承诺,多一些脚踏实地的坚持!
目录
1.理论理解
1.1二维数组定义:
1.2具体定义分析:
1.3解决思路:
1.3.1具体分析:
1.3.2论证说明
1.3.3具体分析
1.4矩阵基本预算:矩阵(线性代数会学)
1.4.1转置矩阵:
1.4.2矩阵相加:
1.4.3矩阵相乘:
2.代码演示详解:
2.1二维数组基本定义和使用方式
2.2典型应用案例冒泡排序:
2.3二维数组案例程序编译讲解:
案例1:二维数组行列交换
案例2:求二维数组中最大值且输出对应行号
案例3:扩展补充
2.4字符数组分类代码详解:
2.4.1字符数组的定义、使用:
2.4.2字符数组初始化
2.4.3字符数组:strcpy、strcmp、strcat函数应用具体案例详解
2.4.5字符数组:puts、fputs函数具体应用代码案例:
2.4.6字符数组 :scanf、gets、fgets函数应用案例代码详解:
2.4.7综合应用代码详解:
1.理论理解
1.1二维数组定义:
二维数组基本形式
二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
1.2具体定义分析:
int a[3][4];
| a[0][0 | a[1][0 | a[2][0] |
| a[0][1] | a[1][1] | a[2][1] |
| a[0][2] | a[1][2] | a[2][2] |
| a[0][3] | a[1][3] | a[2][3] |
一个3行,4列的二维数组。其行号: 0,1,2;其列号: 0,1,2,3最大下标的元素为 a[2][3],没有 a[3][4]这个元素数组共有3行,每一行都是:4个元素的一维数组,每一行的数组名分别为: a[0],a[1],a[2]从整体看,任何一个二维数组都可以看成是一个一维数组,只不过其数组元素又是一个一维数组。
二维数组定义同时若有初始化,可以省略行号不写:如int al[31={1.2.3.4.5.6}系统会按照数据的个数,和规定的列数,来确定数据分几行?
二维数组定义同时若有初始化,可以省略行号不写,但列号不能省略 :如 int a[3][]={1,2,3,4,5}系统无法按照数据的个数,和规定的行数,来确定数据分几列。
1.3解决思路:
解题顺口溜:“1定2列3编写”
定义位置行列、数组、数组边界确定
列表说明,考虑scanf、gets函数用法细节(后文有典型案例介绍)
编写程序定义不能重复命名,注意合法性。
1.3.1具体分析:
二维数组的首元素,第二个元素,第三个元素........表示什么?
a[0]、a[1]、a[2]又各自代表什么,有几层含义,为什么有多层含义?
分析思路:
等号左边:a是什么?那a + i呢(为什么)?跟二维数组的元素定义有关
等号右边:a[i]代表的含义
1.3.2论证说明
int a[3][4]= { 1,3,5,7,9,11,13,15 17,19,21,23 };
a 二维数组名,指向一维数组a[0],即0行地址
a[],*(a+0),*a 0行0列元素的地址
a+1,&a[1] 第1行首地址
a[1],*(a+1) a[1][0]的地址
a[1]+2,*(a+1)+2,&a[1][2] a[1][2]的地址
*(a[1]+2),*(*(a+1)+2),a[1][2] a[1][2]的值
1.3.3具体分析
1.4矩阵基本运算:
矩阵(线性代数)
1.4.1转置矩阵:
//其中A, B是m*n矩阵:
void tramat(matrix A,matrix B){ int i,j;
for(i=0; i
1.4.2矩阵相加:
//其中A,B,C是m*n矩阵:
void addmat(matrix C, matrix A, matrix B){
int i, j;
for(i=0; i
1.4.3矩阵相乘:
//其中A是m*n矩阵,B是n*1矩阵,C为m*1矩阵
void mutmat(matrix C, matrix A, matrix B){
int i, j, k;
for(i=0; i
原理是支持实际编程的思想,需要巩固了解。推荐了解:线性代数、离散数学
2.代码演示详解:
2.1二维数组基本定义和使用方式
#include
#include
int main()
{
//二维数组初始化
// 1.分行初始化
int a1[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}};
// 2.将数组元素全部写在{}内,依次赋值
int a2[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
// 3.可以向二维数组进行局部编译初始化
//如果对应位置有值就赋值,没有就系统默认赋值为:0
//如果对二维数组全部元素赋初值,第一个[]可以省略不写,第二个[]一定不能省略
int a3[3][4] = {
{1},
{5},
{9}};
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", a3[i][j]);
}
printf("n");
}
}
2.2典型应用案例冒泡排序:
#include
#include
int main()
{
int a[6] = {5,3,6,2,10,8};
int i;
//int n= sizeof(a)/sizeof(int);
int j;
for(i=0; i<6-1; i++)
{
for(j=0; j<6-1-i; j++)
{
//元素交换前提挨着的两个数,前者比后者大/
if(a[j]>a[j+1])
{
int tmp;
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for(i=0; i<6; i++)
{
printf("%d n", a[i]);
}
}
2.3二维数组案例程序编译讲解:
案例1:二维数组行列交换
案例2:求二维数组中最大值且输出对应行号
案例3:扩展补充
#include
int main()
{
int a[5][10];
printf("sizeof(a)=%dn", sizeof(a));
// 5个int组成,所以总大小=5*4*10=200
printf("sizeof(a[0]=%dn)", sizeof(a[0]));
// a[0][0],因为int占4个字节
printf("sizeof(a[0][0]=%dn)", sizeof(a[0][0]));
//求二维数组的行数
printf("二维数组行数:%dn", sizeof(a) / sizeof(a[0]));
//求列数;思路:
printf("二维数组的列数:%dn", sizeof(a[0]) / sizeof(a[0][0]));
//求行*列
printf("二维数组行列总数为:%dn", sizeof(a) / sizeof(a[0][0]));
}
2.4字符数组分类代码详解:
2.4.1字符数组的定义、使用:
#include
int main()
{
char a[10];
//定义一个字符串
char a1[10] = {'h', 'e', 'l', 'l', 'o', ' '}; //表示字符串hello
char a2[10] = {'h', 'e', 'l', 'l', 'o', 0}; //也表示字符串hello
char a3[10] = {'h', 'e', 'l', 'l', 'o'}; //表示字符数组
char a4[] = "hao";//h a o (系统会自动加上 结束符,所以输出占了4个字节)
// 后面尽量不要加数字; 字符串
char a5[] = " 12hao";
printf("a1=%sn", a1);
printf("a2=%sn", a2);
printf("a3=%sn", a3);
printf("a4=%sn", a4);
printf("a5=%sn", a5);
printf("sizeof(a1)=%dn", sizeof(a1));
printf("sizeof(a4)=%dn", sizeof(a4));
printf("sizeof(a5)=%dn", sizeof(a5));
return 0;
}
2.4.2字符数组初始化
#include
int main()
{
char a1[10] = {'h', 'a', 'o'}; //定义一个一维数组,这是字符数组
char a2[8] = {'h', 'a', 'o'}; //定义一个一维数组,这是字符数组
char a3[] = "hao"; //只是一个字符串
int i;
for (i = 0; i < 10; i++)
{
printf("%C ", a1[i]);
}
printf("n");
printf("a2=%s ", a2);
printf("n");
printf("a3=%s", a3);
printf("n");
printf("sizeof(a1)=%d", sizeof(a1));
printf("n");
printf("sizeof(a2)=%d", sizeof(a2));
}
2.4.3字符数组:strcpy、strcmp、strcat函数应用具体案例详解
#include
int main()
{
char src[] = "hello word";
char dest[] = "China";
//strcat (dest,src);//字串的拼接
strncat (dest, src,sizeof("hello")+1);
printf("dest=%sn", dest);
return 0;
}
2.4.5字符数组:puts、fputs函数具体应用代码案例:
#include
int main()
{
char str[] = "China";
char str2[] = " China"; //当检测到有 字符,就会自动跳出,结束符所以最后输出的值为:0
char str3[] = "China";
//如果[]里面定义的字符个数,那么后面跟的具体值如果超过了给个字符限制,超过部分将不会输出
//例如:运行前需要把其他的定义数值给注释掉,不然会引起冲突
char str4[5] = "chinese";
// int len = strlen(str4);//这个定义为测试超过给定的字符长度而使用
int len = strlen(str);
printf("len(str)=%dn", len);
len = strlen(str2);
printf("len(str2)=%dn", len); // 0
// sizeof计算的是数据类型的长度, 不会因为结束符而结束
printf("sizeof(str2=%dn", sizeof(str2)); //结果:sizeof(str2=7,7个字符
len = strlen(str3);
printf("len(str3)=%dn", len); // 0
// sizeof函数会输出字符数,在计算机内存中,保存形式为:China , 因此会算上 所占字符,所以最后输出的字符数是6 printf("sizeof(str3=%dn", sizeof(str3));
printf("str3=%sn", str3);
len = strlen(str4);
printf("len(str4)=%dn", len);
printf("sizeof(str4=%dn", sizeof(str4));
// printf("str4=%sn", str4);//这一个为测试超过给的定的字符长度使用
return 0;
}
2.4.6字符数组 :scanf、gets、fgets函数应用案例代码详解:
#include
int main()
{
char str[10];
printf("请输入字符串str: ");
fgets(str, sizeof(str), stdin);
printf("str=%s", str);
}
2.4.7综合应用代码详解:
案例1:求输入单词个数
案例2:字符串比较大小
#include
int main()
{
char str[3][10]; //定义一个二维数组,每一行都是一个字符串
char tmp[10]; //存放最大的哪个字符串
int i;
for (i = 0; i < 3; i++){
gets(str[i]); //读入三个字符,依次赋值给str[0],str[1],str[2]
}
//接下来两两比较
if (strcmp(str[0], str[1]) > 0) {
// str[0]大
strcpy(tmp, str[0]); //将str[0]拷贝至tmp里面
}
else {
// str[1]大
strcpy(tmp, str[1]);
}
if (strcmp(str[2], tmp) > 0){
// str[2]大
strcpy(tmp, str[2]);
}
//tmp存的就是最大字符串
printf("最大字符串为 %sn",tmp);
return 0;
}
//其中A, B是m*n矩阵:
void tramat(matrix A,matrix B){ int i,j;
for(i=0; i
1.4.2矩阵相加:
//其中A,B,C是m*n矩阵:
void addmat(matrix C, matrix A, matrix B){
int i, j;
for(i=0; i
1.4.3矩阵相乘:
//其中A是m*n矩阵,B是n*1矩阵,C为m*1矩阵
void mutmat(matrix C, matrix A, matrix B){
int i, j, k;
for(i=0; i
原理是支持实际编程的思想,需要巩固了解。推荐了解:线性代数、离散数学
2.代码演示详解:
2.1二维数组基本定义和使用方式
#include
#include
int main()
{
//二维数组初始化
// 1.分行初始化
int a1[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}};
// 2.将数组元素全部写在{}内,依次赋值
int a2[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
// 3.可以向二维数组进行局部编译初始化
//如果对应位置有值就赋值,没有就系统默认赋值为:0
//如果对二维数组全部元素赋初值,第一个[]可以省略不写,第二个[]一定不能省略
int a3[3][4] = {
{1},
{5},
{9}};
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", a3[i][j]);
}
printf("n");
}
}
2.2典型应用案例冒泡排序:
#include
#include
int main()
{
int a[6] = {5,3,6,2,10,8};
int i;
//int n= sizeof(a)/sizeof(int);
int j;
for(i=0; i<6-1; i++)
{
for(j=0; j<6-1-i; j++)
{
//元素交换前提挨着的两个数,前者比后者大/
if(a[j]>a[j+1])
{
int tmp;
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for(i=0; i<6; i++)
{
printf("%d n", a[i]);
}
}
2.3二维数组案例程序编译讲解:
案例1:二维数组行列交换
案例2:求二维数组中最大值且输出对应行号
案例3:扩展补充
#include
int main()
{
int a[5][10];
printf("sizeof(a)=%dn", sizeof(a));
// 5个int组成,所以总大小=5*4*10=200
printf("sizeof(a[0]=%dn)", sizeof(a[0]));
// a[0][0],因为int占4个字节
printf("sizeof(a[0][0]=%dn)", sizeof(a[0][0]));
//求二维数组的行数
printf("二维数组行数:%dn", sizeof(a) / sizeof(a[0]));
//求列数;思路:
printf("二维数组的列数:%dn", sizeof(a[0]) / sizeof(a[0][0]));
//求行*列
printf("二维数组行列总数为:%dn", sizeof(a) / sizeof(a[0][0]));
}
2.4字符数组分类代码详解:
2.4.1字符数组的定义、使用:
#include
int main()
{
char a[10];
//定义一个字符串
char a1[10] = {'h', 'e', 'l', 'l', 'o', ' '}; //表示字符串hello
char a2[10] = {'h', 'e', 'l', 'l', 'o', 0}; //也表示字符串hello
char a3[10] = {'h', 'e', 'l', 'l', 'o'}; //表示字符数组
char a4[] = "hao";//h a o (系统会自动加上 结束符,所以输出占了4个字节)
// 后面尽量不要加数字; 字符串
char a5[] = " 12hao";
printf("a1=%sn", a1);
printf("a2=%sn", a2);
printf("a3=%sn", a3);
printf("a4=%sn", a4);
printf("a5=%sn", a5);
printf("sizeof(a1)=%dn", sizeof(a1));
printf("sizeof(a4)=%dn", sizeof(a4));
printf("sizeof(a5)=%dn", sizeof(a5));
return 0;
}
2.4.2字符数组初始化
#include
int main()
{
char a1[10] = {'h', 'a', 'o'}; //定义一个一维数组,这是字符数组
char a2[8] = {'h', 'a', 'o'}; //定义一个一维数组,这是字符数组
char a3[] = "hao"; //只是一个字符串
int i;
for (i = 0; i < 10; i++)
{
printf("%C ", a1[i]);
}
printf("n");
printf("a2=%s ", a2);
printf("n");
printf("a3=%s", a3);
printf("n");
printf("sizeof(a1)=%d", sizeof(a1));
printf("n");
printf("sizeof(a2)=%d", sizeof(a2));
}
2.4.3字符数组:strcpy、strcmp、strcat函数应用具体案例详解
#include
int main()
{
char src[] = "hello word";
char dest[] = "China";
//strcat (dest,src);//字串的拼接
strncat (dest, src,sizeof("hello")+1);
printf("dest=%sn", dest);
return 0;
}
2.4.5字符数组:puts、fputs函数具体应用代码案例:
#include
int main()
{
char str[] = "China";
char str2[] = " China"; //当检测到有 字符,就会自动跳出,结束符所以最后输出的值为:0
char str3[] = "China";
//如果[]里面定义的字符个数,那么后面跟的具体值如果超过了给个字符限制,超过部分将不会输出
//例如:运行前需要把其他的定义数值给注释掉,不然会引起冲突
char str4[5] = "chinese";
// int len = strlen(str4);//这个定义为测试超过给定的字符长度而使用
int len = strlen(str);
printf("len(str)=%dn", len);
len = strlen(str2);
printf("len(str2)=%dn", len); // 0
// sizeof计算的是数据类型的长度, 不会因为结束符而结束
printf("sizeof(str2=%dn", sizeof(str2)); //结果:sizeof(str2=7,7个字符
len = strlen(str3);
printf("len(str3)=%dn", len); // 0
// sizeof函数会输出字符数,在计算机内存中,保存形式为:China , 因此会算上 所占字符,所以最后输出的字符数是6 printf("sizeof(str3=%dn", sizeof(str3));
printf("str3=%sn", str3);
len = strlen(str4);
printf("len(str4)=%dn", len);
printf("sizeof(str4=%dn", sizeof(str4));
// printf("str4=%sn", str4);//这一个为测试超过给的定的字符长度使用
return 0;
}
2.4.6字符数组 :scanf、gets、fgets函数应用案例代码详解:
#include
int main()
{
char str[10];
printf("请输入字符串str: ");
fgets(str, sizeof(str), stdin);
printf("str=%s", str);
}
2.4.7综合应用代码详解:
案例1:求输入单词个数
案例2:字符串比较大小
#include
int main()
{
char str[3][10]; //定义一个二维数组,每一行都是一个字符串
char tmp[10]; //存放最大的哪个字符串
int i;
for (i = 0; i < 3; i++){
gets(str[i]); //读入三个字符,依次赋值给str[0],str[1],str[2]
}
//接下来两两比较
if (strcmp(str[0], str[1]) > 0) {
// str[0]大
strcpy(tmp, str[0]); //将str[0]拷贝至tmp里面
}
else {
// str[1]大
strcpy(tmp, str[1]);
}
if (strcmp(str[2], tmp) > 0){
// str[2]大
strcpy(tmp, str[2]);
}
//tmp存的就是最大字符串
printf("最大字符串为 %sn",tmp);
return 0;
}



