要求:
初步掌握visual studio 2015 中控制台c程序的建立。
初步掌握visual studio 2015 中控制台c程序的建立。
结合课本讲解指针概念;指针上机练习。讲解动态分配和释放。一维指针动态分配和释放练习。二维指针概念讲解,二维指针动态分配和释放练习。
作业:矩阵乘法
用户输入矩阵1行数、列数,然后提示用户输入各元素;
用户输入矩阵2行数、列数,然后提示用户输入各元素;
输入后计算相乘结果矩阵。
用户输入矩阵1行数、列数,然后提示用户输入各元素;
用户输入矩阵2行数、列数,然后提示用户输入各元素;
输入后计算相乘结果矩阵。
要求:
1 自己安装Visual studio 2015. 从微软官网上下载visual studio 2015 (Community edition),然后申请序列号(免费),安装。
2.建立控制台应用程序。(上网查怎么建立)
3.使用二维指针及动态分配,完成作业,掌握指针和结构、文件的结合使用。
二维指针:int **p p是指向(一组指向整数数据指针)的指针,是一个二维指针。在其定义过程中,编译器并不对其进行内存的分配,因此必须自己管理其内存的分配与释放。内存分配如下:
p = (int **)malloc((sizeof(int*))*m);
for (i=0;i<m;i++)
{
p[i] = (int *)malloc(sizeof(int)*n);
}
动态内存释放过程与分配相反:
for (i=0;i<m;i++)
{
free(p[i]);
}
free(p);
下面的表达是成立的:
p[i][j] = *(*(p + i) + j)
*p 表示指针p存放的内容值,在定义指针时, *只是为了声明。
#include <stdio.h>
#include <malloc.h>
int main()
{
int n1, n2, m1, m2;
float **p1,**p2,**p3; //定义三个二维指针
float val,valu;
printf("please input the size of first matrix:");
scanf_s("%dx%d", &m1, &n1); //输入第一个矩阵的行数和列数
p1 = (float **)malloc(m1* sizeof(float *)); //动态内存分配
for (int i = 0; i < m1; i++)
{
p1[i] = (float *)malloc(n1 * sizeof(float));
}
printf("please input the size of second matrix:");
scanf_s("%dx%d", &m2, &n2);
p2 = (float **)malloc(m2 * sizeof(float *));
for (int i = 0; i < m2; i++)
{
p2[i] = (float *)malloc(n2 * sizeof(float));
}
p3 = (float **)malloc(m1 * sizeof(float *));
for (int i = 0; i < m1; i++)
{
p3[i] = (float *)malloc(n2 * sizeof(float));
}
printf("please input the first matrix:\n");
for (int i = 0; i < m1; i++)
{
for (int j = 0; j < n1; j++)
{
scanf_s("%f", &val);
*(*(p1 + i) + j) = val;
}
}
printf("please input the second matrix:\n");
for (int i = 0; i < m2; i++)
{
for (int j = 0; j < n2; j++)
{
scanf_s("%f", &val);
*(*(p2 + i) + j) = val;
}
}
//矩阵乘法运算
for (int i = 0; i < m1; i++)
{
for (int j = 0; j < n2; j++)
{
valu = 0;
for (int k = 0;k < m1; k++)
{
valu += p1[i][k] * p2[k][j];
}
*(*(p3 + i) + j) = valu;
}
}
//矩阵输出
printf("output matrix1 is:\n");
for (int i = 0; i < m1; i++)
{
for (int j = 0; j < n1; j++)
{
printf("%f ", *(*(p1 + i) + j));
}
printf("\n");
}
printf("output matrix2 is:\n");
for (int i = 0; i < m2; i++)
{
for (int j = 0; j < n2; j++)
{
printf("%f ", *(*(p2 + i) + j));
}
printf("\n");
}
//输出计算结果
printf("output matrix is:\n");
for (int i = 0; i < m1; i++)
{
for (int j = 0; j < n2; j++)
{
printf("%f ", *(*(p3 + i) + j));
}
printf("\n");
}
//释放动态内存空间
for (int i = 0; i < m1; i++)
{
free(*(p1+i));
}
free(p1);
for (int i = 0; i < m2; i++)
{
free(p2[i]);
}
free(p2);
for (int i = 0; i < m1; i++)
{
free(p3[i]);
}
free(p3);
getchar();
//暂停,输入回车结束
getchar();
return 0;
}