#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <windows.h>
typedef struct //结构体
{
char name[20]; //学生姓名
char No[20]; //学号
float en; //英语成绩
float math; //数学成绩
float program; //程序设计成绩
float sum; //总成绩
} STUDENT;
STUDENT* s=NULL; //定义一个指向结构体的指针,即结构体动态数组
char work_dir[100]={'\0'}; //程序绝对路径
char data_filename[100]={'\0'}; //数据文件名称(绝对路径)
int count=0; //计数
int main()
{
_getcwd(work_dir,100); //获取完整路径
strcpy(data_filename,work_dir);
strcat(data_filename,"\\data.dat"); //拼接成数据文件名称
printf("请输入一共有多少个学生 : ");
scanf("%d",&count);
if(count>0) //如果输入的学生数大于0,
{ //则构建一个结构体数组
s=(STUDENT*)malloc(sizeof(STUDENT)*count);
}
else //如果学生数不大于0,则退出程序
{
printf("\n输入的数过小, 程序将退出!");
_getch();
return 0;
}
int i;
for(i=0;i<count;i++) //此for循环为输入count个学生数据,各数据间用空格分隔
{
printf("\n请输入第%d个(%d/%d)学生信息\n格式:姓名 学号 外语 数学 程序设计(中间用空格间隔):\n",i+1,i+1,count);
fflush(stdin);
scanf("%s %s %f %f %f",s[i].name,s[i].No,&s[i].en,&s[i].math,&s[i].program);
s[i].sum=s[i].en+s[i].math+s[i].program;
}
////写入数据文件---开始,(文件结构为ini文件,具体可打开该文件查看)////
char ch[20]={'\0'};
char value[20]={'\0'};
sprintf(ch,"%d",count);
WritePrivateProfileString("COUNT","count",ch,data_filename);
for(i=0;i<count;i++)
{
sprintf(ch,"%d",i+1);
WritePrivateProfileString(ch,"姓名",s[i].name,data_filename);
WritePrivateProfileString(ch,"学号",s[i].No,data_filename);
sprintf(value,"%.1f",s[i].en);
WritePrivateProfileString(ch,"外语",value,data_filename);
sprintf(value,"%.1f",s[i].math);
WritePrivateProfileString(ch,"数学",value,data_filename);
sprintf(value,"%.1f",s[i].program);
WritePrivateProfileString(ch,"程序设计",value,data_filename);
}
printf("\n\n信息已保存在%s文件中",data_filename);
////写入数据文件---结束/////////////////////////////////////////////
fflush(stdin);
_getch();
printf("\n\n程序设计成绩为85分的学生:");
printf("\n\n姓名 学号 外语 数学 程序设计\n");
int find=0;
for(i=0;i<count;i++) //此for循环为查找程序设计成绩为85分的学生并输出
{
if(s[i].program==85)
{
find++;
printf("\n%s %s %.1f %.1f %.1f",s[i].name,s[i].No,s[i].en,s[i].math,s[i].program);
}
}
printf("\n\n共有%d个学生",find);
////排序---开始////
STUDENT stu;
int j;
for(i=0;i<count-1;i++)
{
for(j=0;j<count-1-i;j++)
{
if(s[j].sum<s[j+1].sum)
{
stu=s[j];
s[j]=s[j+1];
s[j+1]=stu;
}
}
}
////排序---结束////
////以下为输出排序后的数据////
printf("\n\n全部学生按总分由高到低的顺序排列为:\n\n");
printf("姓名 学号 外语 数学 程序设计 总成绩\n");
for(i=0;i<count;i++)
{
printf("\n%s %s %.1f %.1f %.1f %.1f",s[i].name,s[i].No,s[i].en,s[i].math,s[i].program,s[i].sum);
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考