输入整数n,动态分配保存n个整数的存储器,然后输入n个整数保存到存储器中。最后,将这n个整数从小到大输出。
输入:10回车;10 9 8 7 6 5 4 3 2 1回车
输出:1,2,3,4,5,6,7,8,9,10
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, * p=0,i;
int j, k,max;
scanf_s("%d", &n);
p = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
scanf_s("%d", p+i);
for (j = 0; j < n-1; j++) {
for (k = 0; k < n - j - 1; k++) {
if (p[k] > p[k + 1]) {
max = p[k];
p[k] = p[k + 1];
p[k + 1] = max;
}
}
}
for (i = 0; i < n; i++) {
if (i != n - 1)
printf("%d,",p[i]);
else printf("%d", p[i]);
}
return 0;
}
上面的代码虽然用到了指针和动态内存分配,但是任然没有脱离数组的想法,如用p[0]表示数组的第一个元素。实际上,这时候用*p会更好。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, * p=0,i;
int j, k,max;
scanf_s("%d", &n);
p = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
scanf_s("%d", p+i);
for (j = 0; j < n - 1; j++) {
for (k = 0; k < n - j - 1; k++) {
if (p[k] > p[k + 1]) {
max = p[k];
p[k] = p[k + 1];
p[k + 1] = max;
}
}
}
for (i = 0; i < n; i++) {
if (i != n - 1)
printf("%d,",*p);
else printf("%d", *p);
p++;
}
return 0;
}
原文:https://www.cnblogs.com/Akizuki-Kanna/p/14801705.html