关于C语言数组的一道题
创建一个表示5名学生成绩的数组,对成绩数组赋值,并设计三个函数分别实现以下功能:1、设计一个函数s用于查找某人的成绩,并显示位置。2、设计一个函数f用于统计需要补考的人数...
创建一个表示5名学生成绩的数组,对成绩数组赋值,并设计三个函数分别实现以下功能:
1、设计一个函数s用于查找某人的成绩,并显示位置。
2、设计一个函数f用于统计需要补考的人数。
3、设计一个函数g对成绩进行降序排序。 展开
1、设计一个函数s用于查找某人的成绩,并显示位置。
2、设计一个函数f用于统计需要补考的人数。
3、设计一个函数g对成绩进行降序排序。 展开
1个回答
展开全部
按照你的题目实现如下,在查找某个分数的时候,实现了如果查找不到,则重新输入的功能,当然了,你也可以去掉
#include <stdio.h>
#include "string.h"
#define STUS 5 //define the amount of the students
struct student{
char name[20];
float score ;
}stus[STUS];
int s(char *nm);
int f();
void g();
int main(int argc,char *argv[]){
int i,noPass = 0,res = 0;
char des[20];
printf("input names and scores:\n");
for (i=0;i<STUS;i++)
scanf("%s%f",stus[i].name,&stus[i].score);
printf("your input is:\nname\t\tscore\n");
for (i=0;i<STUS;i++)
printf("%s\t\t%.2f\n",stus[i].name,stus[i].score);
//test s();
printf("input someone's name you want:\n");
scanf("%s",des);
res = s(des);
printf("the result index is %d\n",res);
//test f();
//printf("the amount of not passed:\n");
noPass = f();
printf("and then the not passed count is %d\n",noPass);
//test g();
g();
printf("after sorted:\n");
for (i = 0;i<STUS;i++)
printf("%8s-->%.1f\n",stus[i].name,stus[i].score);
printf("\n");
return 0;
}
/*find a score by name,if there is no that name,input again*/
int s(char *nm){
int i,temp = 0;
char tt[20];
for (i=0;i<STUS;i++)
if (strcmp(stus[i].name,nm)==0){
temp = i;
break;
}else
temp = -1;
if(temp==-1){
printf("there is no this name,input again!\n");
scanf("%s",tt);
temp = s(tt);
}
return temp;
}
/*count the score which not passed*/
int f(){
int i,res=0;
for (i=0;i<STUS;i++)
if (stus[i].score<60)
res++;
return res;
}
/*sorted desc by score*/
void g(){
struct student temp;
int i,j,k=0;
//float ss[5];
//for (i=0;i<5;i++)
//ss[i] = stus[i].score;
for (i=0;i<STUS;i++){
k = i;
for (j=i+1;j<STUS;j++)
//if (ss[j]>ss[k])
if(stus[j].score>stus[k].score)
k = j;
if (k!=i)
{
temp = stus[i];
stus[i] = stus[k];
stus[k] = temp;
}
}
}
#include <stdio.h>
#include "string.h"
#define STUS 5 //define the amount of the students
struct student{
char name[20];
float score ;
}stus[STUS];
int s(char *nm);
int f();
void g();
int main(int argc,char *argv[]){
int i,noPass = 0,res = 0;
char des[20];
printf("input names and scores:\n");
for (i=0;i<STUS;i++)
scanf("%s%f",stus[i].name,&stus[i].score);
printf("your input is:\nname\t\tscore\n");
for (i=0;i<STUS;i++)
printf("%s\t\t%.2f\n",stus[i].name,stus[i].score);
//test s();
printf("input someone's name you want:\n");
scanf("%s",des);
res = s(des);
printf("the result index is %d\n",res);
//test f();
//printf("the amount of not passed:\n");
noPass = f();
printf("and then the not passed count is %d\n",noPass);
//test g();
g();
printf("after sorted:\n");
for (i = 0;i<STUS;i++)
printf("%8s-->%.1f\n",stus[i].name,stus[i].score);
printf("\n");
return 0;
}
/*find a score by name,if there is no that name,input again*/
int s(char *nm){
int i,temp = 0;
char tt[20];
for (i=0;i<STUS;i++)
if (strcmp(stus[i].name,nm)==0){
temp = i;
break;
}else
temp = -1;
if(temp==-1){
printf("there is no this name,input again!\n");
scanf("%s",tt);
temp = s(tt);
}
return temp;
}
/*count the score which not passed*/
int f(){
int i,res=0;
for (i=0;i<STUS;i++)
if (stus[i].score<60)
res++;
return res;
}
/*sorted desc by score*/
void g(){
struct student temp;
int i,j,k=0;
//float ss[5];
//for (i=0;i<5;i++)
//ss[i] = stus[i].score;
for (i=0;i<STUS;i++){
k = i;
for (j=i+1;j<STUS;j++)
//if (ss[j]>ss[k])
if(stus[j].score>stus[k].score)
k = j;
if (k!=i)
{
temp = stus[i];
stus[i] = stus[k];
stus[k] = temp;
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询