实验6

实验4:

源码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 10
 4 
 5 typedef struct{
 6     char isbn[20];
 7     char name[80];
 8     char author[80];
 9     double sales_price;
10     int sales_count;
11 }Book;
12 
13 void output(Book x[],int n);
14 void sort(Book x[],int n);
15 double sales_amount(Book x[],int n);
16 
17 int main(){
18     Book x[N]={{"978-7-5327-6082-4", "门将之死", "罗纳德.伦", 42, 51},
19                {"978-7-308-17047-5", "自由与爱之地:入以色列记", "云也退", 49 , 30},
20                {"978-7-5404-9344-8", "伦敦人", "克莱格泰勒", 68, 27},
21                {"978-7-5447-5246-6", "软件体的生命周期", "特德姜", 35, 90},
22                {"978-7-5722-5475-8", "芯片简史", "汪波", 74.9, 49},
23                {"978-7-5133-5750-0", "主机战争", "布莱克.J.哈里斯", 128, 42},
24                {"978-7-2011-4617-1", "世界尽头的咖啡馆", "约翰·史崔勒基", 22.5, 44},
25                {"978-7-5133-5109-6", "你好外星人", "英国未来出版集团", 118, 42},
26                {"978-7-1155-0509-5", "无穷的开始:世界进步的本源", "戴维·多伊 奇", 37.5, 55},
27                {"978-7-229-14156-1", "源泉", "安.兰德", 84, 59}};
28     printf("图书销量排名(按销售册数):\n");
29     sort(x,N);
30     output(x,N);
31 
32     printf("\n图书销售总额:%.2f\n",sales_amount(x,N));
33 
34     system("pause");
35     return 0;
36 }
37 void output(Book x[],int n){
38     int i;
39     printf("ISBN号               书名                           作者                 售价                 销售册数               \n");
40     for(i=0;i<n;i++)
41         printf("%-20s %-30s %-20s %-20g %-20d\n",x[i].isbn,x[i].name,x[i].author,x[i].sales_price,x[i].sales_count);
42 }
43 
44 void sort(Book x[],int n){
45     int i,j;
46     Book t;
47     for(i=0;i<n-1;i++)
48         for(j=0;j<n-1-i;j++){
49             if(x[j].sales_count<x[j+1].sales_count){
50                 t=x[j];    
51                 x[j]=x[j+1];
52                 x[j+1]=t;
53             }
54         }
55 }
56 
57 double sales_amount(Book x[],int n){
58     double sum=0;
59     int i;
60     for(i=0;i<n;i++)
61         sum+=x[i].sales_count*x[i].sales_price;
62     return sum;
63 }

截图:

实验5:

源码:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef struct{
  5     int year;
  6     int month;
  7     int day;
  8 }Date;
  9 
 10 void input(Date *pd);
 11 int day_of_year(Date d);
 12 int compare_dates(Date d1, Date d2);
 13 
 14 void test1(){
 15     Date d;
 16     int i;
 17 
 18     printf("输入日期:(以形如2024-12-16这样的形式输出)\n");
 19     for(i=0;i<3;i++){
 20         input(&d);
 21         printf("%d-%02d-%02d是这一年中的第%d天\n\n",d.year,d.month,d.day,day_of_year(d));
 22     }
 23 }
 24 
 25 void test2(){
 26     Date Alice_birth,Bob_birth;
 27     int i;
 28     int ans;
 29 
 30     printf("输入Alice和Bob的出生日期:(以形如2024-12-16这样的形式输入)\n");
 31     for(i=0;i<3;i++){
 32         input(&Alice_birth);
 33         input(&Bob_birth);
 34         ans=compare_dates(Alice_birth,Bob_birth);
 35 
 36         if(ans==0)
 37             printf("Alice和Bob一样大\n\n");
 38         else if(ans == -1) 
 39             printf("Alice比Bob大\n\n");
 40         else
 41             printf("Alice比Bob小\n\n");
 42     }
 43 }
 44 
 45 int main(){
 46     printf("测试1: 输入日期, 打印输出这是一年中第多少天\n");
 47     test1();
 48 
 49     printf("\n测试2: 两个人年龄大小关系\n");
 50     test2();
 51     system("pause");
 52     return 0;
 53 }
 54 
 55 void input(Date *pd){
 56     scanf("%d-%d-%d",&pd->year,&pd->month,&pd->day);
 57 }
 58 
 59 int day_of_year (Date d){
 60     int sum=0;
 61     if((d.year%4==0&&d.year%100!=0)||(d.year%400==0)){
 62         switch(d.month){
 63             case 12:
 64                 sum+=335;break;
 65             case 11:
 66                 sum+=305;break;
 67             case 10:
 68                 sum+=274;break;
 69             case 9:
 70                 sum+=244;break;
 71             case 8:
 72                 sum+=213;break;
 73             case 7:
 74                 sum+=182;break;
 75             case 6:
 76                 sum+=152;break;
 77             case 5:
 78                 sum+=121;break;
 79             case 4:
 80                 sum+=91;break;
 81             case 3:
 82                 sum+=60;break;
 83             case 2:
 84                 sum+=31;break;
 85         }
 86     }
 87     else{
 88         switch(d.month){
 89             case 12:
 90                 sum+=334;break;
 91             case 11:
 92                 sum+=304;break;
 93             case 10:
 94                 sum+=273;break;
 95             case 9:
 96                 sum+=243;break;
 97             case 8:
 98                 sum+=212;break;
 99             case 7:
100                 sum+=181;break;
101             case 6:
102                 sum+=151;break;
103             case 5:
104                 sum+=120;break;
105             case 4:
106                 sum+=90;break;
107             case 3:
108                 sum+=59;break;
109             case 2:
110                 sum+=31;break;
111         }
112     }
113     return sum+d.day;
114 }
115 
116 int compare_dates(Date d1,Date d2){
117     if(d1.year>d2.year)
118         return 1;
119     else if(d1.year<d2.year)
120         return -1;
121     else{
122         if(d1.month>d2.month)
123             return 1;
124         else if(d1.month<d2.month)
125             return -1;
126         else{
127             if(d1.day>d2.day)
128                 return 1;
129             if(d1.day<d2.day)
130                 return -1;
131             else
132                 return 0;
133         }
134     }
135 }

