《C程序设计(谭浩强)课后习题答案选讲.ppt》由会员分享,可在线阅读,更多相关《C程序设计(谭浩强)课后习题答案选讲.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 智能信息处理实验室智能信息处理实验室Intelligent Information Process Lab Unit 11C Language Program 智能信息处理实验室智能信息处理实验室Intelligent Information Process Lab11.2,写一个函数,写一个函数days,实现上面的计算。由主函数将年、月、实现上面的计算。由主函数将年、月、日传递给日传递给days 函数,计算后将日数传回主函数输出。函数,计算后将日数传回主函数输出。解法一:解法一:struct y_m_d /定义结构体 int year:int month;int day;date;intd
2、ays(struct y_m_d date1)/*形参date1为结构体struct y_m_d类型*/int sum;switch(data.month)case 1:sum=date1.day;break;case 2:sum=date1.day+31;break;case 3:sum=date1.day+59;break;case 4:sum=date1.day+90;break;case 5:sum=date1.day+120;break;case 6:sum=date1.day+151;break;case 7:sum=date1.day+181;break;智能信息处理实验室智能信
3、息处理实验室Intelligent Information Process Labcase 8:sum=date1.day+212;break;case 9:sum=date1.day+243;break case 10:sum=date1.day+273;break case 11:sum=date1.day+304;break case 12:sum=date1.day+334;break If(date1.year%4=0&date1.year%100!=0|date1.year%400=0)&date1.month=3)sum+=1;return sum;void main()/定义主
4、函数 printf(“Input year,month,day:”);scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);printf(“n”);printf(“%d/%d is the%dth day in%d.”,date.month,date.day,days(date),date.year);注意:在注意:在main函数中的函数中的printf函数用函数用days(date)调用用days函数,其返回函数,其返回值就是天数。就是天数。智能信息处理实验室智能信息处理实验室Intelligent Information Process La
5、b解法二:解法二:struct y_m_d /定义结构体 int year:int month;int day;date;void main()int days(int,int,int);/对days函数的声明 int i,day_sum;printf(“Input year,month,day:”);scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);day_sum=days(date.year,date.month,date.day);printf(“%d/%d is the%dth day in d.”,date.month,date.d
6、ay,day_sum,date.year);Int days(int year,int month,int day)int day_sum,i;int day_tab12=0,31,28,31,30,31,30,31,31,30,31,30,31;day_sum=0;智能信息处理实验室智能信息处理实验室Intelligent Information Process Labfor(i=1;i=3)day_sum+=1;return day_sum;11.5,有,有10个学生,每个学生的数据包括学号、姓名、个学生,每个学生的数据包括学号、姓名、3门课的成门课的成绩,从键盘输入绩,从键盘输入10个学
7、生的数据,要求输出个学生的数据,要求输出3门课的总平均成绩,门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分门课成绩、平均分)解:解:N-S图如下图图如下图 变量说明:变量说明:max:当前最好成绩;maxi:当前最好成绩对应的下标序号;sum:第i个学生的总成绩 智能信息处理实验室智能信息处理实验室Intelligent Information Process Lab 智能信息处理实验室智能信息处理实验室Intelligent Information Process Lab#define N 10 struct studen
8、t char num6 char name8 int score4 float avr;stuN;main()int i,j,max,maxi,sum;float average;/*输入*/for(i=0;iN;i+)printf(“nInput scores of student%d:n”,i+1);printf(“NO.:”);scanf(“%s”,stui.num);printf(“name”);scanf(“%s”,stui.name);智能信息处理实验室智能信息处理实验室Intelligent Information Process Labfor(j=0;j3;j+)printf(
9、“score%d:”,j+1);scanf(“%d”,&stui.scorej);/*计算*/average=0;max=0;maxi=0;for(i=0;iN;i+)sum=0;for(j=0;jmax)max=sum;maxi=i;average/=N;/*打印*/printf(“NO.name score1 score2 score3 averagen”);for(i=0;iN;i+)printf(“%5s%10s”,stui.num,stui.name);for(j=0;j3;j+)printf(“%9d”,stui.scorej);printf(“%8.2fn”,stui.avr);
10、printf(“average=%6.2fn”,average);printf(“The highest score is:%s,score total:%d.”stumaxi.name,max);智能信息处理实验室智能信息处理实验室Intelligent Information Process Lab11.6,编写一个函数编写一个函数new,对对n个字符开辟连续的存储空间,此函数个字符开辟连续的存储空间,此函数应返回一个指针,指向字符串开始的空间。应返回一个指针,指向字符串开始的空间。New(n)表示分配表示分配n个个字节的内存空间字节的内存空间 解:解:new函数是分配n个连续字符的存储区
11、,为此,应先开辟一个足够大的连续存储区。设置字符数组newbuf1000,new函数将在此上进行操作。newp是指向可用存储区的起始地址的指针。每当请求new开出n个字符的存储区时,要先检查一下newp为newp+n,指向下一次可用空间的开始地址;若存储不够分配,则返回NULL.智能信息处理实验室智能信息处理实验室Intelligent Information Process Labnew函数如下:#define NULL 0#define NEWSIZE 1000 char newbufNEWSIZE;char*newp=newbuf;char*new(int n)/*定义new函数*/if
12、(newp+n=newbuf)&(pnewbuf+NEWSIZE)newp=p;智能信息处理实验室智能信息处理实验室Intelligent Information Process Lab11.8,已有已有a、b两个链表,每个链表中的结点包括学好、成绩。两个链表,每个链表中的结点包括学好、成绩。要求把两个链表合并,按学号升序排列。要求把两个链表合并,按学号升序排列。解:解:#include#define NULL 0#define LEN sizeof(struct student)strut student long num;int scor;struct student*next ;stru
13、ct student listA,listB;int n,sum=0;智能信息处理实验室智能信息处理实验室Intelligent Information Process Labmain()struct student*creat(void);/*函数声明*/struct student*insert(struct student*,struct student*);/*函数声明*/void print(struct student*);/*函数声明*/stuct student *ahead,*bhead,*abh;printf(“ninput list a:n”);ahead=creat()
14、;/*调用creat函数,输入链表a*/printf(“ninput list b:n”);bhead=creat();/*调用creat函数,输入链表b*/sum=sum+n;abh=insert(ahead,bhead);/*调用insert函数,将两个链表合并*/print(abh);/*输出合并后的链表*/struct student*creat(void)/*建立链表的函数*/struct student*p1,*p2,*head;n=0;p1=p2=(struct student*)malloc(LEN);printf(“input number&scores of student
15、:n”);printf(“if number Is 0,stop inputing.n”);scanf(“%ld,%d”,&p1-num,&p1-score);智能信息处理实验室智能信息处理实验室Intelligent Information Process Labhead=NULL;while(p1-num!=0)n=n+1;if(n=1)head=p1;else p2-next=p1;p2=p1;p1=(struct student*)malloc(LEN);scanf(“%ld,%d”,&p1-num,&p1-score);p2-next=NULL;return(head);struct
16、 student*insert(struct student*ah,struct student*bh)/*合并链表的函数*/struct student *pa1,*pa2,*pb1,*pb2;pa2=pa1=ah;pb2=pb1=bh;do while(pb1-numpa1-num)&(pa1-next!=NULL)pa2=pa1;pa1=pa1-next;智能信息处理实验室智能信息处理实验室Intelligent Information Process LabIf(pb-numnum)if(ah=pa1)ah=pb1;else pa2-next=pb1;pb1=pb1-next;pb2-next=pa1;pa2=pb2;pb2=pb1;while(pa1-next!=NULL)|(pa1=NULL&pb1!=NULL);if(pb1-numpa1-num)&(pa1-next=NULL)ap1-next=pb1;return(ah);void print(struct student*head)/*输出函数*/struct student*p;printf(“%ld%dn”,p-num,p-score);p=p-next;while(p!=NULL);