一维数组以及二维数组的使用心得

1个整数的排序。

1)要求

1)用一个数组存放各个整数

2)在主函数 main() 中实现数据的输入和输出操作,并用一个函数实现对数组元素的排序操作。

3 )排序函数为swap(inta[], intsize); (size为数组的长度)


算法如下:

第一步:从键盘输入5 个int数;

第二步:输出这五个数表示数已经被输入

第三步:调用排序算法(swap函数)对这5个数进行排序,并且输出这个5个排好序的数


以下是程序源代码加注释:

 

# include "iostream"

# include "cmath"

using namespace std;//头文件

void swap(int a[], int size); //排序函数声明

 

int *array= new int[5];//全局变量

 

void main()

{

         inti;

//动态分配内存空间

         cout<<"pleaseinput 5 nums int :"<<endl;

         for(i=0;i<5;i++)

                  cin>>array[i];//从键盘输入5个数

         cout<<"thereare 5 nums you inputed!!:"<<endl;

         for(i=0;i<5;i++)

         {

                  cout<<array[i]<<"  ";

         }//输出输入的五个数

         swap(array,5);//进行排序

         for(i=0;i<5;i++)

         {

                  cout<<array[i]<<"  ";

         }//输出排好序的5个数

}

void swap(int a[], int size)//排序函数

{

         inti,j;

         for(i=0;i

         {

                  for(j=i+1;j

                  {

                            if(a[i]//判断是否大于

                            {

                            a[i]= a[i] + a[j];

                            a[j]= a[i] - a[j];

                            a[i]= a[i] - a[j];//交换

                            }

                  }

         }

}

运行结果:

08002009_IF5I.jpg

心得:

    在排序算法中,冒泡法,选择法,插入法,快速法,shell法用的比较多,其中冒泡法中还有一种叫做沉底法的排序方法,在小程序中,这些排序方法大同小异,而当排序元素非常多的时候,百度一个快速法排序能节约很多时间。。。

参考资料:http://blog.csdn.net/xdw1985829/article/details/6699224


2.输入一个n×n的矩阵,求出两条对角线元素值之和以及输出矩阵中最大值和最小值的下标。

 

算法如下:

1.      先从键盘输入数组的大小N。

2.      使用随机值给数组元素赋值。

3.      调用函数_angelAdd1(int **p),_angelAdd2(int **p)来求对角线元素的值。

4.      调用 trixMax(int **p)来求最大值元素的下标。

5.      调用 trixMin(int **p)来求最小值元素的下标。

6.      输出对应的值。

 

代码如下:

 

#include

#include

#include

 

usingnamespace std;

 

int N = 0;//全局变量N,用于存储数组的大小

//函数原型声明

voidiniTrix(int **p);

int_angelAdd1(int **p);

int_angelAdd2(int **p);

int*trixMax(int **p);

int*trixMin(int **p);

void _output(int**p);

 

intmain()

{

    int i=0;//分配数组地址时用到的循环标志

    int flag=0;//switch的使用标志

    int *a;//用于装返回的下标的两个数

    cout<<"how big the trixis?"<<endl;

    cin>>N;

    int **p;

    p = new int *[N];

    for(i=0;i

        p[i] = new int[N];//分配数组大小

    cout<<"  input 1 to inittrix"<<endl<<" input 2 to output trix"<<endl<<"  input 3 to output the max num'sposition"<<endl<<" input 4 to output the min num's position"<<endl<<"  input 0 to exit"<<endl;

   cout<<"--------------------------------"<<endl;

        for(int oflag=0; oflag<100; oflag++)

            {

                cin>>flag;

                switch(flag)//将switch嵌套到for循环,实现多次操作

                {

                case 1:

                    iniTrix(p);

                    break;

                case 2:

                    _output(p);

                    break;

                case 3:

                    a=trixMax(p);

                    cout<<"the maxnum'positinis:"<<endl<<"("<<a[1]<<","<<a[2]<<")"<<endl;

                    break;

                case 4:

                    a=trixMin(p);

                    cout<<"the minnum'positinis:"<<endl<<"("<<a[1]<<","<<a[2]<<")"<<endl;

                    break;

                case 0:

                    exit(0);

                    break;

                default:

                    cout<<"don'tluanshuru OK??"<<endl;

 

                }

            }

    return 0;

}

 

voidiniTrix(int **p)//初始化数组

{

    srand(time(0));

    int i = 0, j = 0;

    for(i=0; i

    {

        for(j=0; j

        {

            p[i][j]=rand()0;

        }

    }

    cout<<"initsuccessfully!"<<endl;//初始化成功标志

}

 

int_angelAdd1(int **p)//从对角线(0,0)加到(N,N)

{

    int i=0, tmp=0;

    for(i=0; i

    {

        tmp+=p[i][i];

    }

    return tmp;

}

 

int_angelAdd2(int **p)//从对角线(0,N)加到(N,0)

{

    int i=0, j=0, tmp=0;

    for(i=0; i

    {

        for(j=N-1; j>=0; j++)

        {

            tmp += p[i][j];

        }

    }

    return tmp;

}

 

int*trixMax(int **p)//求数组中最大数的下标

{

    int *a;

    a = new int[2];

    int i=0,j=0,tmp=0;

    for(i=0;i

    {

        for(j=0; j

        {

            if(p[i][j]>tmp)

            {

                tmp = p[i][j];

                a[1]=i;

                a[2]=j;

            }

        }

    }

    return a;

}

 

int*trixMin(int **p)//求数组元素最小值得下表

{

    int *a;

    a = new int[2];

    int i=0,j=0,tmp=100;

    for(i=0;i

    {

        for(j=0; j

        {

            if(p[i][j]<=tmp)

            {

                tmp = p[i][j];

                a[1]=i;

                a[2]=j;

            }

        }

    }

    return a;

}

 

void_output(int **p)//遍历数组并输出数组元素

{

    int i=0, j=0;

    cout<<"----This is the trixcreated!-----"<<endl;

    for(i=0; i

    {

        for(j=0;j

        {

            cout<<p[i][j]<<"";

        }

        cout<<endl;

    }

   cout<<"-----------------------------------"<<endl;

}

运行结果:

08002010_TDtz.jpg

08002011_WreR.jpg

08002011_JEKy.jpg

总结:

  这道题是一个对二位数组的定义以及操作,其中用到了C++中动态分配new的使用方法,特别值得注意的是要理解指针的指针这个概念。指针在C/C++中使用方式特别灵活,用好的话能节约大部分空间,还能提高代码运行效率。另外指针在函数的使用中,若是函数要返回一个数组,则可以通过传递数组指针的方式来返回其值。

   能够更好的使用指针是 是否能更加充分的掌握C++这门语言的一个评判标准,下面列举一些常用的比较难理解的指针方式:

1.      int*a[10];     //指针数组 

2.      int  (*a)[10];  //数组指针

3.      int(*a)(int);      //函数指针

4.      int(*a[10])(int);    //函数指针数组

5.      int*a,**a;     //指针和指向指针的指针

6.      charstr[];    //字符串数组

7.      char*str, **str;   //字符指针和和指向字符串的指针

 

什么叫做函数指针数组:

如果一个指针指向某个函数,那么它便是函数指针。有时候我们如果需要在一个循环中,每次调用不同的函数(这些函数的返回值和参数相同,函数名不同,实现不同),那么就可以使用函数指针数组来使代码更加简练和易读。



转载于:https://my.oschina.net/qkmc/blog/654859

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值