c语言程序设计实验题答案_第1页
c语言程序设计实验题答案_第2页
c语言程序设计实验题答案_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、c语言程序设计实验题答案【篇一:c语H程序设计及实验指导练习及习题参考答案(8-10)】8练习参考答案1、练习8-1.如果有定义:intm,n=5,*p=m;与m=n等价的语句是b<a.m=*p;b.*p=*n;c.m=n;d.m=*p;8-2.设计一个程序计算输入的两个数的和与差,要求自定义一个函数sum_diff(floatop1,floatop2,float*psum,float*pdiff),其中op1和op2是输入的两个数,*psum和*pdiff是计算得出的和与差。解答:#includestdio.hintmain(void)floatop1,op2,sum,diff;voi

2、dsum_diff(floatop1,floatop2,float*psum,float*pdiff);printf(“inputop1andop2:");scanf("f%f,op1,op2);sum_diff(op1,op2,sum,diff);printf(“f+%f=%f;%fn”,op1,op2,sum,op1,op2,diff);return0;voidsum_diff(floatop1,floatop2,float*psum,float*pdiff)*psum=op1+op2;*pdiff=op1-op2;8-3.两个相同类型的指针变量能不能相加?为什么?解答

3、:不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在c语言中指针变量相加是非法的。8-4.根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。当该轮循环结束后检查flag值,如果变为1说明发生了数据交换,还没有排好序,如果为0说明没有发生交换,已经排好序。#i

4、ncludestdio.hvoidbubble(inta,intn);intmain(void)intn,a8;inti;printf(entern(n=8):);scanf(%d,n);printf(entera%d:,n);for(i=0;in;i+)scanf(%d,ai);bubble(a,n);printf(aftersorted,a%d=,n);for(i=0;in;i+)printf(%3d,ai);return0;voidbubble(inta,intn)/*n是数组a中待排序元素的数量*/inti,j,t,flag;for(i=1;in;i+)/*外部循环*/flag=0;f

5、or(j=0;jn-i;j+)/*内部循环*/if(ajaj+1)/*比较两个元素的大小*/t=aj;aj=aj+1;aj+1=t;/*如果前一个元素大,则交换*/flag=1;/*发生交换,flag置为1*/if(flag=0)/*如果一轮循环没有发生数据交换,排序结束*/break;8-5.重做例8-9,要求使用选择排序算法。解答:#includestdio.hvoidbubble(inta,intn);intmain(void)intn,a8;inti;printf(entern(n=8):);scanf(%d,n);printf(entera%d:,n);for(i=0;in;i+)s

6、canf(%d,ai);bubble(a,n);printf(aftersorted,a%d=,n);for(i=0;in;i+)printf(%3d,ai);return0;voidbubble(inta,intn)/*n是数组a中待排序元素的数量*/inti,j,t,index;for(i=0;in-1;i+)/*外部循环*/index=i;for(j=i+1;jn;j+)/*内部循环*/if(ajaindex)index=j;t=ai;ai=aindex;aindex=t;8-6.在使用scanf()函数时,输入参数列表需要使用取地址操作符,但当参数为字符数组名时并没有使用,为什么?如果

