//二维数组,多维数组,字符串数组;
//二维数组:
// 二维数组的概念:数组名后面有两个下标的数组被称为二维数组
// 定义:类型说明符数组名[常量表达式1][常量表达式2]={值1,值2,....}
// 其中常量表达式1代表的是一维的长度,常量表达式2代表的是二维的长度
//二维数组定义时,如果元素未一一列出,未赋值的元素自动初始化为0
3)二维数组
int a[3][3]={{1},{2},{3}};
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
printf(" a[%d][%d]=%d ", i, j, a[i][j]);
}
printf("\n");
}
int array[3][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
//
// printf("array[0][0]=%d\n",array[0][0]);
// printf("array[0][1]=%d\n",array[0][1]);
// printf("array[0][2]=%d\n",array[0][2]);
// printf("array[0][3]=%d\n",array[0][3]);
// printf("array[0][4]=%d\n",array[0][4]);
//
// printf("array[1][0]=%d\n",array[1][0]);
// printf("array[1][1]=%d\n",array[1][1]);
// printf("array[1][2]=%d\n",array[1][2]);
// printf("array[1][3]=%d\n",array[1][3]);
// printf("array[1][4]=%d\n",array[1][4]);
//
// printf("array[2][0]=%d\n",array[2][0]);
// printf("array[2][1]=%d\n",array[2][1]);
// printf("array[2][2]=%d\n",array[2][2]);
// printf("array[2][3]=%d\n",array[2][3]);
// printf("array[2][4]=%d\n",array[2][4]);
//
// printf("array[1][5]=%d\n",array[1][5]);
//
array[1][5]==array[2][0]
//
用for循环输出
// int array[3][5]={0};
// for (int i=0; i<3; i++) {
// for (int j=0; j<5; j++) {
// array[i][j]=arc4random()%(30-10+1)+2;
// printf("array[%d][%d]=%d\n",i,j,array[i][j]);
// }
// }
//
交换一个二维数组的行和列
//
// int array[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
// int array1[5][3]={0};
//
// for (int i=0; i<3; i++) {
// for (int j=0; j<5; j++) {
//
// printf("array[%d][%d]=%d\n",i,j,array[i][j]);
// array1[j][i]=array[i][j];
// }
// }
//
// for (int i=0; i<5; i++) {
// for (int j=0; j<3; j++) {
// printf("array1[%d][%d]=%d\n",i,j,array1 [i][j]);
// }
// }
有一个三行四列的二维数组,找出最大元素,并输出所在的行和列
int max=0,k=0,l=0,g=0;
int arr[3][4]={0};
for (int i=0;i<3;i++) {
for (int j=0; j<4; j++) {
arr[i][j]=arc4random()%(30-10+1)+10;
printf("arr[%d][%d]=%d\n",i,j,arr[i][j]);
if (max<arr[i][j]) {
k=arr[i][j];
max=k;
arr[i][j]=k;
l=i;
g=j;
}
}
// 若要求每一行的最大数值和行列的话,就加上这句:printf("max=%d,l=%d,g=%d\n",max,l,g);
}
printf("max=%d,l=%d,g=%d\n",max,l,g);
//多维数组:数组下标在两个以上。多维数组元素个数等于各个维数相乘的积(如int arr[2][4][3]={0}共有24个元素)
//多维数组的遍历,几维数组就需要几层for循环0.
//多维数组元素访问:数组名[下标][下标][下标][下标]....
/**
* 回顾 : 字符数组:用于存放字符变量的数组,字符数组也是一维数组,与与普通字符定义方式相似,只是类型是char
char 数组名[常量表达式1]={值1}{值2};
char array[10]={'i', 'P', 'h', 'o', 'n', 'e'};
for (int i=0; i<10; i++) {
printf("array[%d]=%c\n",i,array[i]);
}
char array1[10]="iphone6p";
for (int i=0; i<10; i++) {
printf("aaray1[%d]=%c\n",i,array1[i]);
}
有'\0'结束标识的字符数组也称为字符串;字符数组长度要比字符长度大一,用来存放'\0'标识
strlen() 计算字符串长度
字符串比较
注意:字符串比较函数是根据对应下标的字符的ASCII码值作比较(减法),如果差值为零,说明两个字符相等,接着比较下一位ASCII码值,直到遇到'\0',如果差值不为零则返回该差值,表示两个字符是不同的
int strcmp(<#const char *#> s1, <#const char *#> s2);
比较两个字符串的大小(不忽略大小写),返回值很有学问:如果s1小于s2返回一个小于0的数,如果s1大于s2返回一个大于0的数,如果相等则返回0。返回值是两个字符串中第一个不相等的字符ascii码的差值
查找字符串strstr(const char *dst, <#const char *#>src);
字符串复制strcpy(<#char *#>dst, const char *csc);
字符串拼接char*strcpy(<#char *#>s1, <#const char *#>s2);
*/ //
// //字符串赋值strcpy
// char newstr[]={'\0'};
// strcpy(newstr *, str);
// printf("newstr=%s\n",newstr);
//
// //字符串拼接
// strcat(str,str1);
// printf("str1=%s\n",str1);
字符串数组;用来存放字符串(以'\0'结尾的数组被称为字符串)的数组;
//字符串数组定义 char数组名[常量表达式1][常量表达式2] = {值1,值2,值3,.....}
char string[3][10]={"iphone", "android" "windows"};
char string1[3][10]={{'i','P','h','o','n','e', '7'},{'A', 'n', 'd', 'r', 'o', 'i', 'd'},{'w', 'i', 'n','8'}};
注意事项:字符串数组实际是字符型的二维数组
每个字符长度不超过二维长度减一(字符串需要存放'\0')
访问字符串,数组名[第一维下标]
访问字符,数组名[第一维下标][第二维下标]
sizeof和strlen区别:strlen指字符的长度,sizeof指文件或者数据占的内存(字节)
练习2创建一个字符串数组(内容是周围人的姓名),输出最长字符串的长度
// 求字符串长度的结果数据类型是unsigned long(无符号长整形)
// 无论是赋值还是作比较,都需要双方类型一致
// 访问字符串,数组名[第一维下标]
// char arr[5][13]={"zhangpengfei", "qiaozipeng", "lizhipeng", "guoyaru", "lishuming"};
// unsigned long max=0, k=0;
// for (int i=0; i<5; i++) {
// if(max<strlen(arr[i])){
// max=strlen(arr[i]);
k=i;
// }
// }
// printf("%s,max=%lu\n", arr[k],max);
// %c是按字符格式输入和输出
// %s是按字符串格式输入和输出
//
输入年月日,判断是一年中的第几天
int dayOfYear(int year,int month,int day){
int sum=0;
int rundays[]={31,29,31,30,31,30,31,31,30,31,30,31};
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%4==0 || (year%400==0 && (year%100!=0)))
{
for (int i=0; i<month-1; i++)
{
sum +=rundays[i];
}
} else {
for (int i=0; i<month-1; i++)
{
sum +=days[i];
}
}
sum += day;
return sum;
}