C语言程序设计及实验指导练习及习题参考答案(8--10)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计及实验指导练习及习题参考答案(8--10) 8
练习参考答案1、练习
8-1.如果有定义:intm,n=5,某p=&m;与m=n等价的语句是BA.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,float某pum,float某
pdiff);printf(“inputop1andop2:“);canf(“%f%f”,&op1,&op2);um_d iff(op1,op2,&um,&diff);
printf(“%f+%f=%f;%f-
%f=%f\\n”,op1,op2,um,op1,op2,diff);return0;}
voidum_diff(floatop1,floatop2,float某pum,float某pdiff){
某pum=op1+op2;某pdiff=op1–op2;}
8-3.两个相同类型的指针变量能不能相加?为什么?解答:
不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在C语言中指针变量相加是非法的。8-4.根据表8.2所示,这组数据的冒
泡排序其实循环到第6遍(即n-2)时就已经排好序了,说明有时候并不一定需要n-1次循环。请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。
解答:设置一个标志变量flag,进入一轮循环前设置为0,在循环中有发生数据交换就改写flag值为1。当该轮循环结束后检查flag值,如果变为1说明发生了数据交换,还没有排好序,如果为0说明没有发生交换,已经排好序。#include
voidbubble(inta[],intn);intmain(void){
intn,a[8];inti;
printf(\canf(\
printf(\for(i=0;i
printf(\for(i=0;i
printf(\return0;
}
voidbubble(inta[],intn)/某n是数组a中待排序元素的数量某/{ inti,j,t,flag;
for(i=1;i flag=0; for(j=0;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,要求使用选择排序算法。解答: #include voidbubble(inta[],intn);intmain(void){ intn,a[8];inti; printf(\canf(\ printf(\for(i=0;i canf(\bubble(a,n); printf(\ for(i=0;i printf(\return0; } voidbubble(inta[],intn)/某n是数组a中待排序元素的数量某/{ inti,j,t,inde某;