永发信息网

[1]输入5名选手的编号(定义为长整型)[2]将选手名单按编号从高到低降序方式进行排序。

答案:3  悬赏:30  手机版
解决时间 2021-01-24 09:22
[1]输入5名选手的编号(定义为长整型)[2]将选手名单按编号从高到低降序方式进行排序。
最佳答案
这是我以前写的学生成绩管理系统,你要的要求上面都有,自己看吧
#include
#include
#include
int login(char p[16])//登录,密码判断,
{
int w;
char login[16];
printf("请输入密码\n");
gets(login);//输入字符串作为密码
w=strcmp(p,login);//判断两字符串是否相同,若相同则返回0
return w;//返回密码判断的值
}
void display()//菜单
{
printf("*——————————————————————————————————————*\n");
printf("|请选择您所需的操作: |\n");
printf("|——————————————————————————————————————|\n");
printf("|1.输入成绩 2.顺序输出成绩 3.查找最高分 4.查找最低分|\n");
printf("|5.查找特定成绩 6.降序排序成绩 7.求总成绩和平均成绩 |\n");
printf("|8.查找低于特定分数的成绩 9.分段成绩人数及位置 10.增加成绩 |\n");
printf("|11.更改成绩 12.删除单个成绩 13.删除全部成绩 14.修改密码 |\n");
printf("|0.退出 |\n");
printf("*——————————————————————————————————————*\n");
}
int input(double score[200])//输入数据
{
int p,q,i=1;
printf("请输入学生人数\n");
scanf("%d",&p);
for(q=0;q {
printf("请输入第%d个人成绩\n",i);
scanf("%lf",&score[q]);
i++;
}
printf("输入完毕\n");
return p;//返回总人数
}
void output(double score[200],int x)//顺序输出学生成绩
{
int i=0;
if(x!=0)
while(i!=x)
{
printf("第%d个人的成绩为%lf\n",i+1,score[i]);
i++;
}
else
printf("数据为空,请先输入数据\n");//容错,当数组中没有数据时提示用户先输入数据
}
void max(double score[200],int x)//查询最大成绩
{
int m,n;
double max;
if(x!=0)
{
max=score[0];n=1;
for(m=1;m {
if(max {
max=score[m];
n=m+1;
}
}
printf("最高成绩为%lf,是第%d个\n",max,n);
}
else printf("数据为空,请先输入数据\n");//容错
}
void min(double score[200],int x)//查询最低成绩
{
int m,n;
double min;
if(x!=0)
{
min=score[0];n=1;
for(m=1;m {
if(min>score[m])
{
min=score[m];
n=m+1;
}
}
printf("最低成绩为%lf,是第%d个\n",min,n);
}
else printf("数据为空,请先输入数据\n");//容错
}
void spe(double score[200],double m,int n)//查询特定成绩
{
int i,x=0;
int location[200];
for(i=0;i if(score[i]==m)//判断是否为所查询的成绩
{
location[x]=i+1;
x++;
}
if(x!=0)
{
printf("您所查询的成绩为%lf,在以下位置出现\n",m);//输出所查询的成绩
for(i=0;i printf("%d ",location[i]);//输出所查询成绩的所在位置,此位置为下标加1
printf("\n");
}
else
printf("此成绩不存在\n");//容错,当所查询的成绩不存在是输出
}
void down(double score[200],int x)//降序排列
{
int m,n;
double temp;
if(x!=0)
{
for(m=0;m for(n=m+1;n if(score[m] {
temp=score[m];
score[m]=score[n];
score[n]=temp;
}
printf("降序排列为\n");
n=1;
for(m=0;m {
printf("%lf ",score[m]);
n++;
if(n==5)//输出控制,用于判断回车符的输出
{
n=1;
printf("\n");
}
}
}
else printf("数据为空,请先输入数据\n");//容错
}
double ave(double score[200],int x)//输出总分与平均分
{
double sum=0,ave0;
int i;
if(x!=0)
{
for(i=0;i sum=sum+score[i];
ave0=sum/x;//求出平均分
printf("总成绩为%lf\n",sum);
return ave0;
}
else
{
printf("数据为空,请先输入数据\n");//容错
return 0;
}

}
void fil(double score[200],double w,int x)//输出小于特定分数的成绩所在位置,位置为下标加1
{
int i,m;
int location[200];
for(i=0;i if(score[i] {
location[m]=i+1;
m++;
}
if(m!=0)
{
printf("所查询的成绩在以下位置出现\n");
for(i=0;i printf("%d ",location[i]);
}
else
printf("此成绩不存在\n");
}
void sec(double score[200],int x)//成绩分段并输出各段人数与位置,位置为下标加1
{
int s,i=0,m=0,n=0,s80[200],s60[200],s0[200],f=1;
if(x!=0)
{
for(s=0;s {
if(score[s]>=80)
{
s80[i]=s+1;
i++;
}
else
if(score[s]>=60)
{
s60[m]=s+1;
m++;
}
if(score[s]<60)
{
s0[n]=s+1;
n++;
}
}
printf("80分至100分的人数为%d,在以下位置出现\n",i);//输出各段的人数
for(s=0;s {
printf("%d ",s80[s]);
if(f==10)
{
printf("\n");
f=1;
}
}
printf("\n60分至80分的人数为%d,在以下位置出现\n",m);
f=1;
for(s=0;s {
printf("%d ",s60[s]);
if(f==10)
{
printf("\n");
f=1;
}
}
printf("\n60分以下的人数为%d,在以下位置出现\n",n);
f=1;
for(s=0;s {
printf("%d ",s0[s]);
if(f==10)
{
printf("\n");
f=1;
}
}
}
else
printf("数据为空,请先输入数据\n");//容错
}
int add(double score[200],int x,double y,int z)
{
int i;
for(i=z;i>=x;i--)
score[i]=score[i-1];
score[x-1]=y;
printf("增加成功\n");
return 1;
}
void rejigger(double score[200],int x,double y)
{
score[x-1]=y;
printf("更改成功\n");
}
void del(double score[200],int x,int y)
{
int i;
for(i=x;i score[i-1]=score[i];
score[y]=0;
}
int format(double score[200])
{
int i;
char validate;
printf("是否确认删除所有数据Y/N\n");
scanf("%c",&validate);
scanf("%c",&validate);
if(validate=='Y'||validate=='y')
{
for(i=0;i<200;i++)
score[i]=0;
printf("删除成功\n");
return 1;
}
else
{
printf("取消删除\n");
return 0;
}
}

void main()
{
char password[16]="123456";//定义默认密码
double score[200],m,n,w,z;
int choose,x=3,i,f,b=0,change=1,y;
char *p,validate;
double *a;
int flag = 0;
p = password;
a=score;
f=3;i=0;
while(f)//密码错误次数控制,当错误时重新输入,若连续错误3次则直接退出程序
{
i=login(password);
if(i)
{
x--;
if(x>0)
printf("密码错误,请重新输入,您还有%d次机会\n",x);
else
{
printf("密码错误,程序自动退出\n");
exit(1);
}
f--;//次数控制
continue;
}
else//当密码输入正确时进入下一步
{
flag = 1;
break;
}
}
while(flag)//主循环,控制菜单的循环输出与程序的循环使用
{
display();//输出菜单
scanf("%d",&choose);//功能选择
switch(choose)//功能判断
{
case 1:b=input(score);break;//输入成绩
case 2://顺序输出成绩
output(score,b);
break;
case 3:max(score,b);break;//输出最大值
case 4:min(score,b);break;//输出最小值
case 5://查询特定成绩
if(b!=0)
{
printf("请输入要查询的成绩\n");
scanf("%lf",&m);
spe(score,m,b);
}
else
printf("数据为空,请先输入数据\n");
break;
case 6:down(score,b);break;//降序排列
case 7:n=ave(score,b);printf("平均成绩为%lf\n",n);break;//输出总成绩与平均成绩
case 8://查询低于特定分数的成绩
if(b!=0)
{
printf("请输入分数\n");
scanf("%lf",&w);
fil(score,w,b);
}
else
printf("数据为空,请先输入数据\n");
break;
case 9:sec(score,b);break;//成绩分段
case 10:
if(b!=0)
{
printf("请输入要增加的成绩和所在位置\n");
scanf("%lf%d",&z,&y);
add(score,y,z,b);
b=b+1;
}
else
printf("数据为空,请先输入数据\n");
break;
case 11:
if(b!=0)
{
printf("请输入要修改的位置和修改后的成绩\n");
scanf("%d%lf",&y,&z);
rejigger(score,y,z);
}
else
printf("数据为空,请先输入数据\n");
break;
case 12:
if(b!=0)
{
printf("请输入要删除的位置\n");
scanf("%d",&y);
del(score,y,b);
b=b-1;
}
else
printf("数据为空,请先输入数字\n");
break;
case 13:
y=format(score);
if(y==1) b=0;
break;

case 0:
printf("程序退出后所有数据将消失,确定退出程序?Y/N\n");
scanf("%c",&validate);
scanf("%c",&validate);
if(validate=='Y'||validate=='y') flag=0;//退出
}
}
printf("谢谢使用\n");
}
全部回答
#include "stdafx.h"
#include
#include
void sort(unsigned long*, int);
void find(unsigned long*, int, unsigned long);
int xsNum;
int main(int argc, char* argv[])
{
unsigned long xs[100];
unsigned long num;
int i;
num = 0;

for(i = 0; i < 100; i++) xs[i] = 0;
printf("请输入五个选手的编号:\n");
scanf("%ld,%ld,%ld,%ld,%ld", &xs[0], &xs[1], &xs[2], &xs[3], &xs[4]);
xsNum = 5;
sort(xs, 5);
printf("\n排序之后\n");
for(i = 0; i < xsNum; i++) printf("选手%d = %ld ", i+1, xs[i]);
printf("\n\n请输入一个选手的编号\n");
while(num == 0)
{
scanf("%ld", &num);
if(num == 0) printf("选手号不能为0,请重新输入!\n");
}
find(xs, 5, num);
printf("\n参赛选手编号:\n");
for(i = 0; i < xsNum; i++) printf("选手%d = %ld ", i+1, xs[i]);
printf("\n");
return 0;
}

void sort(unsigned long *a, int len)
{
int i, j;
unsigned long temp;

for(i = 0; i < len; i++)
{
for(j = i+1; j {
if(a[i] < a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}

void find(unsigned long *a, int len, unsigned long findNum)
{
int i, j;

for(i = 0;i < len; i++) if(a[i] == findNum) break;
if(i == len)
{
a[i] = findNum;
sort(a, len+1);
xsNum = xsNum + 1;
}else
{
for(j = i; j < len; j++)
a[j] = a[j+1];
a[j] = 0;
xsNum = xsNum - 1;
}
}
运行环境:VC6.0
写好了,你说的用指针将数组元素之和传给b太麻烦,我直接让排序函数的返回值,作为数组各元素之和!!
运行后没有任何问题!!
#include
//排序函数
int sort(int a[],int n)
{
int i,j,k,sum=0,temp,max;
for(i=0;i { max=i;
for(j=i+1;j {

if(a[max] }
if(max!=i)
{
temp=a[i];
a[i]=a[max];
a[max]=temp;
}
}
for(k=0;k sum=sum+a[k];
return sum;
}
int main()
{
int a[5],b;
int i;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
b=sort(a,5);
for(i=0;i<5;i++)
printf("%d, ",a[i]);
printf("\n数组之和为%d",b);
return 0;
}
c编程高手团队正在招新,有意者速速行动,一起学习,一起努力!!
柳州电脑网
K[1]输入5名选手的编号(定义为长整型)[2]将选手名单按编号从高到低降序方式进行排序。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我国人口分布的基本特点是________.
亿派连锁酒店(文化路体育馆店)地址在什么地方
停车场(金街)(范阳西路与金街交叉口西南50米
大米,江米,苹果,冰糖熬粥好吗
下列各句中,没有语病的一句是A.专家组经过分
皇龙宾馆(文化中路)地址好找么,我有些事要过
停车场(金穗小区东南)(清苑北路406号附近停车
饮食定生死,为什么说吃快餐对人身体不好?
东升宾馆(康源锦绣花园北)地址在什么地方,我
停车场(科苑街)(七一东路2414-2416号停车场)
男人少的国家是哪个国家
停车场(南大街)(南大街与环城南路交叉口北50
----The cake is delicious.----Well, at lea
雅洁园商务宾馆地址在什么地方,想过去办事
停车场(南二环)(南二环北100米停车场)地址有
推荐资讯
微软surface开不了机怎么回事
黑豹车质量怎么样
申通快递 1月1日南京航空部发往重庆中转部 一
绘天下美术教育(海德校区)地址有知道的么?有
老鼠表情什么意思
Brighton: It is a seaside resort on the En
铭远教育(开发大道)地址在哪,我要去那里办事
美乐美家地址在什么地方,我要处理点事
防止黄土高原水流失的根本措施是在黄河上A.加
单选题下列各组物质能发生反应的是A.硫酸钡和
一进门就看见水池好不好?
Y币怎么兑换人民币
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?