• 12月17号


    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define N 3
    
    typedef struct students{
        
        int id;
        char name[20];//
        char subject[10];
        float perd;
        float mid;
        float final;
        float total;
        char level[10];
    
    }STU;
    
    void print(STU s[], int n);
    void input(STU s[],int n);
    int fail(STU s[] , STU a[], int n ); 
    void calc(STU s[], int n);
    void sort (STU s[], int n);
    int main(){
        
        STU s[N], a[N];
        int  k;
        
        printf("录入学生成绩信息:
    ");
        input(s, N);
        printf("
    ");
        
        printf("成绩处理...");
        printf("
    ");
        calc(s, N);
        
        k = fail(s, a, N);
        sort(s, N);
        
        printf("学生成绩排名情况:
    "); 
        printf("------------------
    ");
        print(s,N);
        
        printf("
    不及格学生信息:
    ");
        printf("----------------
    ");
        
        print(a, k);
        
        return 0;
    } 
    
    void input(STU s[],int n){
        
        int i;
        
        for(i = 0; i < n; i++)
                
            scanf("%d %s %s %f %f %f",&s[i].id, s[i].name, s[i].subject,&s[i].perd, &s[i].mid, &s[i].final);
    
    }
    
    void print(STU s[], int n){
        
        int i = 0;
        
        printf(" 学号   姓名  考试科目  平时成绩  期中成绩  期末成绩 总成绩 成绩等级
    "); 
        
        for(; i < n; i++)
            printf("%5d %6s %7s %8.1f %9.1f %9.1f %8.1f   %3s
    ",s[i].id, s[i].name, s[i].subject, s[i].perd, s[i].mid, s[i].final,s[i].total, s[i].level); 
    }
    
    void calc (STU s[], int n){
        int i;
        
        for(i = 0 ;i < n ; i++){
            s[i].total = s[i].perd * 0.2 + s[i].mid * 0.2 + s[i].final * 0.6;
            
            if(s[i].total >= 90) strcpy(s[i].level,"");
            else if(s[i].total >= 80 && s[i].total < 90) strcpy(s[i].level,"");
            else if(s[i].total >= 70 && s[i].total < 80) strcpy(s[i].level,"");
            else if(s[i].total >= 60 && s[i].total < 70) strcpy(s[i].level,"及格");
            else strcpy(s[i].level, "不及格"); 
        }
        
    }
    
    void sort(STU s[], int n){
        int i , j;
        float min;
        STU t;
        
        for(i =  n - 1; i > 0; i-- ){
            j = i - 1;
        
            min = s[i].total;
    
            for( ; j >= 0; j--) {
                if(s[j].total < min ){
                    min = s[j].total;
                    t = s[j];
                s[j] = s[i];
                s[i] = t;
    
                }
                
            }
        }
     
    }
    
    int fail(STU s[],STU a[], int n){
    
        int i,j = 0 ;
        
        for(i = 0; i < n ; i++)
        if(s[i].total < 60) a[j++] = s[i];
        
        return j;
    }

    #include<stdio.h>
    
    const int N = 5;
    
    typedef struct student{
        
        long no;
        char name[20];
        int score;
        
    }STU;
    
    void input(STU s[], int n);
    int findMinlist(STU s[], STU t[], int n); 
    void output(STU s[], int n);
    
    int main(){
        
        STU stu[N], minlist[N];
        int count;
        printf("录入%d个学生的信息
    ", N);
        input(stu, N);
        
        printf("
    统计最低分人数和学生信息...
    ");
        count = findMinlist(stu , minlist , N);
        
        printf("
    一共有%d个最低分, 信息如下:
    ");
        output(minlist, count );
        
        return 0;
    }
     
     void input(STU s[], int n){
         int i;
         for( i = 0 ;i < n; i++)
         scanf("%ld %s %d", &s[i].no, s[i].name , &s[i].score);
     }
     
     void output(STU s[], int n){
         int i ;
         for(i = 0; i < n ;i++)
         printf("%ld %s %d
    ",s[i].no, s[i].name, s[i].score);
     }
     
     int findMinlist(STU s[], STU t[], int n){
         
        int i , j,min, sum = 0;
         STU temp;
     
         for(i = n - 1; i > 0 ;i--){
         
             j = i - 1;
             min = s[i].score;
             
             for(; j >= 0; j--){
             
                 if(s[j].score < min){
                     min = s[j].score;
                     
                     temp = s[i];
                     s[i] = s[j];
                     s[j] =temp;
                 }
             }
         }
         t[sum++] = s[n - 1];
         for(i = n - 2; i >= 0; i--){
             if(s[i].score == s[n-1].score)
             t[sum++] = s[i];
         }
         return sum;
     }

    #include<stdio.h>
    #include<string.h>
    const int N = 10;
    
    typedef struct student{
        
        long int id;
        char name[20];
        float objective;
        float subjective;
        float sum;
        char level[20];
        
    }STU;
    
    void input(STU s[], int n);
    void output(STU s[], int n);
    void process(STU s[], int n);
    
    int main(){
        STU stu[N];
        
        printf("录入%d个考生的信息:准考证号, 姓名, 客观题得分(<=40),操作题得分(<=60)
    ",N);
        input(stu, N);
        
        printf("
    对考生信息进行处理:计算总分,确定等级
    ");
        process(stu, N);
        
        printf("
    打印考生完整信息:准考证号, 姓名, 客观题得分 ,总分, 等级
    ");
        output(stu, N);
        
        return 0; 
    } 
    
    void input(STU s[], int n){
        int i = 0;
        for(; i < n; i++){
                scanf("%ld %s %f %f", &s[i].id, s[i].name, &s[i].objective, &s[i].subjective);
                s[i].sum = 0;
                strcpy(s[i].level ,"合格"); 
        }
    
    }
    
    void output(STU s[], int n){
        int i = 0;
        printf("准考证号   姓名   客观题得分  操作题得分   总分    等级
    "); 
        for(; i < n; i++)
        printf("%ld %10s %8.2f %12.2f %9.2f %8s
    ",s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum,s[i].level);
    }
    
    void process(STU s[],int n){
        
        int prefect, pass ,fail;
        prefect = n * 0.1;
        pass = n * 0.5;
        fail = n;
        
        int i , j;
        for(i = 0; i < n; i++)
            s[i].sum = s[i].objective * 0.4 + s[i].subjective * 0.6;
        
        int min;
        STU temp;
        
        for(i = n - 1; i > 0; i--){
        
            min = s[i].sum;
            j = i - 1; 
        
            for(;j >= 0; j--){ //这里条件错误;
                if(s[j].sum < min){
                    min = s[j].sum;
                    temp = s[j];
                    s[j] = s[i];
                    s[i] = temp;
                    }
            }
        }
            
        for( i = 0 ; i < n ; i++){
            if(i < prefect)
            strcpy(s[i].level, "优秀");
            else if( i >= prefect && i < pass) 
            strcpy(s[i].level, "合格");
            else
            strcpy(s[i].level, "不合格");
        }
        
    }

    实验总结:

    做实验一的时候想尝试自己打出来,所以主要遇到的麻烦都在实验一

    首先是遇到的一些找了很久的小问题

    1 print函数中少打了一个%f导致一直不能输出。
    2 sort函数中if没有加大括号,找了很久的问题。

    3 j--打成j++导致逻辑错误
    总结,遇到这种多个函数的问题,可以先把思路写下来再打,会减少头脑混乱导致的小错误。

    然后是在实验一中发现的一个小问题

    因为最开始是自己打的代码,在结构体中定义了char *name发现运行不了,改为char name[20]后就可以运行了。

    原因是如果定义*name,与a[20]

    *name 为一个无效指针,因为没有指向的地址所以无法输入输出,&name 可以直接等同于字符数组中的a(及字符串的首地址),因为字符数组中a其实也是一个指针,指向字符常量区中字符串的首地址。

    所以如果结构体中定义了*name,输入输出的格式应该为scanf("%s",&name)和printf("%s",&name)。

  • 相关阅读:
    操作系统
    redis
    数据库原理与mysql
    计算机网络
    重写、重载、隐藏以及多态分析
    c++复习重点
    重装系统记录
    正则表达式匹配ip地址
    信号量和互斥锁的区别 互斥量与临界区的区别
    为Markdown文件生成目录
  • 原文地址:https://www.cnblogs.com/2967271912lala/p/14175818.html
Copyright © 2020-2023  润新知