截图:

实验6:

源码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

enum Role{admin,student,teacher};

typedef struct{
    char username[20];
    char password[20];
    enum Role type;
}Account;

void output(Account x[],int n);

int main(){
    Account x[]={{"A1001", "123456", student},
                 {"A1002", "123abcdef", student},                 
                 {"A1009", "xyz12121", student},
                 {"X1009", "9213071x", admin},
                 {"C11553", "129dfg32k", teacher},
                 {"X3005", "921kfmg917", student}};
    int n;
    n=sizeof(x)/sizeof(Account);
    output(x,n);

    system("pause");
    return 0;
}

void output(Account x[],int n){
    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<strlen(x[i].password);){
                x[i].password[j++]='*';
        }
    }
    for(i=0;i<n;i++){
        printf("%-20s",x[i].username);
        printf("%-20s",x[i].password);
        if(x[i].type==admin)
            printf("admin\n");
        else if(x[i].type==student)
            printf("student\n");
        else
            printf("teacher\n");
    }
}

截图:

实验7:

源码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct{
    char name[20];
    char phone[12];
    int vip;
}Contact;

void set_vip_contact(Contact x[],int n,char name[]);
void output(Contact x[],int n);
void display(Contact x[],int n);

#define N 10
int main(){
    Contact list[N]={{"刘一", "15510846604", 0},
                     {"陈二", "18038747351", 0},
                     {"张三", "18853253914", 0},
                     {"李四", "13230584477", 0},
                     {"王五", "15547571923", 0},
                     {"赵六", "18856659351", 0},
                     {"周七", "17705843215", 0},
                     {"孙八", "15552933732", 0},
                     {"吴九", "18077702405", 0},
                     {"郑十", "18820725036", 0}};
    int vip_cnt,i;
    char name[20];

    printf("显示原始通讯录信息:\n");
    output(list,N);

    printf("\n输入要设置的紧急联系人个数: ");
    scanf("%d",&vip_cnt);
    printf("输入%d个紧急联系人姓名:\n", vip_cnt);
    for(i=0;i<vip_cnt;i++){
        scanf("%s",name);
        set_vip_contact(list,N,name);
    }

    printf("\n显示通讯录列表:(按姓名字典序升序排列,紧急联系人最先显示)\n");
    display(list, N);

    system("pause");
    return 0;
}

void set_vip_contact(Contact x[],int n,char name[]){
    int i;
    for(i=0;i<n;i++)
        if(strcmp(x[i].name,name)==0)
            x[i].vip=1;
}

void display(Contact x[],int n){
    int i,j,m,count=0;
    Contact t;
    for(i=0;i<n;i++)
        if(x[i].vip==1){
            t=x[i];
            x[i]=x[count];
            x[count++]=t;
        }
    for(i=0;i<count-1;i++)
        for(j=0;j<count-1-i;j++)
            if(strcmp(x[j].name,x[j+1].name)>0){
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
    for(i=count;i<n-1;i++)
        for(j=count;j<n-i-1+count;j++)
            if(strcmp(x[j].name,x[j+1].name)>0){
                t=x[j];
                x[j]=x[j+1];
                x[j+1]=t;
            }
    output(x,n);
}

void output(Contact x[],int n){
    int i;
    for(i=0;i<n;i++){
        printf("%-10s %15s",x[i].name,x[i].phone);
        if(x[i].vip)
            printf("%5s","*");
        printf("\n");
    }
}

截图:

posted @ 2024-12-22 00:41  liuseki  阅读(10)  评论(0)    收藏  举报