首页 > 信息互动 > > 正文
2023-10-24 14:12:05

excel自动排序函数(排序函数)

导读 大家好,我是小夏,我来为大家解答以上问题。excel自动排序函数,排序函数很多人还不知道,现在让我们一起来看看吧!1、1、一群菜鸟不懂的...

大家好,我是小夏,我来为大家解答以上问题。excel自动排序函数,排序函数很多人还不知道,现在让我们一起来看看吧!

1、

1、一群菜鸟不懂的乱说。

2、我把楼主的代码改了一些,如下

3、#include<stdio.h>

4、int input(int data[], int argc, int *n) {  int i;  printf("请输入要输入数的个数");  scanf("%d", n);  if(*n > argc) {   printf("segment fault!");   return -1;  }  for(i = 0; i < *n; i++) {   printf("输入的第%d个数.", i+1);   scanf("%d", data+i); //canf("%d", &data[i]);  }  printf("输入的数是: ");  for(i = 0; i < *n; i++) {   printf("%5d ", data[i]);  }  return 0; }

5、void sort(int n, int data[]) {  int i, j, temp;  for(i = 0; i < n-1; i++) {   for(j = i+1; j < n; j++)    if(data[i] < data[j]) {     temp = data[i];     data[i] = data[j];     data[j] = temp;    }  }  printf("排序后的结果如下: ");  for(i = 0; i < n; i++)   printf("%5d ", data[i]); }

6、int main() {  int data[100];  int n;  if(input(data, 100, &n) == -1)   return -1;  sort(n, data);  return 0; }

7、对于以上代码,做出如下解释:

8、(1)C语言的参数有形参和实参的说法,形参在传递到函数内的时候,复制一个副本给函数,在函数内部和外部是两个完全不同的变量,函数结束,空间也被释放,所以不能在函数内部来改变外部的值。所以要像楼主这样用一个函数给一个变量赋值,要用实参int input(int data[], int argc, int *n)中的int *n就是实现形式,这种办法把n的地址传递给函数。当然,在调用函数的时候也同样要传递地址指针类型(&n)。

9、(2)

10、if(*n > argc) {   printf("segment fault!");   return -1;  }

11、这一段是我加进去的,因为按照楼主的意思,data数组的长度也要传递进去,但是意思何在?所以只好加了这一段,并把函数改为有类型的,以检验是否有数据溢出。

12、(3)scanf("%d", data+i); //scanf("%d", &data[i]);

13、这里我改动的主要原因是为了提升程序速度,scanf("%d", &data[i]);同样可以运行,但是寻址一次,又回头要地址,这样绕了一圈,没有必要。

14、对于楼主提几点建议:

15、(1)C语言的精髓在于指针,刚才说到的实参,就是用指针的概念实现的。scanf("%d", data+i); 一行,同样也是把数组头指针加上偏移地址,得到所要的地址。

16、(2)C语言编程的时候特别要注意数据的溢出,这是所有初学者头疼的问题之一。建议在一开始就养成习惯,经常检验数组的边界。

17、(3)void main一看就知道是看潭浩强的书长大的程序员。建议我们都用int main(){ return 0; }的形式,可以看看C语言之父K&R的书。主函数的返回值是告诉操作系统,这个函数是正常退出(返回0),还是异常退出(非0,经常是-1)。

18、(4)在做实际项目的时候,程序经常是要回头看的,也经常是要给别人看以达到维护的目的的。除了要养成良好的文档书写习惯以外(学习软件工程以后你就会掌握),还要养成良好的编程风格,这里我建议看《thinking in C++》,并按照里面例题的风格,养成自己的习惯。

本文到此讲解完毕了,希望对大家有帮助。