c语言第十一十二十三章课后题答案.doc

上传人:s****u 文档编号:12806801 上传时间:2020-05-25 格式:DOC 页数:26 大小:911KB
返回 下载 相关 举报
c语言第十一十二十三章课后题答案.doc_第1页
第1页 / 共26页
c语言第十一十二十三章课后题答案.doc_第2页
第2页 / 共26页
c语言第十一十二十三章课后题答案.doc_第3页
第3页 / 共26页
点击查看更多>>
资源描述
11-1、(*p)+表示:先取地址中的内容,将内容表示的数字进行自增运算。 *p+表示:先对p的地址自增运算,再取其中的内容。结果:每一句printf语句分析说明:printf(%d,*(+p);-p自增取下一个地址,去除其中的内容为2printf(%d,*(p)+);-引用p现在地址中的内容为2,在进行地址的自增运算printf(%d,*p);-引用地址的内容为3printf(%d,*p);-应用现在的地址中的内容为3printf(%d,*p-);-先引用p中的内容为3,再进行自减运算printf(%d,-(*p);-先自减运算,再取内容为1printf(%dn,*p);-取p现在的地址中的内容为111-2(1)#include void Print(char *arr,int len);int main()char *pArray=How,are,you;int num=sizeof(pArray)/sizeof(int);printf(Total string numbers = %dn,num);Print(pArray,num);return 0;void Print(int *arr,int len)int i;for(i=0; ilen; i+)printf(%s ,arri);printf(n);错误分析:指针数组中的元素为地址,是一个整型,所以应为 num=sizeof(pArray)/sizeof(int);而不是除以sizeof(char)结果:(2)#include void OutputArray(int *pa,int n);void InputArray(int *pa,int n);void main()int a5;printf(Input five numbers:);InputArray(a,5);OutputArray(a,5);return 0;void InputArray(int *pa,int n)int *a=pa;for(; paa+n; pa+)scanf(%d,pa);void OutputArray(int *pa,int n)int *a=pa;for(; paa+n;pa+)printf(%4d,*pa);printf(n);结果:错误分析:For(; papa+n; pa+)的语句中将指针循环变量更改了,破坏了循环结构,所以在写循环时为了防止指针循环变量被修改,应重新定义一个变量来标记传入的指针值。(3)、#include #define STUD 30#define COURSE 5void Print(int *pScore,int sum,float aver,int m,int n);void Total(int *pScore,int sum,float aver,int m,int n);int main()int i,j,m,n,scoreSTUDCOURSE,sumSTUD;float averSTUD;printf(How many student?);scanf(%d,&m);printf(How many course?);scanf(%d,&n);printf(Input score:n);for(i=0; im; i+)for(j=0; jn; j+)scanf(%d,&scoreij);Total(*score,sum,aver,m,n);Print(*score,sum,aver,m,n);return 0;void Total(int *pScore,int sum,float aver,int m,int n)int i,j;for(i=0; im; i+)sumi=0;for(j=0; jn;j+)sumi=sumi+pScorei*n+j;averi=(float)sumi/n;void Print(int *pScore,int sum,float aver,int m,int n)int i,j;printf(Result:n);for(i=0; im; i+)for(j=0; jn; j+)printf(%4dt,pScorei*n+j);printf(%5dt%6.1fn,sumi,averi);分析:在创建二维数组时,就分配好空间行30列5,当进行列指针操作时,实际输入的人数会小于5,但偏移量仍然是I*COURSE+j,而不是i*n+j。改后的结果:11-3#include void main()int *p12=January,february,March,April,May,June,July,August,September,October,November,December;int m;doprintf(请输入月份值: );scanf(%d,&m);if(m12)printf(Illegel month!);while(m12);printf(%d 月-%sn,m,pm-1);结果:11-4#include #define N 10void Swap(int *p1,int *p2);void Transpose2(int *a,int n);void Transpose(int aN,int n);void Transpose1(int (*a)N,int n);void main()int n;int i;int j;int aNN;int m;doprintf(输入阶数: );scanf(%d,&n);while(n10);for(i=0; in; i+)printf(请输入第 %d 行:n ,i+1);for(j=0; jn; j+)printf(输入第 %d 行第 %d 列: ,(i+1),(j+1);scanf(%d,&aij);printf(原矩阵是:n);for(i=0; in;i+)printf(n);for(j=0; jn; j+)printf(%dt,aij);printf(n1. 引用数组下表法n2.行指针法n3.列指针法n);printf(请选择: );scanf(%d,&m);switch(m)case 1:Transpose(a,n);break;case 2:Transpose1(a,n);break;case 3:Transpose2(*a,n);break;printf(转置矩阵是:n);for(i=0; in;i+)printf(n);for(j=0; jn; j+)printf(%dt,aij);printf(n);void Swap(int *p1,int *p2)int temp;temp=*p1;*p1=*p2;*p2=temp;void Transpose(int aN,int n)int i,j;for(i=0; in; i+)for(j=i; jn;j+)Swap(&aij,&aji);void Transpose1(int (*a)N,int n)int i,j;for(i=0; in; i+)for(j=i; jn; j+)Swap(*(a+i)+j,*(a+j)+i);void Transpose2(int *a,int n)int i,j;for(i=0; in; i+)for(j=i; jn; j+)Swap(a+i*n+j,a+j*n+i);结果:11-5#include #define N 10#define M 10void Swap(int *p1,int *p2);void Transpose2(int *a,int *at,int m,int n);void Transpose(int aN,int atM,int m,int n);void Transpose1(int (*a)N,int m,int n);void main()int n;int i;int j;int aMN;int m;int atNM;int p;doprintf(输入行数: );scanf(%d,&m);printf(输入列数: );scanf(%d,&n);while(n10 | m10);for(i=0; im; i+)printf(请输入第 %d 行:n,i+1);for(j=0; jn; j+)printf(输入第 %d 行第 %d 列: ,(i+1),(j+1);scanf(%d,&aij);printf(原矩阵是:n);for(i=0; im;i+)printf(n);for(j=0; jn; j+)printf(%dt,aij);printf(n1. 引用数组下表法n2.行指针法n3.列指针法n);printf(请选择: );scanf(%d,&p);switch(p)case 1:Transpose(a,at,m,n);break;case 2:Transpose1(a,at,m,n);break;case 3:Transpose2(*a,*at,m,n);break;printf(转置矩阵是:n);for(i=0; in;i+)printf(n);for(j=0; jm; j+)printf(%dt,atij);printf(n);void Swap(int *p1,int *p2)int temp;temp=*p1;*p1=*p2;*p2=temp;void Transpose(int aN,int atM,int m,int n)int i,j;for(i=0; im; i+)for(j=0; jn;j+)Swap(&aij,&atji);void Transpose1(int (*a)N,int (*at)N,int m,int n)int i,j;for(i=0; im; i+)for(j=0; jn; j+)Swap(*(a+i)+j,*(at+j)+i);void Transpose2(int *a,int *at,int m,int n)int i,j;for(i=0; im; i+)for(j=0; jn; j+)Swap(a+i*N+j,at+j*M+i);结果:11-6#include #include #define N 10#define M 10void InputArray(int *p,int m,int n);int FindMax(int *p,int m,int n,int *pRow,int *pCol);void main()int m;int n;int Row;int Col;int a;int *p=NULL;printf(请输入行数: );scanf(%d,&m);printf(请输入列数: );scanf(%d,&n);p=(int *)calloc(m*n,sizeof(int);if(p=NULL)printf(没有足够的空间n);exit(1);InputArray(p,m,n);a=FindMax(p,m,n,&Row,&Col);printf(最大值为:%d,下标:%d 行 %d 列n,a,(Row+1),(Col+1);free(p);void InputArray(int *p,int m,int n)int i;int j;for(i=0; im; i+)for(j=0; jn;j+)printf(请输入第 %d 行第 %d 列:,(i+1),(j+1);scanf(%d,p+i*n+j);int FindMax(int *p,int m,int n,int *pRow,int *pCol)int i,j;int *a=p;for(i=0; im; i+)for(j=0; jn; j+)if(*p*(a+i*n+j)p=a+i*n+j;*pRow=i;*pCol=j;return *p;结果:12-1采用结构体定义typedef struct dateint year;int month;int day;Date;typedef struct jobchar school10;char zhicheng10;char zhiwu10;Job;struct studentchar name10;char sex;Date birthday;Job work;12-2#include typedef struct timeint hour;int minute;int second;Time;void update(Time *p)p-second+;if(p-second=60)p-second=0;p-minute+;if(p-minute=60)p-minute=0;p-hour+;if(p-hour=24)p-hour=0;void delay()int t;for(t=0; thour,p-minute,p-second);int main()int i;Time t;t.second=0;t.hour=0;t.minute=0;for(i=0; i1000000; i+)update(&t);dispaly(&t);delay();return 0;结果:12-3#include typedef struct timeint hour;int minute;int second;Time;void update(Time *p)p-second+;p-minute=p-second/60;p-second%=60;p-hour=p-minute/60;void delay()int t;for(t=0; thour,p-minute,p-second);int main()int i;Time t;t.second=0;t.hour=0;t.minute=0;for(i=0; i1000000; i+)update(&t);dispaly(&t);delay();return 0;结果:12-4#include #include #include typedef struct candidatechar name10;int num;Xuan;void main()Xuan people3=zhang,0,li,0,wang,0;char temp10;int i;int j;int fp=0;int flag=0;for(i=0; i10; i+)flag=0;printf(请投票: );gets(temp);for(j=0; j3; j+)if(strcmp(temp,peoplej.name)=0)peoplej.num+;flag=1;if(flag=0)fp+;printf(废票:%d 张n,fp);for(i=0; i3; i+)printf(%-10s 得票 :%dn,peoplei.name,peoplei.num);printf(n);结果:12-5#include typedef struct cardchar color1310;char suit10;Card; void main()int i;int j;Card Pai4=A,2,3,4,5,6,7,8,9,10,Jack,Queen,King,Spades,A,2,3,4,5,6,7,8,9,10,Jack,Queen,King,Hearts,A,2,3,4,5,6,7,8,9,10,Jack,Queen,King,Clubs,A,2,3,4,5,6,7,8,9,10,Jack,Queen,King,Diamonds;for(i=0; i4; i+)for(j=0; j13; j+)printf(%s %st,Paii.suit,Paii.colorj);printf(n);结果:13-1#include void main()FILE *fp;char str20;int i;printf(type );gets(str);fp=fopen(str,r);if(fp=NULL)printf(文件打开有误n);exit(0);for(i=0; !feof(fp); i+)printf(%5d,fgetc(fp);printf(n);结果:13-2#include typedef struct dadeint year;int month;int day;DATE;typedef struct studentlong ID;char name10;char sex4;DATE birthday;int score4;float aver;int sum;STUDENT;void main()int i,j;STUDENT stu10;int m;int n;FILE *fp;printf(请输入人数:);scanf(%d,&m);printf(输入课程数:);scanf(%d,&n);for(i=0; im; i+)printf(输入学号:);scanf(%10ld,&stui.ID);getchar();printf(输入姓名:);gets(stui.name);printf(输入性别:);scanf(%s,&stui.sex);getchar();printf(输入出生年份:);scanf(%d,&stui.birthday.year);printf(出生月份);scanf(%d,&stui.birthday.month);printf(出生日期:);scanf(%d,&stui.birthday.day);printf(输入课程成绩:);for(j=0; jn; j+)scanf(%d,&stui.scorej);for(i=0; im; i+)stui.sum=0;for(j=0; jn; j+)stui.sum+=stui.scorej;stui.aver=(float)stui.sum/n;fp=fopen(H:score.txt,w);if(fp=NULL)printf(文件创建失败n);exit(0);for(i=0; im; i+)fprintf(fp,%-10ld%-8s%-2s%6d/%02d/%02d,stui.ID,stui.name,stui.sex,stui.birthday.year,stui.birthday.month,stui.birthday.day);for(j=0; jn; j+)fprintf(fp,%4d,stui.scorej);fprintf(fp,%6d%7.2fn,stui.sum,stui.aver);fclose(fp);printf(文件已创建,请在H:score.txt中查询n);13-3、#include typedef struct dadeint year;int month;int day;DATE;typedef struct studentlong ID;char name10;char sex;DATE birthday;int score4;float aver;int sum;STUDENT;void main()int i,j;STUDENT stu10;int m;FILE *fp;long temp;fp=fopen(H:student.txt,r);if(fp=NULL)printf(文件创建失败n);exit(0);for(i=0; !feof(fp); i+)fread(&stui,sizeof(STUDENT),1,fp);m=i-1;printf(输入要查的学号:);scanf(%ld,&temp);for(i=0; im; i+)if(temp=stui.ID)printf(%ld 位于第 %d 个n,stui.ID,i+1);结果:13-4#include #include void main()FILE *fp;FILE *nfp;char fname20;char nfname20;int i;char ch;printf(输入您要创建的文件名:);gets(nfname);nfp=fopen(nfname,w);if(nfp=NULL)printf(创建文件失败n);exit(0);printf(输入要复制的文件名:);gets(fname);fp=fopen(fname,r);if(fp=NULL)printf(文件读取失败);exit(0);while(ch=fgetc(fp)!=EOF)/fprintf(nfp,%c,fgetc(fp);该方法中的格式控制符不能缺省,或者以下形式也可以fputc(ch,nfp);fclose(fp);fclose(nfp);printf(文件已创建n);结果:13-5#include #include void main()FILE *fp;FILE *nfp;char fname20;char nfname20;int i;char ch;printf(输入第一个文件名:);gets(nfname);nfp=fopen(nfname,a+);if(nfp=NULL)printf(创建文件失败n);exit(0);printf(输入第二个的文件名:);gets(fname);fp=fopen(fname,r);if(fp=NULL)printf(文件读取失败);exit(0);while(ch=fgetc(fp)!=EOF)/fprintf(nfp,%c,fgetc(fp);该方法中的格式控制符不能缺省,或者以下形式也可以fputc(ch,nfp);fclose(fp);fclose(nfp);printf(文件已创建n);结果:原文件内容:现文件内容:成绩批阅教师批阅日期
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!