二维数组

一维数组

定义:

int a[N];

初始化:

int a[3] = {1,2,3} ;
for(i = 0;i<3; i++){
    scanf("%d",&a[i]);
}

储存结果:数组元素在内存中存放是连续的

实例:逆序存放 冒泡选择排序 二分查找

二维数组

int a[2][3];//三行四列
int a[2][3]={{1,2,3},{4,5}};
int a[2][3]={1,2,3,4,5};

标准的初始化

for(i=0;i<2;i++){
    for(j=0;j<3;j++){
    scanf("%d",&a[i][j]);
    }
}

输出

for(int i=0;i<3;i++){
    for(int j=0;j<3;j++){
        printf("%d",a[i][j]);//%3代表每次打印长度为3
    }
    printf("\n");//一行结束换行
}


#include<stdio.h>
int main(){
	int a[3][3];//定义这里不要写成a[i][j]了,笑死!
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			scanf("%d",&a[i][j]);//要取地址
		}
	}
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			printf("%3d",a[i][j]);//%3代表每次打印长度为3
		}
		printf("\n");//一行结束换行
	}
	return 0;
}

连续存放

#include<stdio.h>
int main(){
	int a[3][3];//这里不要写成a[i][j]了,笑死!
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			scanf("%d",&a[i][j]);//要取地址
		}
	}
	for(int i=0;i<3;i++){
		for(int j=0;j<3;j++){
			printf("%x ",&a[i][j]);//%3代表每次打印长度为3
		}
		printf("\n");//一行结束换行
	}	
	return 0;
}

转置矩阵实现

#include<stdio.h>
int main(){
	int a[2][3];//这里不要写成a[i][j]了,笑死!
	for(int i=0;i<2;i++){
		for(int j=0;j<3;j++){
			scanf("%d",&a[i][j]);//要取地址
		}
	}
	for(int j=0;j<3;j++){//把i和j位置换一下
		for(int i=0;i<2;i++){
			printf("%3d",a[i][j]);//%3代表每次打印长度为3
		}
		printf("\n");//一行结束换行
	}	
	return 0;
}

杨辉三角形 n>2
1
00
1 1
10 11
1 2 1
20 21 22
1 3 3 1
30 31 32 33
1 4 6 4 1
40 41 42 43 44
a[i][i=1] = a[i][0] = 1
非1起步元素 a[2][1]
终点元素 a[i][i-1]
i=2 j=1
a[i][j]= a[i-1][j] + a[i-1][i-1]

已知数组a[2][3]

找到数组中最大值和下标

#include<stdio.h>
int main (){
	int a[2][3],r = 0,c = 0;
	for(int i=0;i<2;i++){
		for(int j=0;j<3;j++){
			scanf("%d",&a[i][j]);
		}
	}
	int max = a[0][0];
	for(int i=0;i<2;i++){
		for(int j=0;j<3;j++){
			
			if(max<a[i][j]){
				max = a[i][j];
				r = i;
				c = j;
			}
			
		}
	}

		printf("%d %d %d",a[r][c],r,c);

	return 0;
}

1 7 4 1 01(7)max 11 21 31
00 01 02 03
4 8 3 6
10 11 12 13
1 6 1 2
20 21 22 23
0 7 8 9
30 31 32 33

i=0 j=0,1,2,3 maxj=1 (7)-----tmp[0][1] tmp[i][maxj]

 j = 1

i=1 j=0,1,2,3 maxj=1 (8)-----tmp[0][1] tmp[i][maxj]

 j = 1

i=2 j=0,1,2,3 maxj=1 (6)-----tmp[0][1] tmp[i][maxj]

 j = 1

i=3 j=0,1,2,3 maxj=1 (9)-----tmp[0][3] tmp[i][maxj]

 j = 3

i=0 j=1 i=0 2 3 tmp[i][maxj] ?max --->鞍点 --->flag =1;--->andian[i][j] r=i,c=j||no andian
i=1 j=1 i=0 2 3
i=2 j=1 i=0 2 3
i=3 j=3 i=0 1 2
if(flag == 0) --- NONE
else --- printf('%d %d %d',r,c,andian[i][j])

  1. 列最小,传入坐标

  2. 行最大,检验坐标是否满足该行max

    1 7 4 1
    4 8 3 6
    1 6 1 2
    0 7 8 9

/*输出行最大值 */
#include<stdio.h>
int main (){
	int a[20][30],i = 0,j = 0,n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	int max = a[0][0];
	for(i=0;i<n;i++){
		max = a[i][0];
		for(j=0;j<n;j++){
			
			if(max<a[i][j]){
				max = a[i][j];
				
			}
			
		}
		printf("%d ",max);
	}

		

	return 0;
}

输出列最大值
#include<stdio.h>
int main (){
	int a[20][30],i = 0,j = 0,n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	int max = a[0][0];
	for(i=0;i<n;i++){
		max = a[0][i];
		for(j=0;j<n;j++){
			
			if(max>a[j][i]){
				max = a[j][i];
				
			}
			
		}
		printf("%d ",max);
	}

		

	return 0;
}

字符数组


//初始化
char name[20];
char nameplus[10][10];
char name[10][20]; //存放10个同学的名字
//%s  包括 '\0'  "abc"
//%c             'a' 'b' 'c' '\0'
for(int i=0;i<3;i++){
	c[i] 
}
//字符
//char ch = getchar(); getchar只可以输入一个字符
//putchar(ch);
//字符串
//gets函数:输入带空格的字符串
//scanf函数不可以输出 空格,第一个空格就结束了
/*输入三个同学的名字*/
char name[20];
gets(name);
puts(name);
#include<stdio.h>
int main(){
	char name[10][20];
	for(int i=0;i<3;i++){
		gets(name[i]);
	}
	for(int i=0;i<3;i++){
		puts(name[i]);
	}
	
	return 0;
}
/*输入一个同学的名字*/
#include<stdio.h>
int main(){
	char name[20];
	gets(name);
	puts(name);
	return 0;
}

//\0作为字符串结束

//#include"string.h"
//计算长度【不包括\0】
//strlen(a);
//strcpy(a,b);
//strcat(a,b);  a + b
//strcmp(a,b);  比较a,b[assci码]
//cuit --- 4
#include<stdio.h>
int length(char name[20]){
	int i = 0;
	while(name != '\0'){
		i ++;
	}
	return i;
}
int main(){
	char name[20];
	gets(name);
	int count = 0;
	count = length(name[20]);
	printf("%d",count);
	
	return 0;
}
#include<stdio.h>
//#include<string.h>
int main(){
	char a[20], b[20];
	gets(a);
//	int len = strlen(a);
	int i =0;
//	char b[len] = {0};
	while(a[i] != '\0'){	
		b[i] = a[i];
		i++;	
	}
	b[i] = '\0';//终于明白了。最后写上\0就好了
	puts(b);
	
	return 0;
}



posted @ 2024-11-11 15:51  GJ504b  阅读(3)  评论(0编辑  收藏  举报