|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- /*用冒泡法对20个随机元素的数组排序*/
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- void mppx(int a[])
- {
- int i, j, t, s;
- s = sizeof(a) / sizeof(a[0]);
- for (i = 0; i < s; i++)
- {
- for (j = 0; j < (s - 1); j++)
- {
- if (a[j] >= a[j + 1])
- {
- t = a[j];
- a[j] = a[j + 1];
- a[j + 1] = t;
- }
- }
- }
- for (i = 0; i < s; i++)
- {
- printf("a[%d] = %d\n", i, a[i]);
- }
- }
- void main()
- {
- int b[19], i;
- srand(time(NULL));
- printf("排序之前\n");
- for (i = 0; i < 20; i++)
- {
- b[i] = rand() % 20;
- }
- for (i = 0; i < 20; i++)
- {
- printf("b[%d] = %-3d\n", i, b[i]);
- }
- printf("排序之后\n");
- mppx(b);//调用函数对=数组b进行排序
- }
复制代码
-----------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-cgfzor0y.cvw --stdout=Microsoft-MIEngine-Out-b3zzwf1o.v24 --stderr=Microsoft-MIEngine-Error-0irwvajd.iqa --pid=Microsoft-MIEngine-Pid-dutcx0ls.r0s --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
排序之前
b[0] = 8
b[1] = 15
b[2] = 15
b[3] = 13
b[4] = 0
b[5] = 13
b[6] = 18
b[7] = 14
b[8] = 11
b[9] = 1
b[10] = 5
b[11] = 14
b[12] = 7
b[13] = 14
b[14] = 7
b[15] = 11
b[16] = 0
b[17] = 2
b[18] = 9
b[19] = 19
排序之后
a[0] = 8
E:\Administrator\Documents\My C>
=================================
为什么不能正确输出排序后的数组,到底哪里出问题了??????????????
当将数组作为实参传递到一个函数中时,就是将数组的首地址作为实参,
函数的形参相当于一个指针,mppx函数里的sizeof(a)得到的是指针的大小为8,
而int大小为4,相除得2,所以你的程序只会排序前两个元素。
建议参考如下代码:
- /*用冒泡法对20个随机元素的数组排序*/
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- void mppx(int a[],int s)
- {
- int i, j, t;
-
- // printf("s=%d",s);
- for (i = 0; i < s; i++)
- {
- for (j = 0; j < (s - 1); j++)
- {
- if (a[j] >= a[j + 1])
- {
- t = a[j];
- a[j] = a[j + 1];
- a[j + 1] = t;
- }
- }
- }
- for (i = 0; i < s; i++)
- {
- printf("a[%d] = %d\n", i, a[i]);
- }
- }
- int main()
- {
- int b[19], i,s;
- srand(time(NULL));
- printf("排序之前\n");
- for (i = 0; i < 20; i++)
- {
- b[i] = rand() % 20;
- }
- for (i = 0; i < 20; i++)
- {
- printf("b[%d] = %-3d\n", i, b[i]);
- }
- printf("排序之后\n");
- s = sizeof(b) / sizeof(b[0]);
- mppx(b,s);//调用函数对=数组b进行排序
- return 0;
- }
复制代码
|
|