7、在字符数组名前加上取地址操作符,会发生什么?解答:因为字符数组名的值是一个特殊的固定地址,可以看作是常量指针,因此不需要再使用取地址符来获取该数组的地址。如果在字符数组名str前加上取地址操作符,那么对其取地址str可以看做是这个数组的第一个元素的地址,由于数组地址和数组第一个元素的地址相同,所以str表示地址值和str表示的地址值是相等的。对scanf()的变长参数列表的话,编译器只负责参数传递,怎么解释后边的几个地址的含义,是由前边的字符串确定的。所以使用scanf("s,str)scanf(“S,st都能通过编译且正常执行。8-7.c语言不允许用赋值表达式直接对数组赋值,为什么

8、?解答:数组名可以看作是常量指针,因为不可以对一个常量进行赋值,所以不允许用赋值表达式直接对数组进行赋值。8-8.输入一个字符串,把该字符串的前3个字母移到最后,输出变换后的字符串。比如输入“abcdef”,输出为“defabc”。解答:includestdio.hincludestdlib.hincludestring.hdefinemaxline100intmain(void)charlinemaxline,str4;inti;printf(inputthestring:);gets(line);if(strlen(line)3)printf(字符串长度小于3,不符合要求!n);exit(

9、1);for(i=0;i3;i+)stri=linei;stri=0;for(i=3;linei!=0;i+)linei-3=linei;linei-3=0;strcat(line,str);printf(%s%sn,afterchanging:,line);return0;*8-9.使用动态内存分配的方法实现例8-9的冒泡排序。解答:#includestdio.h#includestdlib.hvoidbubble(inta,intn);intmain(void)intn,*p;inti;printf(inputn:);scanf(%d,n);/*为数组p动态分配n个整数类型大小的空间*/i

10、f(p=(int*)calloc(n,sizeof(int)=null)printf(notabletoallocatememory.n);exit(1);printf(input%dintegers:,n);for(i=0;in;i+)scanf(%d,p+i);bubble(p,n);printf(aftersorted:);for(i=0;in;i+)printf(%3d,*(p+i);free(p);return0;voidbubble(inta,intn)/*n是数组a中待排序元素的数量*/inti,j,t;for(i=1;in;i+)/*外部循环*/for(j=0;jn-i;j+)

11、/*内部循环*/if(ajaj+1)/*比较两个元素的大小*/t=aj;aj=aj+1;aj+1=t;/*如果前一个元素大,则交换*/2习题参考答案_、选择题1. 下列语句定义x为指向int类型变量a的指针,其中哪一个是正确的a,*x=a;a,*x=a;*x=a,a;a,x=a;2. 以下选项中,对基本类型相同的指针变量不能进行运算的运算符是aoa.+b.-c.=d.=若有以下说明,且0=i10,则对数组元素的错误引用是c。3. inta=(0,1,2,3,4,5,6,7,8,9,*p=a,i;a.*(a+i)b.ap-a+ic.p+id.*(ai)

12、下列程序的输出结果是b。4. intmain(void)(inta10=(0,1,2,3,4,5,6,7,8,9,*p=a+3;printf("d,*+p);return0;a.3b.4c.a4的地址d.非法对于下列程序,正确的是a。voidf(int*p)(*p=5;intmain(void)(inta,*p;a=10;p=a;f(p);printf("d,(*p)+);return0;a.5b.6c.10d.11二、填空题1.下列函数在一维数组a中将x插入到下标为i(i=0)的元素前。如果i=元素的个数,贝Ux插入到末尾。原有的元素个数存放在指针n所指向的变量中,插入后

13、元素个数加1。请填【篇二:c语言程序设计实验指导(颜晖_主编)部分参考程序】txt实验2#includestdio.hintmain()(/2-1-2intc,f=150;c=f*5/9-32*5/9;printf(fahr=%d,celsius=%dn,f,c);return0;#includestdio.hintmain()(/2-1-3intc=26,f;f=c*9/5+32;printf(celsius=%d,fahr=%dn,c,f);return0;#includestdio.hintmain()(/2-1-4intmath=87,eng=72,comp=93;printf(mat

14、h=%d,eng=%d,comp=%d,average=%dn,math,eng,comp,(math+eng+comp)/3);return0;#includestdio.hintmain()(/2-1/5intn=152,a,b,c;c=n%10;b=(n/10)%10;a=n/100;printf(整数%d的个位数字是%d,十位数字是%d,百位数字是%dn,n,c,b,a);return0;#includestdio.hintmain()(/2-1-6intx=3,y;y=x*x;printf(%d=%d*%dn,y,x,x);printf(%d*%d=%dn,x,x,y);return

15、0;#includestdio.hintmain()/2-2-1doublex,y;printf(enterx:);scanf_s(%lf,x);if(x!=0)y=1/x;elsey=0;printf(f(%.2f)=%.1fn,x,y);return0;#includestdio.hintmain()/2-2-2intcelsius,fahr;fahr=100;celsius=5*(fahr-32)/9;printf(fahr=%d,celsius=%dn,fahr,celsius);return0;#includestdio.hintmain()/2-2-3doublemoney,rat

16、e,x=1.0;inti,year;printf(entermoney,yearandrate:);scanf(%lf%d%lf,money,year,rate);for(i=1;i=year;i+)x=x*(1+rate);printf(intrest=%.2fn,money*x-money);return0;#includestdio.h#includemath.hintmain()/2-2-4doublex,y;printf(enterx);scanf_s(%lf,x);y=pow(x+1,2)+2*x+1/x;elsey=sqrt(x);printf(f(%.2f)=%.2fn,x,y

17、);return0;#includestdio.h#includemath.hintmain()/2-2-5doublex,y;printf(enterx:);scanf_s(%lf,x);if(x=10)y=1/x;elsey=x;printf(f(%.2f)=%.1fn,x,y);return0;#includestdio.hintmain()/2-2-6intx,y;printf(enternum1:);scanf_s(%d,x);printf(enternum2:);scanf_s(%d,y);printf(%d+%d=%dn,x,y,x+y);printf(%d-%d=%dn,x,y

18、,x-y);printf(%d*%d=%dn,x,y,x*y);printf(%d/%d=%dn,x,y,x/y);printf(%d%d=%dn,x,y,x%y);return0;#includestdio.hintmain()/2-3-1inti,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);return0;#includestdio.hintmain()(/2-3-2inti,m,s=0;printf(enterm:);scanf(%d,m);for(i=m;i=100;i+)s=s+i;printf(sum=%dn,s);re

19、turn0;#includestdio.hintmain()(/2-3-3inti,m,n;doubles=0.0;printf(enterm:);scanf(%d,m);printf(entern:);scanf(%d,n);for(i=m;i=n;i+)s=s+1.0/i;printf(sum=%fn,s);return0;#includestdio.hintmain()(/2-3-4inti,n;doubles=0.0;printf(entern:);scanf(%d,n);for(i=1;i=n;i+)s=s+1.0/(2*i-1);printf(sum=%fn,s);return0;

20、#includestdio.hintmain()(/2-3-5inti,n;doubles=1.0,t=1.0,sign=1.0;printf(entern:);scanf(%d,n);for(i=1;in;i+)(sign=-sign;t=(t+3);s=s+1/t*sign;printf(sum=%.3fn,s);return0;#includestdio.hintmain()(/2-3-6intlow,uper;doublefahr,celsius;printf(enterlow:);scanf_s(%d,low);printf(enteruper:);scanf_s(%d,uper);

21、printf(fahrcelsiusn);for(fahr=low;fahr=uper;fahr+=2)celsius=5.0/9.0*(fahr-32.0);printf(%3.0f%6.1fn,fahr,celsius);return0;#includestdio.hintmain()/2-3-7intm,n,i;doublep,sum=0.0;printf(enterm:);scanf(%d,m);printf(entern:);scanf(%d,n);p=1.0;for(i=1;i=m;i+)p=p*i;sum=sum+p;p=1.0;for(i=1;i=n;i+)p=p*i;sum=

22、sum+p;printf(sum=%.0fn,sum);return0;#includestdio.hintmain()(/2-3-8intx,n,i;doublep=1.0;printf(enterx:);scanf(%d,x);printf(entern:);scanf(%d,n);for(i=1;i=n;i+)p=p*x;printf(%d的%d次方是%.0fn,x,n,p);return0;#includestdio.h#includemath.hintmain()(/2-4-1【篇三:c语言程序设计教程实验及习题解答】一、上机指南turboc2.0?二、实验安排?三、教材习题解答(第

23、1章一第11章)第一部分turboc集成开发环境简介turboc是一个集程序编辑、编译、连接、调试为一体的c语言程序开发环境,具有速度快、效率高、功能强、使用方便等优点。c语言程序开发人员可以在该集成开发环境下利用菜单操作进行编辑、编译、连接、调试、运行以及环境设置等工作。1、turboc的安装turboc的安装非常方便,只需将turboc系统中的安装软盘(含有install.exe程序)插入a:驱动器中,然后将a:盘设定为当前盘,键入install?后,安装即开始,在安装过程中,只需按照屏帛提tk信息进行操作即可。如果采用系统提供的默认方式安装,则安装完成后,用户的c盘上将会有以下主要的目录

24、和文件:(1) c:tc(其中包括tc.exe、tcc.exe、make.exe、等可执行文件)(2) c:tcinclude(其中包括stdio.h、math.h、string.h等头文件)(3)c:tclib(其中包括maths.lib、mathl.lib、graphics.lib等库函数文件)(4)c:tcbgi(其中包括多种显示适配器的驱动程序)2、启动turboc在dos平台上启动使用下面的dos命令可以进入turboc的集成开发环境:c:cdtc?(将tc目录设置为当前目录)c:tctc?(执行tc.exe文件)(2)在windows平台上启动进入包含tc.exe的文件夹,用鼠标双

25、击tc.exe文件的图标,即可进入turboc的集成开发环境。turboc集成开发环境的屏幕显示如下:图1-13、turboc的窗口turboc的屏幕窗口分为如下几部分:(1)主菜单区它在屏幕窗口的上方。包含8个菜单选项:file(文件)、edit、run(运行)、compile(编译)、project(项目)、options(选项)、debug(调试)、break/switch(断点/监视),主菜单的选择以alt键加上菜单名的第一个字母来实现,如:alt+f即选择file菜单。各个主菜单均有子菜单供用户选择来实现各种操作。(2)编辑窗口它在主菜单的下方,用于源程序的输入。在其右上角可见当前编

26、辑的文件的名字。(3)信息窗口它在编辑窗口的下方,用于显示编译和连接时的有关信息,用户要注意其中显示的错误提示信息,以帮助调试程序。(4)功能键区它在turboc的屏幕窗口的底部,它提示功能键的作用。具体如下:f1-help(帮助):按下f1,屏幕上显示帮助信息。f5-zoom(放大):将当前窗口放大或缩小。f6-switch(转换):按下此键可选择编辑窗口或信息窗口为当前窗口,即在二者之间转换。f7-trace(跟踪):用于跟踪程序的运行情况。f8-step(单步执行):按一次f8键,执行一条语句。f9-make(生成目标文件):按下此键将一次完成当前编辑窗口里源文件的编译和连接,生成.ob

27、j和.exe文件。f10-menu(菜单):回到主菜单行并激活某一个菜单项(如file此时file反相显示),用户可以使用键来激活自己想要的菜单项,回车后显示其子菜单。4、编辑、编译、运行程序(1)编辑源文件编辑源文件是将已经编写的程序输入到计算机中去并将其以某个文件名保存。注意:turboc的源文件名的扩展名必须为.c。具体操作方法是: 编辑新文件单击f6键,将光标置于编辑窗口后即可输入文件内容。编辑完成后注意应保存该文件,具体方法是:按下alt+f键,屏幕上显示file的子菜单,通过诚堆或者s键选择save选项后,屏幕上显示:用户可以指定磁盘路径并将noname改为自己所要的文件名后回车,

28、则当前编辑的源文件就按照该路径以及名字保存于计算机中。如:键入c:tcmyfile。 编辑已经存在的文件按下alt+f键,屏幕上显示file的字菜单,通过诚堆或者l键选择load选项后,用户在此可输入需要编辑的文件名或直接回车,若回车则屏幕上将显示当前目录下所有扩展名为.c的文件名,用户可用“r“t”门键选择需要编辑的文件,回车后屏幕上即显示该文件的内容供编辑。用户在保存文件时有两种选择,一是使用alt+f调出file的子菜单后选择save,这时,当前编辑的文件被保存到当前的文件名下,二是使用alt+f调出file的子菜单后选择writeto,这时,屏幕提示输入新文件名,用户可以输入新文件名后

29、回车,此时当前编辑文件将保存到新文件名下。用户在保存文件时应特别注意屏帛上的提7K信息,以免出现操作失误。 快捷键的使用在编辑过程中除了可以使用如“backspace”、“del等一般编辑键外还可以使用快捷键,提高编辑效率。用户可以先将编辑窗口激活再按f1键,这时屏幕上显示出各种快捷键的使用方法。例如:使用ctrl+y快捷键可以删除光标所在的一整行。使用ctrl+qf快捷键可以在当前编辑的源文件中查找某一字符串,方法是先按ctrl+q,再按f键并输入所要查找的字符串即可。使用ctrl+kb和ctrl+kk可以选定块”,用于复制、移动、删除等操作。用户应仔细阅读有关快捷键的使用说明并熟悉其使用方

30、法,这样会大大提高自己的编辑效率。编译源文件用户在编辑好源文件后,可以对其进行编译。对当前文件进行编译只需按alt+c然后选择“compiletoobj”即可。编译正常完成时,屏幕提示信息中会显示asuccess.”信息,如果有错误则显示“errors,”用户可以按任意键,屏幕上反相显示的行是可能有错误的行,这时应注意信息窗口里的提示信息以帮助自己快速找出错误并进行修改。在进行修改时可配合使用f5、f6键以及“f、”键,以帮助对错误行的快速定位,提高修改速度。图4编译正常完成后,用户将获得一个名字于当前编辑文件一致,扩展名为.obj的目标文件。连接程序当编译正常结束后,就需对.obj文件进行连接以得到.exe文件供执行时使用。具体方法是使用alt+c,然后选择“linkexefile项;即对经正常编译后的.obj文件进行连接,若正常结束则得到一个.exe可执行文件,若有错误则屏幕提示“errors.,”用户可以按任意键,屏幕上信息窗口里显示错误信息。运行程序运行程序有多种方式:在dos平台上运行由于通过编译、连接后得到一

温馨提示

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

评论

0/150

提交评论