三九宝宝网宝宝教育教学论文

C语言排序函数

01月03日 编辑 39baobao.com

[c语言:数组:不用strcpy函数实现字符串的复制]#include<stdio.h> void Copy_string(char* str1, char* str2); //函数声明 int main() { char str1[20]; char str2[20]; puts("请输入字符串str1:"); gets(str1); //获取从键盘...+阅读

一群菜鸟不懂的乱说。

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

#include

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("输入的数是:\n"); for(i = 0; i < *n; i++) { printf("%5d\n", data[i]); } return 0; }

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("排序后的结果如下:\n"); for(i = 0; i < n; i++) printf("%5d\n", data[i]); }

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

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

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

(2)

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

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

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

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

对于楼主提几点建议:

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

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

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

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

以下为关联文档:

C语言:编写一个函数实现把一字符串复制到一个字符数组中展开全部 # include void strcopy( char str1[], char str2[]) { int i; for(i=0;str[i]!= '\0';i++) { str1[i]=str2[i]; s1[i]='\0'; } } void main() {char str1[20];str...

c语言设计函数连接两个字符串/*! \brief 连接两个字符串 * \param dst 字符串dst地址,也是连接后字符串的存储地址 * \param src 字符串2地址 * \note 必须保证dst剩余的空间能容纳字符串src,否则,调用结果...

函数的奇偶性奇偶函数1)试判断函数y=f(x)的奇偶性 解:(ⅰ) 由于f(2-x)= f(2+x), f(7-x)= f(7+x) 可知f(x)的对称轴为x=2和x=7,即f(x)不是奇函数。 联立f(2-x)= f(2+x) f(7-x)= f(7+x) 推得f(4-x)= f(1...

函数概念教学设计1.函数的定义(含映射的概念和比喻),让抽象朴素话; 2.函数的用处(发展历程)----便于表达复杂的关系, 3.函数体现的是辨证关系9( 几者是相互关联着的)---引出就是高中重点学习的函数 定...

在新课标的理念下如何进行函数概念的教学学生在初学函数以及后续学习中,会遇到很多困难,这与教师在函数概念的教学中所采用的教学方式有着密切关系.以往教材的呈现方式和课堂讲授方法,虽然能较好地界定函数概念的内涵...

有关函数的意义概念的应用1.2.1 函数的概念第二课时 函数概念的应用课前预习学案一 、预习目标 1.通过预习熟知函数的概念2.了解函数定义域及值域的概念二 、预习内容1.函数的概念:设A、B是__________...

C语言用函数排序#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int array[10]; int i,j,min,stmp; for(i=0;i<10;i++) scanf("%d",&array[i]); for(i=0;i<9;i+...

c语言数字排序问题展开全部 // 正好适合插入排序 有问题联系 #include #define ARR_SIZE 10 int main() { int i,j,arr[ARR_SIZE]; int temp; for (i=0;i { scanf("%d",&temp); if (i==0) { arr...

C语言编程题编一个排序函数用了一个冒泡法,从小到大排序,请参考 #include <stdio.h> void Sort(int token[], int count); /*在此处做函数声明最好*/ void main() { int i,count,token[100]; printf("请输...

推荐阅读
图文推荐