C语言~输入5个学生的学号,成绩,按成绩排序(升序),查找90分以上的
1,输入5个学生的学号、成绩,
2,按成绩排序(升序),
3,查找成绩90分以上。并输出2,3的结果。 展开
代码:
#include<stdio.h>
struct student
{
int num,score[3],age;
char name[20];
float aver;
}stu[1000];
main()
{
int i,j,n;
struct student temp;
/*注意:变量temp的类型与数组stu的元素类型为相同结构体的时候,才可交换两个结构体数组元素,所以此处需要定义temp的类型*/
printf("请输入学生人数:\n");
scanf("%d",&n);
printf("请按顺序输入名字、学号、年龄、分数:\n");
for(i=0;i<n;i++)
{
scanf("%s",&stu<i>.name);
scanf("%d",&stu<i>.num);
scanf("%d",&stu<i>.age);
for(j=0;j<3;j++)
scanf("%d",&stu<i>.score[j]);
}
for(i=0;i<n;i++)
{int sum=0;
for(j=0;j<3;j++)
sum+=stu<i>.score[j];
stu<i>.aver=sum/3.0;
}
for(i=0;i<n-1;i++)/*利用冒泡排序法按平均分高低排序*/
{for(j=0;j<n-i-1;j++)
{
if(stu[j].aver>stu[j+1].aver)
{temp=stu[j];/*此处交换的应当是数组元素,而不是平均分*/
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
printf("学生信息如下(姓名、学号、年龄、成绩、平均分):\n");
for(i=0;i<n;i++)
{
printf("%s%d%d",stu<i>.name,stu<i>.num,stu<i>.age);
for(j=0;j<3;j++)
printf("%d",stu<i>.score[j]);
printf("%.2f\n",stu<i>.aver);
}
}
扩展资料:
头文件#include<stdio.h>中
stdio.h是stand input&output的缩写,意思是标准输入输出头文件。凡是用到标准输入输出函数,就要调用该头文件。
查看stdio.h目录下包含哪些函数:主要有文件访问、二进制输入/输出、格式化和非格式化输入/输出、文件定位、错误处理、文件操作等。
具体打开自己的VS安装目录,找到include文件夹,打开include夹下面的stdio.h文件即可查看
(C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcpackages\IntelliSense\iOS\OSS\musl-1.1.10\include)
常用标准输入输出函数:
scanf()从屏幕格式输入
printf()格式输出到屏幕
getchar()从屏幕得到一个字符
putchar()字符输出到屏幕
gets()从屏幕得到一个字符串
puts()字符串输出到屏幕
fscanf()从磁盘格式输入
fprintf()格式输出到磁盘
fgetc()从磁盘得到一个字符
fputc()字符输出到磁盘
fgets()从磁盘得到一个字符串
fputs()字符串输出到磁盘
#号是预处理语句,表明在编译之前预先进行处理。
.h是header file的缩写,表面这是一个头文件。
include是文件包含命令,后面跟着引号""或者尖括号<>,意思是将引号或尖括号内指定的文件包含到本程序中,成为本程序的一部分,而包含的文件通常是由系统提供的。
帮你现写的一个:
#include <stdio.h>
#define N 5
typedef struct student
{
int id; //学号
float score; //成绩
}stu;
void ReadDat(stu a[],int n);//录入学生信息
void jsSort(stu a[],int n); //按成绩排序
void WriteDat(stu a[],int n);//输出学生信息
void main()
{
stu s[N];
ReadDat(s,N);
jsSort(s,N);
WriteDat(s,N);
}
void ReadDat(stu a[],int n)
{
printf("下面开始录入学生信息!\n\n");
for(int i=0;i<n;i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%d",&a[i].id);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%f",&a[i].score);
}
}
void jsSort(stu a[],int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].score>a[j].score)
{
stu temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
void WriteDat(stu a[],int n)
{
stu b[N];
int cnt = 0;
printf("所有学生按成绩由低到高排序如下:\n");
printf("学号\t成绩\n");
for(int i=0;i<n;i++)
{
printf("%d\t%.1f\n",a[i].id,a[i].score);
if(a[i].score >= 90)
{
b[cnt]=a[i];
cnt++;
}
}
printf("90分以上的学生共有%d个,他们的信息如下:\n",cnt);
printf("学号\t成绩\n");
for(i=0;i<cnt;i++)
{
printf("%d\t%.1f\n",b[i].id,b[i].score);
}
}
运行结果如下:
虽然第一步看起来有点麻烦 不过对着呢 谢了!
struct student
{
char szName[100];
int score; // 成绩
// 等号重载
student operator=(student &st)
{
sprintf(szName, st.szName);
score = st.score;
return *this;
}
};
int main()
{
const int stuCount = 5;
student stuArray[stuCount];
printf("姓名 成绩:\n");
for (int i = 0; i < stuCount; i++)
{
scanf("%s %d",
stuArray[i].szName,
&stuArray[i].score);
}
// 排序
for (int i = 0; i < stuCount; i++)
{
for (int j = 0; j < stuCount - i -1; j++)
{
if (stuArray[j + 1].score < stuArray[j].score)
{
student stu = stuArray[j];
stuArray[j] = stuArray[j + 1];
stuArray[j + 1] = stu;
}
}
}
printf("排序后的学生信息如下: \n");
for (int i = 0; i < stuCount; i++)
{
printf("%s %d\n", stuArray[i].szName, stuArray[i].score);
}
printf("90分以上的学生信息如下: \n");
for (int i = 0; i < stuCount; i++)
{
if (90 <= stuArray[i].score)
{
printf("%s %d\n", stuArray[i].szName, stuArray[i].score);
}
}
return 0;
}
运行结果如下:
欢迎采纳!
不好意思 你可能没有看清楚,是学号,成绩,不是姓名成绩。不过还是谢了
你不过弱的这么很,把姓名改成学号不就行了