实验六

task 1
#include <stdio.h>
#include <string.h>
#define N 3

typedef struct student {
    int id;
    int name[20];
    char subject[20];
    double perf;
    double mid;
    double final;
    double total;
    char level[10];
} STU;

void input(STU [], int);
void output(STU [], int);
void calc(STU [], int);
int fail(STU [], STU [], int);
void sort(STU [], int);

int main() {
    STU st[N], fst[N];
    int k;
    
    printf("录入学生成绩信息:\n");
    input(st, N);
    
    printf("\n成绩处理...\n");
    calc(st, N);
    
    k=fail(st, fst , N);
    sort(st, N);
    printf("\n学生成绩排名情况:\n");
    output(st, N);
    
    printf("\n不及格学生信息:\n");
    output(fst, k);
    
    return 0;
}

void input(STU s[], int n) {
    int i;
    
    for(i = 0; i < n; i++)
         scanf("%d %s %s %lf %lf %lf", &s[i].id, s[i].name, s[i].subject,
                                       &s[i].perf, &s[i].mid, &s[i].final);
}

void output(STU s[], int n){
    int i;
    
    printf("-----------------\n");
    printf("学号   姓名   科目   平时   期中    期末     总评     等级\n");
    for(i = 0; i < n; i++)
        printf("%d  %-6s  %-4s  %-4.0f  %-4.0f  %-4.0f  %-4.1f%s\n",s[i].id,s[i].name,s[i].subject,s[i].perf,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].perf*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,"不及格");
}
}

int fail(STU s[], STU t[], int n) {
    int i,k=0;
    
    for (i=0; i<n; i++)
    if(s[i].total < 60)
     t[k++] = s[i];
     return k;
}

void sort(STU s[], int n){
    int i, j;
    STU t;
    
    for(i=0; i<n-1; i++)
       for(j=0;j<n-1-i;j++)
          if(s[j].total<s[j+1].total){
              t=s[j];
              s[j]=s[j+1];
              s[j+1]=t;
          }
      }
        

task 2

#include <stdio.h>
#include <string.h>
#define N 10
#define M 80
typedef struct {
char name[M]; // 书名
char author[M]; // 作者
} Book;
int main() {
Book x[N] = { {"《一九八四》", "乔治.奥威尔"},
{"《美丽新世界》", "赫胥黎"},
{"《昨日的世界》", "斯蒂芬.茨威格"},
{"《万历十五年》", "黄仁宇"},
{"《一只特立独行的猪》", "王小波"},
{"《百年孤独》", "马尔克斯"},
{"《查令十字街84号》", "海莲.汉芙"},
{"《只是孩子》", "帕蒂.史密斯"},
{"《刀锋》", "毛姆"},
{"《沉默的大多数》", "王小波"} };
Book *ptr;
int i;
char author[M];
printf("所有图书信息: \n");
for(ptr = x; ptr < x + N; ++ptr)
printf("%-30s%-30s\n", ptr->name, ptr->author);
printf("\n输入作者名: ");
gets(author);
for(ptr = x; ptr < x + N; ++ptr)
if(strcmp(ptr->author, author) == 0) {
printf("%-30s%-30s\n", ptr->name, ptr->author);
}
return 0;
}

task 3


#include <stdio.h>
#include <stdlib.h>
#define N 80
typedef struct FilmInfo {
char name[N];
char director[N];
char region[N];
int year;
struct FilmInfo *next;
} Film;
void output(Film *head); // 遍历输出链表信息
Film *insert(Film *head, int n); // 向链表中插入n个结点,返回头指针
int main() {
int n; // 结点数
Film *head; // 头结点
head = NULL;
printf("输入影片数目: ");
scanf("%d", &n);
// 向链表中插入n部影片信息
head = insert(head, n);
// 遍历输出链表中所有影片信息
printf("\n所有影片信息如下: \n");
output(head);
return 0;
}
// 向链表中插入n个结点,从表头插入,返回头指针
Film *insert(Film *head, int n) {
int i;
Film *p;
for(i = 1; i <= n; ++i) {
p = (Film *)malloc(sizeof(Film));
printf("请输入第%d部影片信息: ", i);
scanf("%s %s %s %d", p->name, p->director, p->region, &p->year);
// 把结点从表头插入到链表中
p->next = head;
head = p; // 更新头结点
}
return head;
}
// 遍历输出链表信息
void output(Film *head) {
Film *p;
p = head;
while(p != NULL) {
printf("%-20s %-20s %-20s %d\n", p->name, p->director, p->region, p->year);
p = p -> next;
}
}

 

 

