栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

大一C语言文件作业(源代码)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

大一C语言文件作业(源代码)

 **源代码:

#include
#include
#define num 7// 宏定义学生人数

int tot1[10], tot2[10], tot3[10];// 各个分数段的人数
double ave[10];
double sum[10];// 储存所有学生同一科目的总分以计算每个课程平均分
char enter = 'n';// 换行 方便使用

struct student{// 每个学生都要输入的信息
    char name[10][5];
    char ID[30];// 不能太短,否则会影响文件中的打印格式
    double grade1, grade2, grade3;// 三个学科的成绩
    double average;// 学生平均分
    int rank;
}stu[num+1];

void Add_Student();// 输入学生信息并计算平均分
void sort();// 把平均分排序
void Grade_tot();// 统计各个分数段的学生数
void Same_();// 处理平均分相同的情况
void Student_Data();// 存储学生信息
void Average_Grade();// 计算每科平均分
void Save_Average();// 将平均分存入d:/average.txt文件 over!


void Add_Student(){
    for(int i = 1; i <= num; i++){
        printf("                  快输入学生信息哟~                      n");
        printf("               t请输入第%d位学生的信息:                   n",i);
        printf("<姓名>:"); scanf("%s",stu[i].name);
        printf("<学号>:"); scanf("%s",stu[i].ID);
        printf("<课程1的成绩>:"); scanf("%lf",&stu[i].grade1);
        printf("<课程2的成绩>:"); scanf("%lf",&stu[i].grade2);
        printf("<课程3的成绩>:"); scanf("%lf",&stu[i].grade3);
        stu[i].average = (stu[i].grade1 + stu[i].grade2 + stu[i].grade3) / 3.0;// 计算所有学生的平均分
    }
}

void sort(int l, int r){// 这里用了快排排序将平均分按从大到小排列(处理的数据更多)
    if(l >= r) return ;
    int i = l, j = r;
    struct student key = stu[i];
    while(i < j){
        while(i < j && stu[j].average <= key.average) j--;
        stu[i] = stu[j];
        while(i < j && stu[i].average >= key.average) i++;
        stu[j] = stu[i];
    }
    stu[i] = key;
    sort(l, i - 1);
    sort(i + 1, r);
//     for(int i = 1; i < num; i++){
//         for(int j = 1; j < num; j++){
//             if(stu[j].average < stu[j + 1].average){
//                 struct student t = stu[j];
//                 stu[j] = stu[j + 1];
//                 stu[j + 1] = t;
//             }
//         }
//     }// 冒泡排序的方法也可以
}

void Grade_tot(){// 统计各个分数段的学生数
    for(int i = 1; i <= num; i++){
        if(stu[i].grade1 < 60) tot1[0]++;
        if(stu[i].grade1 >= 60 && stu[i].grade1 < 70) tot1[1]++;
        if(stu[i].grade1 >= 70 && stu[i].grade1 < 80) tot1[2]++;
        if(stu[i].grade1 >= 80 && stu[i].grade1 < 90) tot1[3]++;
        if(stu[i].grade1 >= 90) tot1[4]++;// 课程一
        if(stu[i].grade2 < 60) tot2[0]++;
        if(stu[i].grade2 >= 60 && stu[i].grade2 < 70) tot2[1]++;
        if(stu[i].grade2 >= 70 && stu[i].grade2 < 80) tot2[2]++;
        if(stu[i].grade2 >= 80 && stu[i].grade2 < 90) tot2[3]++;
        if(stu[i].grade2 >= 90) tot2[4]++;// 课程二
        if(stu[i].grade3 < 60) tot3[0]++;
        if(stu[i].grade3 >= 60 && stu[i].grade3 < 70) tot3[1]++;
        if(stu[i].grade3 >= 70 && stu[i].grade3 < 80) tot3[2]++;
        if(stu[i].grade3 >= 80 && stu[i].grade3 < 90) tot3[3]++;
        if(stu[i].grade3 >= 90) tot3[4]++;// 课程三
    }
}

