实验6
task1
1 #include<stdio.h> 2 #include<string.h> 3 #define N 3 4 typedef struct student{ 5 int id; 6 char name[20]; 7 char subject[20]; 8 double perf; 9 double mid; 10 double final; 11 double total; 12 char level[10]; 13 }stu; 14 void input(stu[],int); 15 void output(stu[],int); 16 void calc(stu[],int); 17 int fail(stu[],stu[],int); 18 void sort(stu[],int); 19 int main(){ 20 stu st[N],fst[N]; 21 int k; 22 printf("录入学生成绩信息\n"); 23 input(st,N); 24 printf("\n成绩处理...\n"); 25 calc(st,N); 26 k=fail(st,fst,N); 27 sort(st,N); 28 printf("\n学生成绩排名情况:\n"); 29 output(st,N); 30 printf("不及格学生信息:\n"); 31 output(fst,k); 32 return 0; 33 } 34 void input(stu s[],int n){ 35 int i; 36 for(i=0;i<n;i++){ 37 scanf("%d %s %s %lf %lf %lf", 38 &s[i].id,s[i].name,s[i].subject,&s[i].perf, 39 &s[i].mid,&s[i].final); 40 } 41 } 42 void output(stu s[],int n){ 43 int i; 44 printf("----------------\n"); 45 printf("学号 姓名 科目 平时 期中 期末 总评 等级\n"); 46 for(i=0;i<n;i++){ 47 printf("%d %-6s %-4s %-4.0f %-4.0f %-4.0f %-4.1f %s\n", 48 s[i].id,s[i].name,s[i].subject,s[i].perf, 49 s[i].mid,s[i].final,s[i].total,s[i].level); 50 } 51 } 52 void calc(stu s[],int n){ 53 int i; 54 for(i=0;i<n;i++){ 55 s[i].total=s[i].perf*0.2+s[i].mid*0.2+s[i].final*0.6; 56 if(s[i].total>=90){ 57 strcpy(s[i].level,"优"); 58 } 59 else if(s[i].total>=80){ 60 strcpy(s[i].level,"良"); 61 } 62 else if(s[i].total>=70){ 63 strcpy(s[i].level,"中"); 64 } 65 else if(s[i].total>=60){ 66 strcpy(s[i].level,"及格"); 67 } 68 else{ 69 strcpy(s[i].level,"不及格"); 70 } 71 } 72 } 73 int fail(stu s[],stu t[],int n){ 74 int i,cnt=0; 75 for(i=0;i<n;++i){ 76 if(s[i].total<60){ 77 t[cnt++]=s[i]; 78 } 79 } 80 return cnt; 81 } 82 void sort(stu s[],int n){ 83 int i,j; 84 stu t; 85 for(i=0;i<n;++i){ 86 for(j=0;j<n-1-i;++j){ 87 if(s[j].total<s[j+1].total){ 88 t=s[j]; 89 s[j]=s[j+1]; 90 s[j+1]=t; 91 } 92 } 93 } 94 }

task2
1 #include<stdio.h> 2 #include<string.h> 3 #define N 10 4 #define M 80 5 typedef struct { 6 char name[M]; 7 char author[M]; 8 }book; 9 int main(){ 10 book x[N] = { {"《一九八四》", "乔治.奥威尔"}, 11 {"《美丽新世界》", "赫胥黎"}, 12 {"《昨日的世界》", "斯蒂芬.茨威格"}, 13 {"《万历十五年》", "黄仁宇"}, 14 {"《一只特立独行的猪》", "王小波"}, 15 {"《百年孤独》", "马尔克斯"}, 16 {"《查令十字街84号》", "海莲.汉芙"}, 17 {"《只是孩子》", "帕蒂.史密斯"}, 18 {"《刀锋》", "毛姆"}, 19 {"《沉默的大多数》", "王小波"} }; 20 book *ptr; 21 int i; 22 char author[M]; 23 int found; 24 printf("-------------------所有图书信息-------------------\n"); 25 for(ptr=x;ptr<x+N;ptr++){ 26 printf("%-30s%-30s\n",ptr->name,ptr->author); 27 } 28 printf("\n-------------------按作者查询图书-------------------\n"); 29 printf("输入作者名: "); 30 gets(author); 31 found=0; 32 for(ptr=x;ptr<x+N;ptr++){ 33 if(strcmp(ptr->author,author)==0){ 34 found=1; 35 printf("%-30s%-30s\n",ptr->name,ptr->author); 36 } 37 } 38 if(!found){ 39 printf("暂未收录该作者书籍\n"); 40 } 41 return 0; 42 }


