努力学习fengge 发表于 2019-4-14 01:17:05

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

#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;
}

Croper 发表于 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) q=(int)p;
        return q;
}

82457097 发表于 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;
}

Croper 发表于 2019-4-15 01:23:52

本帖最后由 Croper 于 2019-4-15 01:27 编辑

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

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

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

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

不过这种写法不推荐啦,这种地址对齐并不能保证在所有环境下都正确,建议楼主去看看可变参数吧

82457097 发表于 2019-4-15 11:08:57

Croper 发表于 2019-4-15 01:23
因为指针与整数相加的意义和下标运算完全一样,这个整数并不是偏离的字节数

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

嗯嗯 非常感谢
页: [1]
查看完整版本: 给位大佬能帮我看看findLowerst这个function有没有更加简便的写法,