C++预学习

学习任务:
初步掌握visual studio 2013 中控制台c程序的建立。
结合课本讲解指针概念;指针上机练习。
讲解动态分配和释放。 malloc/free.
一维指针动态分配和释放练习。
二维指针概念讲解。二维指针动态分配和释放练习。
作业:矩阵乘法
用户输入矩阵1行数、列数,然后提示用户输入各元素;
用户输入矩阵2行数、列数,然后提示用户输入各元素;
输入后计算相乘结果矩阵。

/********************************************
二维指针概念讲解。二维指针动态分配和释放练习。
作业:矩阵乘法
用户输入矩阵1行数、列数,然后提示用户输入各元素;
用户输入矩阵2行数、列数,然后提示用户输入各元素;
输入后计算相乘结果矩阵
*********************************************/
#include<stdio.h>
#include<stdlib.h>

void showhelp( int* row , int* column );
void matrix_input( int** a , int row , int column );
void matrix_mulp( int** a , int** b , int row1 , int column1 , int row2 , int column2 );

int main( )
{

    int **A = NULL , **B = NULL;                   //指针初始化
    int row1  , column1 , row2 , column2;       

    showhelp( &row1 , &column1 );                 
    A = ( int** ) malloc( sizeof( int* ) * row1 );
    A[0] = ( int* ) malloc( sizeof( int ) * row1 * column1 );
    matrix_input( A , row1 , column1 );

    showhelp( &row2 , &column2 );
    B = ( int** ) malloc( sizeof( int* ) * row2 );
    B[0] = ( int* ) malloc( sizeof( int ) * row2 * column2 );
    matrix_input( B , row2 , column2 );

    matrix_mulp( A , B , row1 , column1 , row2 , column2 );
    free( A[0] );
    free( A );
    free( B[0] );
    free( B );
}
/***********************************************
函数名称:showhelp
函数参数:两个整型指针分别代表矩阵的行和列
调用函数:无
返回参数:无
************************************************/
void showhelp( int* row , int* column )
{
    printf( "please input the row and column of the matrix:\n" );
    printf( "row= " );
    scanf_s( "%d" , row );
    printf( "column= " );
    scanf_s( "%d" , column );
}
/***********************************************
函数名称:matrix_input
函数参数:存储矩阵的首地址,矩阵的行数、列数
调用函数:无
返回参数:无
************************************************/
void matrix_input( int** a , int row , int column )
{
    int i , j;
    int** p;

    for( i = 1; i < row; i++ )                         //内存分配
    {
        a[i] = a[i - 1] + column;
    }
    for( i = 0; i < row; i++ )
    {
        for( j = 0; j < column; j++ )
        {
            scanf_s( "%d" , ( a[i] + j ) );            //没有完全当成数组用,也可以写成&a[i][j]
        }
    }

    printf( "The matrix you input is as followed:\n" );
    for( i = 0; i < row; i++ )
    {
        for( j = 0; j < column; j++ )
        {
            printf( "%d " , *( a[i] + j ) );          //和上面一样,也可以写成a[i][j]
        }
        printf( "\n" );
    }
}

/***********************************************
函数名称:matrix_mulp
函数参数:两相乘矩阵的首地址,两矩阵的行数、列数
调用函数:无
返回参数:无
函数功能:计算两已知矩阵的积并显示在屏幕上
************************************************/
void matrix_mulp( int** a , int** b , int row1 , int column1 , int row2 , int column2 )
{
    int s , arow , acolumn , brow , bcolumn;
    printf( "The result is as follows:\n" );
    for( arow = 0; arow < row1; arow++ )
    {
        for( bcolumn = 0; bcolumn < column2; bcolumn++ )
        {
            s = 0;
            acolumn = 0;
            for( brow = 0; brow <row2; )
            {
                s = s + ( *( a[arow] + acolumn ) ) * ( *( b[brow] + bcolumn ) );
                acolumn++;
                brow++;
            }
            printf( "%d " , s );
        }
        printf( "\n" );
    }
}

现在来看,第一个作业是写得比较糟糕的,内存的释放有问题,内存申请的时候也不明晰,总之,有待改进的地方,不过是第一次,总归慢慢来。
千里之行始于足下!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值