不使用if语句打印两个值中的最大值

时间:2019-01-31 15:14:11

标签: c

我正在用C做作业,但遇到了一些麻烦。 在计算了两个值之后,我必须能够使用逻辑运算符,关系运算符或选择结构打印两个值中的最高值 。我已经使用过计算来确定两个值中的较大者,但是我不知道这是否非常有用。

我还要澄清一下,我不是在打印最大值,而是应该在打印最大值选项。例如,如果选项1 = 2000,选项2 = 3000,我希望能够打印出“选项2是较大的选项”。

我还应该说,在完成其余任务之后,通常仅通过数学运算+*-%/pow()来完成此选择

6 个答案:

答案 0 :(得分:1)

我将使用函数fmax。它以双精度作为参数,因此您可能必须将数字转换为双精度。

答案 1 :(得分:1)

  

最高的两个值的
  ( - %/和POW + *)

仅与数学运算完成

当的值均为> 0,发现对2级的商A / B,B / A。商之一为0(假设类型为某种整数),其他商为1或更大。 (或两者商数是1时的值是相同的)。

执行

pow(one_or_more, 0);  // 1 (v2 > v1)
pow(0, one_or_more);  // 0 (v1 > v2) 
pow(1,1);             // 1 (same)

使用0.1至索引答案。

样品

int a[2] = { value1, value2 };
int index = pow(a[1]/a[0], a[0]/a[1]);
printf("%d\n", a[index]);
// or "to print the maximum option"
printf("%d\n", index);

允许使用pow()暗示了这种方法。

侧益处:无溢出时值> 0 -,+,*趋向于开门溢出的可能性并避免

向下侧:与故障值<= 0

答案 2 :(得分:0)

两种const fs = require('fs'); const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); const html = fs.readFileSync('./example.html', 'utf8'); await page.setJavaScriptEnabled(false) await page.goto(process.argv[2]); await page.evaluate( content => { const pageEl = document.querySelector('div.page'); let node = document.createElement('div'); node.innerHTML = content; pageEl.appendChild(node); }, html ); await page.setJavaScriptEnabled(true) await browser.close(); })(); 类型int中的较大者,而x

y
如果x - ((x - y) & ((x - y) >> (sizeof(int) * CHAR_BIT - 1))) x,则

zx ^ z,对于0也是类似。

答案 3 :(得分:0)

这个想法是使用符号位作为数组的索引。

signed char index1 = (option1value - option2value) >> 7;
signed char index2 = (option2value - option1value) >> 7;

如果option1value > option2value,则index1中的前导位将为0,移位后将为0。

如果option1value < option2value,则index1中的前导位为1,移位后为1。

您使用索引将“语言文本”放入数组中。然后始终从0索引开始打印。

您需要为值选择正确的数据类型并调整移位位。

答案 4 :(得分:0)

这更像是一个数学问题:

#include<math.h>
#include<stdlib.h>
#include<stdio.h>

int main(){

  int o1 = 4;
  int o2 = 2;

  //res > 0 if, and only if, o2 > o1
  int res = o2 - o1;

  // module of res
  double module = pow(pow(res, 2), 0.5);

  //res2 = 1 if res > 0
  //res2 = -1 if res < 0
  int res2 = res/(int)module;

  printf("option%d is greater.\n", (3+res2)/2);

  return 0;
}

警告1:当o1 == o2时不起作用

警告2:此答案将此问题视为数学问题。 C语言中的系统不保证将double的值保留为确切的数字,但是将其保留为近似值。 因此,正如chux指出的那样,对于大数它可能无法给出正确的答案。

您可能有double a = x/|x|在C中为a赋予了0.9999的值,从而使int b = (int)a的值为0

答案 5 :(得分:-1)

如我所知,没有数组是不允许的。只有数学

void printlarger(int a, int b)
{
    printf("%d\n", a * (int)pow(a/b, b/a) + b * (int)pow(b/a, a/b));
}


int main()
{
    printlarger(3,2);

    return 0;
}