二维数组的定义和引用:
类型说明符 数组名[常量表达式][常量表达式]
其中,`类型`是数组元素的数据类型,`数组名`是数组的标识符,`常量表达式1`和`常量表达式2`分别指定了数组的行数和列数。例如:
int a[3][3]
二维数组可以看成一维数组的数组;
初始化二维数组
二维数组可以在声明时直接初始化,也可以在声明后进行初始化。初始化时,可以使用花括号将每一行的元素括起来,行与行之间用逗号分隔。如果初始化时省略了某些元素,未初始化的元素将被自动初始化为0;
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}
访问二维数组元素
访问二维数组中的特定元素需要指定两个下标,第一个下标表示行,第二个下标表示列。
二维数组的内存布局
尽管在逻辑上二维数组表现为行和列的结构,但在内存中,二维数组是以线性方式存储的。这意味着二维数组的所有元素在内存中是连续存储的。
从1~12输出二维数组求和
int main(void)
{
int a[3][4];
int i, j;
int sum = 0,k = 1;
for(i = 0;i < 3;++i)
{
for(j = 0;j < 4;++j)
{
a[i][j] =k++;
}
}
for(i = 0;i < 3;++i)
{
for(j = 0;j < 4;++j)
{
sum = a[i][j] + sum;
}
}
printf("%d\n",sum);
return 0;
}
字符型二维数组
倒序
int main(void)
{
char s[][100] = {"Hello","World","China","America"};
int rows = sizeof(s) / sizeof(s[0]);
int i;
for(i = 0;i < rows / 2;++i)
{
char a[100];
strcpy(a, s[i]);
strcpy(s[i],s[rows - i - 1]);
strcpy(ss[rows - i - 1],a);
}
for(i = 0;i < rows;++i)
{
puts(s[i]);
}
return 0;
}
比较
int main(void)
{
char s[][100] = {"Hello","World","China","America"};
int rows = sizeof(s) / sizeof(s[0]);
int i,j;
for(i = 0;i < rows - 1;++i)
{
for(j = i + 1;j < rows;++j)
{
if(strcmp(s[i],s[j]) > 0)
{
char a[100];
strcpy(a,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],a);
}
}
}
for(i = 0;i < rows;++i)
{
puts(s[i]);
}
return 0;
}
查找
int main(void)
{
char s[][100] = {"Hello","World","China","America"};
int rows = sizeof(s) / sizeof(s[0]);
int i,j;
for(i = 0;i < rows - 1;++i)
{
for(j = i + 1;j < rows;++j)
{
if(strcmp(s[i],s[j]) > 0)
{
char a[100];
strcpy(a,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],a);
}
}
}
char str[100] = "China";
int begin = 0;
int end = rows - 1;
int mid;
while(begin <= end)
{
mid = (begin + end) / 2;
if(strcmp(str,s[mid]) > 0)
{
begin = mid + 1;
}
else if(strcmp(str, s[mid]) < 0)
{
end = mid - 1;
}
else
{
break;
}
}
if(begin <= end)
{
printf("found\n");
}
else
{
printf("not found\n");
}
return 0;
}
函数
函数是C语言的基本构建块,用于分解复杂问题为可单独解决的小问题。模块化编程,便于协
作和维护。
包括返回类型、函数名、参数列表和函数体。
形式:返回类型 函数名(参数类型1 参数名1, ...) { // 函数体 return 返回值; }
先声明后调用。
调用时写出函数名和实参列表,如 c = max(a, b);
形式参数:函数定义时给出,仅在函数内部有效。
实际参数:调用函数时传递给形式参数的表达式或值。
通过 return 语句返回给调用者。
无返回值函数使用 void 类型,可省略 return 语句或使用 return; 结束函数。
嵌套调用:一个函数内部调用另一个函数。
递归调用:函数内部调用自身,需避免无限递归导致的栈溢出。
自定义函数:由程序员定义,实现特定功能。
库函数:由C语言标准库或第三方库提供,如 printf、scanf 等,需包含相应头文件。