输入整数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; }