void Same_(){// 处理平均分相同的情况
    int m = num;
    int Rank = 1;
    for(int i = 1; i <= num; i++){// 此时平均分已经排好序了
        if(stu[i].average == stu[i + 1].average){
            stu[i].rank = Rank;
            continue;
        }
        stu[i].rank = Rank;
        Rank++;
    }
}

void Student_Data(){// 存储学生信息
    FILE *fp;
    fp = fopen("d://st.txt", "wt+");// 读写一个二进制文件
    fprintf(fp, "ttttttt   成绩单   ttttt%c", enter);
    fprintf(fp, "t排名tt学生姓名tt学生学号tt课程一成绩t课程二成绩t课程三成绩t平均分t%c", enter);
    for(int i = 1; i <= num; i++){
		fprintf(fp, "t%4dtt%7st       %15s    t%10.1ftt%10.1ftt%10.1ft            %10.1ft%c", stu[i].rank, stu[i].name, stu[i].ID,stu[i].grade1, stu[i].grade2, stu[i].grade3, stu[i].average, enter);
    }// 尤其注意打印格式
    printf("<学生信息已存入d:/st.txt文件中>n");
    fclose(fp);
}

void Average_Grade(){// 计算每科平均分
    for(int i = 1; i <= num; i++){
        sum[1] = sum[1] + stu[i].grade1;
        sum[2] = sum[2] + stu[i].grade2;
        sum[3] = sum[3] + stu[i].grade3;
    }
    for(int i = 1; i < 4; i++){
        ave[i] = sum[i] / (double)num;
    }
}

void Save_Average(){// 将计算完成的数据存入d:/average.txt文件
    FILE *fp;
    fp = fopen("d://average.txt", "wt+");
    fprintf(fp, "ttttt                 各课程平均分情况             tt%c",enter);
    fprintf(fp, "tttt    课程一平均分t课程二平均分t课程三平均分t%c",enter);
    fprintf(fp, "tttt%10.1lftt%10.1lftt%10.1lft%c",ave[1],ave[2],ave[3],enter);
    printf("<平均分计算完成,已将数据存储到d:/average.txt文件中>%c", enter);
    fprintf(fp, "tttt                                 各课程分数段分布情况                                 t%c",enter);
    fprintf(fp, "t课程一人数分布情况t90分以上:%d人t80~90分:%d人t70~80分:%d人t60~70分:%d人t60分以下:%d人tt%c",tot1[4],tot1[3],tot1[2],tot1[1],tot1[0],enter);
    fprintf(fp, "t课程二人数分布情况t90分以上:%d人t80~90分:%d人t70~80分:%d人t60~70分:%d人t60分以下:%d人tt%c",tot2[4],tot2[3],tot2[2],tot2[1],tot2[0],enter);
    fprintf(fp, "t课程三人数分布情况t90分以上:%d人t80~90分:%d人t70~80分:%d人t60~70分:%d人t60分以下:%d人tt%c",tot3[4],tot3[3],tot3[2],tot3[1],tot3[0],enter);
    printf("<各科分数段人数统计完成,已将数据存入d:/average.txt文件中>%c", enter);
    fclose(fp);
}

int main()
{
    FILE *fp;
    printf("*****************这里是学生成绩管理系统*********************n");
    printf("                  <请录入本班学生信息>                      n");
    printf("         <请分别输入本班学生的姓名、学号及三门考试成绩>        n");
    printf("         <系统将按平均分排名的信息导入d:\st.txt文件中>    n");
    printf("       <本系统将自动将平均分等级导入d:\average.txt文件中>    n");
    printf("******************下面请依次输入学生信息********************n");// 开场白hhh
    
    Add_Student();// 输入学生信息并计算平均分
    sort(1, num);// 把平均分排序
    Grade_tot();// 统计各个分数段的学生数
    Same_();// 处理平均分相同的情况
    Student_Data();// 存储学生信息
    Average_Grade();// 计算每科平均分
    Save_Average();// 将平均分存入d:/average.txt文件 over!

    return 0;
}

***这是借鉴csdn一篇博客所写,但我现在找不到那篇了。。。T_T

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号