c语言实例教程 课后题答案

申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

文档介绍

c语言实例教程 课后题答案

第4章选择结构一.选择题1、D2、C3、B4、B5、C6、C7、C8、D9、C10、A11、A12、D13、B14、C二.填空题1、02、013、max=124、end5、d=206、17、70~848、firstErrorthird三.编程题1.由键盘输入三个学生成绩,求平均成绩,并找出最高成绩。程序:main(){floatx,y,z;floatmax,avg;printf(″请输入三个数x,y,z:″);scanf(″%f,%f,%f″,&x,&y,&z);max=x;if(y>max)max=y;if(z>max)max=z;avg=(x+y+z)/3;printf(”平均成绩=%5.2f,最高成绩=%5.2fn”,avg,max);}2.有一个函数:x(x<1)y=2x-1(1≤x<10)3x-11(x≥10)写一程序,输入x,输出y值。main(){intx,y;printf(”inputx:”);scanf(”%d”,&x);if(x<1){y=x;printf(”x=%d,y=x=%dn”,x,y);}elseif(x<10){y=2*x-1;printf(”x=%d,y=2*x-1=%dn”,x,y);45n}else{y=3*x-11;printf(”x=%d,y=3*x-11=%dn”,x,y);}}3.编写程序,输入一位学生的生日,并输入当前的日期,输出该生的实足年龄。main(){intage,y1,m1,d1,y2,m2,d2;printf(”输入生日日期(年、月、日):”);scanf(”%d%d%d”,&y1,&m1,&d1);printf(”输入当前日期(年、月、日):”);scanf(”%d%d%d”,&y2,&m2,&d2);age=y2-y1;if(m1>m2)age--;if(m1==m2&&d1>d2)age--;printf(”ageis%dn”,age);}4.给一个不多于5位的正整数,求出它是几位数,分别打印出每一位数字,然后再按逆序打印出各位数字。main(){longintnum;intindiv,ten,hundred,thousand,ten_thousand,place;printf(”请输入一个整数(0~99999):”);scanf(”%ld”,&num);if(num>9999)place=5;elseif(num>999)place=4;elseif(num>99)place=3;elseif(num>9)place=2;elseplace=1;printf(”place=%dn”,place);printf(”每位数字为:”);ten_thousand=num/10000;thousand=(num-ten_thousand*10000)/1000;hundred=(num-ten_thousand*10000-thousand*1000)/100;ten=(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=num-ten_thousand*10000-thousand*1000-hundred*100-ten*10;switch(place){case5:printf(”%d,%d,%d,%d,%dn”,ten_thousand,thousand,hundred,ten,indiv);printf(”反序数字为:”);printf(”%d,%d,%d,%d,%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case4:printf(”%d,%d,%d,%dn”,thousand,hundred,ten,indiv);45nprintf(”反序数字为:”);printf(”%d,%d,%d,%dn”,indiv,ten,hundred,thousand);break;case3:printf(”%d,%d,%dn”,hundred,ten,indiv);printf(”反序数字为:”);printf(”%d,%d,%dn”,indiv,ten,hundred);break;case2:printf(”%d,%dn”,ten,indiv);printf(”反序数字为:”);printf(”%d,%dn”,indiv,ten);break;case1:printf(”%dn”,indiv);printf(”反序数字为:”);printf(”%dn”,indiv);break;}}5.某商场在节日期间举办促销活动,顾客可按购买商品的款数多少分别给予以下不同的优惠折扣:购物不足250元的,没有折扣,赠送小礼品;购物满250元,不足500元的,折扣5%;购物满500元,不足1000元的,折扣10%;购物满1000元,不足2000元的,折扣15%;购物满2000元及2000元以上,折扣20%;试用switch语句编写程序,计算顾客的实际付款数。main(){floatpayment,discount,amount;inttemp;charrmb=’x9d’;printf(”Pleaseinputyourpayment:”);scanf(”%f”,&payment);temp=(int)payment/250;switch(temp){case0:discount=0;printf(”youcangetalittlegift.n”);break;case1:discount=5.0;break;case2:case3:discount=10.0;break;case4:case5:case6:case7:discount=15.0;45nbreak;default:discount=20.0;break;}amount=payment*(1-discount/100);printf(”youpay%c%.2fn”,rmb,amount);}45n第5章循环结构程序设计三.编程题1.求从1到100之间的偶数之和。main(){inti,sum=0;for(i=1;i<=100;i++)if(i%2==0)sum+=i;printf("sum=%dn",sum);}2.编程求出200~300之间,满足条件:三位数字之积为42,三位数字之和为12的数。main(){inti=2,j,k;for(j=0;j<=9;j++)for(k=0;k<=9;k++)if(i*j*k==42&&i+j+k==12)printf("%dt",100*i+10*j+k);}3.打印出以下图案:****************main(){inti,j,k;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf((””);for(k=1;k<=2*i-1;k++)printf(”*”);printf(”n”);}}4.编程实现百钱买百鸡的方法。设公鸡每只5钱,母鸡每只3钱,小鸡3只1钱,且需包含公鸡、母鸡和小鸡,求可有哪几种方案。main(){inti,j,k;for(i=1;i<=20;i++)for(j=1;j<=33;j++)for(k=1;k<=100;k++)if(5*i+3*j+k/3.0==100&&i+j+k==100)45nprintf("%d,%d,%dn",i,j,k);}5.从键盘输入一些整数,统计大于零的整数个数和小于零的整数个数。提示:用输入零来结束输入。main(){intn,sum1=0,sum2=0;scanf(”%d”,&n);while(n!=0){if(n>0)sum1++;elsesum2++;scanf(”inputn:”,&n);}printf(”大于零的整数个数=%d,小于零的整数个数=%d”,sum1,sum2);}一.选择题1、D2、A3、C4、B5、C6、C7、D8、B9、C10、D11、B12、A13、A14、A二.填空题1、52、523、89214、175、#*#*$6、y=-17、1010918、X9、x>=0x(b)?(a):(b))/*带参宏定义,注意加括号*/voidmain(){inta,b,c;printf("Inputthreeintegers:");scanf("%d,%d,%d",&a,&b,&c);printf("max=%dn",MAX(MAX(a,b),c));}2.用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出:一为原文输出;一为将字母变成其下一字母(如’a’变成’b’……’z’变成’a’。其他字符不变)。用#define命令来控制是否要译成密码。例如:“#defineCHANGE1”则输出密码。若“#defineCHANGE0”则不译成密码,按原码输出。(字符数组请参阅第8章)程序见下一页分析:字符数组以‘’结束,可采用第3种方式条件编译。如果想输出原文,可以将程序第3行改为:#defineCHANGE0#include"stdio.h"#defineMAX80/*宏定义*/#defineCHANGE1voidmain(){charstr[MAX];inti;printf("Inputtext:n");gets(str);#if(CHANGE)/*条件编译*/{for(i=0;i='a'&&str[i]<'z'||str[i]=='A'&&str[i]=='Z')str[i]+=1;elseif(str[i]=='z'||str[i]=='Z')str[i]-=25;}}#endifprintf("Output:n%s",str);}45n第7章函数1.写两个函数,分别求两个整数的最大公约数和最小公倍数。分析:设两个整数为u和v,用辗转相除法求最大公约数,最小公倍数=uv/最大公约数。“辗转相除”法有下列步骤:1)若u>v,用u除以v求余数r.2)若r=0,则v为最大公约数;若r!=0,将r赋给v,v赋给u.3)r=0,v(最后一次)为最大公约数。程序如下:inthcf(intu,intv)/*求最大公约数*/{intt,r;if(v>u){t=u;u=v;v=t;}while((r=u%v)!=0){u=v;v=r;}return(v);}intlcd(intu,intv,inth)/*求最小公倍数*/{return(u*v/h);}main()/*主函数*/{intu,v,h,l;scanf(”d%,d%”,&u,&v);h=hcf(u,v);printf(”H.C.F=d%n”,h);l=lcd(u,v,h);printf(”L.C.D=d%n”,l);}2.编写一个函数,判断从键盘输入的一个整数是否为奇数,并在调用函数中输出是奇数的整数。#includeintodd(intn)/*判断是否为奇数,是奇数flag值为1,不为奇数flag值为0*/{intflag=1;if(n%2==0)flag=0;return(flag);}voidmain(){intx;printf("Inputaninteger:");scanf("%d",&x);if(odd(x))/*调用函数odd*/printf("n%disaodd.",x);elseprintf("n%disnotaodd.",x);}3.编写两个函数分别完成电文的加密和解密工作。加密方法为:将电文中字母A变成E,a变成e,即变成其后的第4个字母,W变成A,X编程B,Y变成C,Z变成D,非字母字符不变,例如”China!”加密后变为”Glmre!”。在主程序中输入一行字符,对其进行加密,输出密码,并对密码进行解密,输出原文。45n#include”stdio.h”charjiami(charc){if((c>=′a′&&c<=′z′)||(c>=′A′&&c<=′Z′)){if(c>=′w′&&c<=′z′)||(c>=′W′&&c<=′Z′)}c=c-22;elsec=c+4;}return(c);}charjiemi(charc){if((c>=′a′&&c<=′z′)||(c>=′A′&&c<=′Z′)){if(c>=′a′&&c<=′d′)||(c>=′A′&&c<=′D′)}c=c+22;elsec=c-4;}return(c);}voidmain(){charc[100],d[100];gets(c);printf(″原文:″);puts(c);printf(″n密码:″);for(i=0;c[i]!=′\0′;i++){d[i]=jiami(c[i]);printf(″%c″,d[i]);}d[i]=’’;printf(″n解密后原文:″);for(i=0;d[i]!=′\0′;i++){printf(″%c″,jiemi(d[i]);}}4.编写一个递归函数fib,用于计算Fibonacci数列的第n项。fib(0)=0,fib(1)=1,fib(n)=fib(n-1)+fib(n-2))。fib(intn){intc;if(n==1||n==0)c=1;elsec=fib(n-1)+fib(n-2);/*递归调用*/return(c);45n}main(){intn;printf(”Entern:”);scanf(”d%”,&n);printf(”theresultis:d%n”,fib(n));}5.写一个判素数的函数,在主函数中输入一个整数,输出是否素数的信息。#includeintprime(intn);/*函数声明*/voidmain(){intn;printf("Inputaninteger:");scanf("%d",&n);if(prime(n))/*调用函数prime*/printf("n%disaprime.",n);elseprintf("n%disnotaprime.",n);}intprime(intn)/*判断是否为素数,是素数flag值为1,不为素数flag值为0*/{intflag=1,i;for(i=2;i<=n/2&&flag==1;i++)if(n%i==0)flag=0;return(flag);}6.编写函数,求输入的三个整数值的最大值,并在主函数中输出。#includeintmaxmum(intx,inty,intz);/*说明一个用户自定义函数*/voidmain(){inti,j,k,max;printf("i,j,k=?n");scanf("%4d%4d%4d",&i,&j,&k);printf("%4d%4d%4dn",i,j,k);max=maxmum(i,j,k);/*调用子函数,并将返回值赋给max*/printf("Themaxmumvalueis%dn",max);}maxmum(intx,inty,intz){intmax;/*求最大值*/max=x>y?x:y;max=max>z?max:z;return(max);/*返回最大值*/}45n例1:定义一维数组,从键盘输入10个数,计算其中负数的和,在屏幕上显示输出结果。main(){inta[10],i,sum=0;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)if(a[i]<0)sum=sum+a[i];for(i=0;i<10;i++)printf("%f",a[i]);printf(“n");printf(“sum=%dn",sum);}例2:纠错题.程序功能:逐个输入8个浮点型数到数组a中,然后找出数组元素中的最小值并输出min的值。mian(){inta[8],i,min;printf("InputScore(8):n")for(i=1;i<8;i++)scanf("%d",a[i]);min=a[0];for(i=1;i<=8;i++)if(a[i]>min)min=a[i];printf("min=%d",min);正确程序:main(){inti;floata[8],min;printf("InputScore(8):n");for(i=0;i<8;i++)scanf("%f",&a[i]);min=a[0];for(i=1;i<8;i++)if(a[i]b?a:b);}main(){inta=8;printf("%d",max(a,b));}运行结果:8将上面程序改为如下形式:max(inta,intb){return(a>b?a:b);}inta=3,b=5;main(){inta=8;printf("%d",max(a,b));}运行结果:845n数组三.编程题1.编写一个程序,从键盘输入10个学生成绩,统计最高分、最低分和平均分。main(){inti,j,k;floatarray[10],max,min,avg,sum=0;printf("输入10个学生的成绩:n");for(i=0;i<10;i++)scanf("%f",&array[i]);printf("n");max=a[0];min=a[0];for(i=0;i<10;i++){if(a[i]>max)max=a[i];if(a[i]=′0′&&line[i]<=’9’)num[0]++;elseif((line[i]>=’a’&&line[i]<=’z’)||(line[i]>=’A’&&line[i]<=’Z’))num[1]++;elsenum[2]++;printf(”数字字符数=%d字母字符数=%d其它字符数=%d”,num[0],num[1],num[2]);}一.单项选择题1、A2、A3、D4、C5、D6、B7、D8、A9、D10、C11、D12、A13、C14、A15、C二.填空题1、gets()2、a[1][3]3、abc4、3695、6006、587、48、j+=2(或j=j+2)m!=i45n第9章三.编程题1.写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为intstrcmp(char*p1,char*p2);#include"stdio.h"intstrcmp(char*p1,char*p2){for(;*p1==*p2&&*p1!='';){p1++;p2++;}return(*p1-*p2);}voidmain(){intstrcmp(char*p1,char*p2);chara[80],b[80];intn;gets(a);gets(b);n=strcmp(a,b);if(n>0)printf("串1>串2n");elseif(n<0)printf("串1<串2n");elseprintf("串1=串2n");}2.输入10个整数,按由小到大的顺序输出(用指针方法处理)。采用冒泡法#include"stdio.h"#defineSIZE10voidsort(int*p,intn);main(){inti,a[SIZE],*p;printf("输入%d个整数n",SIZE);for(i=0;i*(pi+1)){t=*pi;*pi=*(pi+1);*(pi+1)=t;}}}3.编制一个程序,从键盘上输入一个字符串,按反序输出。如输入abcdefg,则输出gfedcba。#include"stdio.h"#include"string.h"char*reverse(char*s){char*p,*q,temp;intn;n=strlen(s);q=(n>0)?s+n-1:s;for(p=s;p=3)days+=1;printf("n%d月%d日是%d年的第%d天.",date.month,date.day,date.year,days);}/*方法二:#include"stdio.h"struct{intyear;intmonth;intday;}date;voidmain(){inti,day_sum;staticintday_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf("请输入日期(年,月,日)");scanf("%d,%d,%d",&date.year,&date.month,&date.day);day_sum=0;for(i=1;i=3)day_sum+=1;printf("n%d月%d日是%d年的第%d天.",date.month,date.day,date.year,day_sum);45n}*/2.写一个函数days,实现上面的计算,由主函数将年、月、日传递给days函数,计算后将日子数传回主函数输出。#include"stdio.h"structdt{intyear;intmonth;intday;}date;main(){intdays(intyear,intmonth,intday);printf("请输入日期(年,月,日)");scanf("%d,%d,%d",&date.year,&date.month,&date.day);printf("n");printf("n%d月%d日是%d年的第%d天.",date.month,date.day,date.year,days(date.year,date.month,date.day));}intdays(intyear,intmonth,intday){inti,day_sum;staticintday_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};day_sum=0;for(i=1;i=3)day_sum+=1;return(day_sum);}3.编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个学生记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。#include"stdio.h"#defineN2structstudent{charnum[6];charname[8];intscore[4];}stu[N];voidprint(structstudentstu[],intn);main(){inti,j;for(i=0;inum);while(p1->num!=0){p1=(structline*)malloc(sizeof(structline));printf("结点值:");scanf("%d",&p1->num);if(p1->num==0)p2->next=NULL;else{p2->next=p1;p2=p1;len++;}}p1=head;45nprintf("n原链表:");do{printf("%4d",p1->num);if(p1->next!=NULL)p1=p1->next;}while(p1->next!=NULL);printf("%4d",p1->num);for(i=0;inext!=NULL){p2=p1;p1=p1->next;}if(i==0)newhead=new=p1;elsenew=new->next=p1;p2->next=NULL;}printf("nn逆链表:");p1=newhead;for(i=0;inum);p1=p1->next;}printf("n");}/*方法二:分别用函数完成#include"stdio.h"#include"stdlib.h"structline{intnum;structline*next;}*p1,*p2;structline*creat(){inttemp;structline*head=NULL;printf("n请输入链表的结点值(0表示结束)n结点值:");scanf("%d",&temp);while(temp){p1=(structline*)malloc(sizeof(structline));(head==NULL)?(head=p1):(p2->next=p1);p1->num=temp;printf("结点值:");p2=p1;scanf("%d",&temp);}p2->next=NULL;return(head);45n}/*输出原表output(structline*outhead){p1=outhead;while(p1!=NULL){printf("%4d",p1->num);p1=p1->next;}}/*逆表structline*turnback(structline*head){structline*new,*newhead=NULL;do{p2=NULL;p1=head;while(p1->next!=NULL){p2=p1;p1=p1->next;}if(newhead==NULL){newhead=p1;new=newhead->next=p2;}new=new->next=p2;p2->next=NULL;}while(head->next!=NULL);return(newhead);}main(){structline*head;head=creat();printf("n原链表:");output(head);head=turnback(head);printf("nn逆链表:");output(head);}*/第11章三.编程题1.从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“text”中保存。输入的字符串以“!”结束。编写程序如下:#include"stdio.h"main(){FILE*fp;charstr[100];45ninti=0;if((fp=fopen("test","w"))==NULL){printf("Cannotopenthefilen");exit(0);}printf("Inputastring:n");gets(str);while(str[i]!='!'){if(str[i]>='a'&&str[i]<='z')str[i]=str[i]-32;fputc(str[i],fp);i++;}fclose(fp);fp=fopen("test","r");fgets(str,strlen(str)+1,fp);printf("%sn",str);fclose(fp);}2.有5个学生,每个学生有3门课的成绩,从键盘输入学生数据(包括学生号,姓名,三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。分析:将程序分成3部分,输入、写文件、从文件输出。本题可采用结构体变量存放学生数据,对文件读写数据可分别采用fread()和fwrite()函数。用fwrite函数向文件输出数据时不是按ASCII码方式输出的,而是按内存中存储数据的方式输出的(例如一个整数占2个字节,一个实数占4个字节),因此不能用type命令输出该文件中的数据。#include"stdio.h"structstudent/*定义结构体变量*/{charnum[10];charname[8];intscore[3];floatave;}stu[5];main()/*主程序*/{inti,j,sum;FILE*fp;for(i=0;i<5;i++)/*输入*/{/*输入学生的姓名、学号*/printf("nInputscoreofstudent%d:n",i+1);printf("NO.:");scanf("%s",stu[i].num);printf("name:");scanf("%s",stu[i].name);sum=0;for(j=0;j<3;j++)/*输入第j门成绩*/{45nprintf("score%d:",j+1);scanf("%d",&stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/3.0;/*求平均分*//*将数据写入文件stud*/fp=fopen("stud","w");for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(structstudent),1,fp)!=1)printf("Filewriteerrorn");fclose(fp);/*检查文件内容,从文件中读数据并显示在屏幕上*/fp=fopen("stud","r");for(i=0;i<5;i++){fread(&stu[i],sizeof(structstudent),1,fp);printf("%s,%s,%d,%d,%d,%6.2fn",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);}fclose(fp);}3.将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件“stu_sort”中。分析:本题分3个步骤解决:1)从源文件读数据到结构体变量并输出到屏幕。2)数据排序3)将排好序的数据写入文件并输出到屏幕。编程如下:#include"stdio.h"#defineN10structstudent{charnum[10];charname[8];intscore[3];floatave;}st[N],temp;/*st、temp均为结构体变量*/main(){FILE*fp;inti,j,n;/*从源文件stud中读数据到结构体变量,并输出到屏幕*/if((fp=fopen("stud","r"))==NULL){printf("Cannotopenthefile.");exit(0);45n}printf("nfile'stud':");for(i=0;fread(&st[i],sizeof(structstudent),1,fp)!=0;i++){printf("n%8s%8s",st[i].num,st[i].name);for(j=0;j<3;j++)printf("%8d",st[i].score[j]);printf("%10.2f",st[i].ave);}fclose(fp);n=i;/*n值为总学生个数*/for(i=0;iBIG5码表文件)一起发布*/11/*该文件来源于http://www.jerry.com.tw/*/12/*也可以使用其它码表(注意修改偏移计算公式)*/13/************************************************************/14/**/15/************************************************************/16#defineTRUE117#defineFALSE018/************************************************************/19#include20#include21#include22#include23#include24/************************************************************/25typedefstruct26{27unsignedcharlo,hi;/*汉字结构体*/28}HANZI;45n29/************************************************************/30char*Tablename="BIG5.TXT";/*GB-->BIG5码表*/31unsignedchar*TableBuffer=NULL;/*码表指针*/32longTableSize;/*码表长(字数)*/33chardep_char=127;34/************************************************************/35/*功能:建立源文件内存映像*/36/*参数:filename--源文件名*/37/*返回:NULL--失败,否则返回源文件内存映像指针*/38/************************************************************/39unsignedchar*MallocFromFile(constchar*filename)40{41intfHandle;/*源文件句柄*/42longfsize;/*源文件大小*/43intrdnum;/*已读取的字节数*/44unsignedchar*FileBuffer=NULL;/*源文件内存映像指针*/45intret=FALSE;4647fHandle=open(filename,O_BINARY|O_RDONLY);/*打开源文件备读*/48if(fHandle!=-1)49{50fsize=filelength(fHandle);/*获取源文件大小*/51if(fsize!=-1)52{53FileBuffer=(unsignedchar*)malloc((unsigned)(fsize+1));/*根据源文件大小分配内存*/54if(FileBuffer!=NULL)55{56rdnum=read(fHandle,FileBuffer,(unsigned)fsize);57if(rdnum!=-1)/*读文件有错否?*/58{59*(FileBuffer+rdnum)='';/*对FileBuffer添加结束标记*/60ret=TRUE;61}62else63free((unsignedchar*)FileBuffer);/*释放内存映像空间*/64}65}66close(fHandle);/*关闭源文件*/67}68if(ret)69return(FileBuffer);/*内存映像建立成功,返回源文件内存映像指针*/70else71returnNULL;72}73/************************************************************/74/*功能:由内存映像创建文件*/75/*参数:source--源的指针*/76/*destfilename--目标文件名*/77/*返回:-1--失败,否则返回写入字节数*/78/************************************************************/79longMemoryToFile(constunsignedchar*source,constchar*destfilename)80{81unsignedchar*p;/*指向源*/82FILE*fp;/*文件指针*/83longcharNum=0L;/*写入字节数*/8485fp=fopen(destfilename,"wb");/*打开目标文件备写*/86if(fp==NULL)87return-1;8889p=source;/*字符指针p指向源*/90while(*p!='')/*到达源尾,结束处理*/91{92fputc(*p,fp);/*写到文件*/93charNum++;94p++;95}96/*****或使用如下方法(如果对写入的字节数不感兴趣)*******/97/*fprintf(fp,"%s",source);*/9845n99fclose(fp);/*关闭目标文件*/100returncharNum;101}102/************************************************************/103/*功能:返回一个GB内码汉字对应的BIG5内码*/104/*参数:aChar--一个汉字*/105/*返回:HANZI结构体变量,内含汉字对应的BIG5内码*/106/************************************************************/107HANZIGetBig5FromGB(HANZIaChar)108{109unsignedcharqu,wei;/*汉字区位码*/110longaddress;/*该汉字在码表中的偏移*/111HANZIret;/*一个汉字*/112113qu=aChar.lo-0xA0;/*汉字区位码--区*/114wei=aChar.hi;/*汉字区位码--位*/115address=(qu*0xF+wei-1)*2;/*计算该汉字在码表中的偏移*/116ret.lo=*(TableBuffer+address);/*获取汉字的BIG5内码*/117ret.hi=*(TableBuffer+address+1);118returnret;119}120/************************************************************/121/*功能:GB字串-->BIG5字串*/122/*参数:source--源的指针*/123/*dest--目标的指针*/124/*返回:转换的字节数*/125/************************************************************/126longGBStringToBIG5String(constunsignedchar*source,constunsignedchar*dest)127{128unsignedchar*ps;/*指向源*/129unsignedchar*pd;/*指向目标,ps和pd一直保持同步运动*/130HANZIaword;/*一个汉字*/131longcharNum=0L;/*转换的字节数*/132133pd=dest;134ps=source;135136while(*ps!='')/*源未到末尾*/137{138if(*ps>dep_char)/*处理汉字*/139{140aword.lo=*ps;141aword.hi=*(ps+1);142aword=GetBig5FromGB(aword);/*得到一个GB内码汉字对应的BIG5内码*/143*pd=aword.lo;/*改写目标*/144*(pd+1)=aword.hi;145146ps+=2,pd+=2;/*ps和pd一直保持同步运动*/147charNum+=2;148}149else/*处理非汉字*/150{151*pd=*ps;/*无需改变*/152pd++,ps++;/*ps和pd一直保持同步运动*/153charNum++;154}155}156157*pd='';/*源到末尾,把目标也设好末尾(结束符)等同于*pd=*ps;*/158returncharNum;159}160/************************************************************/161/*功能:执行源文件到目标文件的转换操作*/162/*参数:sourcename--源文件名*/163/*destname--目标文件名*/164/*返回:-1--失败,否则返回写入字节数*/165/*备注:为节省内存,转换后的结果保存在源处*/166/*注释掉的代码为转换后的结果保存在目标处*/167/************************************************************/168longGBToBIG5(constchar*sourcename,constchar*destname)169{45n170unsignedchar*SourceBuffer=NULL;/*源内容指针*/171/*unsignedchar*DestBuffer=NULL;/*目标内容指针*/172longcharNum;/*写入的字节数*/173174TableBuffer=MallocFromFile(Tablename);/*建立码表文件内存映像*/175if(TableBuffer==NULL)176{177printf("Erroronreadfileornoenoughmemory.n");178gotoquit;179}180181SourceBuffer=MallocFromFile(sourcename);/*建立源文件内存映像*/182if(SourceBuffer==NULL)183{184printf("Erroronreadfileornoenoughmemory.n");185gotoquit;186}187188/*为简化问题,直接使用以下方法分配目标的空间*/189/*DestBuffer=MallocFromFile(sourcename);190if(DestBuffer==NULL)191{192printf("Erroronnoenoughmemory.n");193gotoquit;194}195*DestBuffer='';*/196197/****把SourceBuffer指向内容进行转换,并把结果保存在原处****/198GBStringToBIG5String(SourceBuffer,SourceBuffer);199200/***!!!以下方法已丢弃!!!**把SourceBuffer指向内容进行转换,并把结果保存在DestBuffer指向的内存****/201/*GBStringToBIG5String(SourceBuffer,DestBuffer);*/202203/*charNum=MemoryToFile(DestBuffer,destname);/*把内存内容文件写到目标文件*/204charNum=MemoryToFile(SourceBuffer,destname);/*把内存内容文件写到目标文件*/205if(charNum==-1)206printf("Erroronwritetofile.n");/*失败*/207else208printf("%dbytehaswritedtodestinationfile.n",charNum);209210quit:211/*if(DestBuffer!=NULL)212free((unsignedchar*)DestBuffer);/*释放目标内存映像空间*/213if(SourceBuffer!=NULL)214free((unsignedchar*)SourceBuffer);/*释放源内存映像空间*/215if(TableBuffer!=NULL)216{217free((unsignedchar*)TableBuffer);/*释放码表内存映像空间*/218TableBuffer=NULL;219}220221returncharNum;222}223/************************************************************/224/*功能:显示版本信息*/225/************************************************************/226voidVersion(void)227{228printf("nGB2BIG5Toolver1.0n");229printf("WrittenbySeaSun.Copyfree.2004.08n");230}231/************************************************************/232/*功能:显示帮助信息*/233/************************************************************/234voidHelp(void)235{236printf("USE:n");237printf("GB2BIG5source[destination]n");238printf("sourcesourcefilenamen");239printf("destinationdestinationfilenamen");45n240}241/************************************************************/242/*功能:接受并能判断、提示错误的输入格式,执行转换调用*/243/*参数:argc--命令行参数数目*/244/*argv--命令行参数字符指针数组*/245/************************************************************/246voidmain(intargc,char*argv[])247{248/*unsignedchar*strgb="中华人民共和国";249unsignedchar*strbig5="い地チ㎝瓣";*/250constchar*destname="test.txt";/*目标文件名*/251252switch(argc)253{254case2:GBToBIG5(argv[1],destname);break;255case3:GBToBIG5(argv[1],argv[2]);break;256default:Help();break;257}258Version();259}6、设计文本转换工具BIG52GB,实现BIG5编码汉字向GB编码的转换(繁体中文转简体中文)。答:与第5题相似。但本题用便于测试的方法来求解,为使问题简单化,仅对一行汉字作转换。/************************************************************/......typedefstruct{unsignedcharhi,lo;/*汉字*/}HANZI;char*gb_map="gb.txt";/*BIG5-->GB码表*/chardep_char=127;......./************************************************************//*功能:BIG5-->GB*//************************************************************/HANZIBig5toGb(HANZIstr,constFILE*fp){unsignedcharc,x,hi,lo;longaddress;HANZIret;c=str.lo;x=str.hi;address=((c-160)*510)+(x-1)*2;fseek(fp,address,SEEK_SET);ret.lo=fgetc(fp);ret.hi=fgetc(fp);returnret;}/************************************************************//*功能:BIG5-->GB*//************************************************************/intBig5StringToGbString(constchar*str,char*dest){unsignedchar*ps;/*指向源*/unsignedchar*pd;FILE*fp;/*文件指针*/inti;unsignedcharch;HANZIaword;pd=dest;ps=str;fp=fopen(gb_map,"rt");for(i=0;idep_char)45n{aword.lo=*ps;aword.hi=*(ps+1);aword=Big5toGb(aword,fp);*pd=aword.lo;*(pd+1)=aword.hi;i++;ps+=2;pd+=2;}else{*pd=*ps;pd++,ps++;}}*pd='';fclose(fp);return1;}/************************************************************//*功能:接受并能判断、提示错误的输入格式,执行转换调用*//*参数:argc--命令行参数数目*//*argv--命令行参数字符指针数组*//************************************************************/voidmain(intargc,char*argv[]){intque,wei;FILE*destfile;unsignedchar*strgb="中华人民共和国";/*"繁简互换程式说明";*/unsignedchar*strbig5="い地チ㎝瓣";/*"羉虏が传祘Α弧";*/unsignedcharstrok[60];destfile=fopen("test.txt","wb");/*转换生成的GB码文件*/Big5StringToGbString(strbig5,strok);fprintf(destfile,"%s",strok);fclose(destfile);}7、设计文本转换工具TEXT2HTM,实现文本文件向HTML文件的转换,要求用浏览器打开该HTML文件时,能显示额外的相应的信息(如标题、作者等)。答:一、需求分析1.任务概述(1)目标实现文本文件向HTML文件的转换。(2)假定与约束用Turboc2.0开发,转换文本不超过64KB。2.需求规定从命令行获取源文件和目标文件参数,自动为源实现文本文件向HTML文件的转换,并把结果输出到目标文件中,能显示额外的相应的信息(如标题、作者等)。要求转换无差错。命令格式:TEXT2HTM源文件名目标文件名输出结果形如:xxxxxx.TXT......45n

本网页由TEXT2HTM自动创建

3.运行环境规定运行于DOS操作系统,无其它特殊支持。二、数据要求分析源文件名和目标文件名参数从命令行获取三、概要设计1.总体设计(1)基本设计概念和处理流程先处理HTML文件基本格式信息,然后在其中依次插入段落信息,段落信息由源文件的每个段落生成,生成原则为对源文件的每段落首字符之前添加

,对源文件的每段落末字符之后添加

。为加快处理速度,对源文件调入到内存中来处理。(2)结构2.接口设计(1)用户接口命令格式:TEXT2HTMsourcedestinationsource指定要转换的文件。destination为新文件指定文件名。(2)外部接口(略,参见12.2综合应用实例一——程序行号添加工具)(3)内部接口Text2Html(constchar*sourcename,constchar*destname)MallocFromFile(constchar*filename)ConvertItToFile(constchar*source,constchar*destfilename)voidHelp(void)voidVersion(void)3.系统出错处理设计(略,参见12.2综合应用实例一——程序行号添加工具)45n四、详细设计1.主程序模块(main)设计说明(略,参见12.2综合应用实例一——程序行号添加工具)2.执行转换模块(Text2Html)设计说明(略,参见12.2综合应用实例一——程序行号添加工具)3.读源文件模块(MallocFromFile)设计说明(略,参见12.2综合应用实例一——程序行号添加工具)4.写目标文件模块(ConvertItToFile)设计说明(编者提示:重点放在此模块的分析与实现)(1)功能处理HTML文件基本格式信息,然后在其中依次插入段落信息,并把结果输出到目标文件中。(2)输入项源source和目标文件名destfilename。(3)输出项返回已处理的段落数目或-1(出错)。(4)算法及流程逻辑45n(5)接口intConvertItToFile(constchar*source,constchar*destfilename,constchar*title)(6)存储分配静态分配4098字节用于存储当前段落。5.帮助模块(Help)设计说明(略)6.版本信息模块(Version)设计说明(略)五、编码及调试1/************************************************************/2/*TEXT2HTM.C*/3/************************************************************/4/*TEXT2HTMTool(Commandline)*/45n5/*功能:文本文件转HTML文件工具*/6/*版本:v1.0*/7/*作者:SeaSun*/8/*开始于:2004-08-05*/9/*重新整理于:2004-08-08*/10/*备注:实现文本文件向HTML文件的转换,可根据需要添加更多*/11/*的格式化信息,如颜色、背景、字体等。*/12/*此程序为单一文件*/13/************************************************************/14/**/15/************************************************************/16#defineTRUE117#defineFALSE018/************************************************************/19#include20#include21#include22#include23#include24/************************************************************/25voidVersion(void);26voidHelp(void);27/************************************************************/28/*功能:处理HTML文件基本格式信息,然后在其中依次插入段落*/29/*信息,并把结果输出到目标文件中*/30/*参数:source--源的指针*/31/*destfilename--目标文件名*/32/*title--标题*/33/*返回:已处理段落的数目*/34/*备注:为增强HTML文件的可读性,插入TAB和人工换行符*/35/************************************************************/36intConvertItToFile(constchar*source,constchar*destfilename,constchar*title)37{38char*p;/*指向源*/39FILE*fp;/*文件指针*/40intparaNum=0;/*段落处理的数目*/41charapara[4098];/*存储当前段落内容*/42inti=0;/*当前段落游标*/43intisNewPara=TRUE;/*是新段落否*/4445fp=fopen(destfilename,"wb");/*打开目标文件备写*/46if(fp==NULL)47return-1;4849fprintf(fp,"rntrn");/*写HTML文件基本格式信息到目标文件*/50fprintf(fp,"tt%srn",title);/*写HTML文件标题*/51fprintf(fp,"trntrn");5253p=source;/*字符指针p指向源*/54for(;;p++)55{56if(isNewPara)/*开始新段落?*/57{58fprintf(fp,"tt

");/*写段落开始标记

到目标文件*/59isNewPara=FALSE;/*不开始新段落*/60paraNum++;61}62apara[i++]=*p;/*提取当前字符(*p)累加到字符数组apara*/63if((*p=='n'))/*当前字符(*p)为'n'(换行)?*/64{65apara[i]='';/*添加当前段落结束标记*/66fprintf(fp,"%s",apara);/*写该段落(apara)到目标文件*/67fprintf(fp,"tt

rn");/*写段落结束标记

到目标文件*/68i=0;/*重置当前段落游标*/69isNewPara=TRUE;/*可以开始新段落*/70}71if((*p==''))/*当前字符(*p)为''(结束标记)?*/72{73apara[i-1]='r';/*换行*/74apara[i]='n';45n75apara[i+1]='';/*添加当前段落结束标记*/76fprintf(fp,"%s",apara);/*写该段落(apara)到目标文件*/77fprintf(fp,"tt

rn");/*写段落结束标记

到目标文件*/78break;/*到达文件尾,结束处理*/79}80}8182fprintf(fp,"tt

本网页由TEXT2HTM自动创建

rn");83fprintf(fp,"trnrn");/*写HTML文件基本格式信息到目标文件*/8485fclose(fp);/*关闭目标文件*/8687returnparaNum;88}89/************************************************************/90/*功能:建立源文件内存映像*/91/*参数:filename--源文件名*/92/*返回:NULL--失败,否则返回源文件内存映像指针*/93/************************************************************/94char*MallocFromFile(constchar*filename)95{......127}128/************************************************************/129/*功能:执行源文件到目标文件的转换操作*/130/*参数:sourcename--源文件名*/131/*destname--目标文件名*/132/*返回:转换操作执行的行数(行号添加的数目)*/133/************************************************************/134intText2Html(constchar*sourcename,constchar*destname)135{136char*FileBuffer;/*文件指针*/137intparaNum=0;/*段落处理的数目*/138139FileBuffer=MallocFromFile(sourcename);/*建立源文件内存映像*/140if(FileBuffer==NULL)141{142printf("Erroronreadfileornoenoughmemory.n");143return(paraNum);144}145paraNum=ConvertItToFile(FileBuffer,destname,sourcename);/*把FileBuffer指向内容加上行号,并把结果输出到目标文件中*/146if(paraNum==-1)147printf("Erroronwritetofile.n");148else149printf("%dparagraphshasconverted.n",paraNum);150151free((char*)FileBuffer);/*释放内存映像空间*/152153return(paraNum);154}155/************************************************************/156/*功能:显示版本信息*/157/************************************************************/158voidVersion(void)159{160printf("nTEXT2HTMver1.0n");161printf("WrittenbySeaSun.Copyfree.2004.08n");162}163/************************************************************/164/*功能:显示帮助信息*/165/************************************************************/166voidHelp(void)167{168printf("USE:n");169printf("TEXT2HTMsource[destination]n");170printf("sourcesourcefilenamen");171printf("destinationdestinationfilenamen");172}173/************************************************************/45n174/*功能:接受并能判断、提示错误的输入格式,执行转换调用*/175/*参数:argc--命令行参数数目*/176/*argv--命令行参数字符指针数组*/177/*返回:已添加行号的数目*/178/************************************************************/179voidmain(intargc,char*argv[])180{181constchar*destname="test.html";/*目标文件名*/182switch(argc)183{184case2:Text2Html(argv[1],destname);break;185case3:Text2Html(argv[1],argv[2]);break;186default:Help();break;187}188Version();189return;190}编者注:第8至12题为同一个大题目的不同步骤,答案仅给出后续版本不同的代码部分。8、编写图形界面程序,画出5个房子,房下面有作者信息。(Housev1)答:1/************************************************************/2/*HOUSE1.C*/3/************************************************************/4/*第十二章综合应用习题8参考答案*/5/*功能:在图形模式画出5个房子,房下面有作者信息*/6/*版本:v1.0*/7/*作者:SeaSun*/8/*开始于:2004-08-07*/9/*备注:此程序需EGAVGA.BGI支持*/10/************************************************************/11#include/*图形函数包含*/12/************************************************************/13/************************************************************/14#defineTRUE115#defineFALSE016/************************************************************/17/************************************************************/18/*功能:画1个房子*/19/*参数:x,y--房子基点坐标*/20/*返回:TRUE--sucessFALSE--faile*/21/************************************************************/22intDrawHouse(intx,inty)23{24setcolor(LIGHTRED);/*屋顶的作图色为淡红色*/25setfillstyle(SOLID_FILL,LIGHTRED);/*屋顶的填充颜色,淡红色*/26moveto(x+50,y+0);/*画屋顶*/27lineto(x+0,y+40);28lineto(x+100,y+40);29lineto(x+50,y+0);30floodfill(x+50,y+20,LIGHTRED);3132setfillstyle(SOLID_FILL,YELLOW);/*墙的填充颜色,黄色*/33bar(x+15,y+40,x+85,y+100);/*墙*/34setcolor(BLUE);/*窗的作图色为蓝色*/35rectangle(x+20,y+60,x+40,y+80);/*窗*/36line(x+20,y+70,x+40,y+70);/*窗格*/37line(x+30,y+60,x+30,y+80);38setfillstyle(SOLID_FILL,BROWN);/*门的填充颜色,棕色*/39bar(x+50,y+60,x+75,y+100);/*门*/4041return(TRUE);42}43/************************************************************/44/*功能:刷新屏幕*/45/*返回:TRUE--sucessFALSE--faile*/46/************************************************************/47intRefresh(void)48{45n49intp[5][2]={{100,200},{200,100},{300,200},{400,300},{500,200}};/*房子的基点坐标*/50inti;51/*开始绘画*/52setbkcolor(GREEN);/*背景*/5354for(i=0;i<5;i++)55DrawHouse(p[i][0],p[i][1]);5657setcolor(BLUE);/*作图色为蓝色*/58settextstyle(SANS_SERIF_FONT,HORIZ_DIR,4);/*SANS_SERIF字体,水平书写,放大4倍(32x32点阵)*/59outtextxy(100,400,"SeaSunStudio2004.8");/*在指定位置输出字符串*/60/*绘画结束*/61return(TRUE);62}63/************************************************************/64/*功能:初始化游戏信息、初始化图形模式并开始游戏*/65/************************************************************/66voidmain()67{68intgdriver,gmode;69gdriver=VGA;/*VGA图形驱动器*/70gmode=VGAHI;/*VGAHI图形模式*/71initgraph(&gdriver,&gmode,"");/*初始化图形模式*/7273Refresh();7475getch();76closegraph();/*关闭图形模式*/77}9、在8题的基础上,再画一个人,其中人用IMG格式图片。(Housev2)答:1/************************************************************/2/*HOUSE2.C*/3/************************************************************/4/*第十二章综合应用习题9参考答案*/5/*功能:在8题的基础上,再画一个人,其中人用IMG格式图片*/6/*版本:v2.0*/......21/************************************************************/22/*@@V2@@*/23/*功能:画人(显示IMG格式图像文件)*/24/*参数:x,y--人的基点坐标*/25/*返回:TRUE--sucessFALSE--faile*/26/************************************************************/27intDrawMan(intx,inty)28{29FILE*fp;/*文件指针*/30unsignedintsize;/*图像在内存中映像的大小*/31unsignedintWidth;/*图像宽*/32unsignedintHeight;/*图像高*/33char*buffer=NULL;/*图像在内存中的映像*/34intret=TRUE;35constchar*filename="man.img";3637fp=fopen(filename,"rb");38if(fp==NULL)39ret=FALSE;40else41{42/*读取图像宽、高*/43fread(&Width,sizeof(Width),1,fp);44Width++;45fread(&Height,sizeof(Height),1,fp);46Height++;4748size=imagesize(0,0,Width-1,Height-1);/*计算图像大小*/49buffer=(char*)malloc(size);/*分配内存*/45n50if(buffer==NULL)51ret=FALSE;52else53{54fseek(fp,0,SEEK_SET);/*从头开始*/55if(fread(buffer,size,1,fp)!=1)56ret=FALSE;57else58putimage((int)(x-Width/2),(int)(y-Height/2),buffer,COPY_PUT);59free((char*)buffer);60}61fclose(fp);62}63return(ret);64}......10、在9题的基础上,可以控制人的移动,按ESCAPE结束。(Housev3)答:1/************************************************************/2/*HOUSE3.C*/3/************************************************************/4/*第十二章综合应用习题10参考答案*/5/*功能:在9题的基础上,可以控制人的移动,按ESCAPE结束*/6/*版本:v3.0*/7/*作者:SeaSun*/8/*开始于:2004-08-08*/9/*备注:此程序需EGAVGA.BGI支持*/10/*与以前版本相比添加的代码用@@Vxxx@@注释*/11/*此程序还应和man.img一起发布*/12/*结构体MAN中的wards,prepos暂时未使用*/13/************************************************************/......21/*******@@V3@@**keycodedefine************************/22#defineESCAPE2723#defineUP7224#defineDOWN8025#defineLEFT7526#defineRIGHT7727/************************************************************/28/*******@@V3@@*******************************************/29/*运行状态RUNNING=继续运行EXITING=准备退出NEXTSTAGE=下一关*/30enumRUNNINGSTATE{RUNNING,EXITING,NEXTSTAGE};3132/*方向LW=左UW=上RW=右DW=下*/33enumWARDS{LW=0,UW=1,RW=2,DW=3};34/*******@@V3@@*******************************************/35typedefstruct36{37intx,y;/*坐标*/38}POINT;/*结构体:点*/3940typedefstruct41{42enumWARDSwards;/*人的朝向*/43POINTpos;/*现在位置*/44POINTprepos;/*前一步位置*/45}MAN;/*结构体:人*/46/************************************************************/47staticMANman;/*@@V3@@人*/48/************************************************************/......144/************************************************************/145/*@@V3@@*/146/*功能:获取按键代码*/147/*参数:ch--基本键代码*/148/*ext--扩展键代码*/149/*返回:无,但按键代码通过指针ch和ext返回*/150/************************************************************/151voidGet_Key(char*ch,char*ext)45n152{153*ch=getch();154if(!*ch)155*ext=getch();156}157/************************************************************/158/*@@V3@@*/159/*功能:按指定方向移动*/160/*参数:dir--表示方向*/161/*返回:TRUE--sucessFALSE--faile*/162/************************************************************/163intMove(intdir)164{165man.prepos.x=man.pos.x;/*记录移动前位置*/166man.prepos.y=man.pos.y;167switch(dir)/*根据指定方向,计算人移动后位置和朝向*/168{169caseLEFT:170man.wards=LW;man.pos.x-=8;break;171caseUP:172man.wards=UW;man.pos.y-=8;break;173caseRIGHT:174man.wards=RW;man.pos.x+=8;break;175caseDOWN:176man.wards=DW;man.pos.y+=8;break;177}178returnTRUE;179}180/************************************************************/181/*@@V3@@*/182/*功能:游戏主循环*/183/*返回:返回值保留*/184/************************************************************/185intRun(void)186{187charkey;/*基本键代码*/188charext=0;/*扩展键代码*/189enumRUNNINGSTATEcmd=RUNNING;/*运行状态(运行命令)*/190191while(cmd==RUNNING)/*当运行命令为继续运行*/192{193Get_Key(&key,&ext);/*获取按键代码*/194switch(key)195{196caseESCAPE:cmd=EXITING;break;/*按下ESCAPE,准备退出运行*/197default:break;198}199if(ext==UP||ext==DOWN||ext==LEFT||ext==RIGHT)/*按下四个方向键*/200{201if(Move(ext))/*按指定方向移动*/202if(!Refresh())/*移动后重绘*/203cmd=EXITING;204ext=0;205}206}207208return0;209}210/************************************************************/211/*功能:初始化游戏信息、初始化图形模式并开始游戏*/212/************************************************************/213voidmain()214{......220/*@@V3@@初始化游戏信息*/221man.pos.x=120;/*人的起始位置*/222man.pos.y=350;223man.wards=RW;......229}45n11、在10题的基础上,若人移动到房子内,显示"GAMEOVER",程序结束。(Housev4)答:1/************************************************************/2/*HOUSE4.C*/3/************************************************************/4/*第十二章综合应用习题11参考答案*/5/*功能:若人移动到房子内,显示"GAMEOVER",程序结束*/6/*版本:v4.0*/......17#include/*@@V4@@abs()*/......47/************************************************************/48staticMANman;/*@@V3@@人*/4950/*@@V4@@由于需要判断人移动到房子内否,故把房子的基点坐标由Refresh()中移到此处*/51staticintp[5][2]={{100,200},{200,100},{300,200},{400,300},{500,200}};/*房子的基点坐标*/52staticPOINTDoorOff={62,80};/*门中心在房中的徧移位置(门中心的相对坐标)*/53staticPOINTRect={6,10};/*判别人进入门内的坐标差极限*/......186/************************************************************/187/*@@V4@@*/188/*功能:过关了吗?*/189/*返回:TRUE--过关FALSE--未过关*/190/************************************************************/191intIsPassed(void)192{193inti;194intdoorx,doory;/*门中心的绝对坐标*/195for(i=0;i<5;i++)/*对每个房子都判别*/196{197doorx=p[i][0]+DoorOff.x;198doory=p[i][1]+DoorOff.y;199if((abs(man.pos.x-doorx)
查看更多

相关文章