task 4

#include <stdio.h>
#include <string.h>
#define N 100

typedef struct {
    char num[10];
    int s1;
    int s2;
    double sum;
    char level[10];
} STU;


int fun(STU a[], int n, STU h[]);


int main(){
    STU s[N]={ {"GA05",85, 76},
               {"GA03",76, 90},
               {"GA02",69, 90},
               {"GA04",85, 56},
               {"GA01",91, 95},
               {"GA07",72, 80},
               {"GA08",64, 45},
               {"GA06",87, 98},
               {"GA015",85, 86},
               {"GA013",91, 97}    };
    STU h[N];
    int i, k, n = 10;
    
    k = fun(s, n, h);
    
    printf("There are :\n");
    for(i = 0; i < k; i++)
        printf("%s %d %d %.2f %s\n", h[i].num, h[i].s1, h[i].s2, h[i].sum,h[i].level);
        
        return 0;
}

int fun (STU a[], int n, STU h[]){
    int i,j=0;
    double s=0.0;
    for (i=0;i<n;i++){
        a[i].sum=a[i].s1 * 0.7+a[i].s2 * 0.3;
        s+=a[i].sum;
    }
    s=s/n;
    for (i=0;i<n;i++)
     if(a[i].sum>s){
         strcpy(a[i].level,"均分以上");
         h[j++]=a[i]; 
     }
    return j;
}

task 5

#include <stdio.h>
#include <string.h>
#define N 5
typedef struct student {
char name[10];
int num;
int maths;
int computer;
int english;
int sum;
char level[10];
} STU;
void fun(STU a[], int n); 
int main() {
STU s[6*N]={ {"A001", 1, 34, 67, 80},
{"B003", 3, 78, 87, 90},
{"A002", 2, 90, 98, 99},
{"B002", 4, 56, 78, 98},
{"A005", 5, 35, 67, 79} };
int i;
fun(s, N);
for(i = 0; i < N; i++)
printf("%s %d %d %d %d %d %s\n", s[i].name, s[i].num, s[i].maths,
s[i].computer, s[i].english, s[i].sum, s[i].level);
return 0;
}
void fun(STU a[], int n) {
    int i,j;
    STU t;
    for (i=0;i<n;i++){
        a[i].sum=a[i].maths+a[i].computer+a[i].english;
    }
    for (i=0;i<n-1;i++)
     for (j=0;j<n-1-i;j++)
       if (a[j].sum<a[j+1].sum){
           t=a[j];
           a[j]=a[j+1];
           a[j+1]=t;
       }
    for (i=0;i<n;i++){
        if(a[i].sum==a[0].sum)
        strcpy(a[i].level,"优秀");
        else if (a[i].sum==a[4].sum)
        strcpy(a[i].level,"不及格");
        else
        strcpy(a[i].level,"及格");
    }
}

#include <stdio.h>

#define N 5

typedef struct student {
    long no;
    char name[20];
    int score;
} STU;


void input(STU s[], int n);
int find_min_list(STU s[], STU t[], int n);
void output(STU s[], int n);

int main() {
    STU stu[N], min_list[N];
    int count;

    printf("录入%d个学生信息\n", N);
    input(stu, N);

    printf("\n统计最低分人数和学生信息...\n");
    count = find_min_list(stu, min_list, N);

    printf("\n一共有%d个最低分,信息如下:\n", count);
    output(min_list, count);

    return 0;
}


void input(STU s[], int n) {
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d %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("%d %s %d \n",s[i].no,s[i].name,s[i].score);
    }
}


int find_min_list(STU s[], STU t[], int n) {
    int i,min=100,k=0;
    for(i=0;i<n;i++)
    {
        if(s[i].score<min)
            min=s[i].score;
    }
    
    for(i=0;i<n;i++)
    {
        if(s[i].score==min)
            t[k++]=s[i];
    }
    
    return k;
    
}

 

posted @ 2023-05-28 11:31  zk柯r  阅读(18)  评论(0)    收藏  举报