c语言的成绩排序
Ⅰ c语言 怎么对成绩排序
#include <stdlib.h>
int cmp(const void *a, const void *b)
{
student *x=(student*)a;
student *y=(student*)b;
if(x->score[0] > y->score[0])//升序排序(从小到大) 如果>改成<,就是降序排序(从大到小)
return 1;
return 0;
}
//上面函数放在struct student下面,需要该结构
//排序方式可以灵活调整,上面我只是用第一门分数进行比较
//你也可以用其它分数进行比较,多写2个函数就行,如int cmp2(const void*a,const void*b)等等。
//排序函数
qsort(stu,STU_NUM,sizeof(stu[0]),cmp);
//stu是数组名,STU_NUM是数组元素个数,cmp就排序方式(可以替换为cmp2等等)
Ⅱ C语言成绩排序
#include<bits/stdc++.h>
usingnamespacestd;
structdata{
charst1[233],st2[233];
doublea,b,c;
}a[233];
intmycomp(constdata&a,constdata&b){
return((a.a+a.b+a.c)<(b.a+b.b+b.c));
}
intmain(){
intn=1;
while(scanf("%s%s%lf%lf%lf",&a[n].st1,&a[n].st2,&a[n].a,&a[n].b,&a[n].c)!=EOF)
n++;
n--;
sort(a+1,a+n+1,mycomp);
for(inti=1;i<=n;i++)
printf("%s%s%.2lf%.2lf%.2lf ",a[i].st1,a[i].st2,a[i].a,a[i].b,a[i].c);
}
Ⅲ C语言怎么进行成绩的排序
#include<stdio.h>
int main()
{
int a[10],i,j,t,k;
printf("请以次输入10个学生的成绩:");
for(i=0;i<10;i++)scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
k=i;
for(j=i;j<10;j++)
if(a[j]>a[k])k=j;
if(i!=k)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
printf("由高到低排序输出成绩:\n");
for(i=0;i<10;i++)
printf("%d\n",a[i]);
return 0;
}
Ⅳ 用C语言编程:从键盘输入10个学生的成绩,由高到低排序输出成绩
你好,我们这里需要用到数组镶套使用for函数以及冒泡算法,具体的代码如下。
#include <iostream>
using namespace std;
int main()
{
int s [10], i, j, t;
cout << "输入10个数:";
for (i = 0; i < 10; i++)
{
cout << "请输入第" << i+1 << "名学生的成绩;" << endl;
cin >> s[i];
}
for (i = 0; i<10; i++)
{
for (j = 0; j<9 - i; j++)
if (s[j]<s[j + 1])
{
t = s[j + 1];
s[j + 1] = s[j];
s[j] = t;
}
}
cout << "成绩由高到低为;";
for (i = 0; i<10; i++)
cout << s[i]<<" " ;
}
以下为效果图
Ⅳ c语言用指针做成绩表高到低排序…怎么做呀
给你讲个思路 学过太久了 不翻自己以前的模板就不会了
不知道你们要求的指针是什么意思,如果严格规定是链表就很难了
先说简单的
第一张
voidsort(int*score,intn)//score是保存成绩的数组n是人数
{
inti,j;
for(i=0;i<n-1;i++)//这里要跑n-1次循环每次选出剩下元素中最大的放到前面
{
intmaxx=i;//那么最后只剩两个元素时只要选一次就好
for(j=i+1;j<n;j++)//扫第i个元素之后的元素
{
if(score[maxx]<score[j])
maxx=j;
}
inttemp=score[i];
score[i]=score[maxx];
score[maxx]=temp;
}
return;
}//排序完毕
第二种
首先你肯定建好了一个链表 (这个链表不会建你这题真很难)
然后把你的链表切开 (有没有初始头结点? 就是不保存数据 但是依旧是一个节点防止链表为空的节点 没有的话把链表从第一个节点后面切开 有的话切第二个节点之后的)
切开后就变成了两条链表 比如 (-1)--1--4--6--8--9--7--5--1 切开就是 (-1)--1
4--6--8--9--7--5--1
两条链表的头节点都要保存(不然你就找不到了)
从第二条链表 (长的那条)中拿出第一个节点 断开 然后试着往第一条链表中插入
比第一个节点的值大? 插到它之前 否则往后走 直到遇到一个比他大的节点 插到它之后
循环插入之后,这条链表就是有序的了
(其实链表构建的时候你就可以构建一条有序的链表 )
Ⅵ C语言按成绩排序问题
tc调试通过 #include<stdio.h> #define NUM 50 main() { int i,j; float n; struct student{ char name[50];/*学生姓名*/ float point;/*成绩*/ }stu[NUM],temp; printf("请依次输入学生姓名及对应成绩\n"); for(i=0;i<NUM;i++) { scanf("%s",stu[i].name); scanf("%f",&n); n=stu[i].point; } for(i=0;i<NUM;i++) for(j=i+1;j<NUM;j++) if(stu[i].point<stu[j].point) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } printf("下面为排好序的学生姓名及对应的成绩"); for(i=0;i<NUM;i++) printf("%s:%f\n",stu[i].name,stu[i].point); }
Ⅶ c语言程序设计 成绩排序
BiThrTree bt = NULL;
CreateBTree(bt);//生成一棵二杈排序树(输入单个字符,以#结束)
InOrderPrint_1(bt); //中序遍历输出结点(递归)
cout << endl;
BiThrTree BT = InOrderThreading(bt);//中序遍历二杈树,并将其中序线索化
InOrderTraverse_Thr(BT);//中序遍历线索二杈树的非递归算法, T 指向头结点
system("PAUSE");
return EXIT_SUCCESS;
}
void InOrderTraverse_Thr(BiThrTree T)//中序遍历线索二杈树的非递归算法, T 指向头结点
{
BiThrTree p = T->lchild; //p指向根结点
while (p != T) //空树或遍历结束时,p == T
{
Ⅷ C语言的学生成绩排序问题
#include <stdio.h>
#include <stdlib.h>
int main() {
struct student {
int num;
float scores;
};
student *stu = new student;
float insert = 0, temp = 0;
int i = 0;
for (; insert != -1; i++) {
printf("请输入学生成绩(结束输入-1):");
scanf("%f", &insert);
stu[i].num = i + 1;
stu[i].scores = insert;
}
for (int m = 0; m < i - 2; m++) {
for (int n = 0; n < i - 2; n++) {
temp = stu[n].scores;
if (temp < stu[n + 1].scores) {
stu[n].scores = stu[n + 1].scores;
stu[n + 1].scores = temp;
temp = stu[n].num;
stu[n].num = stu[n+1].num;
stu[n+1].num = (int)temp;
}
}
}
for (int j = 0 ; j < i - 1 ; j++){
printf("%s%d%s\t%s%d\t%s%.2f\n","第",j+1,"名:","号数:",stu[j].num,"成绩:",stu[j].scores);
}
system("PAUSE");
return 0;
}
Ⅸ C语言学生成绩排序程序
#include "stdio.h"
void main()
{
int i,j;
float A[11],t;
for(i=0;i<10;i++)
{
printf("第%d个学生成绩:\n",i+1);
scanf("%f",&A[i]);
}
for(i=0;i<10;i++)
{
for(j=0;j<10-i-1;j++)
{
if(A[j]<A[j+1])
{
t=A[j];
A[j]=A[j+1];
A[j+1]=t;
}
}
}
printf("插入学生成绩:\n");
scanf("%f",&t);
if(t<A[9]) A[10]=t;
else if(t>A[0])
{
for(i=9;i>=0;i--)
A[i+1]=A[i];
A[0]=t;
}
else
{
for(i=9;i>=1;i--)
{
A[i+1]=A[i];
if(A[i]<=t && A[i-1]>=t)
{
A[i]=t;
break;
}
}
}
for(i=0;i<11;i++)
printf("%g ",A[i]);
}
Ⅹ C语言 成绩排序
do{
scanf("%s %d",st[i].name,&st[i].score);
if(st[i].score>=0&&st[i].score<=100)
break;
}while(1);
使用这个语句输入。
第二个问题:
现在实行的C语言标准一般都C89标准,C89标准是不支持变长数组的,只有C99标准才支持。(变长数组就是长度是一个变量)
如果真想在C89下使用变长数组,那就只能用malloc和free开辟空间来实现
int n = 0;
scanf("%d",&n);
struct student *st = (struct student *)malloc(n * sizeof(struct student));
这样,st可以直接当一个数组来用,st[4]类似的加下标都没问题(数组=指针=字符串,我说原则,char数组=字符串)
不要忘了最后用free(st);释放获得的空间,不然会造成内存浪费的……