当前位置:首页 » 编程语言 » c语言数组打印名次表
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数组打印名次表

发布时间: 2022-07-13 20:38:18

c语言 学生成绩排序 按学生的序号输入 n 名学生的成绩,按照分数由高到低的顺序输出学生的名次、序号和成绩

#include<stdio.h>
#include<malloc.h>
typedefstructstudent
{
intid;
intscore;
structstudent*next;
}STU;
intstuIndex;

voidinputStuInfo(STU*stuHead);//输入学生信息
voidorderStuInfo(STU*stuHead);//按照分数高到低顺序重组链表
voidprintStuInfo(STU*stuHead,intflag);//打印学生信息。参数flag=0:正常打印链表信息。flag!=0:打印排序后的名次信息
intmain()
{
STU*stuHead=(STU*)malloc(sizeof(STU));
stuHead->next=NULL;
stuIndex=1;
inputStuInfo(stuHead);
printf("--打印原始输入的链表!-- ");
printStuInfo(stuHead,0);
printf("--开始按分数降序排列!-- ");
orderStuInfo(stuHead);
printf("--链表按降序重组完成!-- ");
printf("--打印降序排序的链表!-- ");
printStuInfo(stuHead,1);
return0;
}
voidorderStuInfo(STU*stuHead)
{
STU*stuSave1=NULL,*stuSave2=NULL,stuSave3;
stuSave1=stuHead;
while(stuSave1->next!=NULL)//冒泡排序
{
stuSave2=stuSave1->next;
while(stuSave2->next!=NULL)
{
if(stuSave1->next->score<stuSave2->next->score)//交换成员值,保留原链表指针值
{
stuSave3=*(stuSave1->next);
stuSave1->next->id=stuSave2->next->id;
stuSave1->next->score=stuSave2->next->score;
stuSave2->next->id=stuSave3.id;
stuSave2->next->score=stuSave3.score;
}
stuSave2=stuSave2->next;
}
stuSave1=stuSave1->next;
}
}
voidprintStuInfo(STU*stuHead,intflag)
{
inti=1;
while(stuHead->next!=NULL)
{
if(flag==0)
printf("学生%d,成绩%d ",stuHead->next->id,stuHead->next->score);
else
printf("第%d名,学生%d,成绩%d ",i++,stuHead->next->id,stuHead->next->score);
stuHead=stuHead->next;
}
}
voidinputStuInfo(STU*stuHead)
{
intscore;
STU*stuNew=NULL,*stuTail=NULL;
while(1)
{
printf("输入学生%d的成绩:(输入负数结束输入)",stuIndex);
scanf("%d",&score);
if(score<0)
break;
stuNew=(STU*)malloc(sizeof(STU));
stuNew->score=score;
stuNew->id=stuIndex;
stuNew->next=NULL;
if(stuHead->next==NULL)
stuHead->next=stuNew;
else
stuTail->next=stuNew;
stuTail=stuNew;
stuIndex++;
}
}

⑵ C语言问题 使用字符数组和实型数组分别存储学生姓名和成绩,并通过对学生成绩的排序,按名次输出姓名成绩

1)char* Name[100][20],cTemp[20];改为char Name[100][20],cTemp[20];否则将定义二维指针数组。
2)scanf("%s",&Name[i]);改为scanf("%s",Name[i]);因为Name[i]是数组类型,数组类型数组名就是
自己首地址。

⑶ 在c语言编程中 怎样按名次输出同学的姓名和学号

