//从键盘输入R行C列二维整型数组,找出每一行的次最大值并显示出来。要求:
//
//(1)R和C为符号常量;
//
//(2)二维数组是动态申请生成的;
//
//(3)每一行的次最大值是利用单独的函数调用获得的;
//
//(4)对数组元素的访问以及函数参数声明等都是利用指针实现的。
#include "stdio.h"
#include "iostream"
#include "string.h"
#define R 2
#define C 4
using namespace std;
void cmax(int* q, int k, int h);
int main(int argc, char* argv[])
{
cout << "请输入" << R << "行" << C << "列的数组:";
int i, j;
int(*p)[C];
p = new int[R][C];
for (i = 0; i < R; i++)
for (j = 0; j < C; j++)
cin >> *(*(p + i) + j);
if (C < 2) cout << "每行无次最大值!";
else for (i = 0; i < R; i++)
cmax(*(p + i), C, i);
delete []p;
return 0;
}
void cmax(int* q, int k, int h)
{
int r, s, temp, flag = 0;
for (r = 0; r < C - 1; r++)
{
for (s = 0; s < C - r - 1; s++)
{
if (*(q + s) > * (q + s + 1))
{
temp = *(q + s);
*(q + s) = *(q + s + 1);
*(q + s + 1) = temp;
}
}
}
r = C - 1;
while (r > 0)
{
if (*(q + r) != *(q + r - 1))
{
cout << "第" << h + 1 << "行的次最大值为:" << *(q + r - 1) << '\n';
flag = 1;
break;
}
if (r = 1) cout << "第" << h + 1 << "行无次最大值" << '\n';
r--;
}
}
C++的作业一
- 二维数组在内存里是以先行后列的形式储存的。若指针p指向数组a[0][0],则p+1指向a[1][0],a[i][j]用指针表示则为*(*(p+i)+j)。
- C中通过malloc()和free()两个函数进行内存的申请和释放,C++中用new和delete两个运算符进行内存的申请和释放。
- 为了方便找到此最大值,直接用了冒泡排序,方便处理无次最大值等情况。