① c语言简单排序
//希望我的回答对你的学习有帮助
//第一题
#include<stdio.h>
voidmain()
{
inti,j,t1,t2;
inta[10],b[10];
for(i=0,j=1;i<10;i++,j++)
{
scanf("%d",&a[i]);
b[i]=j;
}
for(intk=0;k<10;k++)
for(intl=k+1;l<=9;l++)
{
if(a[k]>a[l])
{
t1=a[l];a[l]=a[k];a[k]=t1;
t2=b[l];b[l]=b[k];b[k]=t2;
}
}
for(i=0;i<10;i++)
{
printf("%d",a[i]);
if(i<9)
printf("");
}
printf(" ");
for(i=0;i<10;i++)
{
printf("%d",b[i]);
if(i<9)printf("");
}
printf(" ");
}
② C语言中中文排序的问题请教!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
intnumber;
charkey[100];
constchar*ErrorInputInfo="输入错误,请重新输入:";
intcaidan(inta,intb,constchar*str=ErrorInputInfo)
{
intn,m,i,len;
while(1)
{
m=1;
len=strlen(key);
for(i=0;i<len;i++)
{
if(isdigit(key[i])==0)
{
m=0;
break;
}
}
if(m==0)
{
printf("输入错误,请输入数字,请重新输入: ");
scanf("%s",key);
}
else
{
n=atoi(key);
if(n>b||n<a)
{
printf("%s ",str);
scanf("%s",key);
}
elsebreak;
}
}
returnn;
}
structworker/*定义员工结构体*/
{
intnub;
charname[20];
charsex[8];
floatgz;
charbeizhu[10];
}yg[100],ls;
voidadd()//添加员工
{
FILE*fp;
printf("请输入员工信息:姓名,性别,工资,备注,工号将自动生成 ");
scanf("%s%s%f%s",yg[number].name,yg[number].sex,&yg[number].gz,yg[number].beizhu);
yg[number].nub=number+1;
fp=fopen("员工数据库.txt","a+");
if(fp)
{
fprintf(fp,"%d %s %s %f %s ",yg[number].nub,yg[number].name,yg[number].sex,yg[number].gz,yg[number].beizhu);
fclose(fp);
++number;
}
else
{
printf("打开文件错误,添加记录失败! ");
}
}
intzairu()//载入历史数据
{
inti;
FILE*fp=fopen("员工数据库.txt","r");
if(fp)
{
for(i=0;!feof(fp);i++)
fscanf(fp,"%d%s%s%f%s",&yg[i].nub,yg[i].name,yg[i].sex,&yg[i].gz,yg[i].beizhu);
fclose(fp);
--i;
printf("成功读取%d条记录! ",i);
returni;
}
else
{
printf("打开文件错误,读取失败! ");
return0;
}
}
voidchakan(intn=500)//查看员工列表
{
inti;
if(0>n||n>number)
{
for(i=0;i<number;i++)
{
if(i==0)printf("工号 姓名 性别 工资 备注 ");
printf("%d %s %s %f %s ",yg[i].nub,yg[i].name,yg[i].sex,yg[i].gz,yg[i].beizhu);
}
}
elseprintf("%d %s %s %f %s ",yg[n].nub,yg[n].name,yg[n].sex,yg[n].gz,yg[n].beizhu);
}
voidbaocun()
{
inti;
FILE*fp=fopen("员工数据库.txt","w");
if(fp)
{
for(i=0;i<number;i++)
fprintf(fp,"%d%s%s%f%s ",yg[i].nub,yg[i].name,yg[i].sex,yg[i].gz,yg[i].beizhu);
fclose(fp);
}
elseprintf("打开文件错误!保存文件失败! ");
}
voidxiugai()//修改员工信息
{
intn,m;
printf("请输入要修改的员工工号:");
scanf("%s",key);
n=caidan(1,number,"员工工号不存在,请重新输入:")-1;
chakan(n);
printf("请输入要修改的项目:1姓名2性别3工资4备注:");
scanf("%s",key);
m=caidan(1,4);
switch(m)
{
case1:
printf("输入新的姓名:");
scanf("%s",yg[n].name);
break;
case2:
printf("输入新的性别:");
scanf("%s",yg[n].sex);
break;
case3:
printf("输入新的工资:");
scanf("%f",&yg[n].gz);
break;
case4:
printf("输入新的备注:");
scanf("%s",yg[n].beizhu);
break;
}
baocun();
}
voidchazhao()//按关键字查找员工
{
intn,m,i,t=0;
floatmin,max;
printf("请选择查找类型:1工号2姓名3性别4工资5备注 ");
scanf("%s",key);
n=caidan(1,5);
switch(n)
{
case1:
printf("请输入要查找的工号: ");
scanf("%s",key);
m=caidan(0,100,"员工号应小于100,请重新输入:");
for(i=0;i<number;i++)
{
if(m==yg[i].nub)
{
chakan(i);
t++;
}
}
if(t==0)printf("该工号不存在 ");
elseprintf("共找到%d位符合条件的员工 ",t);
break;
case2:
printf("请输入要查找的姓名: ");
scanf("%s",key);
for(i=0;i<number;i++)
{
if(!strcmp(key,yg[i].name))
{
chakan(i);
t++;
}
}
if(t==0)printf("该姓名不存在 ");
elseprintf("共找到%d位符合条件的员工 ",t);
break;
case3:
printf("请输入要查找的性别: ");
scanf("%s",key);
for(i=0;i<number;i++)
{
if(!strcmp(key,yg[i].sex))
{
chakan(i);
t++;
}
}
if(t==0)printf("该性别不存在 ");
elseprintf("共找到%d位符合条件的员工 ",t);
break;
case4:
printf("请输入要查找的工资区间min~max: ");
scanf("%f%f",&min,&max);
for(i=0;i<number;i++)
{
if(yg[i].gz>=min&&yg[i].gz<=max)
{
chakan(i);
t++;
}
}
if(t==0)printf("该工资区间没有员工存在 ");
elseprintf("共找到%d位符合条件的员工 ",t);
break;
case5:
printf("请输入要查找的备注信息: ");
scanf("%s",key);
for(i=0;i<number;i++)
{
if(!strcmp(key,yg[i].beizhu))
{
chakan(i);
t++;
}
}
if(t==0)printf("该备注信息不存在 ");
elseprintf("共找到%d位符合条件的员工 ",t);
break;
}
}
#defineSORT(X)do{for(i=0;i<number;i++){pos=i;for(j=i+1;j<number;j++)if(##X##)pos=j;if(pos!=i)ls=yg[pos],yg[pos]=yg[i],yg[i]=ls;}}while(0)
voidpaixu()
{
intn,m,i,j,pos;
printf("请选择排序字段:1工号2姓名3性别4工资5备注:");
scanf("%s",key);
n=caidan(1,5);
switch(n)
{
case1:
printf("请选择:1正序2倒序:");
scanf("%s",key);
m=caidan(1,2);
if(m==1)SORT(yg[pos].nub>yg[j].nub);
elseSORT(yg[pos].nub<yg[j].nub);
break;
case2:
printf("请选择:1正序2倒序:");
scanf("%s",key);
m=caidan(1,2);
if(m==1)SORT(strcmp(yg[pos].name,yg[j].name)==1);
elseSORT(strcmp(yg[pos].name,yg[j].name)==-1);
break;
case3:
break;
case4:
printf("请选择:1正序2倒序:");
scanf("%s",key);
m=caidan(1,2);
if(m==1)SORT(yg[pos].gz>yg[j].gz);
elseSORT(yg[pos].gz<yg[j].gz);
break;
case5:
break;
}
chakan();
}
voidmain()
{
charkey1[100];
intm=0;
number=zairu();
while(m!=6)
{
printf("主菜单:1添加员工2查看员工列表3修改员工信息4查找员工5排序6退出程序 ");
scanf("%s",key);
m=caidan(1,6);
switch(m)
{
case1:
do
{
add();
printf("添加员工成功,是否继续添加(y/n) ");
scanf("%s",key1);
while(strlen(key1)>1||(key1[0]!='y'&&key1[0]!='n'))
{
printf("输入错误,请重新输入! ");
scanf("%s",key1);
}
}
while(key1[0]!='n');
break;
case2:
chakan();
break;
case3:
xiugai();
break;
case4:
chazhao();
break;
case5:
paixu();
break;
}
}
}
③ c语言程序 中文按首字母排序
#include <stdio.h>
#include <string.h>
#define MAX_NAME 20 //最大名字长度
#define MAX_NUM 100 //最大学生人数
void sort_bubble(char (*pc)[MAX_NAME],int n)//排序函数
{
int i,j;
char str[MAX_NAME];
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(pc[i],pc[j])>0)
{
strcpy(str,pc[i]);
strcpy(pc[i],pc[j]);
strcpy(pc[j],str);
}
}
}
}
void display_name(char (*pc)[MAX_NAME],int n)//显示这n个姓名
{
int i;
for(i=0;i<n;i++)
{
printf("%s\n",pc[i]);
}
}
int main()
{
int i=1,n;
char str[MAX_NUM][MAX_NAME];
printf("请输入学生总数:");
scanf("%d",&n);
while(i<=n)
{
printf("请输入第%d个学生姓名:",i);
scanf("%s",str[i++-1]);
}
printf("排序前的学生名单如下:\n");
display_name(str,n);
sort_bubble(str,n);
printf("排序后的学生名单如下:\n");
display_name(str,n);
return 0;
}
说明:
1:采用的是冒泡排序,用快速排序当然快些,但我忘了
2:已验证通过,结果正确。
3:随意输入人数和姓名,只要数组不越界就没有问题!
4:两个函数:排序和显示
5:给分+好评
④ C语言中汉字如何进行排序
C语言中,汉字是按照字符串来处理的,一个汉字占用2个字节,汉字的排序就是按照汉字的编码进行排序(不是拼音),而是半个汉字的ASCII码进行排序的。
所以在输出汉字的时候,如果按照字节输出,而不按照字符串输出的话,就会出现乱码。
具体汉字的编码,就不是那么容易的了。编码一般以0x开头,表示是用一个十六进制数表示的。
⑤ c语言的两种排序
1、选择排序法
要求输入10个整数,从大到小排序输出
输入:2 0 3 -4 8 9 5 1 7 6
输出:9 8 7 6 5 3 2 1 0 -4
代码:
#include<stdio.h>
int main(int argc,const char*argv[]){
int num[10],i,j,k,l,temp;
//用一个数组保存输入的数据
for(i=0;i<=9;i++)
{
scanf("%d",&num<i>);
}
//用两个for嵌套循环来进行数据大小比较进行排序
for(j=0;j<9;j++)
{
for(k=j+1;k<=9;k++)
{
if(num[j]<num[k])//num[j]<num[k]
{
temp=num[j];
num[j]=num[k];
num[k]=temp;
}
}
}
//用一个for循环来输出数组中排序好的数据
for(l=0;l<=9;l++)
{
printf("%d",num[l]);
}
return 0;
}
2、冒泡排序法
要求输入10个整数,从大到小排序输出
输入:2 0 3-4 8 9 5 1 7 6
输出:9 8 7 6 5 3 2 1 0-4
代码:
#include<stdio.h>
int main(int argc,const char*argv[]){
//用一个数组来存数据
int num[10],i,j,k,l,temp;
//用for来把数据一个一个读取进来
for(i=0;i<=9;i++)
{
scanf("%d",&num<i>);
}
//用两次层for循环来比较数据,进行冒泡
for(j=0;j<9;j++)
{
for(k=0;k<9-j;k++)
{
if(num[k]<num[k+1])//num[k]<num[k+1]
{
temp=num[k];
num[k]=num[k+1];
num[k+1]=temp;
}
}
}
//用一个for循环来输出数组中排序好的数据
for(l=0;l<=9;l++)
{
printf("%d",num[l]);
}
return 0;
}
(5)c语言中文排序扩展阅读:
return 0代表程序正常退出。return是C++预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。
return语句用来结束循环,或返回一个函数的值。
1、return 0,说明程序正常退出,返回到主程序继续往下执行。
2、return 1,说明程序异常退出,返回主调函数来处理,继续往下执行。return 0或return 1对程序执行的顺序没有影响,只是大家习惯于使用return(0)退出子程序而已。
⑥ c语言怎样按照中文姓名的首字母排序求详细解释!
有相应字母表比较好办,不然不好搞
⑦ c语言排序
上述的过程有点小错误。下面我更正一下。
i=0,j=3,middle=3,执行quicksort函数如下:
i=0时:p[i]=2<3,i++;3=3,停止,此时i=1 ;p[j]=1<3,停止,此时j=3;
=》交换得 2 1 4 3,i++,j--
此时i=2,j=2.p[i]=4>3,停止,此时i=2 ;p[j]=4>3,j--,j=1,p[j]=1<3,停止,此时i=2,j=1,因为(i>j),所以不交换,得2 1 4 3
此时i=2,j=1,将其分(left,j)和(i,right)两部分,分别进行快速排序
即 2 1 排序,4 3 排序。分别依照程序步骤对这两组数进行排序,可得
1 2 和 3 4,再结合上面的原有顺序,即可有 1 2 3 4 的正确排序。
⑧ C语言或C++可以对汉字排序么
不容易。
用 GB2312_1980 国标码,比较双字节数值大小。
常用字的数值小于不常用字。
常用字按ABCD汉语拼音次序排列的。好办。
不常用字按笔划多少排列的。姓名里有不常用字。麻烦在这里。
⑨ c语言按中文姓名排序问题
如果结构体对应的输出都对的话,那基本没错,只有个花括号括错了,你排序的花括号把输出也括进去了!
⑩ c语言怎么用姓名(汉字)进行排序
排序后输出的:(是以字母表从小到大排)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s[4]={"大军","阿姨","弟弟","妹妹"},t;
for(int i=0;i<4;i++)
{
for(int j=i;j<4;j++)
{
if(s[i]>s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
for(i=0;i<4;i++)
cout<<s[i]<<endl;
return 0;
}