两道简单的C语言编程题1.设给定
C语言的语法有点忘了,以下仅供参考。
if a>b then
if b>c then
return b
elseif a>c then
return c
else
return a
end if
else
if a>c then
return a
elseif b>c then
return c
else
return b
end if
end if
最坏情况比较三次
平均情况
a>b>c 比较2次
a>c>b 比较3次
b>a>c 比较2次
b>c>a 比较3次
c>a>b 比较3次
c>b>a 比较3次
(2+3+2+3+3+3)/6 = 2。 67次(平均)
第二题学识有限,不懂减...全部
C语言的语法有点忘了,以下仅供参考。
if a>b then
if b>c then
return b
elseif a>c then
return c
else
return a
end if
else
if a>c then
return a
elseif b>c then
return c
else
return b
end if
end if
最坏情况比较三次
平均情况
a>b>c 比较2次
a>c>b 比较3次
b>a>c 比较2次
b>c>a 比较3次
c>a>b 比较3次
c>b>a 比较3次
(2+3+2+3+3+3)/6 = 2。
67次(平均)
第二题学识有限,不懂减半递推技术是啥意思,试着解一下:
以下非正式C语言,我各类语言学得太多,许久不写程序了不知道C的写法,你自己改写吧。
假定数组起始为1不是0
i为数组的起始数值,array[1to16],分拆成两个array[1to8],array[9to16],那么第二个小数组的i=9
如果找到array[1to8]的最大值,和array[9to16]最大值进行比较,大的数就是array[1to16]的最大值。
再把array[1to8]拆成array[1to4],array[5to8],以此类推。
注意返回值是数组最大值的数组位置,而不是最大值的数值。
function getmax(array,i,n)
int x,y;
if n=1 then return i; /*数组中只有一个返回的是该数组下标*/
x=getmax(array,i,n/2);
y=getmax(array,i+n/2,n/2);
if array[x]>array[y] then return x else return y;
end function
main()
{
int n=16;
printf(。
。。。。, array(getmax(array,1,n)));
}
。收起