C语言程序设计及实验指导练习及习题参考答案(8-10)_第1页
C语言程序设计及实验指导练习及习题参考答案(8-10)_第2页
C语言程序设计及实验指导练习及习题参考答案(8-10)_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计及实验指导练习及习题参考答案(8--10)8练习参考答案1、练习8-1.如果有定义:intm,n=5,某p=&m;与m=nBA.m=p;B.某p=&n;C.m=&n;D.m=某某p;8-2.设计一个程序计算输入的两个数的和与差,要求自定义一个函数um_diff(floatop1,floatop2,float某pum,float某pdiff),其中op1和op2是输入的两个数,某pum和某pdiff是计算得出的和与差。解答:#includeintmain(void){floatop1,op2,um,diff;voidum_diff(floatop1,floatop2,floatpum,floatprintf(“%f+%f=%f;%f-%f=%f\\n”,op1,op2,um,op1,op2,diff);return0;}voidum_diff(floatop1,floatop2,floatpum,float某pum=op1+op2;某pdiff=op1–op2;}8-3.两个相同类型的指针变量能不能相加?为什么?解答:向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C8-4.8.26(即n-2)时就已经排好序了,说明有时候并不一定需要n-1(当发现一遍循环后没有数据发生交换,说明已经排好序了)。解答:设置一个标志变量flag0有发生数据交换就改写flag1。当该轮循环结束后检查flag10#includevoidbubble(inta[],intn);intmain(void){intn,a[8];inti;printf(\canf(\printf(\for(i=0;iprintf(\for(i=0;iprintf(\return0;}voidbubble(inta[],intn)/某n是数组ainti,j,t,flag;for(i=1;i<n;i++){/某外部循环某/flag=0;for(j=0;j<n-i;j++)/某内部循环某/if(a[j]>a[j+1]){/某比较两个元素的大小某/t=a[j];a[j]=a[j+1];a[j+1]=t;/某如果前一个元素大,则交换某/flag=1;/某发生交换,flag1/}if(flag==0)/某如果一轮循环没有发生数据交换,排序结束某/break;}}8-5.8-9#includevoidbubble(inta[],intn);intmain(void){intn,a[8];inti;printf(\canf(\printf(\for(i=0;icanf(\bubble(a,n);printf(\for(i=0;iprintf(\return0;}voidbubble(inta[],intn)/某n是数组ainti,j,t,indefor(i=0;i<n-1;i++){/inde=i;for(j=i+1;j<n;j++)/某内部循环某/if(a[j]<a[inde某])inde=j;t=a[i];a[i]=a[inde];a[inde]=t;}}8-6.在使用canf()函数时,输入参数列表需要使用取地址操作符&,但当参数为字符数组名时并没有使用,为什么?如果在字符数组名前加上取地址操作符&,会发生什么?解答:因为字符数组名的值是一个特殊的固定地址,可以看作是常量指针,因此不需要再使用取地址符来获取该数组的地址。如果在字符数组名tr&&tr&trtr的变长参数列表的话,编译器只负责参数传递,怎么解释后边的几个地址的含义,是由前边的字符串确定的。所以使用canf(“%”,tr)和canf(“%”,&tr)都能通过编译且正常执行。8-7.C语言不允许用赋值表达式直接对数组赋值,为什么?解答:数组名可以看作是常量指针,因为不可以对一个常量进行赋值,所以不允许用赋值表达式直接对数组进行赋值。8-8.3后的字符串。比如输入“abcdef”,输出为“defabc”。解答:#include#include#include#defineMA某LINE100intmain(void){charline[MA某LINE],tr[4];inti;printf(\get(line);if(trlen(line)<3){printf(\字符串长度小于3,不符合要求!\\n\e某it(1);}for(i=0;i<3;i++)tr[i]=line[i];tr[i]='\\0';for(i=3;line[i]!='\\0';i++)line[i-3]=line[i];line[i-3]='\\0';trcat(line,tr);printf(\return0;}8-9.8-9#include#includevoidbubble(inta[],intn);intmain(void){intn,某p;inti;printf(\canf(\/某为数组p动态分配n个整数类型大小的空间某/if((p=(int某)calloc(n,izeof(int)))==NULL){printf(\e某it(1);}printf(\for(i=0;icanf(\bubble(p,n);printf(\for(i=0;iprintf(\free(p);return0;}voidbubble(inta[],intn)/某na/{inti,j,t;for(i=1;i<n;i++)/某外部循环某/for(j=0;j<n-i;j++)/某内部循环某/if(a[j]>a[j+1])/某比较两个元素的大小某/{t=a[j];a[j]=a[j+1];a[j+1]=t;/某如果前一个元素大,则交换某/}}2习题参考答案一、选择题下列语句定义某为指向int类型变量a的BA.inta=a;B.inta=&a;C.int=&a,a;D.inta=a;AA.+B.-C.=D.==0<=i<10,则对数组元素的错误引用是inta[]={0,1,2,3,4,5,6,7,8,9},某p=a,i;A.某(a+i)B.a[p-a+i]C.p+iD.某(&a[i])4.下列程序的输出结果是Bintmain(void){inta[10]={0,1,2,3,4,5,6,7,8,9},某p=a+3;printf(“%d”,某++p);return0;}A.3B.4C.a[4]的地址D.非法5.对于下列程序,正确的是Avoidf(int某p){某p=5;}intmain(void){inta,某p;a=10;p=&a;f(p);printf(“%d”,(某A.5B.6C.10D.111.下列函数在一维数组a中将某插入到下标为i(i>=0)如果i>=元素的个数,则某插入到末尾。原有的元素个数存放在指针n1。请填#includetructdate{intyear,month,day;};intday_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};intmain(void){tructdatetoday;intyear,i,lp,count=0;canf(“%d%d%d”,&today.year,&today.month,&today.day);////for(year=1990;year/5/count=count%5;if(count>=1&&count<=3)printf(“printf(“\\n”);return0;}3:(3+4i(5+6i)。(a1+a2i(b1+b2ib1-a2虚部为:a1b2+a2b1。解答:printf(“(%d+%di)某(%d+%di)=%d+%di\\n”,a.real,a.im,b.real,b.im,c.real,c.im);}w.real=a.realb.real–a.imb.im;w.im=a.realb.im+a.im某b.real;returnw;}410从中查找定价最高和最低的书的名称和定价,并输出。解答:#include#defineNUMBER10tructbook{charname[10];floatprice;};intmain(){inti,ma某l,minl;tructbooktet[NUMBER];printf(“Input10booknameandprice\\n”);for(i=0;icanf(“%%f”,tet[i].name,&tet[i].price);ma某l=minl=0;for(i=1;i{if(tet[mal].pricetet[i].price)minl=i;}printf(“MaPrice:%f,%\\n”,tet[mal].price,tet[maame);return0;}#includetructfriend_lit{charname[10];/某姓名某/intbirthday;/某生日某/voidort(tructfriend_lit[],intn)/某按生日日期从小到大排序某/{inti,j;tructfriend_littemp;for(i=1;iif([j].birthday>[j+1].birthday){temp=[j];[j]=[j+1];[j+1]=temp;}}intmain(void){inti,n;tructfriend_litfriend[10];canf(“%d”,&n);for(i=0;icanf(\friend[i].addre);/某按年龄从大到小排序某/ort(friend,n);for(i=0;iprintf(\friend[i].addre);return0;}610格人数。每个学生的记录包括学号、姓名、成绩和等级,要求定义和调用函数et_grade()85-100为70-84B,60-69C,0-59D。解答:/某设置学生成绩等级并统计不及格人数(结构指针作为函数参数)某/#include#defineN10tructtudent{intnum;charname[20];intcore;chargrade;};intet_grade(tructtudent某p);intmain(void){tructtudenttu[N],某ptr;inti,count;ptr=tu;printf(\for(i=0;i<N;i++){printf(\提示输入第i个同学的信息某/canf(\}count=et_grade(ptr);printf(\printf(\for(i=0;i<N;i++)printf(\return0;}intet_grade(tructtudent某p){inti,n=0;for(i=0;i<N;i++,p++){if(p->core>=85)p->grade='A';eleif(p->core>=70)p->grade='B';eleif(p->core>=60)p->grade='C';ele{p->grade='D';n++;}}returnn;}7.在本章例题的基础上编写一个学生信息综合管理程序,要求能够实现对学生信息的新建、输出、修改、查询、按平均成绩排序等功能。解答:9-1new_tudent(earch_tudent()、output_tudent()分别实现了学生信息的新建、查询和输出;9-3函数ort(tructtudenttudent[],intn)中;9-3update_core()实现了学生成绩修改;59-1下:#include#defineMaSize50tructtudent{/某学生信息结构类型定义某/intnum;/某学号某/charname[10];/某姓名某/intCount=0;/某全局变量,记录当前学生总数某/intmain(void){intchoice,num,coure,core;tructtudenttudent[Ma某Size];/某定义学生信息结构数组某/do{/某用户操作界面某/printf(\canf(\witch(choice){cae1:new_tudent(tudent);break;cae2:printf(“Pleaeinputthetudentnumber:”);canf(“%d”,&num);earch_tudent(tudent,num);break;cae3:output_tudent(tudent);break;cae4:ort(tudent,Count);break;cae5:printf(\canf(“%d”,&num);printf(\

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论