task3-1
1 #include<stdio.h> 2 #include<stdlib.h> 3 #define N 80 4 typedef struct filminfo{ 5 char name[N]; 6 char director[N]; 7 char region[N]; 8 int year; 9 struct filminfo *next; 10 }film; 11 void output(film *head); 12 film *insert(film *head,int n); 13 int main(){ 14 int n; 15 film *head; 16 head=NULL; 17 printf("输入影片数目: "); 18 scanf("%d",&n); 19 head=insert(head,n); 20 printf("\n所有影片信息如下: \n"); 21 output(head); 22 return 0; 23 } 24 film *insert(film *head,int n){ 25 int i; 26 film *p; 27 for(i=1;i<=n;++i){ 28 p=(film *)malloc(sizeof(film)); 29 printf("请输入第%d部影片信息: ", i); 30 scanf("%s %s %s %d",p->name,p->director,p->region,&p->year); 31 p->next=head; 32 head=p; 33 } 34 return head; 35 } 36 void output(film *head){ 37 film *p; 38 p=head; 39 while(p!=NULL){ 40 printf("%-20s %-20s %-20s %d\n",p->name ,p->director ,p->region ,p->year ); 41 p=p->next; 42 } 43 }

task3-2
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 80 4 typedef struct FilmInfo { 5 char name[N]; 6 char director[N]; 7 char region[N]; 8 int year; 9 struct FilmInfo *next; 10 } Film; 11 void output(Film *head); 12 Film *insert(Film *head, int n); 13 int main() { 14 int n; 15 Film *head; 16 Film *p; 17 p = (Film *)malloc(sizeof(Film)); 18 p->next = NULL; 19 head = p; 20 printf("输入影片数目: "); 21 scanf("%d", &n); 22 head = insert(head, n); 23 printf("\n所有影片信息如下: \n"); 24 output(head); 25 return 0; 26 } 27 Film *insert(Film *head, int n) { 28 int i; 29 Film *p; 30 for(i = 1; i <= n; ++i) { 31 p = (Film *)malloc(sizeof(Film)); 32 printf("请输入第%d部影片信息: ", i); 33 scanf("%s %s %s %d", p->name, p->director, p->region, &p->year); 34 p->next = head->next; 35 head->next = p; 36 } 37 return head; 38 } 39 void output(Film *head) { 40 Film *p; 41 p = head->next; 42 while(p != NULL) { 43 printf("%-20s %-20s %-20s %d\n", p->name, p->director, p->region, p->year); 44 p = p -> next; 45 } 46 }

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

task5
1 #include<stdio.h> 2 typedef struct{ 3 int year; 4 int month; 5 int day; 6 }date; 7 void input(date *pd); 8 int dateofyear(date d); 9 int comdates(date d1,date d2); 10 void test1() { 11 date d; 12 int i; 13 14 printf("输入日期:(以形如2025-12-19这样的形式输入)\n"); 15 for(i = 0; i < 3; ++i) { 16 input(&d); 17 printf("%d-%02d-%02d是这一年中第%d天\n\n", d.year, d.month, d.day, dayofyear(d)); 18 } 19 } 20 void test2() { 21 date Alice_birth, Bob_birth; 22 int i; 23 int ans; 24 25 printf("输入Alice和Bob出生日期:(以形如2025-12-19这样的形式输入)\n"); 26 for(i = 0; i < 3; ++i) { 27 input(&Alice_birth); 28 input(&Bob_birth); 29 ans = comdates(Alice_birth, Bob_birth); 30 31 if(ans == 0) 32 printf("Alice和Bob一样大\n\n"); 33 else if(ans == -1) 34 printf("Alice比Bob大\n\n"); 35 else 36 printf("Alice比Bob小\n\n"); 37 } 38 } 39 int main(){ 40 printf("测试1: 输入日期, 打印输出这是一年中第多少天\n"); 41 test1(); 42 printf("\n测试2: 两个人年龄大小关系\n"); 43 test2(); 44 return 0; 45 } 46 void input(date *pd){ 47 scanf("%d-%d-%d",&pd->year,&pd->month,&pd->day); 48 } 49 int dayofyear(date d){ 50 int total=0,i; 51 int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; 52 if(d.year%400==0||(d.year%4==0&&d.year%100==0)){ 53 a[1]=29; 54 } 55 for(i=0;i<d.month-1;++i){ 56 total+=a[i]; 57 } 58 total+=d.day; 59 return total; 60 } 61 int comdates(date d1,date d2){ 62 int ans; 63 if(d1.year<d2.year){ 64 ans=-1; 65 } 66 else if(d1.year>d2.year){ 67 ans=1; 68 } 69 else { 70 if(d1.month<d2.month){ 71 ans=-1; 72 } 73 else if(d1.month>d2.month){ 74 ans=1; 75 } 76 else{ 77 if(d1.day<d2.day){ 78 ans=-1; 79 } 80 else if(d1.day>d2.day){ 81 ans=1; 82 } 83 else{ 84 ans=0; 85 } 86 } 87 } 88 return ans; 89 }

