求解一道C语言基础编程题。

根据要求编写程序。(要求在重要语句或变量后加简短的注释!!)
1、某系有新生60人,为校运会队列排队,要求排列顺序从矮到高。编写一完整的程序,使得其运行后,能接收用户从键盘上输入的每个新生的高度,并将这些数据排序后按题目要求的格式输出。
注: 1).学生编号从1-60,按顺序输入,排序算法可以自选
2).输出为排队之后的队列顺序, 从矮到高输出
3).数据的输入输出和排序,都要通过写函数调用来完成(即要求4个函数,一个主函数,一个输入函数,一个排序函数,一个输出函数)
4). 输出格式为: 按行输出,每行打印一条学生记录的信息,
输出示例: 分别为 新的编号# 身高
1# 1.65m
2# 1.68m
3# 1.68m
4# 1.70m
.....

#include <stdio.h>

#define N 60 //宏定义便于替换和检测

void Scanf(float *a,int n) //输入函数

{ scanf("%f",&a[n]);}

void sort(float *a,int n) //排序函数{ int i,j; float t; for(i=0;i<n-1;i++) //选择排序法 { for(j=i+1;j<n;j++) { if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } }}void Printf(float *a,int n) //输出函数{ printf("%d# %.2fm\n",n+1,a[n]);//输出格式}int main (void){ float a[N]; int i; for(i=0;i<N;i++) Scanf(a,i); sort(a,N); for(i=0;i<N;i++) Printf(a,i);}

望采纳

追答

还有问题吗??

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-29
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

typedef struct queue
{
//保存队列中的元素
int *a;
//保存队列头部元素的索引
int front;
//保存队列尾部元素的索引
int rear;
//保存队列中最多容纳的元素个数
int max;
}qu;

/*
* 初始化队列
*/
qu *initqueue(int num)
{
qu *q=(qu *)malloc(sizeof(qu));
if(q==NULL)
{
printf("create fail!\n");
exit(1);
}
q->front=0;
q->rear=0;
q->max=num;
q->a=(int *)malloc(sizeof(int)*num);
if(q->a==NULL)
{
printf("create fail!\n");
exit(1);
}
return q;
}

/*
* 判断队列是否为空(空:返回0 非空;返回1)
*/
int isempty(qu *q)
{
if(q->front==q->rear)return 0;
else return 1;
}

/*
* 判断队列是否为满(满:返回0 非满:返回1)
* (采用少占用一个空间的方式判断队列是否为满,即(rear+1)%max==front
*/
int isfull(qu *q)
{
//队列满的判断条件(少用一个存储空间)
if((q->rear+1)%q->max==q->front)return 0;
else return 1;
}

/*
* 查看队列中的元素个数
*/
int getnum(qu *q)
{
if(isempty(q)==0)return 0;
else
{
int count=(q->rear-q->front+q->max)%q->max;
return count;
}
}

/*
* 入队列
*/
void push(qu *q,int value)
{
if(isfull(q)==0)
{
printf("队列为满,无法入队!\n");
exit(1);
}
q->a[q->rear]=value;
q->rear=(q->rear+1)%q->max;
}

/*
* 出队列
*/
int pop(qu *q)
{
if(isempty(q)==0)
{
printf("队列为空,无法出队!\n");
exit(1);
}
int temp=q->a[q->front];
q->front=(q->front+1)%q->max;
return temp;
}

/*
* 查看队列首部元素
*/
int peek(qu *q)
{
if(isempty(q)==0)
{
printf("队列为空,无法查看!\n");
exit(1);
}
int temp=q->a[q->front];
return temp;
}

int main()
{
int num=5;
int temp;
qu *q=initqueue(num);
push(q,1);
push(q,2);
push(q,3);
push(q,4);
pop(q);
pop(q);
pop(q);
pop(q);
push(q,1);
push(q,2);
push(q,3);
// push(q,4);
// push(q,5);
int count=getnum(q);
printf("count=%d\n",count);
return 0;
}本回答被网友采纳