鱼C论坛

 找回密码
 立即注册
查看: 2687|回复: 4

[已解决]给位大佬能帮我看看findLowerst这个function有没有更加简便的写法,

[复制链接]
发表于 2019-4-14 01:17:05 | 显示全部楼层 |阅读模式
1鱼币
#include <iostream>

using namespace std;

void getScore(int &score);

void calcAverage(int, int, int, int, int);

int findLowest(int, int, int, int, int);

int main()
{
        int a, b, c, d, e;
       
    getScore(a);
   
    getScore(b);
   
    getScore(c);
   
    getScore(d);
   
    getScore(e);

    calcAverage(a, b, c, d, e);
}

void getScore(int &score)
{
       
        cout << "Enter a test score: ";
       
        cin >> score;
       
        while (score < 0 || score > 100)
        {
                cout << "Do not accept test scores"
                         <<"lower thana 0 or higher than 100\n";
                         
                cout << "Enter a test score: ";
       
                cin >> score;
        }
}

void calcAverage(int a, int b, int c, int d, int e)
{
        double result5, result4, result;
       
        result5 = (a+b+c+d+e);
       
        result4 = findLowest(a, b, c, d, e);
       
        result = (result5 - result4) / 4;
       
        cout << "the average is " << result << endl;
}

int findLowest(int q, int w, int e, int r, int t)
{
        if (q < w && q < e && q < r && q < t)     // if else if 有没有更加简便的写法
        return q;
       
        else if (w < q && w < e && w < r && w < t)
        return w;
       
        else if (e < q && e < w && e < r && e < t)
        return e;
       
        else if (r < q && r < w && r < e && r < t)
        return r;
       
        else if (t < q && t < w && t < e && t < r)
        return t;
}
最佳答案
2019-4-14 01:17:06
本帖最后由 Croper 于 2019-4-14 03:40 编辑
  1. int findLowest(int q, int w, int e, int r, int t)
  2. {
  3.         __int64 *p=&q; //栈是8字节对齐;
  4.         int i;
  5.         for (i=1;i<5;++i)
  6.                 if (q>(int)p[i]) q=(int)p[i];
  7.         return q;
  8. }
复制代码

最佳答案

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-14 01:17:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Croper 于 2019-4-14 03:40 编辑
  1. int findLowest(int q, int w, int e, int r, int t)
  2. {
  3.         __int64 *p=&q; //栈是8字节对齐;
  4.         int i;
  5.         for (i=1;i<5;++i)
  6.                 if (q>(int)p[i]) q=(int)p[i];
  7.         return q;
  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-14 23:59:15 | 显示全部楼层
其实一个函数如果传入参数过多的话,用数组来代替会更简洁一些吧

我不会楼上的栈指令...但是感觉原理上是一样的;
不过,刚才我用sizeof(int)却得到不到想要的答案,调试观察地址变化之后发现改成short int才对
不知道是怎么回事...期待好心人可以帮忙解答一下疑惑...

  1. #include<stdio.h>

  2. int findLowest(int q, int w, int e, int r, int t)
  3. {
  4.         int *min;
  5.         min = &q;
  6.         for(int i = 1;i < 5;i++)
  7.         {
  8.                 //用地址遍历传入的每一个参数值并比较处最小值
  9.                 *min = *min < *(min + i*sizeof(short int)) ? *min : *(min + i*sizeof(short int));
  10.         }
  11.        
  12.         return *min;
  13. }


  14. int main()
  15. {
  16.         printf("最小值为:%d",findLowest(54564,154,788967,3555,4547));
  17.        
  18.         return 0;
  19. }
复制代码
123.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-15 01:23:52 | 显示全部楼层
本帖最后由 Croper 于 2019-4-15 01:27 编辑
82457097 发表于 2019-4-14 23:59
其实一个函数如果传入参数过多的话,用数组来代替会更简洁一些吧

我不会楼上的栈指令...但是感觉原理上 ...


因为指针与整数相加的意义和下标运算完全一样,这个整数并不是偏离的字节数

换句话说,*(min+i*sizeof(short int)其实就是min[i*sizeof(shot int)]就是min[2*i],也就是一个参数偏移8个字节,和我的答案其实是一样的。。
__int64只是一个保证长度为8个字节的整数类型,替换成long long效果是一样的,只是这里使用__int64感觉表达的意思更明确一些

不过这种写法不推荐啦,这种地址对齐并不能保证在所有环境下都正确,建议楼主去看看可变参数吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-15 11:08:57 From FishC Mobile | 显示全部楼层
Croper 发表于 2019-4-15 01:23
因为指针与整数相加的意义和下标运算完全一样,这个整数并不是偏离的字节数

换句话说,*(min+i*size ...

嗯嗯 非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 14:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表