C语言简单基础题目!

期末类型题~~跪谢!!!按题目要求!谢谢!
编程实现学生信息管理。建立学生结构体类型(学号、姓名、年龄、地址、三门课程成绩、平均成绩、成
绩等级、班级排名)。该程序应包含如下函数,函数功能描述如下:
1) 输入函数。主要完成录入学生信息:学号、姓名、年龄、地址、三门课程成绩。注:平均成绩、成绩等级、班级排名是通过函数算出来的,不要直接录入。
2) 求平均值函数。为每个学生计算三门课程的平均成绩。
3) 计算成绩等级函数。平均成绩>=90等级为A, 80<=平均成绩<90等级为B,70<=平均成绩 <80 为C;60<=平均成绩<70为D,平均成绩<60等级为E。
4) 计算学生成绩排名函数。为每个学生计算班级成绩排名的名次,即班级排名。
5) 输出函数。按照学号从小到大顺序,输出所有学生的所有信息。(一个学生信息占一行)

#include <stdio.h>
struct student
{
int number;
char name[20];
int age;
char address[50];
float class1grade;
float class2grade;
float class3grade;
float avegrade;
char ranklevel;
int rank;
};
student schoolstu[100];
void input(int n) //学生人数n。
{
for(int i=0;i<n;i++)
{
scanf("%d%s%d%s",&schoolstu[i].number,schoolstu[i].name,&schoolstu[i].age,schoolstu[i].address);
scanf("%f%f%f",&schoolstu[i].class1grade,&schoolstu[i].class2grade,&schoolstu[i].class3grade);
}
}
void average(int n)
{
for(int i=0;i<n;i++)
{
schoolstu[i].avegrade=(schoolstu[i].class1grade+schoolstu[i].class2grade+schoolstu[i].class3grade)/3;
}
}
void gradeclass(int n)
{
for(int i=0;i<n;i++)
{
if(schoolstu[i].avegrade>=90) schoolstu[i].ranklevel = 'A';
else if(schoolstu[i].avegrade>=80 && schoolstu[i].avegrade<90) schoolstu[i].ranklevel = 'B';
else if(schoolstu[i].avegrade>=70 && schoolstu[i].avegrade<80) schoolstu[i].ranklevel = 'C';
else if(schoolstu[i].avegrade>=60 && schoolstu[i].avegrade<70) schoolstu[i].ranklevel = 'D';
else schoolstu[i].ranklevel = 'E';
}
}
void rank(int n)
{
int temp=1;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(schoolstu[i].avegrade<schoolstu[j].avegrade)
temp++;
}
schoolstu[i].rank = temp;
}
}
void print(int n)
{
for(int i=0;i<n;i++)
{
printf("%d %s %d %s ",schoolstu[i].number,schoolstu[i].name,schoolstu[i].age,schoolstu[i].address);
printf("%f %f %f %f ",schoolstu[i].class1grade,schoolstu[i].class2grade,schoolstu[i].class3grade,schoolstu[i].avegrade);
printf("%c %d\n",schoolstu[i].ranklevel,schoolstu[i].rank);
}
}
int main()
{
int n=0;
scanf("%d",&n);
input(n);
average(n);
gradeclass(n);
rank(n);
print(n);
return 0;
}追问

运行出错

追答

不知道具体是什么错误:不能编译还是结果错误呢?

排名函数确实有点问题:rank()中,应该把 int temp=1;放在第一个for循环里面。

如果是编译错误。就得看你的编译器了:VC++6.0写的,这个程序没有什么特别库函数,应该都是支持的。

新代码:


void rank(int n)

{

 for(int i=0;i<n;i++)

 {

int temp=1;

  for(int j=0;j<n;j++)

  {

   if(schoolstu[i].avegrade<schoolstu[j].avegrade)

    temp++;

  }

  schoolstu[i].rank = temp;

 }

}

void print(int n)

{

 for(int i=0;i<n;i++)

 {

  printf("%d  %s  %d  %s  ",schoolstu[i].number,schoolstu[i].name,schoolstu[i].age,schoolstu[i].address);

  printf("%.2f  %.2f  %.2f  %.2f  ",schoolstu[i].class1grade,schoolstu[i].class2grade,schoolstu[i].class3grade,schoolstu[i].avegrade);

  printf("%c  %d\n",schoolstu[i].ranklevel,schoolstu[i].rank);

 }

}


第一行,输入学生数: n

第二到n+1行,输入学生信息即可。

完整代码见附件。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-11
#include "stdio.h"

//定义链表的长度
#define NUMBER 10
typedef struct Student
{
int no;
char name[40];
int age;
char add[40];
int score[3];
int average;
struct Student * next;
}myStu;

myStu *stuTemp;
myStu * head;

int Input(myStu **pre);
int main()
{
myStu *pre;
stuTemp = (myStu*)malloc(sizeof(myStu));
if(myStu == NULL)
{
printf("申请内存错误!");
return -1;
}
//头结点
pre = (myStu*)malloc(sizeof(myStu));
if(myStu == NULL)
{
printf("申请内存错误!");
return -1;
}
head = pre;
pre->next = NULL;
for(int i = 0; i < NUMBER; i++)
{
if(Input(&pre) == -1)
{
return -1
}
}

}
int Input(myStu **pre)
{
myStu * p;
printf("请依次输入学号、姓名、年龄、地址、三门课程成绩:\n");
scanf("%d%s%d%s%d%d%d", stuTemp->no, stuTemp->name, stuTemp->age, stuTemp->add, stuTemp->score[0], stuTemp->score[1], stuTemp->score[2]);
//可以检查一下输入的内容
//保存增加到链表
p = (myStu *)malloc(sizeof(myStu));
if(p == NULL)
{
printf("申请内存错误!");
return -1;
}
(*pre)->next = p;
p->no = stuTemp->no;
p->name = stuTemp->name;
p->age = stuTemp->age;
p->add = stuTemp->add;
p->score[0] = stuTemp->score[0];
p->score[1] = stuTemp->score[1];
p->score[2] = stuTemp->score[2];
p->next = NULL;
*pre = p;
return 0;
}本回答被网友采纳
相似回答