预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共16页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

c语言程序设计实验题答案【篇一:c语言程序设计及实验指导练习及习题参考答案(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;voidsum_diff(floatop1,floatop2,float*psum,float*pdiff);printf(“inputop1andop2:“);scanf(“%f%f”,op1,op2);sum_diff(op1,op2,sum,diff);printf(“%f+%f=%f;%f-%f=%f\n”,op1,op2,sum,op1,op2,diff);return0;}voidsum_diff(floatop1,floatop2,float*psum,float*pdiff){*psum=op1+op2;*pdiff=op1–op2;}8-3.两个相同类型的指针变量能不能相加?为什么?解答:不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在c语言中指针变量相加是非法的。8-4.根据表8.2所示,这组数据的冒泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。当该轮循环结束后检查flag值,如果变为1说明发生了数据交换,还没有排好序,如果为0说明没有发生交换,已经排好序。#includestdio.hvoidbubble(inta[],intn);intmain(void){intn,a[8];inti;printf(entern(n=8):);scanf(%d,n);printf(entera[%d]:,n);for(i=0;in;i++)scanf(%d,a[i]);bubble(a,n);printf(aftersorted,a[%d]=,n);for(i=0;in;i++)printf(%3d,a[i]);return0;}voidbubble(inta[],intn)是数组/*na中待排序元素的数量*/{inti,j,t,flag;for(i=1;in;i++){/*外部循环*/flag=0;for(j=0;jn-i;j++内部循环)/**/if(a[j]a[j+1]){/*比较两个元素的大小*/t=a[j];a[j]=a[j+1];a[j+1]=t;如果前一个元素大,则交换/**/flag=1;/*发生交换,flag置为1*/}if(flag==0)如果一轮循环没有发生数据交换,排序结束/**/break;}}8-5.重做例8-9,要求使用选择排序算法。解答:#includestdio.hvoidbubble(inta[],intn);intmain(void){intn,a[8];inti;printf(entern(n=8):);scanf(%d,n);printf(entera[%d]:,n);for(i=0;in;i++)scanf(%d,a[i]);bubble(a,n);printf(aftersorted,a[%d]=,n);for(i=0;in;i++)printf(%3d,a[i]);return0;}voidbubble(inta[],intn)是数组/*na中待排序元素的数量*/{inti,j,t,index;for(i=0;in-1;i++){/*外部循环*/index=i;for(j=i+1;jn;j++内部循环)/**/if(a[j]a[index])index=j;t=a[i];a[i]=a[index];a[index]=t;}}8-6.在使用scanf()函数时,输入参数列表需要使用取地址操作符,但当参数为字符数组名时并没有使用,为什么?如果在字符数组名前加上取地址操作符,会发生什么?解答:因为字符数组名的值是一个特殊的固定地址,可以看作是常量指针,因此不需要再使用取地址符来获取该数组的地址。如果在字符数组名str前加上取地址操作符,那么对其取地址str可以看做是这个数组的第一个元