#include<stdio.h>
#include<malloc.h>
typedefstructstuInfo
{
intid;//学号
charname[10];//姓名
intscore;//成绩
structstuInfo*next;
}STUINFO;
voidprintfStu(STUINFO*stuHead);//打印学生链表
voidinputInfo(STUINFO*stuHead);//输入学生成绩信息
voidorderByScore(STUINFO*stuHead);//按照成绩名次排列。
intmain()
{
STUINFO*stuHead=(STUINFO*)malloc(sizeof(STUINFO));
stuHead->next=NULL;

inputInfo(stuHead);
printfStu(stuHead);
printf("按照名次排列,依次为:第一名、第二名、第三名。。。 ");
orderByScore(stuHead);
printfStu(stuHead);
}
voidprintfStu(STUINFO*stuHead)
{
printf("学号姓名成绩 ");
while(stuHead->next!=NULL)
{
printf("%d%s%d ",stuHead->next->id,stuHead->next->name,stuHead->next->score);
stuHead=stuHead->next;
}
}
voidinputInfo(STUINFO*stuHead)
{
intid;
STUINFO*stuTail=NULL;
STUINFO*stuNew=NULL;
while(1)
{
stuNew=(STUINFO*)malloc(sizeof(STUINFO));
printf("输入学生的学号、姓名、成绩(学号输入负数结束输入):");
scanf("%d",&id);
if(id<0)
break;
else
stuNew->id=id;
scanf("%s%d",stuNew->name,&stuNew->score);
stuNew->next=NULL;
if(stuHead->next==NULL)
stuHead->next=stuNew;
else
stuTail->next=stuNew;
stuTail=stuNew;
}
}
voidorderByScore(STUINFO*stuHead)
{
STUINFOstuSave;
STUINFO*stuCurrent=stuHead->next;
STUINFO*stuNext=NULL;
while(stuCurrent!=NULL)//冒泡排序,链表节点成员值交换,链表指针不变
{
stuNext=stuCurrent->next;
while(stuNext!=NULL)
{
if(stuCurrent->score<stuNext->score)
{
stuSave=*stuCurrent;
*stuCurrent=*stuNext;
*stuNext=stuSave;
stuNext->next=stuCurrent->next;
stuCurrent->next=stuSave.next;
}
stuNext=stuNext->next;
}
stuCurrent=stuCurrent->next;
}
}

⑷ 学生成绩名次表c语言代码

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
int num;
int score;
int order;
}stu;

void classorder(stu s[], int total, int m, int n);
void gradeorder(stu s[], int total);

int main()
{
stu s[10000], p[10000];
int i, j, k, count;
int n, m;
printf("输入班级数 m 和每班人数 n\n");
scanf("%d%d",&m,&n);
k = 0, count = 1;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
s[k].num = count++;
s[k].score = rand()%100+1;
k++;
}
}
for (i = 0; i < k; i++)
p[i] = s[i];
classorder(s,k,m,n);
gradeorder(p,k);
return 0;
}

