① c语言中排名问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#definestatusint
#defineNAME30/*各类名称字数上限*/
#defineSTU100/*学生人数上限*/
#defineSUB10/*课程数上限*/
typedefstructrecord{
floatscore;/*成绩分数*/
}record;
typedefstructstudent{
intid;/*索引性质的id*/
intno;/*学号*/
charname[NAME];/*姓名*/
recordscores[SUB];/*各门课成绩分数*/
floattotalScore;/*总分*/
floataverageScore;/*平均分*/
intranking;/*名次*/
}student;
intsubNum=3;/*课程数*/
charsubject[SUB][NAME]={"数学","英语","计算机"};/*课程名称*/
/**********************以下为函数声明**********************/
intstuInfoEmpty(studentstu[],intstuNum);/*学生信息判空*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum);/*录入单个学生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum);/*录入全部学生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum);/*计算处理单个学生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum);/*计算处理全部学生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking);/*输出单个学生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking);/*输出全部学生信息*/
statusdescSort(studentstu[],intstuNum,intsubNum);/*按总分降序排列并录入名次*/
intgetCommand(void);/*输入命令编号*/
statusprintMeunText(void);/*打印菜单文本*/
statusrunMeun(studentstu[],intstuNum,intsubNum);/*调出菜单*/
/**********************以上为函数声明**********************/
intmain(void){
studentstu[STU]={-1};/*学生结构体数组*/
intstuNum;
inti;
runMeun(stu,stuNum,subNum);
return0;
}
/*学生信息判空*/
/*为空返回1;不空返回0*/
intstuInfoEmpty(studentstu[],intstuNum){
inti;
if(stuNum==0)
return1;
for(i=0;i<stuNum;i++)
if(stu[i].id==-1)
return1;
return0;
}
/*录入单个学生信息*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
scanf("%d",&stu[stuIndex].no);/*学号*/
if(stu[stuIndex].no==-1){/*学号录入-1以结束*/
stu[stuIndex].id=-1;
return-1;/*本次未录入*/
}
scanf("%s",&stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++){
scanf("%f",&stu[stuIndex].scores[i].score);
}/*各门课成绩分数*/
for(i=0;i<subNum;i++)
if(stu[stuIndex].scores[i].score>100||stu[stuIndex].scores[i].score<0)
return0;/*本次录入错误*/
return1;/*本次录入成功*/
}
/*录入全部学生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum){
inti,inputStatus,count;
puts("======================================================");
puts("录入学生信息");
puts("======================================================");
putchar(' ');
if(*stuNum!=0){
printf("已有%d名学生信息! ",*stuNum);
putchar(' ');
puts("继续录入以新增(学号录入-1以结束)↓↓");
putchar(' ');
}
else{
puts("请录入学生信息(学号录入-1以结束)↓↓");
putchar(' ');
}
/*录入信息之表头*/
puts("------------------------------------------------------");
printf(" 学号 姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
putchar(' ');
puts("------------------------------------------------------");
/*录入信息*/
count=0;
i=*stuNum;
while(1){
printf("第%d名学生 ",i+1);
stu[i].id=i+1;
inputStatus=inputStuInfo(stu,i,subNum);
if(inputStatus==1){
i++;
count++;
}
elseif(inputStatus==0){
putchar(' ');
puts("成绩输入错误!请重新输入↓");
continue;
}
elseif(inputStatus==-1)
break;
}
*stuNum+=count;
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
if(count!=0)
printf("本次%d名学生信息录入完毕!即将返回主菜单。 ",count);
else
printf("您本次未输入学生信息!即将返回主菜单。 ");
putchar(' ');
puts("按任意键继续...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*计算处理单个学生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
stu[stuIndex].totalScore=stu[stuIndex].averageScore=0;
/*计算总分*/
for(i=0;i<subNum;i++){
stu[stuIndex].totalScore+=stu[stuIndex].scores[i].score;
}
stu[stuIndex].averageScore=stu[stuIndex].totalScore/subNum;/*计算平均分*/
return1;
}
/*计算处理全部学生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum){
inti;
/*计算总分、平均分等*/
for(i=0;i<stuNum;i++)
calcStuInfo(stu,i,subNum);
return1;
}
/*输出单个学生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking){
inti;
if(inclRanking)
printf("%d ",stu[stuIndex].ranking);/*名次*/
printf("%d ",stu[stuIndex].no);/*学号*/
printf("%s ",stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++)/*各门课成绩分数*/
printf("%.2f ",stu[stuIndex].scores[i].score);
printf("%.2f ",stu[stuIndex].totalScore);/*总分*/
printf("%.2f ",stu[stuIndex].averageScore);/*平均分*/
putchar(' ');
return1;
}
/*输出全部学生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking){
inti;
if(stuInfoEmpty(stu,stuNum)){
puts("尚未录入学生信息!即将返回主菜单。");
putchar(' ');
puts("按任意键继续...");
putchar(' ');
fflush(stdin);
getch();
return0;
}
puts("======================================================");
puts("全部学生信息");
puts("======================================================");
putchar(' ');
if(inclRanking)
printf("%d名学生信息如下,按总分由高到低排列名次↓↓ ",stuNum);
else
printf("%d名学生信息如下↓↓ ",stuNum);
putchar(' ');
/*输出信息之表头*/
puts("------------------------------------------------------");
if(inclRanking)
printf("名次 ");
printf("学号 ");
printf("姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
printf("总分 ");
printf("平均分 ");
putchar(' ');
puts("------------------------------------------------------");
/*输出信息*/
for(i=0;i<stuNum;i++)
printStuInfo(stu,i,subNum,inclRanking);
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
puts("学生信息输出完毕!即将返回主菜单。");
putchar(' ');
puts("按任意键继续...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*按总分降序排序、录入名次并输出*/
statusdescSort(studentstu[],intstuNum,intsubNum){
inti,j;
studenttemp;
if(stuInfoEmpty(stu,stuNum))
return0;
/*按总分降序*/
for(i=0;i<stuNum-1;i++)
for(j=0;j<stuNum-1-i;j++)
if(stu[j].totalScore<stu[j+1].totalScore){
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
/*录入名次*/
for(i=0;i<stuNum;i++)
stu[i].ranking=i+1;
return1;
}
/*输入命令编号*/
intgetCommand(void){
intkey;/*命令编号*/
printf("请输入命令编号以开启操作:");
scanf("%d",&key);
returnkey;
}
/*打印菜单文本*/
statusprintMeunText(void){
puts("======================================================");
puts("学生信息管理");
puts("------------------------------------------------------");
printf("%4c 功能详情 ",'#');
puts("------------------------------------------------------");
printf("%4d 输入学生信息 ",1);
printf("%4d 按成绩由高到低排序 ",2);
printf("%4d 退出 ",7);
puts("======================================================");
putchar(' ');
return1;
}
statusrunMeun(studentstu[],intstuNum,intsubNum){
intkey;
do{
system("cls");/*清屏*/
printMeunText();/*打印菜单文本*/
key=getCommand();/*输入命令编号*/
putchar(' ');
switch(key){
case1:system("cls");inputAllStuInfo(stu,&stuNum,subNum);calcAllStuInfo(stu,stuNum,subNum);break;
case2:system("cls");descSort(stu,stuNum,subNum);printAllStuInfo(stu,stuNum,subNum,1);break;
case7:puts("程序结束! ");break;
default:puts("输入错误,请重新输入! 按任意键继续...");getch();break;
}
}while(key!=7);
getch();
return1;
}
运行结果
主菜单
② c程序设计,提示rank函数未声明,还有第二个和第三个else未配对,怎么修改呢
#include<stdio.h>
intx=0,y=0,z=0;
voidrank(inta,intb,intc)
{
if(a>b)
{
if(a>c)
{
if(b>c)
{
//cba
x=a,y=b,z=c;
}
else
{
//bca
x=a,y=c,z=b;
}
}
else
{
//bac
x=c,y=a,z=b;
}
}
else
{
if(a<c)
{
if(b>c)
{
//a<c<b
x=b,y=c,z=a;
}
else
{
//a<b<c
x=c,y=b,z=a;
}
}
else
{
if(b>c)
{
//c<a<b
x=b,y=a,z=c;
}
else
{
//a<b<c
x=c,y=b,z=a;
}
}
}
}
intmain()
{
inta=0,b=0,c=0;
scanf("%d,%d,%d",&a,&b,&c);
rank(a,b,c);
printf("%d,%d,%d ",x,y,z);
}
③ c语言中rank函数怎么用
c语言中rank函数是自定义的函数吧?如果是的话,怎么用,还必须看这个函数是怎么定义的了。
④ C语言中,如何生成身份证年份的随机数(用rank()函数),并校验身份证是否合法
最后4位数字中的前两位表示当地派出所的编码;
倒数第二位表示公民是男性还是女性(男性用单数,女性用双数);
最后一位数字是一个随机数,又称为校验码。 用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。
⑤ c语言--有关学生的成绩排名
小小我一般不搞这东西的,老生常谈。看你那么急,急人所难吧。程序已调试通过。
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define N 5
struct student
{
char num[6];
char name[8];
int score[4];
int All;
int rank;
} stu[5];
void input()
{
int i,m,j;
for(i=0;i<5;i++)
{ stu[i].All=0;
stu[i].rank=1;/* 名次预置初值 */
printf("\n请输入第 %d个学生数据\n",i+1);
printf("学号: ");
scanf("%s",stu[i].num);
printf("姓名: ");
scanf("%s",stu[i].name);
for(j=0;j<4;j++)
{
printf("成绩 %d:",j+1);
scanf("%d",&stu[i].score[j]);
stu[i].All=stu[i].All+stu[i].score[j];
}
}
printf("\n");
for(i=0;i<5;i++)
for(m=0;m<5;m++)
if(stu[i].All<stu[m].All)stu[i].rank++;
}
void print()/* stu[]是全局结构体变量,无需作为参数传递 ,函数无返回值声明为void型,不声明默认返回类型为int型 */
{
int i,j;
system("cls");/*为了增加可移植性,用这个代替clrscr(),因为clrscr()不是标准库函数*/
for(i=0;i<60;i++)printf("-");
printf("\n");
printf("| 学号 | 姓名 | 数学 | 英语 | 计算机| 哲学 |\n");
for(i=0;i<5;i++)
{
for(j=0;j<60;j++)
printf("-");
printf("\n");
printf("| %5s | %10s ",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("| %3d ",stu[i].score[j]);
printf("|\n");
}
for(i=0;i<60;i++)printf("-");
}
void print1()
{
int i,j;
system("cls");
for(i=0;i<77;i++)printf("-");
printf("\n");
printf("| 学号 | 姓名 | 数学 | 英语 | 计算机| 哲学 | 总分 | 名次|\n");
for(i=0;i<5;i++)
{
for(j=0;j<77;j++)
printf("-");
printf("\n");
printf("| %5s | %10s ",stu[i].num,stu[i].name);
for(j=0;j<4;j++)
printf("| %3d ",stu[i].score[j]);
printf("| %5d |",stu[i].All);
printf(" %2d |\n",stu[i].rank);
}
for(i=0;i<77;i++)printf("-");
}
int main()
{
int i,j;
for(j=1;j<5;j++)
{
system("cls");
printf("Please select:\n");
printf("1: input data.\n");
printf("2: print original data.\n");
printf("3: print the sorted data.\n");
printf("4: exit.\n");
scanf("%d",&i);
switch(i)
{
case 1 : input(); break; /* input()函数根本没有实参,没有实参怎么可以有形参勒?实参形参要对应哦,这里也不需要实参,下同 */
case 2 : print(); getch();break;
case 3 : print1();getch();break;
case 4 : break;
}
}
system("pause");
return 0;
}
/* 不要这样写: */
/* void input() */
/* struct student stu[]; */
/* 这不符合现在的ANSI的c99标准 ,现在被认为是错误的,要这样写 */
/* void input(struct student stu[]) 当然我说的是当需要传递参数的情况下 */
⑥ C语言游戏积分排序功能
把你的grade给改成int了,后面写入mark.txt也改成直接写int方便后面的读取,加了一个排名函数你看看,完整的在下面。还有楼主程序还不完善,比如我要是两次输入时
abc
abcdddddddd
得到的正确率照样是100%,可以继续改改
#include <string.h>
#include <stdio.h>
#include<conio.h>
void rank(int grade)
{
FILE *p;
int a[50],i=0,j,n,temp,flag;
p=fopen("mark.txt","r");
if(!p)
{
return;
}
while(!feof(p))
{
fscanf(p,"%d",&a[i]);
i++;
}//数组a读文件
n=i-1;//记录排行榜人数
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}//从大到小排序
for(i=0;i<n;i++)if(a[i]==grade)
{
flag=i;
break;
}//记录当前人员位置
printf("===Ranking List===\nRank\tGrades\n");
for(i=0;i<n;i++)
{
printf("%d\t%d%%",i+1,a[i]);
if(i==flag)printf("\tYour site");
printf("\n");
}//打印
fclose(p);
}
int main()
{
FILE *fp;
int grade;//建议设置int型
char c;
char correct_text[1000];/*声明输入要练习的内容*/
char typed_text[1000];/*声明对照上行进行打字练习*/
int totallength;/*声明内容长度*/
int typedlength;/*声明输入内容*/
int correctnum = 0;/*声明初始准确数为0*/
int i;
printf(" ******************************\n");
printf(" *------欢迎进入打字练习------*\n");
printf(" ******************************\n");
printf("please input the correct text:\n");
scanf("%s",correct_text);/*输入要练习的内容*/
printf("Now begin to test:\n");
scanf("%s",typed_text);
totallength = strlen(correct_text);/*得出输入的字符长度*/
typedlength = strlen(typed_text);/*得出是练习的字符长度*/
for(i = 0;i < totallength && i < typedlength; i++)
{
if(correct_text[i] == typed_text[i])
{
correctnum ++;/*运用循环结构,对打字练习时输 入的正确字符的个数自动加1*/
}
}
grade=correctnum*100/totallength;
printf("Your accuracy is %d%%",correctnum*100/totallength);/*得出练习的结果*/
fp=fopen("mark.txt","a");
fprintf(fp,"%d\n",grade);//建议文件直接写入int型方便后面的读入
fclose(fp);
printf("\nWanna see your ranking? y/n:");
c=getchar();//过滤回车
c=getchar();
if(c=='y'||c=='Y')rank(grade);
}
⑦ C语言学生成绩排名
举个例子,学生的成绩依次为:7,5,6,3,8,排名初始化为1,2,3,4,5
根据你的程序:
经过第一次循环,即i=0;j=0时,程序排序依旧为7,5,6,3,8;排名为:1,3,2,5,4
如果在往下循环执行,第五名同学的最高成绩“8”分,将永远处于第4名;
所以,有错误。。。
修改建议:
可以参考排序,每次循环总能得到一个最大值,将此最大值所在结构体的排名rank赋值:
大概如下:
for(i=0;i<5;i++)
{
for(j=0;j<4-i;j++)
{
if(student[j].total>student[j+1].total)
{
//temp也是结构体,交换
temp = student[j];
student[j] = student[j+1];
student[j+1] = temp;
}
}
student[j].rank = i+1;
}
也可以用结构体指针,不需要每次交换,只需要标记下最大值,然后赋予名次~
⑧ c语言,int rank(int key,int []a)是什么意思
这写错了吧?
应该是
int rank(int key,int a[])
用户自定义的函数,光看函数名和参数表,是不能确定其功能的,这是由编程者自己定义的。
照字面意思,是求key在a数组中的排名。
⑨ c语言; int rank=4; int* y = (int*)malloc(4 * rank * rank);//这句是什么意思
定义rank为整形数值为4,用malloc函数向内存申请存储空间,所申请空间的长度为(4*rank*rank)所占内存的长度,并将所申请的地址强制转换为整形指针类型,并将其付给指针*y。