重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

C语言里排名的函数的代码 c语言里排名的函数的代码有哪些

C语言中的排序函数是什么

include cstdlib 或 #include stdlib.h

创新互联公司专业为企业提供白水网站建设、白水做网站、白水网站设计、白水网站制作等企业网站建设、网页设计与制作、白水企业网站模板建站服务,十载白水做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))

参数表

*base: 待排序的元素(数组,下标0起)。

num: 元素的数量。

width: 每个元素的内存空间大小(以字节为单位)。可用sizeof()测得。

int(*)compare: 指向一个比较函数。*elem1 *elem2: 指向待比较的数据。

比较函数的返回值

返回值是int类型,确定elem1与elem2的相对位置。

elem1在elem2右侧返回正数,elem1在elem2左侧返回负数。

控制返回值可以确定升序/降序。

产生随机数的函数也是rand(),不是rank().

C语言中,已知一个数组有N个数字,如何得到它们之间的名次?

两种方案,直接用数学方法计算和转为为字符串。

第一:数学方法,对于任意一个数n,要计算第site位的数,都可以用

n/10^(site-1)%10计算出来。比如计算123各位数:

int data=123;

printf("%d\n",data/100%10);

printf("%d\n",data/10%10);

printf("%d\n",data/1%10);结果是:

搜狗问问

第二:转化为字符串,这里要用到一个函数itoa。同样是计算123各个位数。

代码:

int data = 123;

char array[100];

itoa(data, array, 10); //转化为字符串

printf("%c\n", array[0]);

printf("%c\n", array[1]);

printf("%c\n", array[2]);结果和上面一样!

两种方式都能计算出,但是第一种方式计算未知位数的数时很麻烦,要首先计算出数的位数,相比较第二种就没那问题,只要定义足够大的数组就不存在这个问题。

c语言中的排序代码 ,求大神,有木有?

上面既有排序,又有合并,不想要合并的话,把跟这个函数有关的函数,和调用删除就行了!!!

#includestdio.h

#includestdlib.h

struct LNode //创建链表结点

{ int data;

struct LNode *next;

};

struct LNode *creat() //链表创建函数

{ struct LNode *head,*p,*rear;

int x,n;

head=(struct LNode *)malloc(sizeof(struct LNode));//链表头指针

rear=head;

puts("输入链表元素,以0结束:");

scanf("%d",x); //链表元素输入

while(x) //链表节点链接

{ p=(struct LNode *)malloc(sizeof(struct LNode));

p-data=x; rear-next=p;

rear=p; scanf("%d",x);

}

rear-next=NULL;

return head-next; //返回链表中第一个有值结点地址

}

struct LNode *Merger_Linklist( struct LNode *L1,struct LNode *L2 ) //链表合并函数

{ struct LNode *p;

for(p=L1;p-next!=NULL;p=p-next) //查找链表L1的尾结点地址

{ if(p-next==NULL)

break;

}

p-next =L2; //将链表L2链接在L1之后

return L1;

}

struct LNode *Rand(struct LNode *L) //链表排序函数

{ struct LNode *Cur; //当前节点

struct LNode *Next; //遍历未排序节点

struct LNode *min; //指向未排序节点中最小节点

int temp;

for(Cur = L; Cur-next!= NULL; Cur = Cur-next)

//从头节点的下一个节点开始,一直到倒数第二个节点

{ min = Cur;

for(Next = Cur-next; Next != NULL; Next = Next-next)

{ if(min-data Next-data)

{min = Next;}

}

temp = Cur-data; //链表数值交换

Cur-data = min-data;

min-data = temp;

}

return L;

}

void print(struct LNode *head,char a) //链表打印函数

{ struct LNode *p;

p=head;

printf("%c = ( ",a);

while( p )

{ printf("%d ",p-data);

p=p-next;

}

puts(" )\n");

}

struct LNode *DeleteC_Linklist( struct LNode *L )//删除链表重复数

{ int key,had;

struct LNode *h,*p,*r,*q;

for(p=L;p-next!=NULL;p=p-next)

{ had = p-data;

for(r=p,q=p-next;q!=NULL;)

{ key = q-data;

if( key==had )

{ r-next=q-next; h=q;

q=q-next; free( h );

}

else

{ q=q-next; r=r-next;

}

}

}

return L;

}

void main () //主函数

{ struct LNode *L1,*L2,*L3;

char a='A',b='B',c='C',d='D';

L1 = creat(); //创建链表L1

Rand(L1); //对L1排序

puts("\n创建的链表经排序后为:");

print(L1,a);

L2 = creat(); //创建链表L2

Rand(L2); //对L2排序

puts("\n创建的链表经排序后为:");

print(L2,b);

L3=Merger_Linklist( L1,L2 ); //合并链表L1和L2

Rand(L3); //对合并后的链表排序

puts("合并后的链表为:");

print(L3,c);

DeleteC_Linklist( L3 );

printf("删除重复数后的链表为:\n");

print(L3,d); //打印删除后的链表

}

