数组-二维数组生成
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define max 250
//动态分配数组空间
int **getarry(int row,int col){
int **arr;
arr = (int **)malloc(row * sizeof(int *));
for(int i=0;i<row;i++)
arr[i] = (int *)malloc(col * sizeof(int));
srand((unsigned)time(NULL));
return arr;
}
//数组赋值
int getdata(int **arr,int row,int col){
for(int i=0;i<row;i++){
for(int j=0;j<col;j++)
arr[i][j] = rand() % 10 + 1; //随机赋值
}
return 0;
}
//数组打印
void Print(int **arr,int row,int col){
printf("生成的是 %dX%d 的矩阵\n",row,col);
for(int i=0;i<row;i++){
for(int j=0;j<col;j++)
printf("%3d",arr[i][j]);
printf("\n");
}
}
//数组销毁
void Free(int **arr,int row){
for(int i=0;i<row;i++)
free(arr[i]);
free(arr);
}
int main(){
int row;
int col;
int data[max];
printf("请输入行row:");
scanf("%d",&row);
printf("请输入列col:");
scanf("%d",&col);
int **arr = getarry(row,col);
getdata(arr,row,col);
Print(arr,row,col);
Free(arr,3);
}
### 数组-矩阵运用
对称矩阵–【是否可生成判断版】
#include<stdio.h>
#include<stdlib.h>
#define max 250
//判断是否能形成对称矩阵
int judge(char a[],int n){
int a_len = 0;
int i = 0;
while(a[i]){
a_len ++;
i++;
}
if(a_len == (n * (1+n) / 2)) return 1;
else return 0;
}
//输出对称矩阵
void display(char a[],int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j<=i) printf("%5d",a[i * (i-1) / 2 + j-1]); //下三角输出
if(j>i) printf("%5d",a[j * (j-1) / 2 + i-1]); //上三角输出
}
printf("\n");
printf("\n");
}
}
int main(){
char a[max];
int n; //阶数
printf("请输入对称矩阵元素:");
scanf("%s",&a);
printf("请输入对称矩阵阶数:");
scanf("%d",&n);
if(judge(a,n)) display(a,n);
else printf("无法生成!\n");
return 0;
}
对称矩阵–[不足填 ‘0’版]
#include<stdio.h>
#include<stdlib.h>
#define max 250
//对称矩阵
//判断-改
void judge(char a[],int n){
int a_len = 0;
int i = 0;
while(a[i]){
a_len ++;
i++;
}
int pos = a_len;
if(a_len < (n * (1+n) / 2)){
for(int j=0; j<(n * (1+n) / 2)-a_len;j++){
a[pos] = '@';
pos ++;
}
}
}
//输出对称矩阵
void display(char a[],int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j<=i) printf("%5c",a[i * (i-1) / 2 + j-1]);
if(j>i) printf("%5c",a[j * (j-1) / 2 + i-1]);
}
printf("\n");
printf("\n");
}
}
int main(){
char a[max];
int n;
printf("请输入对称矩阵元素:");
scanf("%s",&a);
printf("请输入对称矩阵阶数:");
scanf("%d",&n);
judge(a,n);
display(a,n);
return 0;
}
下三角矩阵
#include<stdio.h>
#include<stdlib.h>
#define max 250
//判断字符是否足够生成矩阵
void judge(char a[],int n){
int a_len = 0;
int i = 0;
while(a[i]){
a_len ++;
i++;
}
int pos = a_len;
if(a_len <= (n * (1+n) / 2)){
for(int j=0; j<(n * (1+n) / 2)-a_len+1;j++){
a[pos] = '@'; //字符填充
pos ++;
}
}
}
//输出下三角矩阵
void display(char a[],int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j<=i) printf("%5c",a[i * (i-1) / 2 + j-1]);
if(j>i) printf("%5c",a[n*(n+1)/2]);
}
printf("\n");
printf("\n");
}
}
int main(){
char a[max];
char b;
int n;
printf("请输入下三角矩阵元素:");
scanf("%s",&a);
printf("请输入下三角矩阵阶数:");
scanf("%d",&n);
judge(a,n);
display(a,n);
return 0;
}