实验6
test1
点击查看代码
#include<stdio.h>
#include<string.h>
#define N 2
typedef struct student{
int id;
char 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) strcpy(s[i].level,"良");
else if(s[i].total>=70) strcpy(s[i].level,"中");
else if(s[i].total>=60) strcpy(s[i].level,"及格");
else strcpy(s[i].level,"不及格");
}
}
int fail(STU s[],STU t[],int n){
int i,cnt=0;
for(i=0;i<n;i++)
if(s[i].total<60)
t[cnt++]=s[i];
return cnt;
}
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;
}
}

test2
点击查看代码
#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];
int found;
printf("----------所有图书信息---------\n");
for(ptr=x;ptr<x+N;++ptr)
printf("%-30s%-30s\n",ptr->name,ptr->author);
printf("----------按作者查询图书---------\n");
printf("输入作者名:");
gets(author);
found=0;
for(ptr=x;ptr<x+N;++ptr)
if(strcmp(ptr->author,author)==0){
found=1;
printf("%-30s%-30s\n",ptr->name,ptr->author);
}
if(!found)
printf("暂未收入该作者书籍!\n");
return 0;
}


test3
点击查看代码
#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);
int main(){
int n;
Film *head;
head=NULL;
printf("输入影片数目:");
scanf("%d",&n);
head=insert(head,n);
printf("\n所有影片信息如下:\n");
output(head);
return 0;
}
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;
}
}

点击查看代码
#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);
int main(){
int n;
Film *head;
Film *p;
p=(Film*)malloc(sizeof(Film));
p->next=NULL;
head=p;
printf("输入影片数目:");
scanf("%d",&n);
head=insert(head,n);
printf("\n所有影片信息如下:\n");
output(head);
return 0;
}
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;
}
}

test4
点击查看代码
#include<stdio.h>
#define N 10
typedef struct{
char isbn[20];
char name[80];
char author[80];
double sales_price;
int sales_count;
}Book;
void output(Book x[],int n);
void sort(Book x[],int n);
double sales_amount(Book x[],int n);
int main(){
Book x[N]={
{"978-7-5327-6082-4","门将之死","罗纳德.伦",42,51},
{"978-7-308-17047-5","自由与爱之地:入以色列记","云也退",49,30},
{"978-7-5404-9344-8","伦敦人","克莱格泰了",68,27},
{"978-7-5447-5246-6","软件提的生命周期","特德姜",35,90},
{"978-7-5722-5475-8","芯片简史","王博",74.9,49},
{"978-7-5133-5750-0","主机战争","布莱克",128,42},
{"978-7-2011-4617-1","世界尽头的咖啡馆","约翰",22.5,44},
{"978-7-5133-5109-6","你好外星人","英国未来出版集团",118,42},
{"978-7-1155-0509-5","无穷的开始:世界进步的本源","带维多维奇",37.5,55},
{"978-7-229-14156-1","源泉","安兰德",84,59},
};
printf("\n图书销售总额:%.2f\n",sales_amount(x,N));
return 0;
}
void output(Book x[],int n){
printf("%-20s %-30s %-20s %-10s %-10s\n","ISBN号","书名","作者","售价","销售册数");
printf("---------------------------------\n");
for(int i=0;i<n;i++)
printf("%-20s %-30s %-20s %-10s %-10s\n",x[i].isbn,x[i].name,x[i].author,x[i].sales_price,x[i].sales_count);
}
void sort(Book x[],int n){
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(x[j].sales_count<x[j+1].sales_count){
Book temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
}
double sales_amount(Book x[],int n){
double total=0.0;
for(int i=0;i<n;i++){
total+=x[i].sales_price*x[i].sales_count;
}
return total;
}

test5
点击查看代码
#include<stdio.h>
typedef struct{
int year;
int mounth;
int day;
}Date;
void input(Date *pd);
int day_of_year(Date d);
int compare_dates(Date d1,Date d2);
void test1(){
Date d;
int i;
printf("输入日期:(以形如2025-12-19这样的形式输入)\n");
for(i=0;i<3;i++){
input(&d);
printf("%d-%02d-%02d是这一年中第%d天\n\n",d.year,d.mounth,d.day,day_of_year(d));
}
}
void test2(){
Date Alice_birth,Bob_birth;
int i;
int ans;
printf("输入Alice和Bob出生日期:(以形如2025-12-19这样的形式输入)\n");
for(i=0;i<3;i++){
input(&Alice_birth);
input(&Bob_birth);
ans=compare_dates(Alice_birth,Bob_birth);
if(ans==0)
printf("Alice和Bob一样大\n\n");
else if(ans==-1)
printf("Alice比Bob大\n\n");
else
printf("Alice比Bob小\n\n");
}
}
int main(){
printf("测试1:输入日期,打印输出这是一年中第多少天\n");
test1();
printf("\n测试2:两个人年龄大小关系\n");
test2();
}
void input(Date *pd){
scanf("%d-%d-%d",&pd->year,&pd->mounth,&pd->day);
}
int day_of_year(Date d){
int mounth_days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int total=0;
int i;
if((d.year%4==0&&d.year%100!=0)||(d.year%400==0)){
mounth_days[2]=29;
}
for(i=1;i<d.mounth;i++){
total+=mounth_days[i];
}
total+=mounth_days[i];
return total;
}
int compare_dates(Date d1,Date d2){
if(d1.year<d2.year)return -1;
else if(d1.year>d2.year) return 1;
if(d1.mounth<d2.mounth)return -1;
else if(d1.mounth>d2.mounth)return 1;
if(d1.day<d2.day)return -1;
else if(d1.day>d2.day)return 1;
return 0;
}

test6
点击查看代码
#include<stdio.h>
#include<string.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);
return 0;
}
void output(Account x[],int n){
for(int i=0;i<n;i++){
printf("%-8s",x[i].username);
int pwd_len=strlen(x[i].password);
for(int j=0;j<pwd_len;j++){
printf("*");
}
printf("\t");
switch(x[i].type){
case admin:
printf("admin\n");
break;
case student:
printf("student\n");
break;
case teacher:
printf("teacher\n");
break;
default :
printf("unknown\n");
break;
}
}
}

test7
点击查看代码
#include <stdio.h>
#include <string.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},
{"孙八", "1552933732", 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);
return 0;
}
void set_vip_contact(contact x[], int n, char name[]) {
for (int i = 0; i < n; i++) {
if (strcmp(x[i].name, name) == 0) {
x[i].vip = 1;
break;
}
}
}
void display(contact x[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (strcmp(x[j].name, x[j+1].name) > 0) {
contact temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
for (int i = 0; i < n; i++) {
if (x[i].vip == 1) {
printf("%-10s%-15s*\n", x[i].name, x[i].phone);
}
}
for (int i = 0; i < n; i++) {
if (x[i].vip == 0) {
printf("%-10s%-15s\n", x[i].name, x[i].phone);
}
}
}
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");
}
}

浙公网安备 33010602011771号