task6
1 #include<stdio.h> 2 #include<string.h> 3 enum role {admin,student,teacher}; 4 typedef struct{ 5 char username[20]; 6 char password[20]; 7 enum role type; 8 }account; 9 void output(account x[],int n); 10 int main(){ 11 int n; 12 account x[] = {{"A1001", "123456", student}, 13 {"A1002", "123abcdef", student}, 14 {"A1009", "xyz12121", student}, 15 {"X1009", "9213071x", admin}, 16 {"C11553", "129dfg32k", teacher}, 17 {"X3005", "921kfmg917", student}}; 18 n=sizeof(x)/sizeof(account); 19 output(x,n); 20 return 0; 21 } 22 void output(account x[],int n){ 23 int i,j; 24 for(i=0;i<n;++i){ 25 printf("%-10s",x[i].username); 26 int len=strlen(x[i].password); 27 for(j=0;j<n;++j){ 28 printf("*"); 29 } 30 printf(" "); 31 switch(x[i].type){ 32 case admin:printf("admin\n");break; 33 case student:printf("student\n");break; 34 case teacher:printf("teacher\n");break; 35 default:printf("wrong"); 36 } 37 printf("\n"); 38 } 39 }

task7
1 #include<stdio.h> 2 #include<string.h> 3 #define N 10 4 typedef struct{ 5 char name[20]; 6 char phone[12]; 7 int vip; 8 }contact; 9 void setvipcontact(contact x[],int n,char name[]); 10 void output(contact x[],int n); 11 void display(contact x[],int n); 12 int main(){ 13 int cnt,i; 14 char name[20]; 15 contact list[N] = {{"刘一", "15510846604", 0}, 16 {"陈二", "18038747351", 0}, 17 {"张三", "18853253914", 0}, 18 {"李四", "13230584477", 0}, 19 {"王五", "15547571923", 0}, 20 {"赵六", "18856659351", 0}, 21 {"周七", "17705843215", 0}, 22 {"孙八", "15552933732", 0}, 23 {"吴九", "18077702405", 0}, 24 {"郑十", "18820725036", 0}}; 25 printf("显示原始通讯录信息: \n"); 26 output(list, N); 27 printf("\n输入要设置的紧急联系人个数: "); 28 scanf("%d", &cnt); 29 printf("输入%d个紧急联系人姓名:\n",cnt); 30 for(i = 0; i < cnt; ++i) { 31 scanf("%s", name); 32 setvipcontact(list, N, name); 33 } 34 printf("\n显示通讯录列表:(按姓名字典序升序排列,紧急联系人最先显示)\n"); 35 display(list, N); 36 return 0; 37 } 38 void setvipcontact(contact x[],int n,char name[]){ 39 int i; 40 for(i=0;i<n;++i){ 41 if(strcmp(x[i].name,name)==0){ 42 x[i].vip=1; 43 } 44 } 45 } 46 void display(contact x[],int n){ 47 int i,j; 48 contact temp; 49 for(i=0;i<n;++i){ 50 for(j=0;j<n-1-i;++j){ 51 if(strcmp(x[j].name,x[j+1].name)>0){ 52 temp=x[j]; 53 x[j]=x[j+1]; 54 x[j+1]=temp; 55 } 56 } 57 } 58 for(i=0;i<n;++i){ 59 for(j=0;j<n-1-i;++j){ 60 if(x[j].vip<x[j+1].vip){ 61 temp=x[j]; 62 x[j]=x[j+1]; 63 x[j+1]=temp; 64 } 65 } 66 } 67 output(x,n); 68 } 69 void output(contact x[], int n) { 70 int i; 71 for(i = 0; i < n; ++i) { 72 printf("%-10s%-15s", x[i].name, x[i].phone); 73 if(x[i].vip) 74 printf("%5s", "*"); 75 printf("\n"); 76 } 77 }


浙公网安备 33010602011771号