|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 奥普瓯江 于 2018-1-11 15:55 编辑
给矩阵赋值会出现错误不能赋值到指定位置应该赋值给第一行第五个但是他却斜向赋值了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void welcome(void);
int my_scanf(void);
int *matrix(void);
int my_printf(int *ppt);
void my_tow(int *ptr);
void my_three(int *ptr);
void welcome()
{
printf("============================\n");
printf("*欢迎使用该程序,指令如下 *\n");
printf("*1.生成一个 M*N 的矩阵 *\n");
printf("*2.初始化矩阵 *\n");
printf("*3.给矩阵中某个元素赋值 *\n");
printf("*4.读取矩阵中某个元素 *\n");
printf("*5.打印整个矩阵 *\n");
printf("*6.结束程序 *\n");
printf("============================\n");
}
int my_scanf(void)
{
int num;
printf("请输入一个指令: ");
scanf("%d", &num);
if (num < 1 || num > 6)
{
printf("你输入的数字错误请从新输入");
}
return num;
}
int *matrix(void)
{
static int *full = NULL;
static int i, j;
printf("请输入新矩阵规模(M * N) ->");
scanf("%d*%d", &i, &j);
full = (int *)realloc(full, sizeof(int) * (i * j + 2));
if(full == NULL)
{
printf("你的矩阵未创建成功");
exit(1);
}
else
{
printf("%d*%d的矩阵以创建成功", i, j);
}
full[0] = i;
full[1] = j;
return full;
}
void my_tow(int *ptr)
{
int n = ptr[0];
int m = ptr[1];
int *matrix = ptr + 2;
int num;
printf("你想出使化指针的数值是多少 ->");
scanf("%d", &num);
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
*((matrix + i) + j) = num;
}
}
}
void my_three(int *ptr)
{
int i, j;
int number;
printf("请输入要修改的位置(行,列) ->");
scanf("%d*%d", &i, &j);
putchar('\n');
printf("请输入一个数字:");
scanf("%d", &number);
putchar('\n');
*((ptr + i - 1) + (j + 1)) = number;
}
int my_printf(int *ptr)
{
int n = ptr[0];
int m = ptr[1];
int *matrix = ptr + 2;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
/*printf("%-3d",matrix[i * j]);*/
printf("%-3d", *((matrix + i) + j));
}
putchar('\n');
}
}
int main(void)
{
welcome();
int i;
int *ptr = NULL;
while((i = my_scanf()) != 6)
{
switch(i)
{
case 1 :
{
ptr = matrix();
putchar('\n');
putchar('\n');
break;
}
case 2 :
{
my_tow(ptr);
putchar('\n');
putchar('\n');
break;
}
case 3 :
{
my_three(ptr);
putchar('\n');
putchar('\n');
break;
}
case 4 :
{
my_printf(ptr);
putchar('\n');
break;
}
case 5 :
{
my_printf(ptr);
putchar('\n');
break;
}
}
}
return 0;
}
这个程序我又改了一下成为了现在这样但是还是不对,想请教一下大神给解答一下、
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void welcome(void);
int my_scanf(void);
int *my_matrix(void);
int my_printf(int *ptr);
void my_tow(int *ptr);
void my_three(int *ptr);
void welcome()
{
printf("============================\n");
printf("*欢迎使用该程序,指令如下 *\n");
printf("*1.生成一个 M*N 的矩阵 *\n");
printf("*2.初始化矩阵 *\n");
printf("*3.给矩阵中某个元素赋值 *\n");
printf("*4.读取矩阵中某个元素 *\n");
printf("*5.打印整个矩阵 *\n");
printf("*6.结束程序 *\n");
printf("============================\n");
}
int my_scanf(void)
{
int num;
printf("请输入一个指令: ");
scanf("%d", &num);
if (num < 1 || num > 6)
{
printf("你输入的数字错误请从新输入");
}
return num;
}
int *my_matrix(void)
{
static int *full = NULL;
int i, j;
printf("请输入新矩阵规模(M * N) ->");
scanf("%d*%d", &i, &j);
full = (int *)realloc(full, sizeof(int) * (i * j + 2));
if(full == NULL)
{
printf("你的矩阵未创建成功");
exit(1);
}
else
{
printf("%d*%d的矩阵以创建成功", i, j);
}
full[0] = i;
full[1] = j;
return full;
}
void my_tow(int *ptr)
{
int n = ptr[0];
int m = ptr[1];
int *matrix = ptr + 2;
int num;
printf("你想出使化指针的数值是多少 ->");
scanf("%d", &num);
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
*((matrix + j) + i) = num;
}
}
}
void my_three(int *ptr)
{
int x, y;
int number;
int *matrix = ptr + 2;
printf("请输入要修改的位置(行,列) ->");
scanf("%d,%d", &x, &y);
putchar('\n');
printf("请输入一个数字:");
scanf("%d", &number);
putchar('\n');
*((matrix + (x - 1)) + (y - 1)) = number;
}
int my_printf(int *ptr)
{
int n = ptr[0];
int m = ptr[1];
int *matrix = ptr + 2;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
printf("%-3d", *((matrix + i) + j));
}
putchar('\n');
}
}
int main(void)
{
welcome();
int i;
int *ptr = NULL;
while((i = my_scanf()) != 6)
{
switch(i)
{
case 1 :
{
ptr = my_matrix();
putchar('\n');
putchar('\n');
break;
}
case 2 :
{
my_tow(ptr);
putchar('\n');
putchar('\n');
break;
}
case 3 :
{
my_three(ptr);
putchar('\n');
putchar('\n');
break;
}
case 4 :
{
my_printf(ptr);
putchar('\n');
break;
}
}
}
free(ptr);
return 0;
}
我用手机回的帖子,你试试看对不对
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void welcome(void);
int my_scanf(void);
int *my_matrix(void);
int my_printf(int *ptr);
void my_tow(int *ptr);
void my_three(int *ptr);
void welcome()
{
printf("============================\n");
printf("*欢迎使用该程序,指令如下 *\n");
printf("*1.生成一个 M*N 的矩阵 *\n");
printf("*2.初始化矩阵 *\n");
printf("*3.给矩阵中某个元素赋值 *\n");
printf("*4.读取矩阵中某个元素 *\n");
printf("*5.打印整个矩阵 *\n");
printf("*6.结束程序 *\n");
printf("============================\n");
}
int my_scanf(void)
{
int num;
printf("请输入一个指令: ");
scanf("%d", &num);
if (num < 1 || num > 6)
{
printf("你输入的数字错误请从新输入");
}
return num;
}
int *my_matrix(void)
{
static int *full = NULL;
int i, j;
printf("请输入新矩阵规模(M * N) ->");
scanf("%d*%d", &i, &j);
full = (int *)realloc(full, sizeof(int) * (i * j + 2));
if(full == NULL)
{
printf("你的矩阵未创建成功");
exit(1);
}
else
{
printf("%d*%d的矩阵以创建成功", i, j);
}
full[0] = i;
full[1] = j;
return full;
}
void my_tow(int *ptr)
{
int n = ptr[0];
int m = ptr[1];
int *matrix = ptr + 2;
int num;
printf("你想出使化指针的数值是多少 ->");
scanf("%d", &num);
/*for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
*((matrix + j) + i) = num;
}
}*/
//你在创建内存空间的时候是1维数组,赋值按1维赋值就可以了
for (i=0;i<m*n;i++)
{
*(matrix+i)=num;
}
}
void my_three(int *ptr)
{
int x, y;
int number;
int *matrix = ptr + 2;
printf("请输入要修改的位置(行,列) ->");
scanf("%d,%d", &x, &y);
putchar('\n');
printf("请输入一个数字:");
scanf("%d", &number);
putchar('\n');
//*((matrix + (x - 1)) + (y - 1)) = number; 需要行的值*x-1
*(matrix+((x-1)*ptr[0])+(y))=number;
}
int my_printf(int *ptr)
{
int n = ptr[0];
int m = ptr[1];
int *matrix = ptr + 2;
/*for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
printf("%-3d", *((matrix + i) + j));
}
putchar('\n');
}*/
for(int i=0;i<n*m;i++)
{
printf("%-3d", *(matrix + i);
}
putchar('\n')
}
int main(void)
{
welcome();
int i;
int *ptr = NULL;
while((i = my_scanf()) != 6)
{
switch(i)
{
case 1 :
{
ptr = my_matrix();
putchar('\n');
putchar('\n');
break;
}
case 2 :
{
my_tow(ptr);
putchar('\n');
putchar('\n');
break;
}
case 3 :
{
my_three(ptr);
putchar('\n');
putchar('\n');
break;
}
case 4 :
{
my_printf(ptr);
putchar('\n');
break;
}
}
}
free(ptr);
return 0;
}
|
|