C语言程序设计及实验指导练习及习题参考答案(8--10)logax对数求导法则公式
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_diff(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){冒泡排序代码c语言
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<n;i++){/某外部循环某/
flag=0;
for(j=0;j<n-i;j++)/某内部循环某/
if(a[j]>a[j+1])
{/某比较两个元素的大小某/
error造句
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某;
控件包for(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可以看做是这个数组的第一个元素的地址,由于数组地址和数组第一个元素的地址相同,所以&tr表示地址值和tr表示的地址值是相等的。对canf()的变长参数列表的话,编译器只负责参数传递,怎么解释后边的几个地址的含义,是由前边的字符串确定的。所以使用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#include
voidbubble(inta[],intn);intmain(void){
intn,某p;inti;
printf(\canf(\
/某为数组p动态分配n个整数类型大小的空间某/if((p=(int某)calloc(n,izeof(int)))==NULL){

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。