數字矩陣c語言
1. c語言給出一個N階數字矩陣,求其邊上數字的和。
這個樣子你試一下:
#include "stdio.h"
int number[1000][1000];
int main()
{ int n;
scanf("%d",&n);
for(int i=0; i<n; ++i)
{ for(int j=0; j<n; ++j)
{ scanf("%d",&number[i][j]);
}
}
int sum=0;
for(int k=0; k<n; ++k)
{ if(n==1)
{ sum=sum+number[0][0];
}
else
{ sum=sum+number[0][k]+number[n-1][k];
}
}
for(int f=1; f<n-1; ++f)
{ sum=sum+number[f][0]+number[f][n-1];
}
printf("%d ",sum);
return 0;
}
2. 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("
");
}
(2)數字矩陣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』和『』,而把它賦給一個字元變數是不行的。
3. 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;
}
4. c語言 從鍵盤輸入一個4*4整數矩陣
#define N 4
void main()
{
int a[N][N];
int i,j,max,p,q;
printf("輸入4*4矩陣:\n");
for(i=0;i<N;i++)
for (j=0;j<N;j++)
scanf("%d",&a[i][j]);
printf("輸入的矩陣為:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++) printf("%4d",a[i][j]);
printf("\n");
}
max=a[1][0];
p=1;q=0;
for(i=1;i<N;i++)
for(j=0;j<i;j++)
if(a[i][j]>max)
{
max=a[i][j];
p=i;q=j;
}
a[q][p]=max;
printf("處理以後的矩陣為:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++) printf("%4d",a[i][j]);
printf("\n");
}
}
5. C語言,幫忙看下這道二維數組題,輸入的矩陣怎麼原樣輸出啊
在printf("轉置矩陣A︐為:\n");的上面加上:
printf("原矩陣A為:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");
}
6. 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;
}
7. 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;
}