鱼C论坛

 找回密码
 立即注册
查看: 2159|回复: 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 编辑
int findLowest(int q, int w, int e, int r, int t)
{
        __int64 *p=&q; //栈是8字节对齐;
        int i;
        for (i=1;i<5;++i)
                if (q>(int)p[i]) q=(int)p[i];
        return q;
}

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-14 01:17:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Croper 于 2019-4-14 03:40 编辑
int findLowest(int q, int w, int e, int r, int t)
{
        __int64 *p=&q; //栈是8字节对齐;
        int i;
        for (i=1;i<5;++i)
                if (q>(int)p[i]) q=(int)p[i];
        return q;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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


int main()
{
        printf("最小值为:%d",findLowest(54564,154,788967,3555,4547));
        
        return 0;
}
123.png
想知道小甲鱼最近在做啥?请访问 -> 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感觉表达的意思更明确一些

不过这种写法不推荐啦,这种地址对齐并不能保证在所有环境下都正确,建议楼主去看看可变参数吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

嗯嗯 非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 14:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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