C primer plus第14章(结构和其他数据形式)(练习)
来源:互联网 发布:齐鲁期货软件 编辑:程序博客网 时间:2024/06/05 20:29
//练习3、4、5#include <stdio.h>struct month{ char name[10]; char nik[4]; int days; int month;};struct month months[12] ={ {"January","jan",31,1}, {"February","feb",28,2}, {"March","mar",31,3}, {"April","apr",30,4}, {"May","may",31,5}, {"June","jun",30,6}, {"July","jul",31,7}, {"August","aug",31,8}, {"September","sep",30,9}, {"October","oct",31,10}, {"November","nov",30,11}, {"December","dec",31,12}};int getDays(int month){ int i; int totaldays = 0; extern struct month months[]; for(i=1; i<month; i++) { totaldays += months[i].days; } return totaldays;}int main(void){ printf("%d",getDays(2)); return 0;}//练习6
#include <stdio.h>#include <string.h>typedef struct lens //镜头描述{ float foclen; //焦距长度,以mm为单位 float fstop; //孔径 char brand[30]; //品牌名称} LENS;int main(void){ //a赋值 LENS l[10]; l[2].foclen = 500; l[2].fstop = 2.0; //字符串如不赋值拷贝的只是地址 strcpy(l[2].brand,"Remarkatar"); //b直接初始化第三个下标的元素 LENS bigEye[10] = {[2] = {500,2,"Remarkatar"}}; return 0;}
练习7
#include <stdio.h>struct name{ char first[20]; char last[20];};struct bem{ int limbs; struct name title; char type[30];};int main(void){ struct bem *pb; struct bem deb = { 6, {"Berbanazel","Gwolkapwolk"}, "Arcturan" }; pb = &deb; printf("%d\n",deb.limbs); printf("%s\n",pb->type); printf("%s\n",pb->type+2); return 0;}打印结果
6
Arcturan
cturan
b使用结构鸣并使用指针
deb.title.last
pb->title.last
c
void show(const struct bem *pb){ printf("%s %s is a %d-limbed %s.",pb->title.first,pb->title.last,pb->limbs,pb->type);}
#include <stdio.h>struct fullname{ char fname[20]; char lname[20];};struct bard{ struct fullname name; int born; int died;};int main(void){ struct bard willie; struct bard *pt = &willie; //a willie.born; //b pt->born; //c scanf("%d",willie.born); //d scanf("%d",pt->born); //e scanf("%d",willie.name.lname); //f scanf("%d",pt->name.lname); //g willie.name.fname[2]; //h strlen(willie.name.fname) + strlen(willie.name.lname); return 0;}
9
struct car{ char name[100];//车名 int horseprower;//马力 int epa;//epa英里每加仑(mpg)等级 float wheelBase; //轴距 int years;//使用年限};
10
struct gas{ float distance; float gals; float mpg;};//astruct gas cal(struct gas g){ g.mpg = g.distance * g.gals; return g;}//bvoid cal2(struct gas * g){ g->mpg = g->distance * g->gals;}
11
enum choices{ no, yes, maybe};
12
char *(*pfun)(char *,char)
char * 返回值是个char指针
(*pfun) 是函数指针
(char *,char) 2个参数一个char指针,一个char
13
double a(double, double);
double b(double, double);
double c(double, double);
double d(double, double);
double (*abcd[4])(double,double) = {a,b,c,d};
//或者
typedef double (*abcd)(double,double);
abcd d[4] = {a,b,c,d};
编程练习
1.
//练习3、4、5#include <stdio.h>struct month{ char name[10]; char nik[4]; int days; int month;};//枚举类型代替1-12的数字enum monthEnum{ January, February, March, April, May, June, July, August, September, October, November, December};//月份用枚举标示struct month months[12] ={ {"January","jan",31,January}, {"February","feb",28,February}, {"March","mar",31,March}, {"April","apr",30,April}, {"May","may",31,May}, {"June","jun",30,June}, {"July","jul",31,July}, {"August","aug",31,August}, {"September","sep",30,September}, {"October","oct",31,October}, {"November","nov",30,November}, {"December","dec",31,December}};int getDays(int month){ int i; int totaldays = 0; extern struct month months[]; for(i=1; i<month; i++) { totaldays += months[i].days; } return totaldays;}int main(void){ printf("%d",getDays(2)); return 0;}
2
#include <stdio.h>#include <stdlib.h>#include <string.h>struct month{ char name[10]; char nik[4]; int days; int month;};struct month months[12] ={ {"January","jan",31,1}, {"February","feb",28,2}, {"March","mar",31,3}, {"April","apr",30,4}, {"May","may",31,5}, {"June","jun",30,6}, {"July","jul",31,7}, {"August","aug",31,8}, {"September","sep",30,9}, {"October","oct",31,10}, {"November","nov",30,11}, {"December","dec",31,12}};int getDays(int year, const struct month *m,int day);int main(void){ size_t year,day,i; char mon[20]; struct month *m = NULL; printf("请输入年份:"); while(scanf("%d",&year) != 1) { printf("请输入一个正整数年份:"); } //吃掉回城符 getchar(); printf("请输入月份:"); gets(mon); while(m == NULL) { for(i=1; i<= 12; i++) { if(strcmp(months[i].name,mon) == 0 || strcmp(months[i].nik,mon) == 0 || months[i].month == atoi(mon)) { m = &months[i]; } } } printf("请输入日期:"); while(scanf("%d",&day) != 1) { printf("请输入一个正整数日期:"); } printf("%d",getDays(year,m,day)); return 0;}//根据年月日获取天数int getDays(int year, const struct month *m,int day){ if(year< 0 || day <0 || day > m->days) { printf("year = %d, day=%d,m->day = %d",year,day,m->days); return 0; } int totaldays = 0; if(m->month == 2 && year%4 == 0 && year%100 !=0) { totaldays++; } int i; for(i=0; i<m->month-1; i++) { totaldays += months[i].days; } totaldays += day; return totaldays;}
3
#include <stdio.h>#define MAXTITL 40#define MAXAUTL 40#define MAXBKS 100 //图书最多的本书//建立book模板struct book{ char title[MAXTITL]; char author[MAXAUTL]; float value;};void titleSort(struct book library[],int count);void valueSort(struct book library[],int count);int main(void){ struct book library[MAXBKS];//结构数组 int count = 0; int index; //如果文件还能存储 puts("Please enter the book title."); puts("Press [enter] at the start of a line to stop."); //录入新的图书 while(count <MAXBKS && gets(library[count].title) != NULL && library[count].title[0] != '\0') { puts("Now enter the author."); gets(library[count].author); puts("Now enter the value."); //下标递增 scanf("%f",&library[count++].value); //清空输入行 while(getchar() != '\n') { continue; } //如果未大于最大存储数量,提示输入下一本 if(count< MAXBKS) { puts("Enter the next title"); } } if(count > 0) { puts("Here is the list of your books:"); for(index = 0; index < count; index++) { printf("%s by %s:$%.2f\n",library[index].title,library[index].author,library[index].value); } titleSort(library,count); valueSort(library,count); } else { puts("No books? Too bad.\n"); } return 0;}void titleSort(struct book library[],int count){ printf("\n按title首字母升序:\n"); int i,j,temp,flag; int sort[count]; for(i=0; i<count; i++) { sort[i] = i; } //选择排序 for(i=0; i<count-1; i++) { temp = sort[i]; flag = i; for(j=i+1; j<count; j++) { if(library[temp].title[0] > library[sort[j]].title[0]) { temp = sort[j]; flag = j; } if(flag != i) { sort[flag] = sort[i]; sort[i] = temp; } } } for(i=0; i<count; i++) { printf("%s by %s:$%.2f\n",library[sort[i]].title,library[sort[i]].author,library[sort[i]].value); }}void valueSort(struct book library[],int count){ printf("\n按value升序:\n"); int i,j,temp,flag; int sort[count]; for(i=0; i<count; i++) { sort[i] = i; } //选择排序 for(i=0; i<count-1; i++) { flag = i; for(j=i+1; j<count; j++) { if(library[sort[flag]].value>library[sort[j]].value) { flag = j; } if(flag != i) { temp = sort[i]; sort[i] = sort[j]; sort[j] = temp; } } } for(i=0; i<count; i++) { printf("%s by %s:$%.2f\n",library[sort[i]].title,library[sort[i]].author,library[sort[i]].value); }}
4
#include <stdio.h>#include <string.h>//建立book模板struct name{ char firstName[20]; char middleName[20]; char lastName[20];};struct citizen{ int socialSecurityNO; struct name citizenName;};void printA(const struct citizen country);void printB(const struct citizen *country);int main(void){ int i; struct citizen country[5] = { {10000001,{"h1","x1","l"}}, {10000002,{"h2","","l"}}, {10000003,{"h3","x3","l"}}, {10000004,{"h4","x4","l"}}, {10000005,{"h5","x5","l"}} }; for(i=0; i<5; i++) { //printA(country[i]); printB(&country[i]); } return 0;}void printA(const struct citizen country){ printf("%s.%s ",country.citizenName.firstName,country.citizenName.lastName); if(strlen(country.citizenName.middleName) > 0) { printf("%c.",country.citizenName.middleName[0]); } printf("-%d\n",country.socialSecurityNO);}void printB(const struct citizen *country){ printf("%s.%s ",country->citizenName.firstName,country->citizenName.lastName); if(strlen(country->citizenName.middleName) > 0) { printf("%c.",country->citizenName.middleName[0]); } printf("-%d\n",country->socialSecurityNO);}
5
#include <stdio.h>#define CSIZE 4//建立book模板struct name{ char firstName[20]; char lastName[20];};struct student{ struct name sname; //分数 float grade[3]; //平均分 double avgGrade;};void getStudent(struct student *s);void putStudents(struct student students[]);int main(void){ struct student students[CSIZE]; int i; for(i=0; i<CSIZE; i++) { printf("第%d名学生\n",i+1); getStudent(&students[i]); } putStudents(students); return 0;}void getStudent(struct student *s){ puts("请输入姓"); gets(s->sname.firstName); puts("请输入名"); gets(s->sname.lastName); int i; double total = 0; for(i=0; i<3; i++) { printf("请输第%d门分数",i+1); scanf("%f",&s->grade[i]); getchar(); total += s->grade[i]; } s->avgGrade = total/3;}void putStudents(struct student students[]){ int i,j; double total = 0; for(i =0; i<CSIZE; i++) { printf("学生%s.%s\n",students[i].sname.firstName,students[i].sname.lastName); for(j=0; j<3; j++) { printf("成绩%d:%f\n",j+1,students[i].grade[j]); } total += students[i].avgGrade; } printf("班级平均成绩%lf",total/CSIZE);}
6(未完成)
//练习3、4、5#include <stdio.h>#include <stdlib.h>#define LEN 20#define MAX 100//棒球选手typedef struct ballplayer{ //球员编号 size_t no; char lastname[LEN]; char firstname[LEN]; //上场击球次数 int timesAtBat; //击中数 int timesAtHit; //跑垒数 int timesAtBaseRunning; //跑点数 int RBI; //平均成功率 double averageSuccessRatio;} BP;int getInt();void getBallPalyer(BP *bp);int main(void){ BP team[MAX]; int size = sizeof(BP); FILE *fp; int index = 0; if((fp = fopen("team.txt","r")) == NULL) { puts("文件打开失败"); exit(EXIT_FAILURE); } while(fread(&team[index++],size,1,fp) == 1) { printf("%d %s.%s %d %d %d %d %d",team[index].no,team[index].firstname,team[index].lastname,team[index].timesAtBat,team[index].timesAtHit,team[index].timesAtBaseRunning,team[index].RBI,team[index].averageSuccessRatio); } return 0;}void getBallPalyer(BP *bp){ puts("请录入球员编号!"); bp->no = getInt(); puts("请输入球员姓:"); gets(bp->firstname); puts("请输入球员名:"); gets(bp->lastname); puts("请输入上场击球次数"); //上场击球次数 bp->timesAtBat = getInt(); //击中数 bp->timesAtHit = getInt(); //跑垒数 bp->timesAtBaseRunning = getInt(); //跑点数 bp->RBI = getInt(); //平均成功率 bp->averageSuccessRatio = bp->timesAtHit / bp->timesAtBat;}//获取int型的输入参数int getInt(){ int num; while(scanf("%d",&num) != 1) { while(getchar() != '\n') { continue; } puts("请输入数字类型的编号"); } return num;}
7
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXTITL 40#define MAXAUTL 40#define MAXBKS 10 //图书最多的本书#define CONTINUE 0#define DONE 1#define YES 1#define NO 0//建立book模板struct book{ char title[MAXTITL]; char author[MAXAUTL]; float value; //记录删除状态 int del;};int getlet(const char *s);int getbook(struct book *pb);void update(struct book * item);int main(void){ struct book library[MAXBKS];//结构数组 int count = 0; int deleted = 0;//记录删除的数量 int index,filecount,open; FILE *pbooks; int size = sizeof(struct book); //以读取模式打开文件流 if((pbooks = fopen("book.dat","r")) != NULL) { //读取并输出文件中已经存在的数据 while(count < MAXBKS && fread(&library[count],size,1,pbooks) == 1) { //读取第一条数据时显示标题 if(count == 0) { puts("Current contents of book.dat"); } printf("%s by %s:$%.2f\n",library[count].title,library[count].author,library[count].value); printf("Do you wish to change or delete this entry?<y/n>"); //获取输入 if(getlet("yn") == 'y') { printf("Enter c to change,d to delete entry:"); //获取输入 if(getlet("cd") == 'd') { //删除标记 library[count].del = YES; //删除数量增加 deleted++; puts("Entry marked for deletion."); } else { //更新数据 update(&library[count]); } } count++; } fclose(pbooks); } //计算记录数量 记录总数-删除的数据 filecount = count - deleted; //如果文件存储已满 if(count == MAXBKS) { fputs("The book.dat file is full.",stderr); exit(2); } //如果文件还能存储 puts("Please add new book titles."); puts("Press [enter] at the start of a line to stop."); open = 0; while(filecount < MAXBKS) { if(filecount < count) { //统计所有没有删除的书 while(library[open].del == NO) { //此变量唯一用途是为后面新增书查询下标 open++; } //录入新的图书 if(getbook(&library[open]) == DONE) { break; } } else if(getbook(&library[filecount]) == DONE) { //如果没有删除的书 break; } //继续统计新增后的书总量(扣除删除的) filecount++; if(filecount < MAXBKS) { puts("Enter the next book title."); } } puts("Here is the list of your books:"); for(index = 0; index<filecount; index++) { if(library[index].del == NO) { printf("%s by %s: $%.2f\n",library[index].title,library[index].author,library[index].value); } } //以写入(清空文件内容)的方式打开文件流 if((pbooks = fopen("book.dat","w")) == NULL) { fputs("Can`t open book.dat file for output\n",stderr); exit(1); } //写入文件 for(index = 0; index<filecount; index++) { //删除的数据不写入 if(library[index].del == NO) { fwrite(&library[index],size,1,pbooks); } } //关闭文件流 fclose(pbooks); puts("Done!"); return 0;}//参数传入一个字符串,获取输入,字符串中的一个字符int getlet(const char * s){ char c; c = getchar(); //功能:查找字符串s中首次出现字符c的位置 //说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。 while(strchr(s,c) == NULL) { printf("Enter a character in the list %s\n",s); //清空输入行 比如scanf()没有对'\n'做处理 while(getchar() != '\n') { continue; } //继续获取输入 c=getchar(); } while(getchar() != '\n') { continue; } return c;}//录入新书int getbook(struct book * pb){ int status = CONTINUE; if(gets(pb->title) == NULL || pb->title[0] == '\0') { status = DONE;//退出输出 } else { printf("Now enter the auther:"); gets(pb->author); printf("Now enter the value:"); while(scanf("%f",&pb->value) != 1) { puts("Please use numeric input"); scanf("%*s"); } while(getchar() != '\n') { continue;//clear input line } pb->del = NO; } return status;}void update(struct book * item){ struct book copy; char c; copy = *item; //修改菜单 puts("Enter the letter that indicates your choice:"); puts("t) modify title a) modify author"); puts("v) modify value s)quit,saving changes"); puts("q) quit,ignore changes"); while((c = getlet("tavsq")) != 's' && c != 'q') { switch(c) { case 't': puts("Enter new title:"); gets(copy.title); break; case 'a': puts("Enter new author:"); gets(copy.author); case 'v': puts("Enter new value:"); while(scanf("%f",©.value) != 1) { puts("Enter a numeric value:"); scanf("%*s"); } while(getchar() != '\n') { continue; } break; } puts("t) modify title a) modify author"); puts("v) modify value s)quit,saving changes"); puts("q) quit,ignore changes"); } if(c == 's') { *item = copy; }}
8(丑陋,但是完成了)
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//bool头文件#include <string.h>#define LEN 12//座位席模板typedef struct planeSeat{ //座位号 char no; //是否已预订 bool booked; char firstName[LEN]; char lastName[LEN];} PSEAT;int getlet(const char *s);//读取文件void readFile(PSEAT *p,int size);//写入文件void writeFile(PSEAT *p,int size);//显示剩余座位数void showNumberOfEmptySeats(PSEAT *p);//显示剩余座位列表void showListOfEmptySeats(PSEAT *p);//按字母显示预订座位列表void showAlphabeticalListOfSeats(PSEAT *p);//预订座位void AssignACustomer(PSEAT *p);//删除预订void deleteACustomer(PSEAT *p);//显示菜单void menu(PSEAT *p);int main(void){ int size = sizeof(PSEAT); PSEAT p[LEN]; readFile(p,size); menu(p); writeFile(p,size); return 0;}void writeFile(PSEAT *p,int size){ int i; FILE *fp = fopen("seatBook.dat","w"); for(i=0; i<LEN; i++) { fwrite((p+i),size,1,fp); }}void readFile(PSEAT *p,int size){ FILE *fp; int i; if((fp = fopen("seatBook.dat","r")) != NULL) { for(i=0; i<LEN; i++) { fread((p+i),size,1,fp); } fclose(fp); } else { for(i=0; i<LEN; i++) { (p+i)->no = i; (p+i)->booked = false; } }}//参数传入一个字符串,获取输入,字符串中的一个字符int getlet(const char * s){ char c; c = getchar(); //功能:查找字符串s中首次出现字符c的位置 //说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。 while(strchr(s,c) == NULL) { printf("Enter a character in the list %s\n",s); //清空输入行 比如scanf()没有对'\n'做处理 while(getchar() != '\n') { continue; } //继续获取输入 c=getchar(); } while(getchar() != '\n') { continue; } return c;}void showNumberOfEmptySeats(PSEAT *p){ int count = 0; int i; for(i=0; i<LEN; i++) { if((p+i)->booked == false) { count++; } } printf("\n%d SEATS ARE not booked\n",count);}void showListOfEmptySeats(PSEAT *p){ int i; for(i=0; i<LEN; i++) { if((p+i)->booked == false) { printf("NO.%d SEAT not booked\n",(p+i)->no); } }}void showAlphabeticalListOfSeats(PSEAT *p){ int sorts[LEN]; int i,j,flag,temp; for(i=0; i<LEN; i++) { sorts[i] = i; } for(i = 0; i< LEN-1; i++) { flag = i; for(j = i+1; j <LEN ; j++) { if((p+sorts[i])->firstName[0] > (p+sorts[j])->firstName[0]) { flag = j; } } if(flag != i) { temp = sorts[flag]; sorts[flag] = sorts[i]; sorts[i] = temp; } } for(i=0; i<LEN; i++) { if((p+sorts[i])->booked == true) { printf("NO.%d SEAT is booked by %s.%s\n",(p+sorts[i])->no,(p+sorts[i])->firstName,(p+sorts[i])->lastName); } }}//预订座位void AssignACustomer(PSEAT *p){ int index; puts("请输入要预订的座位号"); while(scanf("%d",&index) !=1 || index <0 || index > LEN) { while(getchar()!='\n') { continue; } puts("请输入0-12的数字"); } while(getchar()!='\n') { continue; } puts("请输入姓"); gets((p+index)->firstName); puts("请输入名字"); gets((p+index)->lastName); (p+index)->booked = true;}void deleteACustomer(PSEAT *p){ int index; puts("请输入要预订的座位号"); while(scanf("%d",&index) !=1 || index <0 || index > LEN) { while(getchar()!='\n') { continue; } puts("请输入0-12的数字"); } while(getchar()!='\n') { continue; } //p[index]->firstName = ""; //p[index]->lastName = ""; (p+index-1)->booked = false;}void menu(PSEAT *p){ char ch; puts("To choose 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 seat"); puts("d)Assign a customer to a seat assignment"); puts("e)Delete a seat assignment"); puts("f)Quit"); while((ch = getlet("abcdef")) != 'f') { switch(ch) { case 'a': showNumberOfEmptySeats(p); break; case 'b': showListOfEmptySeats(p); break; case 'c': showAlphabeticalListOfSeats(p); break; case 'd': AssignACustomer(p); break; case 'e': deleteACustomer(p); break; } }}
8答案做法
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//bool头文件#include <string.h>#define LEN 14#define SEATS 12#define EMPTY 0#define TAKEN 1#define CONTINUE 1#define DONE 0struct planestats{ int seat_id; int status; char last[LEN]; char first[LEN];};int getmenu(void);int getlet(const char *);int openings(const struct planestats[],int);void show_empties(const struct planestats [],int);void list_assign(struct planestats *[],int);void assign_seat(struct planestats [],int);void delete_seat(struct planestats [],int);void show_seat(const struct planestats [],int);void sort(struct planestats *[],int);void makelist(const struct planestats [],char*,int);int main(void){ struct planestats plane_1[SEATS],*ps[SEATS]; int choice; int i; FILE *fp; size_t size = sizeof(struct planestats); for(i=0; i<SEATS; i++) { ps[i] = &plane_1[i]; } if((fp = fopen("air.dat","rb")) == NULL) { for(i=0; i<SEATS; i++) { plane_1[i].status = EMPTY; plane_1[i].seat_id = i+1; } } else { fread(plane_1,size,SEATS,fp); fclose(fp); } while((choice = getmenu()) != 'q') { switch(choice) { case 'o': printf("There are %d empty seats.\n",openings(plane_1,SEATS)); break; case 'e': show_empties(plane_1,SEATS); break; case 'l': list_assign(ps,SEATS); break; case 'a': assign_seat(plane_1,SEATS); break; case 'd': delete_seat(plane_1,SEATS); break; default: puts("Switch trouble"); break; } } if((fp = fopen("air.dat","wb")) == NULL) { puts("Can`t save data to file."); } else { fwrite(plane_1,size,SEATS,fp); fclose(fp); } puts("Bye from Colossus Airlines!"); return 0;}#define CHOICES 6int getmenu(void){ const char *descript[CHOICES] = { "Show number of empty seats", "Show list of empty seats", "Show alphabetical list of seat assignments", "Assign acustomer to a seat", "Delete a seat assignment", "Quit" }; const char labels[CHOICES + 1] = "oeladq"; int i; puts("To choose a function,enter its letter"); for(i =0; i<CHOICES; i++) { printf("%c) %s\n",labels[i],descript[i]); } return getlet(labels);}//参数传入一个字符串,获取输入,字符串中的一个字符int getlet(const char * s){ char c; c = getchar(); //功能:查找字符串s中首次出现字符c的位置 //说明:返回首次出现c的位置的指针,如果s中不存在c则返回NULL。 while(strchr(s,c) == NULL) { printf("Enter a character in the list %s\n",s); //清空输入行 比如scanf()没有对'\n'做处理 while(getchar() != '\n') { continue; } //继续获取输入 c=getchar(); } while(getchar() != '\n') { continue; } return c;}int openings(const struct planestats pl[],int n){ int count = 0; int seat; for(seat = 0; seat < n; seat++) { if(pl[seat].status == EMPTY) { count++; } } return count;}void show_empties(const struct planestats pl[],int n){ //int seat; char seating[3*SEATS]; if(openings(pl,n) == 0) { puts("All seats are assigned"); } else { puts("The following seats are avaliable:"); makelist(pl,seating,EMPTY); puts(seating); }}void makelist(const struct planestats pl[],char * str,int kind){ int seat; char temp[LEN]; str[0] = '\0'; for (seat = 0; seat <SEATS; seat++) { if(pl[seat].status == kind) { sprintf(temp," %d",pl[seat].seat_id); strcat(str,temp); } }}void list_assign(struct planestats *ps[],int n){ int i; if(openings(*ps,n)==SEATS) { puts("All seats are empty."); } else { sort(ps,n); for(i =0; i<SEATS; i++) { if(ps[i]->status == TAKEN) { printf("Seat %d: %s. %s\n",ps[i]->seat_id,ps[i]->last,ps[i]->first); } } }}void assign_seat(struct planestats pl[],int n){ char list[3*SEATS]; int seat,loop; if(openings(pl,n) == 0) { puts("All seats are assigned."); } else { makelist(pl,list,EMPTY); puts("Which seat do you want? Choose from this list:"); puts(list); do { while(scanf("%d",&seat) != 1) { scanf("%*s"); puts("Enter a number from this list:"); puts(list); } if(seat < 1 || seat > SEATS || pl[seat-1].status == TAKEN) { puts("Enter a number from this list:"); puts(list); loop = CONTINUE; } } while(loop == CONTINUE); while(getchar() != '\n') { continue; } puts("Enter first name:"); gets(pl[seat -1].first); puts("Enter last name:"); gets(pl[seat -1].last); printf("%s %s assigned to seat %d.\n",pl[seat -1].first,pl[seat -1].last,seat); puts("Enter a to accpt assignment, c to cancel it."); if(getlet("ac") == 'a') { pl[seat - 1].status = TAKEN; puts("Passenger assigned to seat."); } else { puts("Passenger not assigned."); } }}void show_seats(const struct planestats pl[],int n){ int i; puts("Seats currently taken:"); for(i=0; i<SEATS; i++) { if(pl[i].status == TAKEN) { printf("Seat %d: %s, %s\n",pl[i].seat_id,pl[i].last,pl[i].first); } }}void delete_seat(struct planestats pl[],int n){ int seat,loop; char list[3*SEATS]; if(openings(pl,n) == SEATS) { puts("All seats already are empty."); } else { show_seats(pl,n); makelist(pl,list,TAKEN); puts("Enter the number of the seat to be cancelled:"); do { while(scanf("%d",&seat) != 1) { scanf("%*s"); puts("Enter a number from this list:"); puts(list); } if(seat < 1 || seat > SEATS || pl[seat-1].status == EMPTY) { puts("Enter a number from this list;"); puts(list); loop = CONTINUE; } else { loop = DONE; } } while(loop == CONTINUE); while(getchar() != '\n') { continue; } printf("%s %s to be canceled for seat %d.\n",pl[seat - 1].first,pl[seat - 1].last,seat); puts("Enter d to delete assignment,a to abort."); if(getlet("da") == 'd') { pl[seat -1].status = EMPTY; puts("Passenger dropped."); } else { puts("Passenger retained."); } }}void sort(struct planestats *array[],int limit){ int top,search; struct planestats * temp; for(top = 0; top<limit-1; top++) { for(search = top +1; search <limit; search++) { if(strcmp(array[search]->last,array[top]->last)<0) { temp = array[search]; array[search] = array[top]; array[top] = temp; } } }}
10
#include <stdio.h>#include <stdlib.h>void MyFunA(int x);void MyFunB(int x);void MyFunC(int x);void (*FunP)(int);typedef void(*FunType)(int);//定义一个函数指针类型的FunTYPEvoid CallMyFun(FunType fp,int x);int main(void){ size_t c; while((c = getchar()) != 'q') { switch(c) { case 'a': CallMyFun(MyFunA,2); break; case 'b': CallMyFun(MyFunB,2); break; case 'c': CallMyFun(MyFunC,2); break; } } return 0;}void CallMyFun(FunType fp,int x){ fp(x);}void MyFunA(int x){ printf("%d\n",10+x);}void MyFunB(int x){ printf("%d\n",10-x);}void MyFunC(int x){ printf("%d\n",10*x);}
11
#include <stdio.h>#include <stdlib.h>#include <math.h>#define LEN 5typedef double(*MyFun)(double);void transform(double source[],double target[],int len,MyFun);double add1(double x);double reduce1(double x);int main(void){ double source[LEN] = {1.1,1.2,1.3,1.4,1.5}; double target[LEN]; //sin正弦 transform(source,target,LEN,sin); //cos余弦 transform(source,target,LEN,cos); transform(source,target,LEN,add1); transform(source,target,LEN,reduce1); return 0;}void transform(double source[],double target[],int len,MyFun s){ int i; for(i=0; i<len; i++) { target[i] = s(source[i]); printf("%lf",target[i]); }}double add1(double x) { return x+1;}double reduce1(double x) { return x-1;}
- C primer plus第14章(结构和其他数据形式)(练习)
- C primer plus第14章(结构和其他数据形式)
- c primer plus第14章总结:结构和其他数据形式
- 《C Primer Plus(第5版)中文版》第6章编程练习第14题
- C.Primer.Plus(第六版)第14章 编程练习
- C -- 结构和其他数据形式
- C语言结构和其他数据形式
- C 结构和其他数据形式
- C学习笔记(九)结构和其他数据形式
- C primer plus第3章(数据和C)习题
- 第十四章 结构和其他数据形式
- 《C Primer Plus(第5版)中文版》第6章编程练习第1题
- 《C Primer Plus(第5版)中文版》第6章编程练习第15题
- 《C Primer Plus(第5版)中文版》第6章编程练习第16题
- 《C Primer Plus(第5版)中文版》第7章编程练习第1题
- 《C Primer Plus(第5版)中文版》第7章编程练习第2题
- 《C Primer Plus(第5版)中文版》第7章编程练习第3题
- 《C Primer Plus(第5版)中文版》第7章编程练习第4题
- 学好ARM开发的意义
- 学习笔记04—HashCode相关
- 八、Oracle数据库之学习笔记---Oracle的表的基本查询(5)
- Linux 下 mysql 数据库结构目录
- NYOJ - 回文字符串(DP)
- C primer plus第14章(结构和其他数据形式)(练习)
- linux 网络社区
- jQuery easyUI动态获取表结构并显示表中的数据)
- 工程师和研究生的专业方向
- json遍历获取KEY
- 内核,initrd,ramdisk,关系,用途
- JSON的范例
- 各种移动开源GIS
- ARM-Linux学习过程问题集锦