C语言 定义函数实现n个学生成绩从高到低排名,利用主函数实现10个学生的成绩排名。

#include "stdio.h"

void paixu(int *p,int n)

{   

int i,j,tmp;

for(i = 0; i  n; i++)

{

for (j = n - 1; j  i; j--)

if (p[j]  p[j-1])

{

tmp = p[j-1];

p[j-1] =  p[j];

p[j] = tmp;        

}

main()

{  

int i;

int number[10] = {95, 45, 15, 78, 84, 51, 24, 12,1,2};

paixu(number,10);

for (i = 0; i  10; i++)

{

printf("%d ", number[i]);

}

printf("\n");

//getch();

}

求在C语言的代码中加个排序函数

都搞好了。

#includestdio.h

#includestdlib.h

#includestring.h

#define LEN 30 /* 学号和姓名最大字符数,实际请更改 */

#define N 200 /* 最大学生人数,实际请更改*/

struct record

{

char code[LEN+1]; /* 学号 */

char name[LEN+1]; /* 姓名 */

int age;

char sex[3];

char time[LEN+1];

char add[LEN+1];

char tel[LEN+1];

char mail[LEN+1];

}stu[N];

int k=1,n,m;

int order[N];

void readfile();/* 函数声明 */

void sort();

void seek();

void modify();

void insert();

void del();

void display();

void save();

void menu();

int main()

{

while(k)

menu();

system("pause");

return 0;

}

void readfile()/* 建立信息 */

{

char *p="student.dat";

FILE *fp;

int i=0;

if ((fp=fopen("student.dat","r"))==NULL) /* 把此程序和文件student.dat放在同一目录下 */

{ printf("Open file %s error! Strike any key to exit!",p);

system("pause");

exit(0);

}

while(fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)

{

i++;

order[i]=i;

}

fclose(fp);

n=i;

printf("录入完毕!\n");

}

void seek()

{int i,j,item,flag;

char s1[LEN+1]; /* 以姓名和学号最长长度+1为准 */

printf("------------------\n");

printf("1.按学号查询\n");

printf("2.按姓名查询\n");

printf("3.退出本菜单\n");

printf("------------------\n");

while(1)

{ printf("请选择子菜单编号:");

scanf("%d",item);

flag=0;

switch(item)

{

case 1:

printf("请输入要查询的学生的学号:\n");

scanf("%s",s1);

for(i=0;in;i++)

if(strcmp(stu[i].code,s1)==0)

{ flag=1;

printf("该学生学号,姓名,年龄,性别,出生年月,地址,电话,E-mail 分别为:\n");

printf("%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

if(flag==0)

printf("该学号不存在!\n"); break;

case 2:

printf("请输入要查询的学生的姓名:\n");

scanf("%s",s1);

for(i=0;in;i++)

if(strcmp(stu[i].name,s1)==0)

{ flag=1;

printf("该学生学号,姓名,年龄,性别,出生年月,地址,电话,E-mail 分别为:\n");

printf("%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

if(flag==0)

printf("该姓名不存在!\n"); break;

case 3:return;

default:printf("请在1-3之间选择\n");

}

}

}

void sort() /*选择排序*/

{

int i,j,k,t;

for(i=0;in-1;i++)/*共扫视n-1遍*/

{

k=i;

for(j=i+1;jn;j++)

if(strcmp(stu[order[i]].code,stu[order[j]].code)0)

k=j;

if(k!=i)

{/*交换名次*/

t=order[i];

order[i]=order[k];

order[k]=t;

}

}

printf("通讯录资料按人名号码从低到高为:\n");

for(i=0;in;i++)

{

printf("%s %s %d %s %s %s %s %s\n",stu[order[i]].code,stu[order[i]].name,stu[order[i]].age,

stu[order[i]].sex,stu[order[i]].time,stu[order[i]].add,stu[order[i]].tel,stu[order[i]].mail);

}

}

void modify() /*修改信息*/

{int i,j,item,num;

char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和学号最长长度+1为准 */

printf("请输入要要修改的学生的学号:\n");

scanf("%s",s1);

for(i=0;in;i++)

if(strcmp(stu[i].code,s1)==0)

num=i;

printf("------------------\n");

printf("1.修改姓名\n");

printf("2.修改年龄\n");

printf("3.修改性别\n");

printf("4.修改出生年月\n");

printf("5.修改地址\n");

printf("6.修改电话号码\n");

printf("7.修改E-mail地址\n");

printf("8.退出本菜单\n");

printf("------------------\n");

while(1)

{ printf("请选择子菜单编号:");

scanf("%d",item);

switch(item)

{

case 1:

printf("请输入新的姓名:\n");

scanf("%s",s2);

strcpy(stu[num].name,s2); break;

case 2:

printf("请输入新的年龄:\n");

scanf("%d",stu[num].age);break;

case 3:

printf("请输入新的性别:\n");

scanf("%s",sex1);

strcpy(stu[num].sex,sex1); break;

case 4:

printf("请输入新的出生年月:\n");

scanf("%s",s2);

strcpy(stu[num].time,s2); break;

case 5:

printf("请输入新的地址:\n");

scanf("%s",s2);

strcpy(stu[num].add,s2); break;

case 6:

printf("请输入新的电话号码:\n");

scanf("%s",s2);

strcpy(stu[num].tel,s2); break;

case 7:

printf("请输入新的E-mail地址:\n");

scanf("%s",s2);

strcpy(stu[num].mail,s2); break;

case 8:return;

default:printf("请在1-8之间选择\n");

}

}

}

void insert()

{ int i=n,j,flag;

printf("请输入待增加的学生数:\n");

scanf("%d",m);

do

{ flag=1;

while(flag)

{ flag=0;

printf("请输入第 %d 个学生的学号:\n",i+1);

scanf("%s",stu[i].code);

for(j=0;ji;j++)

if(strcmp(stu[i].code,stu[j].code)==0)

{ printf("已有该学号,请检查后重新录入!\n");

flag=1;

break; /*如有重复立即退出该层循环,提高判断速度*/

}

}

printf("请输入第 %d 个学生的姓名:\n",i+1);

scanf("%s",stu[i].name);

printf("请输入第 %d 个学生的年龄:\n",i+1);

scanf("%d",stu[i].age);

printf("请输入第 %d 个学生的性别:\n",i+1);

scanf("%s",stu[i].sex);

printf("请输入第 %d 个学生的出生年月:(格式:年.月)\n",i+1);

scanf("%s",stu[i].time);

printf("请输入第 %d 个学生的地址:\n",i+1);

scanf("%s",stu[i].add);

printf("请输入第 %d 个学生的电话:\n",i+1);

scanf("%s",stu[i].tel);

printf("请输入第 %d 个学生的E-mail:\n",i+1);

scanf("%s",stu[i].mail);

if(flag==0)

{

order[i]=i;

i++;

}

}while(in+m);

n+=m;

printf("录入完毕!\n\n");

}

void del()

{ int i,j,k,flag=0;

char s1[LEN+1];

printf("请输入要删除学生的学号:\n");

scanf("%s",s1);

for(i=0;in;i++)

if(strcmp(stu[order[i]].code,s1)==0)

{ flag=1;

for(j=i;jn-1;j++)

stu[order[j]]=stu[order[j+1]];

}

if(flag==0)

printf("该学号不存在!\n");

if(flag==1)

{ printf("删除成功,显示结果请选择菜单6\n");

n--;

}

}

void display()

{ int i,j;

printf("所有学生的信息为:\n");

for(i=0;in;i++)

{

printf("%s %s %d %s %s %s %s %s\n",stu[order[i]].code,stu[order[i]].name,stu[order[i]].age,

stu[order[i]].sex,stu[order[i]].time,stu[order[i]].add,stu[order[i]].tel,stu[order[i]].mail);

}

}

void save()

{ int i;

FILE *fp;

fp=fopen("student.dat","w");

for(i=0;in;i++)

{ fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[order[i]].code,stu[order[i]].name,stu[order[i]].age,

stu[order[i]].sex,stu[order[i]].time,stu[order[i]].add,stu[order[i]].tel,stu[order[i]].mail);

}

fclose(fp);

}

void menu()/* 界面 */

{ int num;

printf(" \n\n简易学生通讯录系统\n\n");

printf("*****系统功能菜单*****\n");

printf("----------------------\n");

printf("1.读入学生信息\n");

printf("2.查询学生信息\n");

printf("3.修改学生信息\n");

printf("4.增加学生信息\n");

printf("5.按学号删除信息\n");

printf("6.显示当前信息\n");

printf("7.保存当前学生信息(要把修改保存到文件,退出程序前必须执行本项)\n");

printf("8.按学号从低到高排序\n");

printf("9.退出系统\n");

printf("----------------------\n");

printf("请选择菜单编号:");

scanf("%d",num);

switch(num)

{

case 1:readfile();break;/*在主函数中调用子函数时,子函数不要带上类型,这和声明子函数不同*/

case 2:seek();break;

case 3:modify();break;

case 4:insert();break;

case 5:del();break;

case 6:display();break;

case 7:save();break;

case 8:sort();break;

case 9:k=0;break;

default:printf("请在1-9之间选择\n");

}

}


文章标题:C语言里排名的函数的代码 c语言里排名的函数的代码有哪些
网站链接:http://cqcxhl.cn/article/hjpihs.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP