对二维数组每一行用从小到大排序
#include <stdio.h>
#include <string.h>
void Sort (int *Array,int n);
int main()
{ int hang,lie,i=0,j=0;
printf("请输入行数和列数:");
scanf("%d %d",&hang,&lie);
int a[80][80];
printf("请输入您的数组:");
for(i=0;i<hang;i++)
{ for(j=0;j<lie;j++)
{
scanf("%d",a[i][j]);
}
}
int *p=a[0];
Sort(p,lie);
for(i=0;i<hang;i++)
{ for(j=0;j<lie;j++)
{
printf("%d",a[i][j]);
}
}
}
void Sort (int *Array,int n){
int i,j,k,l,tem,o=0;
while(*(Array+o)!=0)
{
for(i=0;i<n-1;i++)
{for(j=0;j<n-1-i;j++)
{
if(*(*(Array+o)+j)>*(*(Array+o)+j+1))
{
int tmp = *(*(Array+o)+j);
*(*(Array+o)+j) = *(*(Array+o)+j+1);
*(*(Array+o)+j+1) = tmp;
}
}
}
}
o++;
}
问题:Sort函数里面引用指针的时候一直报错 [Error] invalid type argument of unary '*' (have 'int')
请问有什么问题?代码这样写可以吗?
#include <stdio.h>
#include <string.h>
void Sort(int *Array, int n);
int main()
{
int hang, lie, i = 0, j = 0;
printf("请输入行数和列数:");
scanf("%d %d", &hang, &lie);
int a[80][80];
printf("请输入您的数组:");
for (i = 0; i < hang; i++)
{
for (j = 0; j < lie; j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = 0; i < hang; i++)
{
Sort(a[i], lie);
}
for (i = 0; i < hang; i++)
{
for (j = 0; j < lie; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
void Sort(int *Array, int n)
{
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (Array[j] > Array[j + 1])
{
int tmp = Array[j];
Array[j] = Array[j + 1];
Array[j + 1] = tmp;
}
}
}
}
#include <stdio.h>
#include <string.h>
void Sort(int *Array, int n);
int main()
{
int hang, lie, i = 0, j = 0;
printf("请输入行数和列数:");
scanf("%d %d", &hang, &lie);
int a[80][80];
printf("请输入您的数组:");
for (i = 0; i < hang; i++)
{
for (j = 0; j < lie; j++)
{
scanf("%d", &a[i][j]);
}
}
int *p = a[0];
Sort(p, lie);
for (i = 0; i < hang; i++)
{
for (j = 0; j < lie; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
void Sort(int *Array, int n)
{
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (Array[j] > Array[j + 1])
{
int tmp = Array[j];
Array[j] = Array[j + 1];
Array[j + 1] = tmp;
}
}
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:根据问题描述,错误提示是:[Error] invalid type argument of unary '*' (have 'int')。这个错误通常是由于指针类型不匹配导致的。根据提供的代码,这个错误是在调用sortRow
函数时发生的,因此我们需要检查sortRow
函数和函数调用的代码来找出问题。
首先,让我们来看一下sortRow
函数的实现:
void sortRow(int *row, int size) {
// 在这里实现对一维数组row的排序
// 使用合适的排序算法,例如冒泡排序或快速排序
}
根据代码,sortRow
函数接受一个指向整型的指针row
以及一个整型参数size
来表示该行的元素个数。函数中注释提到了需要使用合适的排序算法来对一维数组row
进行排序。
接下来,让我们来看一下main
函数中对sortRow
函数的调用:
for (int i = 0; i < 3; i++) {
sortRow(matrix[i], 4);
}
sortRow
函数被循环调用了三次,每次传入一个行的起始地址,并且传入了大小为4的整数作为第二个参数。
根据错误提示,*
运算符被应用于一个整数类型。这是因为在sortRow
函数调用中,传递给sortRow
函数的参数类型是int
,而sortRow
函数期望接受一个指向整型的指针。
解决这个问题的方法是将sortRow
函数的参数类型更改为int*
,以确保指针类型的匹配。具体更改如下:
void sortRow(int* row, int size) {
// 在这里实现对一维数组row的排序
// 使用合适的排序算法,例如冒泡排序或快速排序
}
对应的main
函数代码不需要做任何修改。
然后,我们需要实现对一维数组进行排序的逻辑。这里可以选择使用常见的排序算法,如冒泡排序或快速排序。以下是使用冒泡排序算法的示例代码实现:
void sortRow(int* row, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (row[j] > row[j + 1]) {
int temp = row[j];
row[j] = row[j + 1];
row[j + 1] = temp;
}
}
}
}
在这个示例代码中,我们使用了冒泡排序算法对一维数组进行排序。排序的过程是通过比较相邻的元素并交换来实现的。
最后,我们来完成main
函数的代码。在排序完成后,我们可以通过循环遍历二维数组,并输出每一行的元素来验证排序是否成功:
int main() {
int matrix[3][4] = {
{9, 8, 7, 6},
{5, 4, 3, 2},
{1, 0, -1, -2}
};
for (int i = 0; i < 3; i++) {
sortRow(matrix[i], 4);
}
// 输出排序后的二维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
这段代码会依次对每一行调用sortRow
函数,并且在排序完成后输出排序后的二维数组。你可以运行代码并观察输出结果来验证排序是否成功。
希望这个解答对你有帮助!如果你还有其他问题,请随时提问。