//数组越界访问会出现的问题
#include<stdio.h>
#include<stdlib.h>
#define N 4
int main(){
int i;
int arr[N]={};
for(i=0;i<N+20000;i++){
arr[i]=i;
printf("%d,arr[%d]=%d",i,i,a[i]);
}
for(i=0;i<N;i++){
printf("%d",a[i]);
printf("\n");
}
}
调试结果如图所示
杨辉三角(利用数组编写为)
#define N 6
#include<stdio.h>
int main(){
int i,j;
int a[N][N];
for(i=0;i<N;i++){
for(j=0;j<N;j++){
if(j==0||j==i)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
for(i=0;i<N;i++){
for(j=0;j<N-i;j++)
printf(" ");
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
调试结果如下图
手机屏幕转换原理类似如下
#define N 7
#include<stdio.h>
int main(void){
int a[N][N];
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
if(i==j||j==N-i-1)
a[i][j]=0;
if(j>i&&j<N-i-1)
a[i][j]=2;
if(j>i&&j>N-i-1)
a[i][j]=3;
if(j<i&&j>N-i-1)
a[i][j]=4;
if(j<i&&j<N-i-1)
a[i][j]=5;
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%d",a[i][j]);
printf("\n");
}
蛇形矩阵
#define N 100
#include<stdio.h>
int main(void){
int i,j,k;
int date=1;
int a[i][j];
for(i=j=k=0;k<(N+1)/2;k++){
while(j<N-k)
a[i][j++]=date++;
i++;
j--;
while(i<N-k)
a[i++][j]=date++;
i--;
j++;
while(j>=k)
a[i][j--]=date++;
i--;
j++;
while(i>k)
a[i--][j]=date++;
i++;
j++;
}
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%d",a[i][j]);
printf("\n");
}
将矩阵旋转90度
#define N 4
#include<stdio.h>
int main(void){
int arr[N][N]={1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4};
int a,b,c,d;
int i,j,k;//k代表圈数
for(i=j=k=0;k<(N=1)/2;k++)
a=b=k;
c=d=N-k-1;
for(i=0;i<d-b;i++){
int t=arr[a][b+i];
arr[a][b+i]=arr[c-i][b];
arr[c-i][b]=arr[c][d-i];
arr[c][d-i]=arr[a+i][d];
arr[a+i][d]=t;
}
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%d",a[i][j]);
printf("\n");
}
}