# 第十四章 结构和其他数据形式

2015/06/05 12:04

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

struct month{
char sname[10];
char lname[10];
int n;
};

int main(void)
{
int i,j;
struct month name[12];
char name1[10];
char l[12][10]={"January",
"February",
"Martch",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"};
char s[12][10]={"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};
int num[12]={31,28,31,30,31,30,31,31,30,31,30,31};
for(i=0;i<12;i++)
{
for(j=0;j<10;j++)
{
name[i].sname[j]=s[i][j];
name[i].lname[j]=l[i][j];
}
name[i].n=num[i];
}
scanf("%s",name1);
for(i=0;i<12;i++)
{
if((strcmp(name1,name[i].lname)) == 0)
break;
}
printf("%s %s %d",name[i].sname,name[i].lname,name[i].n);
return 0;

}``````

``````#include<stdio.h>
#include<string.h>
int days(char *month1,struct sm months[12],int num[12]);
struct sm{
char lmonth[10];//月份名
char smonth[10];//缩写
char nmonth[10];//月份号
};

int main()
{
struct sm months[12];//十二个月
int day,year;
int two,i,j,sum;
char month1[10];
char n[12][10]={"1","2","3","4","5","6","7","8","9","10","11","12"};
char l[12][10]={"January",
"February",
"Martch",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"};
char s[12][10]={"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};
int num1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int num2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
//讲月份各个表示方法放到数据结构中
for(i=0;i<12;i++)
{
for(j=0;j<10;j++)
{
months[i].smonth[j]=s[i][j];
months[i].lmonth[j]=l[i][j];
months[i].nmonth[j]=n[i][j];
}
}
printf("请输入日,月和年：");
scanf("%d",&day);
while((gets(month1))==" "||(gets(month1))=="\n")
continue;
scanf("%d",&year);
if((year % 4 == 0 && year % 100 != 0 ) ||year % 400 ==0)//润年时总天数
{

sum=days(month1,months,num2)+day;
}
else//平年时总天数
{
sum=days(month1,months,num1)+day;
}
printf("%d",sum);
}

int days(char *month1,struct sm months[12],int num[12])//除去当月的总天数计算函数
{
int i,j;
int sum=0;
//定位到月份
for(i=0;i<12;i++)
{
if((strcmp(month1,months[i].lmonth)) == 0 ||(strcmp(month1,months[i].smonth)) == 0 ||(strcmp(month1,months[i].nmonth))==0)
break;
}//计算除去当月的总天数
for(j=0;j<i;j++)
{
sum=sum+num[j];
}
return sum;
}``````

``````#include<stdio.h>
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 100
struct book{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};

int main(void)
{
struct book library[MAXBKS];
int count = 0;
int index,i,j,n;
char ch1,ch[MAXBKS];
int num[MAXBKS];

printf("Press [enter] at the start of a line to stop.\n");
while(count < MAXBKS && gets(library[count].title) != NULL && library[count].title[0] != '\0')
{
printf("Now enter the author,\n");
gets(library[count].author);
printf("Now enter the value.\n");
scanf("%f",&library[count++].value);
while(getchar() != '\n')
continue;
if(count < MAXBKS)
{
printf("Enter the next title.\n");
}
}
if(count>0)
{
printf("Here is the list of your books:\n");
for(index = 0;index<count;index++)
printf("%s by %s: \$%.2f\n",library[index].title,library[index].author,library[index].value);
for(i=0;i<count;i++)
{
ch[i]=library[i].title[0];
num[i]=library[i].value;
}
for(i=0;i<count;i++)
{
for(j=i+1;j<count;j++)
{
if(ch[j]<ch[i])
{
ch1=ch[j];
ch[j]=ch[i];
ch[i]=ch1;
}
}
}
for(i=0;i<count;i++)
{
for (j=i+1;j<count;j++)
{
if(num[j]<num[i])
{
n=num[j];
num[j]=num[i];
num[i]=n;
}
}
}
printf("Here is the list of your books:\n");
for(i=0;i<count;i++)
{
for(j=0;j<count;j++)
{
if(library[j].title[0]==ch[i])
printf("%s by %s: \$%.2f\n",library[j].title,library[j].author,library[j].value);
}
}
printf("Here is the list of your books:\n");
for(i=0;i<count;i++)
{
for(j=0;j<count;j++)
{
if(library[j].value == num[i])
printf("%s by %s: \$%.2f\n",library[j].title,library[j].author,library[j].value);
}
}

}
else
return 0;
}``````

``````#include<stdio.h>
#include<string.h>
void outputa(struct people df);
void outputb(struct people *);
struct fullname{
char firstname[10];
char secondname[10];
char lastname[10];
};
struct people{
long card;
struct fullname handle;
};
int main(void)
{
struct people df{
302039823,
{"Ewen"," ","Mkj"},
};
outputa(df);
outputb(&df);
return 0;
}

void outputa(struct people df)
{
if((strcmp(df.handle.secondname," "))==0)
printf("%s,%s - %ld",df.handle.firstname,df.handle.lastname,df.card);
else
printf("%s,%s %c.- %ld",df.handle.firstname,df.handle.lastname,df.handle.secondname[0],df.card);
}
void outputb(struct people *df)
{
if((strcmp(df->handle.secondname," "))==0)
printf("%s,%s - %ld",df->handle.firstname,df->handle.lastname,df->card);
else
printf("%s,%s - %ld",df->handle.firstname,df->handle.lastname,df->card);

}``````

``````#include<stdio.h>
#define CSIZE 4
float avera(float n[3]);
void output(struct student num[CSIZE],int i);
void outputg(struct student num[CSIZE],int i);
struct fullname{
char fname[10];
char lname[10];
};
struct student{
struct fullname stu;
float avr;
};

int main()
{
int i=0;
struct student num[CSIZE];
printf("Enter the first name\n");
printf("Press [enter] at the start of a line to stop.\n");
while(gets(num[i].stu.fname)!=NULL&&num[i].stu.fname[0]!='\0'&&i < 4)
{
printf("Enter the last name\n");
gets(num[i].stu.lname);
printf("Enter the 3 scores\n");
while(gets(num[i].stu.fname) == "\n")
continue;
i++;
printf("Enter the first name\n");
printf("Press [enter] at the start of a line to stop.\n");
}
output(num,i);
outputg(num,i);
return 0;
}

float avera(float n[3])
{
float sum=0;
float a;
int i;
for(i=0;i<3;i++)
{
sum=sum+n[i];
}
a=sum/3;
return a;
}

void output(struct student num[CSIZE],int i)
{
int j;
for(j=0;j<i;j++)

}

void outputg(struct student num[CSIZE],int i)
{
int j,k;
float sum[3]={0};
float ave[3];
for(j=0;j<3;j++)
{
for(k=0;k<i;k++)
{
}
ave[j]=sum[j]/i;
printf("%.2f ",ave[j]);
}

}``````

``````#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 10
void read_file(struct book *p, char* filename);
void display(struct book *p);
void change(struct book *p);
void reduce(struct book *p);
void write_file(struct book *p, char *str);
int count = 0;
struct book {
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
int main(void)
{
struct book library[MAXBKS];
char command[10];
puts("select the functions:\n");
puts("d: display all book            c: change a book\n");
puts("r: reduce a book               a: add books\n");
puts("other: save and quit:");
while( 1 )
{
gets(command);
switch( command[0] )
{
case 'd':
display(library);
break;
case 'c':
change(library);
break;
case 'r':
reduce(library);
break;
case 'a':
break;
default :
write_file(library,"book.dat");
return 0;
}
printf("select: d/c/r/a/other:");
}
}
void read_file(struct book *p, char* filename)
{
FILE * pbooks;
if ((pbooks = fopen(filename, "r+b")) == NULL)
{
printf("Can't open %s file\n", filename);
exit(1);
}
rewind(pbooks);
while (count < MAXBKS &&  fread(p+count, sizeof (struct book), 1, pbooks) == 1)
{
count++;
}
fclose(pbooks);
printf("read %s successfully! There are %d books.\n", filename, count);
}
void display(struct book *p)
{
int i;
if ( count == 0 )
printf("There is no book.\n");
printf("book list for %d books:\n",count);
for(i=0; i<count; i++)
printf("%s by %s: \$%.2f\n",p[i].title, p[i].author, p[i].value);
}
void change(struct book *p)
{
int i;
char title[MAXTITL];
printf("input the name of the book which you want change:");
gets(title);
for(i=0; i<count; i++)
if ( strcmp(p[i].title, title) == 0 )
{
gets(p[i].title);
puts("Now enter the author.");
gets(p[i].author);
puts("Now enter the value.");
scanf("%f", &p[i].value);
getchar();
printf("the book has been changed!\n");
return;
}
printf("error!the book is not in the list\n");
return;
}
void reduce(struct book *p)
{
int i;
char title[MAXTITL];
if(count == 0)
{
printf("error! book list is empty!");
return;
}
printf("input the name of the book which you want change:");
gets(title);
for(i=0; i<count; i++)
if ( strcmp(p[i].title, title) == 0 )
{
p[i] = p[count-1];
strcpy(p[count-1].title, "");
strcpy(p[count-1].author, "");
p[count-1].value=0;
count--;
printf("%s has been delete from book list\n", title);
return;
}
printf("error! %s is not in book list\n", title);
return;
}
{
if (count == MAXBKS)
{
fputs("error!The book.dat file is full.", stderr);
return;
}
puts("Press [enter] at the start of a line to stop.");
while (count < MAXBKS && gets(p[count].title) != NULL && p[count].title[0] != '\0')
{
puts("Now enter the author.");
gets(p[count].author);
puts("Now enter the value.");
scanf("%f", &p[count++].value);
getchar();
if (count < MAXBKS)
puts("Enter the next title.");
else
puts("The book list file is full.");
}
}

void write_file(struct book *p, char *str)
{
FILE * pbooks;
pbooks = fopen(str, "r+b");//将文件以可写模式打开，目的是清空文件内容  pbooks = fopen(str, "r+b");
fwrite(p, sizeof (struct book), count, pbooks);
fclose(pbooks);
}``````

``````#include<stdio.h>
#include<stdlib.h>
#define NUM 12
void xianshi();
void nempty(struct seat plan[NUM]);//输出空位总数
void lempty(struct seat plan[NUM]);//输出还有未被预订的位置编号
void alp(struct seat plan[NUM]);
void customer(struct seat plan[NUM]);//预订座位
void delete_seat(struct seat plan[NUM]);//删除已预订的空位
void write_file(struct seat plan[NUM],char name[10]);//写入文件
int n=0;
struct seat{
int num;
bool used;
char fname[10];
char lname[10];
};
int main()
{
int i;
struct seat plan[NUM]={
{1,true},
{2,true},
{3,true},
{4,true},
{5,true},
{6,true},
{7,true},
{8,true},
{9,true},
{10,true},
{11,true},
{12,true}
};
char ch;
printf("%d\n",n);
for(i=0;i<n;i++)
{
printf("num %d %d assigned by %s %s\n",plan[i].num,plan[i].used,plan[i].fname,plan[i].lname);
}
xianshi();
while((ch=getchar()) != 'f')
{
switch(ch)
{
case 'a':
nempty(plan);
break;
case 'b':
lempty(plan);
break;
case 'c':
alp(plan);
break;
case 'd':
customer(plan);
break;
case 'e':
delete_seat(plan);
break;
default:
puts("Enter a wrong word,please try again");
break;
}
xianshi();
ch=getchar();
}
write_file(plan,"yh.txt");

}

void xianshi()
{
puts("To show a function, enter its letter label:");
puts("a) Show number of empty seats");
puts("b) Show list of empty seats");
puts("c) Show alphabetical list of seats");
puts("d) Assigv a customer to a seat assigbment");
puts("e) Delete a seat assignment");
puts("f) Quit");

}

{
FILE *fp;
if((fp=fopen(name,"r+b"))==NULL)
{
exit(1);
}
rewind(fp);
{
n++;
}
fclose(fp);
}

void nempty(struct seat plan[NUM])
{
int i;
int n=0;
for(i=0;i<NUM;i++)
{
if(plan[i].used)
n++;
}
printf("Here are %d seats is empty\n",n);
}
void lempty(struct seat plan[NUM])
{
puts("These seats is empty.");
int i;
for(i=0;i<NUM;i++)
{
if(plan[i].used)
printf("%d ",plan[i].num);
}
printf("\n");
}

void alp(struct seat plan[NUM])
{
int i;
for(i=0;i<NUM;i++)
{
printf("num %d",plan[i].num);
if(plan[i].used==true)
printf( "is empty");
else
printf("is assigned");
}
}

void customer(struct seat plan[NUM])
{
int i,n,m;
puts("What's seat do you want?");
scanf("%d",&n);
while(plan[n-1].used==false)
{
puts("This seat is booked,please choose another!");
scanf("%d",&n);
}
for(i=0;i<NUM;i++)
{
if(plan[i].num==n)
m=i;
}
puts("Enter the first name:");
scanf("%s",plan[m].fname);
puts("Enter the lastname:");
scanf("%s",plan[m].lname);
plan[m].used=false;
}

void delete_seat(struct seat plan[NUM])
{
int i,n;
puts("What is the seat do you want to delete");
scanf("%d",&n);
for(i=0;i<NUM;i++)
{
if(plan[i].num==n)
{
plan[i].used=true;

}
}
}

void write_file(struct seat plan[NUM],char name[10])
{
FILE *fp;
if((fp=fopen(name,"r+b"))==NULL)
{
printf("Open %s faild",name);
exit(1);
}
fwrite(plan,sizeof(struct seat),NUM,fp);
puts("Write successfully");
fclose(fp);
}``````

0
0 收藏

0 评论
0 收藏
0