想要先輸入矩陣,再列印出矩陣,如果按1,則重新輸入,按0,繼續下一步。再把二維陣列num放入一維陣列b中,對b冒泡排序。輸出指定次序的元素。
#include<iostream>
#include "stdio.h"
using namespace std;
void firststep()
{
//輸入矩陣
int hang = 0, lie = 0, hangam = 0, lieam = 0;
cout << "請分別輸入矩陣的行和列(100以內)" << endl;
cin >> hangam >> lieam;
int num[100][100]; //!
cout << "請按順序輸入" << hangam * lieam << "個整數" << endl;
for (int hang = 0; hang < hangam; hang++)
{
for (int lie = 0; lie < lieam; lie++)
{
cin >> num[hang][lie];
}
}
//列印矩陣
cout << "您輸入的矩陣是:" << endl;
for (int hang = 0; hang < hangam; hang++)
{
for (int lie = 0; lie < lieam; lie++)
{
cout << num[hang][lie] << " \t";
}
cout << endl;
}
short press;
cout << "如輸入無誤,請按0" << endl << "如需回傳上一步,請按1" << endl;
cin >> press;
if (press == 1)
{
firststep();
}
else { cout << num[0][1]; }
};
int main()
{
int hang = 0, lie = 0, hangam = 0, lieam = 0;
int num[100][100];
firststep( );
//輸入序數
int ordinal = 0;
cout << "尋找第幾大的元素" << endl;
cin >> ordinal;
cout<<num[0][1]<<endl; //這時候為什么輸出的是地址,而不是值
//轉換成一維陣列
int b[10000] = {0};
int*p = b;
int len = hangam * lieam;
for (int i = 0; i < hangam; i++)
{
for (int j = 0; j < lieam; j++)
{
*(p + (i * lieam + j)) = num[i][j];
}
}
//冒泡排序
for (int k = 0; k < len - 1; k++)
{
for (int h = 0; h < len - k - 1; h++)
{
if (b[h] < b[h + 1])
{
int temp = b[h];
b[h] = b[h + 1];
b[h + 1] = temp;
}
}
}
cout << "第" << ordinal << "大的元素是: " << b[ordinal - 1] << endl; //這里輸出的b的值為什么是0?怎么改?
return 0;
};
uj5u.com熱心網友回復:
哦,我悟了。區域變數在函式使用完后就會被釋放,所以b這時候已經不是num中的值了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269975.html
標籤:新手樂園
上一篇:求助:檔案讀取時掃描到空行,希望空行也能輸出,應該怎么寫呢? 各位大佬
下一篇:已觸發了一個斷點問題怎么解決
