C++预学习

来源:互联网 发布:在淘宝上开网店程序 编辑:程序博客网 时间:2024/05/01 07:52

学习任务:
初步掌握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 0