数字矩阵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;
}