void gradeorder(stu s[], int total)
{
int i, j;
stu temp;
for (i = 0; i < total-1; i++)
{
for (j = i+1; j < total; j++)
{
if (s[i].score < s[j].score )
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
s[0].order = 1;
for (i = 1; i < total; i++)
{
if (s[i].score == s[i-1].score)
s[i].order = s[i-1].order ;
else
s[i].order = s[i-1].order +1;
}
printf ("年级总排名:\n学号\t成绩\t名次\n");
for (i = 0; i < total; i++)
printf("%4d\t%4d\t%4d\n",s[i].num ,s[i].score ,s[i].order );
}

void classorder(stu s[], int total, int m, int n)
{
int i, k, h;
stu temp;
for (i = 0; i < m; i++)
{
k = i*n;
for (;k < (i+1)*n-1; k++)
{
for (h = k+1; h < (i+1)*n; h++)
{
if (s[k].score < s[h].score )
{
temp = s[k];
s[k] = s[h];
s[h] = temp;
}
}
}
k = i*n;
s[k].order = 1;
for (k = i*n+1; k < (i+1)*n; k++)
{
if (s[k].score == s[k-1].score )
s[k].order = s[k-1].order ;
else
s[k].order = s[k-1].order + 1;
}
printf ("%d 班排名:\n学号\t成绩\t名次\n",i+1);
for (k = i*n; k < (i+1)*n; k++)
printf("%4d\t%4d\t%4d\n",s[k].num ,s[k].score ,s[k].order );
printf ("\n");
}
}

⑸ C语言编程 有100个学生,试编程出按总分排名的名次表,打印出形式为:名次,学号,总分.

#include <iostream>
#include <algorithm>
#include <iomanip>

using namespace std;

const int Size = 100; // 学生人数

struct Student
{
int score;
int num;
inline friend bool operator < ( const Student &s1, const Student &s2 )
{
return s1.score > s2.score;
}
};

Student Stu[ Size ];

void init( )
{
int i;
for ( i = 0; i < Size; i++ )
{
cout << "请输入第" << i + 1 << "个学生的学号和成绩:";
cin >> Stu[ i ].num >> Stu[ i ].score;
}
}

void print( )
{
int i;
cout << setw( 6 ) << "名次" << setw( 6 ) << "学号" << setw( 6 ) << "总分" << endl;
for ( i = 0; i < Size; i++ )
cout << setw( 6 ) << i + 1
<< setw( 6 ) << Stu[ i ].num
<< setw( 6 ) << Stu[ i ].score << endl;
}

int main( )
{
init( );
sort( Stu, Stu + Size );
print( );
return 0;
}

⑹ C语言成绩排完了,怎么把名次、学号打出来

用二维数组,每行对应一个学生的信息。每行5个元素。
排完后按照元素索引值打印出学号和排名。

⑺ C语言成绩排名次。

#include<stdio.h>
#include<stdlib.h>
typedefintunit;//可改为double型
intcmp(constvoid*a,constvoid*b)
{
unitA=*(unit*)a;
unitB=*(unit*)b;
if(A<B)return1;
if(A>B)return-1;
return0;
}
inti,j,k,m,n;
unit*data;
intmain()
{
scanf("%d",&n);//输入人数
data=(unit*)malloc(n*sizeof(unit));
for(i=0;i<n;i++)
{
if(sizeof(unit)==sizeof(int))scanf("%d",&data[i]);
elseif(sizeof(unit)==sizeof(double))scanf("%lf",&data[i]);
}
qsort(data,n,sizeof(data[0]),cmp);
for(i=0;i<n;i++)
{
if(sizeof(unit)==sizeof(int))printf("%d",data[i]);
elseif(sizeof(unit)==sizeof(double))printf("%lf",data[i]);
}
}

从高到低排分数

⑻ c语言编程,输出10位同学的成绩及其所对应的名次。(相同的成绩及名次可以不重复输出)

#include<stdio.h>
structstudent
{
charszName[100];
intscore;//成绩

//等号重载
studentoperator=(student&st)
{
sprintf(szName,st.szName);

score=st.score;
return*this;
}
};

intmain()
{
constintstuCount=10;
studentstuArray[stuCount];

for(inti=0;i<stuCount;i++)
{
printf("请输入第%d个学生的姓名成绩 ",(i+1));
scanf("%s%d",
stuArray[i].szName,
&stuArray[i].score);
}

//排序
for(inti=0;i<stuCount;i++)
{
for(intj=0;j<stuCount-i-1;j++)
{
if(stuArray[j+1].score>stuArray[j].score)
{
studentstu=stuArray[j];
stuArray[j]=stuArray[j+1];
stuArray[j+1]=stu;
}
}
}

//打印
printf("名次 姓名 成绩 ");

for(inti=0;i<stuCount;i++)
{
printf("%d %s %d ",(i+1),stuArray[i].szName,stuArray[i].score);
}

return0;
}

运行结果如下:

⑼ C语言如何打印一个数组排列组合

N个元素中取出M个元素的所有排列
#include <stdio.h> #define MAX 10int used[MAX]; int result[MAX]; int M, N;void print() { int i; for(i = 0; i < M; i++) printf("%d ", result[i]); printf("\n");}void Perm(int step) { int i; if (step == M) print(); else for(i = 0; i < N; i++) if (!used[i]) { used[i] = 1; result[step] = i + 1; Perm(step + 1); used[i] = 0; }}main() { scanf("%d %d", &M, &N); Perm(0); }

N个元素中取出M个元素的所有组合

#include<stdio.h>#define MAX 20int c[MAX] = {0};int M, N;void print() { int i; for(i = 0; i < M; i++) printf("%d", c[i + 1]); printf("\n");}void Comp(int m) { if (m == M + 1) print(); else for(c[m] = c[m - 1] + 1; c[m] <= N - M + m; c[m]++) Comp(m + 1);}void main() { scanf("%d %d", &M, &N); Comp(1);}