經典矩陣C語言
① 用c語言輸出以下矩陣 12345 23451 34512 45123 51234
#include<stdio.h>
voidmain()
{
inti,j,k,m;
for(i=1;i<=5;i++)
{
j=0;
for(k=0;k<=5;k++)
{
m=((i+j)%6);
if(m>0)
printf("%d",m);
j++;
}
printf(" ");
}
}
(ps: 望採納)
② c語言矩陣怎麼寫
方法1:直接定義10*10的數組,讀取全部數據,再根據選擇的行列數列印輸出部分數據。
方法2:通過文件流指針的移動,跨過不需要的內容。(這里控制文件流指針可利用ftell和fseek函數來移動指定位元組數)我是利用fscanf讀取需要的內容,遇到需要跳行就用fgets來跳過。(注意常量參數根據自己需求修改)。
說明:邊讀取邊列印輸出,就不需要變數存儲。我的代碼是把讀取出來的內容存放在三維數組中(文件內容你沒指定,如是單純數字,二維數組即可,我是作為字元串處理,故用三維數組。),數組是根據實際大小,動態申請,寫成兩個獨立函數。
下面是代碼:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAXR 10//文件中矩陣最大行
#define MAXC 10//文件中矩陣最大列
#define MS 3//矩陣中元素字元串最大字元數(包含結束符號,不可小於實際內容)
#define MBUF 100//文件中一行最大字元數,可設置大一點
char ***getMem(int r,int c,int len);//動態申請一個三維數組
void freeMem(char ***datas,int r,int c);//釋放數組空間
void showDatas(char ***datas,int r,int c);//列印輸出結果
int main()
{
int r=MAXR+1,c=MAXC+1,i=0,j=0;
char ***datas=NULL,str[3],buf[MBUF];
FILE *fp=NULL;
printf("請輸入要獲取的行數和列數: ");
while(r<0 || r>MAXR || c<0 || c>MAXC)scanf("%d%d",&r,&c);
datas=getMem(r,c,MS);
fp=fopen("C:\test.data","r");
if(!fp) return 1;
while(fscanf(fp,"%s",str)!=-1)
{
if(i<c) strcpy(datas[j][i],str),i++;
if(i==c)
{
if(!fgets(buf,sizeof(buf),fp)) break;
i=0,j++;
}
if(j==r) break;
}
showDatas(datas,r,c);
freeMem(datas,r,c);
return 0;
}
void showDatas(char ***datas,int r,int c)
{
int i,j;
for(i=0;i<r;i++,printf(" "))
for(j=0;j<c;j++)
printf("%s ",datas[i][j]);
printf(" ");
}
void freeMem(char ***datas,int r,int c)
{
int i,j;
if(!datas)
{
for(i=0;i<r;i++,free(datas[i]))
for(j=0;j<c;j++)
free(datas[i][j]);
free(datas);
}
}
char ***getMem(int r,int c,int len)
{
int i,j;
char ***datas=NULL,**dr=NULL;
datas=(char ***)malloc(sizeof(char **)*r);
if(!datas) return NULL;
for(i=0;i<r;i++)
{
dr=(char **)malloc(sizeof(char *)*c);
if(!dr) return NULL;
else
{
for(j=0;j<c;j++)
{
dr[j]=(char *)malloc(sizeof(char)*len);
if(!dr[j]) return NULL;
}
datas[i]=dr;
}
}
return datas;
}
③ c語言程序編寫 輸入一個4×3的整數矩陣,輸出其中最大值,最小值和他們的下標(行號和列號)
#include<stdio.h>
voidmain(){
intarr[4][3];
inti,j,min,max;
intr1=0,r2=0,c1=0,c2=0;
for(i=0;i<4;i++)//輸進二維數組
for(j=0;j<3;j++){
printf("Inputarr[%2d][%2d]:",i,j);
scanf("%d",&arr[i][j]);
}
max=arr[0][0];//令最大值初始化為arr[0][0]
min=arr[0][0];//令最小值初始化為arr[0][0]
printf("
--------Arr[][]----------
");//列印二維數組
for(i=0;i<4;i++){
printf("
");
for(j=0;j<3;j++)
printf("%5d",arr[i][j]);
}
if(arr[i][j]>max){//當arr[i][j]>max時,令max=arr[i][j],r1=i;c1=j
max=arr[i][j];
r1=i;
c1=j;
}
if(arr[i][j]<min){//當arr[i][j]<min時,令min=arr[i][j],r2=i;c2=j
min=arr[i][j];
r2=i;
c2=j;
printf("
Thisismax:%2d,r:%2d,c:%2d",max,r1,c1);
printf("
Thisismin:%2d,r:%2d,c:%2d",min,r2,c2);
printf("
");
}
(3)經典矩陣C語言擴展閱讀:
C語言編程時常犯的錯誤:
1 、書寫標識符時,忽略了大小寫字母的區別
main(){int a=5;printf("%d",A);}
編譯程序把a和A認為是兩個不同的變數名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字元。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。
2 、忽略了變數的類型,進行了不合法的運算
代碼如下:
main(){float a,b;printf("%d",a%b);}
%是求余運算,得到a/b的整余數。整型變數a和b可以進行求余運算,而實型變數則不允許進行「求余」運算。
3 、將字元常量與字元串常量混淆
char c;
c=」a」;
在這里就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。
C規定以「」作字元串結束標志,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a』和『』,而把它賦給一個字元變數是不行的。
④ c語言編程 輸入一個3*3的矩陣,列印該矩陣,並輸出該矩陣的對角元素
#include<stdio.h>
#defineM3
#defineN3
voidCreate_matrix(intmatrix[M][N],intm,intn){
inti,j;
printf("開始輸入矩陣內容(%d行%d列) ",m,n);
for(i=0;i<m;i++){
printf("輸入第%d行的%d個元素:",i+1,n);
for(j=0;j<n;j++)
scanf("%d",&matrix[i][j]);
}
}
voidPrint_matrix(intmatrix[M][N],intm,intn){
inti,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
printf("%d ",matrix[i][j]);
printf(" ");
}
}
voidPrint_matrix_diagonal(intmatrix[M][N],intm,intn){
inti,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++)
if(i==j||i+j==M-1)
printf("%d ",matrix[i][j]);
else
printf(" ");
printf(" ");
}
}
intmain(void){
intmatrix[M][N];
Create_matrix(matrix,M,N);
printf("====================================================== ");
printf("您輸入的矩陣為: ");
Print_matrix(matrix,M,N);
printf("對角線元素為: ");
Print_matrix_diagonal(matrix,M,N);
return0;
}
執行結果
⑤ C語言輸出4*5的數字矩陣 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15
#include<stdio.h>
intmain(void)
{
inti,j;
for(i=1;i<=4;++i)
{
for(j=1;j<=5;++j)
{
printf("%2d",i*j);
}
printf(" ");
}
return0;
}
⑥ C語言 關於矩陣
方法1:直接定義10*10的數組,讀取全部數據,再根據選擇的行列數列印輸出部分數據。
方法2:通過文件流指針的移動,跨過不需要的內容。(這里控制文件流指針可利用ftell和fseek函數來移動指定位元組數)我是利用fscanf讀取需要的內容,遇到需要跳行就用fgets來跳過。(注意常量參數根據自己需求修改)。
說明:邊讀取邊列印輸出,就不需要變數存儲。我的代碼是把讀取出來的內容存放在三維數組中(文件內容你沒指定,如是單純數字,二維數組即可,我是作為字元串處理,故用三維數組。),數組是根據實際大小,動態申請,寫成兩個獨立函數。
下面是代碼:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAXR 10//文件中矩陣最大行
#define MAXC 10//文件中矩陣最大列
#define MS 3//矩陣中元素字元串最大字元數(包含結束符號,不可小於實際內容)
#define MBUF 100//文件中一行最大字元數,可設置大一點
char ***getMem(int r,int c,int len);//動態申請一個三維數組
void freeMem(char ***datas,int r,int c);//釋放數組空間
void showDatas(char ***datas,int r,int c);//列印輸出結果
int main()
{
int r=MAXR+1,c=MAXC+1,i=0,j=0;
char ***datas=NULL,str[3],buf[MBUF];
FILE *fp=NULL;
printf("請輸入要獲取的行數和列數: ");
while(r<0 || r>MAXR || c<0 || c>MAXC)scanf("%d%d",&r,&c);
datas=getMem(r,c,MS);
fp=fopen("C:\test.data","r");
if(!fp) return 1;
while(fscanf(fp,"%s",str)!=-1)
{
if(i<c) strcpy(datas[j][i],str),i++;
if(i==c)
{
if(!fgets(buf,sizeof(buf),fp)) break;
i=0,j++;
}
if(j==r) break;
}
showDatas(datas,r,c);
freeMem(datas,r,c);
return 0;
}
void showDatas(char ***datas,int r,int c)
{
int i,j;
for(i=0;i<r;i++,printf(" "))
for(j=0;j<c;j++)
printf("%s ",datas[i][j]);
printf(" ");
}
void freeMem(char ***datas,int r,int c)
{
int i,j;
if(!datas)
{
for(i=0;i<r;i++,free(datas[i]))
for(j=0;j<c;j++)
free(datas[i][j]);
free(datas);
}
}
char ***getMem(int r,int c,int len)
{
int i,j;
char ***datas=NULL,**dr=NULL;
datas=(char ***)malloc(sizeof(char **)*r);
if(!datas) return NULL;
for(i=0;i<r;i++)
{
dr=(char **)malloc(sizeof(char *)*c);
if(!dr) return NULL;
else
{
for(j=0;j<c;j++)
{
dr[j]=(char *)malloc(sizeof(char)*len);
if(!dr[j]) return NULL;
}
datas[i]=dr;
}
}
return datas;
}